From 55f32671c54514189fa4ac151a7dee9975e50942 Mon Sep 17 00:00:00 2001 From: sk Date: Thu, 26 Oct 2023 17:52:43 +0200 Subject: [PATCH] Revert "fix timeline breaking when max_id is null" This reverts commit 289db097707090f5f480dc91080bb153c438fa32. --- .../fragments/HomeTimelineFragment.java | 57 ++++++------------- 1 file changed, 16 insertions(+), 41 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeTimelineFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeTimelineFragment.java index 6decae1fe..eeffe59b0 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeTimelineFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeTimelineFragment.java @@ -11,10 +11,10 @@ import androidx.recyclerview.widget.RecyclerView; import org.joinmastodon.android.E; import org.joinmastodon.android.GlobalUserPreferences; import org.joinmastodon.android.api.requests.markers.SaveMarkers; -import org.joinmastodon.android.api.requests.statuses.GetStatusByID; import org.joinmastodon.android.api.requests.timelines.GetHomeTimeline; import org.joinmastodon.android.api.session.AccountSessionManager; import org.joinmastodon.android.events.StatusCountersUpdatedEvent; +import org.joinmastodon.android.events.StatusDeletedEvent; import org.joinmastodon.android.events.StatusUpdatedEvent; import org.joinmastodon.android.model.CacheablePaginatedResponse; import org.joinmastodon.android.model.FilterContext; @@ -57,7 +57,6 @@ public class HomeTimelineFragment extends StatusListFragment { @Override protected void doLoadData(int offset, int count){ - String maxID=this.maxID; AccountSessionManager.getInstance() .getAccount(accountID).getCacheController() .getHomeTimeline(offset>0 ? maxID : null, count, refreshing, new SimpleCallback<>(this){ @@ -65,8 +64,8 @@ public class HomeTimelineFragment extends StatusListFragment { public void onSuccess(CacheablePaginatedResponse> result){ if(getActivity()==null) return; boolean empty=result.items.isEmpty(); - if(result.isFromCache()) refreshCachedData(result, maxID); - HomeTimelineFragment.this.maxID=result.maxID; + if(result.isFromCache()) refreshData(result.items); + maxID=result.maxID; AccountSessionManager.get(accountID).filterStatuses(result.items, getFilterContext()); onDataLoaded(result.items, !empty); if(result.isFromCache() && GlobalUserPreferences.loadNewPosts) @@ -75,46 +74,22 @@ public class HomeTimelineFragment extends StatusListFragment { }); } - private void handleRefreshedData(List result, List cachedList){ - Map refreshed=result.stream().collect(Collectors.toMap(Status::getID, Function.identity())); - for(Status cached : cachedList){ - if(refreshed.containsKey(cached.id)){ - Status updated=refreshed.get(cached.id); - if(updated.editedAt!=null && cached.editedAt!=null && updated.editedAt.isAfter(cached.editedAt)) - E.post(new StatusUpdatedEvent(updated)); - else - E.post(new StatusCountersUpdatedEvent(updated.getContentStatus())); - }else{ - removeStatus(cached); - } - } - } - - private void refreshCachedData(CacheablePaginatedResponse> result, String maxID){ - List cachedList=new ArrayList<>(result.items); - if(cachedList.isEmpty()) return; - if(maxID==null){ - // fetch top status manually so we can use its id as the max_id to fetch the rest - Status firstFromCache=cachedList.get(0); - maxID=firstFromCache.id; - cachedList.remove(0); - new GetStatusByID(maxID).setCallback(new Callback<>(){ - @Override - public void onSuccess(Status result){ - handleRefreshedData( - Collections.singletonList(result), - Collections.singletonList(firstFromCache) - ); - } - - @Override - public void onError(ErrorResponse ignored){} - }).exec(accountID); - } + private void refreshData(List cachedList){ new GetHomeTimeline(maxID, null, cachedList.size(), null, getSession().getLocalPreferences().timelineReplyVisibility).setCallback(new Callback<>(){ @Override public void onSuccess(List result){ - handleRefreshedData(result, cachedList); + Map refreshed=result.stream().collect(Collectors.toMap(Status::getID, Function.identity())); + for(Status cached : cachedList){ + if(refreshed.containsKey(cached.id)){ + Status updated=refreshed.get(cached.id); + if(updated.editedAt!=null && cached.editedAt!=null && updated.editedAt.isAfter(cached.editedAt)) + E.post(new StatusUpdatedEvent(updated)); + else + E.post(new StatusCountersUpdatedEvent(updated)); + }else{ + removeStatus(cached); + } + } } @Override