Skip to content

Commit 7ead504

Browse files
convert HighlightModel usages (as archives) to Story
1 parent f7ce2ee commit 7ead504

File tree

10 files changed

+45
-69
lines changed

10 files changed

+45
-69
lines changed

app/src/main/java/awais/instagrabber/adapters/HighlightStoriesListAdapter.java

+7-7
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,19 @@
99

1010
import awais.instagrabber.adapters.viewholder.StoryListViewHolder;
1111
import awais.instagrabber.databinding.ItemNotificationBinding;
12-
import awais.instagrabber.models.HighlightModel;
12+
import awais.instagrabber.repositories.responses.stories.Story;
1313

14-
public final class HighlightStoriesListAdapter extends ListAdapter<HighlightModel, StoryListViewHolder> {
14+
public final class HighlightStoriesListAdapter extends ListAdapter<Story, StoryListViewHolder> {
1515
private final OnHighlightStoryClickListener listener;
1616

17-
private static final DiffUtil.ItemCallback<HighlightModel> diffCallback = new DiffUtil.ItemCallback<HighlightModel>() {
17+
private static final DiffUtil.ItemCallback<Story> diffCallback = new DiffUtil.ItemCallback<Story>() {
1818
@Override
19-
public boolean areItemsTheSame(@NonNull final HighlightModel oldItem, @NonNull final HighlightModel newItem) {
19+
public boolean areItemsTheSame(@NonNull final Story oldItem, @NonNull final Story newItem) {
2020
return oldItem.getId().equals(newItem.getId());
2121
}
2222

2323
@Override
24-
public boolean areContentsTheSame(@NonNull final HighlightModel oldItem, @NonNull final HighlightModel newItem) {
24+
public boolean areContentsTheSame(@NonNull final Story oldItem, @NonNull final Story newItem) {
2525
return oldItem.getId().equals(newItem.getId());
2626
}
2727
};
@@ -41,12 +41,12 @@ public StoryListViewHolder onCreateViewHolder(@NonNull final ViewGroup parent, f
4141

4242
@Override
4343
public void onBindViewHolder(@NonNull final StoryListViewHolder holder, final int position) {
44-
final HighlightModel model = getItem(position);
44+
final Story model = getItem(position);
4545
holder.bind(model, position, listener);
4646
}
4747

4848
public interface OnHighlightStoryClickListener {
49-
void onHighlightClick(final HighlightModel model, final int position);
49+
void onHighlightClick(final Story model, final int position);
5050

5151
void onProfileClick(final String username);
5252
}

app/src/main/java/awais/instagrabber/adapters/viewholder/StoryListViewHolder.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import awais.instagrabber.adapters.FeedStoriesListAdapter.OnFeedStoryClickListener;
99
import awais.instagrabber.adapters.HighlightStoriesListAdapter.OnHighlightStoryClickListener;
1010
import awais.instagrabber.databinding.ItemNotificationBinding;
11-
import awais.instagrabber.models.HighlightModel;
1211
import awais.instagrabber.repositories.responses.stories.Story;
1312
import awais.instagrabber.utils.ResponseBodyUtils;
1413

@@ -58,7 +57,7 @@ public void bind(final Story model,
5857
});
5958
}
6059

61-
public void bind(final HighlightModel model,
60+
public void bind(final Story model,
6261
final int position,
6362
final OnHighlightStoryClickListener notificationClickListener) {
6463
if (model == null) return;
@@ -74,7 +73,7 @@ public void bind(final HighlightModel model,
7473
binding.ivProfilePic.setVisibility(View.GONE);
7574

7675
binding.ivPreviewPic.setVisibility(View.VISIBLE);
77-
binding.ivPreviewPic.setImageURI(model.getThumbnailUrl());
76+
binding.ivPreviewPic.setImageURI(model.getCoverImageVersion().getUrl());
7877

7978
itemView.setOnClickListener(v -> {
8079
if (notificationClickListener == null) return;

app/src/main/java/awais/instagrabber/fragments/StoryListViewerFragment.java

+8-9
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@
3838
import awais.instagrabber.customviews.helpers.RecyclerLazyLoader;
3939
import awais.instagrabber.databinding.FragmentStoryListViewerBinding;
4040
import awais.instagrabber.fragments.settings.MorePreferencesFragmentDirections;
41-
import awais.instagrabber.models.HighlightModel;
4241
import awais.instagrabber.repositories.requests.StoryViewerOptions;
42+
import awais.instagrabber.repositories.responses.stories.ArchiveResponse;
4343
import awais.instagrabber.repositories.responses.stories.Story;
4444
import awais.instagrabber.utils.AppExecutors;
4545
import awais.instagrabber.utils.CoroutineUtilsKt;
@@ -48,7 +48,6 @@
4848
import awais.instagrabber.viewmodels.FeedStoriesViewModel;
4949
import awais.instagrabber.webservices.ServiceCallback;
5050
import awais.instagrabber.webservices.StoriesRepository;
51-
import awais.instagrabber.webservices.StoriesRepository.ArchiveFetchResponse;
5251
import kotlinx.coroutines.Dispatchers;
5352

5453
public final class StoryListViewerFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener {
@@ -88,7 +87,7 @@ public void onProfileClick(final String username) {
8887

8988
private final OnHighlightStoryClickListener archiveClickListener = new OnHighlightStoryClickListener() {
9089
@Override
91-
public void onHighlightClick(final HighlightModel model, final int position) {
90+
public void onHighlightClick(final Story model, final int position) {
9291
if (model == null) return;
9392
final NavDirections action = StoryListViewerFragmentDirections
9493
.actionStoryListFragmentToStoryViewerFragment(StoryViewerOptions.forStoryArchive(position));
@@ -101,20 +100,20 @@ public void onProfileClick(final String username) {
101100
}
102101
};
103102

104-
private final ServiceCallback<ArchiveFetchResponse> cb = new ServiceCallback<ArchiveFetchResponse>() {
103+
private final ServiceCallback<ArchiveResponse> cb = new ServiceCallback<ArchiveResponse>() {
105104
@Override
106-
public void onSuccess(final ArchiveFetchResponse result) {
105+
public void onSuccess(final ArchiveResponse result) {
107106
binding.swipeRefreshLayout.setRefreshing(false);
108107
if (result == null) {
109108
try {
110109
final Context context = getContext();
111110
Toast.makeText(context, R.string.empty_list, Toast.LENGTH_SHORT).show();
112111
} catch (Exception ignored) {}
113112
} else {
114-
endCursor = result.getNextCursor();
115-
final List<HighlightModel> models = archivesViewModel.getList().getValue();
116-
final List<HighlightModel> modelsCopy = models == null ? new ArrayList<>() : new ArrayList<>(models);
117-
modelsCopy.addAll(result.getResult());
113+
endCursor = result.getMaxId();
114+
final List<Story> models = archivesViewModel.getList().getValue();
115+
final List<Story> modelsCopy = models == null ? new ArrayList<>() : new ArrayList<>(models);
116+
modelsCopy.addAll(result.getItems());
118117
archivesViewModel.getList().postValue(modelsCopy);
119118
}
120119
}

app/src/main/java/awais/instagrabber/fragments/StoryViewerFragment.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,6 @@
7575
import awais.instagrabber.fragments.main.ProfileFragmentDirections;
7676
import awais.instagrabber.fragments.settings.PreferenceKeys;
7777
import awais.instagrabber.interfaces.SwipeEvent;
78-
import awais.instagrabber.models.HighlightModel;
7978
import awais.instagrabber.models.StoryModel;
8079
import awais.instagrabber.models.enums.MediaItemType;
8180
import awais.instagrabber.models.stickers.PollModel;
@@ -760,12 +759,12 @@ private void resetView() {
760759
}
761760
case STORY_ARCHIVE: {
762761
final ArchivesViewModel archivesViewModel = (ArchivesViewModel) viewModel;
763-
final List<HighlightModel> models = archivesViewModel.getList().getValue();
762+
final List<Story> models = archivesViewModel.getList().getValue();
764763
if (models == null || models.isEmpty() || currentFeedStoryIndex >= models.size() || currentFeedStoryIndex < 0) {
765764
Toast.makeText(context, R.string.downloader_unknown_error, Toast.LENGTH_SHORT).show();
766765
return;
767766
}
768-
final HighlightModel model = models.get(currentFeedStoryIndex);
767+
final Story model = models.get(currentFeedStoryIndex);
769768
currentStoryMediaId = parseStoryMediaId(model.getId());
770769
currentStoryUsername = model.getTitle();
771770
fetchOptions = StoryViewerOptions.forStoryArchive(model.getId());

app/src/main/java/awais/instagrabber/models/HighlightModel.kt

-14
This file was deleted.

app/src/main/java/awais/instagrabber/repositories/StoriesService.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package awais.instagrabber.repositories
22

3+
import awais.instagrabber.repositories.responses.stories.ArchiveResponse
34
import awais.instagrabber.repositories.responses.stories.ReelsTrayResponse
45
import awais.instagrabber.repositories.responses.stories.StoryStickerResponse
56
import retrofit2.http.*
@@ -16,7 +17,7 @@ interface StoriesService {
1617
suspend fun fetchHighlights(@Path("uid") uid: Long): ReelsTrayResponse
1718

1819
@GET("/api/v1/archive/reel/day_shells/")
19-
suspend fun fetchArchive(@QueryMap queryParams: Map<String, String>): String
20+
suspend fun fetchArchive(@QueryMap queryParams: Map<String, String>): ArchiveResponse?
2021

2122
@GET
2223
suspend fun getUserStory(@Url url: String): String
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package awais.instagrabber.repositories.responses.stories
2+
3+
data class ArchiveResponse(
4+
val numResults: Int,
5+
val maxId: String?,
6+
val moreAvailable: Boolean,
7+
val status: String,
8+
val items: List<Story>
9+
)
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,31 @@
11
package awais.instagrabber.repositories.responses.stories
22

33
import java.io.Serializable
4+
import awais.instagrabber.repositories.responses.ImageUrl
45
import awais.instagrabber.repositories.responses.User
56
import awais.instagrabber.utils.TextUtils
67

78
data class Story(
89
// universal
910
val id: String?,
1011
val latestReelMedia: Long?, // = timestamp
12+
val mediaCount: Int?,
13+
// for stories and highlights
1114
var seen: Long?,
1215
val user: User?,
1316
// for stories
14-
val mediaCount: Int?,
1517
val muted: Boolean?,
1618
val hasBestiesMedia: Boolean?,
1719
val items: List<StoryMedia>?, // may be null
1820
// for highlights
1921
val coverMedia: CoverMedia?,
2022
val title: String?,
23+
// for archives
24+
val coverImageVersion: ImageUrl?,
2125
// invented fields
2226
val broadcast: Broadcast? // does not naturally occur
2327
) : Serializable {
2428
val dateTime: String
2529
get() = if (latestReelMedia != null) TextUtils.epochSecondToString(latestReelMedia) else ""
30+
// note that archives have property "timestamp" but is ignored
2631
}

app/src/main/java/awais/instagrabber/viewmodels/ArchivesViewModel.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@
55

66
import java.util.List;
77

8-
import awais.instagrabber.models.HighlightModel;
8+
import awais.instagrabber.repositories.responses.stories.Story;
99

1010
public class ArchivesViewModel extends ViewModel {
11-
private MutableLiveData<List<HighlightModel>> list;
11+
private MutableLiveData<List<Story>> list;
1212

13-
public MutableLiveData<List<HighlightModel>> getList() {
13+
public MutableLiveData<List<Story>> getList() {
1414
if (list == null) {
1515
list = new MutableLiveData<>();
1616
}

app/src/main/java/awais/instagrabber/webservices/StoriesRepository.kt

+6-28
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package awais.instagrabber.webservices
22

33
import awais.instagrabber.fragments.settings.PreferenceKeys
4-
import awais.instagrabber.models.HighlightModel
54
import awais.instagrabber.models.StoryModel
65
import awais.instagrabber.repositories.StoriesService
76
import awais.instagrabber.repositories.requests.StoryViewerOptions
7+
import awais.instagrabber.repositories.responses.stories.ArchiveResponse
88
import awais.instagrabber.repositories.responses.stories.Story
99
import awais.instagrabber.repositories.responses.stories.StoryStickerResponse
1010
import awais.instagrabber.utils.Constants
@@ -35,14 +35,15 @@ open class StoriesRepository(private val service: StoriesService) {
3535
Story(
3636
broadcast.id,
3737
broadcast.publishedTime,
38+
1,
3839
0L,
3940
broadcast.broadcastOwner,
40-
1,
4141
broadcast.muted,
4242
false, // unclear
4343
null,
4444
null,
4545
null,
46+
null,
4647
broadcast
4748
)
4849
)
@@ -53,11 +54,11 @@ open class StoriesRepository(private val service: StoriesService) {
5354

5455
open suspend fun fetchHighlights(profileId: Long): List<Story> {
5556
val response = service.fetchHighlights(profileId)
56-
val highlightModels = response.tray ?: listOf()
57+
val highlightModels = response?.tray ?: listOf()
5758
return highlightModels
5859
}
5960

60-
suspend fun fetchArchive(maxId: String): ArchiveFetchResponse {
61+
suspend fun fetchArchive(maxId: String): ArchiveResponse? {
6162
val form = mutableMapOf(
6263
"include_suggested_highlights" to "false",
6364
"is_in_archive_home" to "true",
@@ -66,24 +67,7 @@ open class StoriesRepository(private val service: StoriesService) {
6667
if (!isEmpty(maxId)) {
6768
form["max_id"] = maxId // NOT TESTED
6869
}
69-
val response = service.fetchArchive(form)
70-
val data = JSONObject(response)
71-
val highlightsReel = data.getJSONArray("items")
72-
val length = highlightsReel.length()
73-
val highlightModels: MutableList<HighlightModel> = ArrayList()
74-
for (i in 0 until length) {
75-
val highlightNode = highlightsReel.getJSONObject(i)
76-
highlightModels.add(
77-
HighlightModel(
78-
null,
79-
highlightNode.getString(Constants.EXTRAS_ID),
80-
highlightNode.getJSONObject("cover_image_version").getString("url"),
81-
highlightNode.getLong("latest_reel_media"),
82-
highlightNode.getInt("media_count")
83-
)
84-
)
85-
}
86-
return ArchiveFetchResponse(highlightModels, data.getBoolean("more_available"), data.getString("max_id"))
70+
return service.fetchArchive(form)
8771
}
8872

8973
open suspend fun getUserStory(options: StoryViewerOptions): List<StoryModel> {
@@ -248,12 +232,6 @@ open class StoriesRepository(private val service: StoriesService) {
248232
return listCopy
249233
}
250234

251-
class ArchiveFetchResponse(val result: List<HighlightModel>, val hasNextPage: Boolean, val nextCursor: String) {
252-
fun hasNextPage(): Boolean {
253-
return hasNextPage
254-
}
255-
}
256-
257235
companion object {
258236
@Volatile
259237
private var INSTANCE: StoriesRepository? = null

0 commit comments

Comments
 (0)