From ed24e89a96834d57efab98caa7b46d9f43590702 Mon Sep 17 00:00:00 2001 From: sk Date: Wed, 18 Oct 2023 21:40:25 +0200 Subject: [PATCH] don't compare newly fetched posts to created post closes sk22#866 --- .../android/events/StatusCreatedEvent.java | 1 + .../android/fragments/HomeTimelineFragment.java | 7 +++++-- .../java/org/joinmastodon/android/model/Status.java | 10 +--------- 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/events/StatusCreatedEvent.java b/mastodon/src/main/java/org/joinmastodon/android/events/StatusCreatedEvent.java index 1e6d7eb42f..1c7d19e477 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/events/StatusCreatedEvent.java +++ b/mastodon/src/main/java/org/joinmastodon/android/events/StatusCreatedEvent.java @@ -9,5 +9,6 @@ public class StatusCreatedEvent{ public StatusCreatedEvent(Status status, String accountID){ this.status=status; this.accountID=accountID; + status.fromStatusCreated=true; } } 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 4af6222355..51d67de27e 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeTimelineFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeTimelineFragment.java @@ -123,10 +123,13 @@ public void onStatusCreated(Status status){ private void loadNewPosts(){ if (!GlobalUserPreferences.loadNewPosts) return; dataLoading=true; + // we only care about the data that was actually retrieved from the timeline api since + // user-created statuses are probably in the wrong position + List dataFromTimeline=data.stream().filter(s->!s.fromStatusCreated).collect(Collectors.toList()); // The idea here is that we request the timeline such that if there are fewer than `limit` posts, // we'll get the currently topmost post as last in the response. This way we know there's no gap // between the existing and newly loaded parts of the timeline. - String sinceID=data.size()>1 ? data.get(1).id : "1"; + String sinceID=dataFromTimeline.size()>1 ? dataFromTimeline.get(1).id : "1"; currentRequest=new GetHomeTimeline(null, null, 20, sinceID, getLocalPrefs().timelineReplyVisibility) .setCallback(new Callback<>(){ @Override @@ -137,7 +140,7 @@ public void onSuccess(List result){ return; Status last=result.get(result.size()-1); List toAdd; - if(!data.isEmpty() && last.id.equals(data.get(0).id)){ // This part intersects with the existing one + if(!dataFromTimeline.isEmpty() && last.id.equals(dataFromTimeline.get(0).id)){ // This part intersects with the existing one toAdd=new ArrayList<>(result.subList(0, result.size()-1)); // Remove the already known last post }else{ last.hasGapAfter=last.id; diff --git a/mastodon/src/main/java/org/joinmastodon/android/model/Status.java b/mastodon/src/main/java/org/joinmastodon/android/model/Status.java index 1e5bf017e3..1a67ad6597 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/model/Status.java +++ b/mastodon/src/main/java/org/joinmastodon/android/model/Status.java @@ -26,22 +26,13 @@ import com.google.gson.JsonObject; import com.google.gson.JsonParseException; -import org.joinmastodon.android.api.ObjectValidationException; -import org.joinmastodon.android.api.RequiredField; import org.joinmastodon.android.api.session.AccountSession; import org.joinmastodon.android.api.session.AccountSessionManager; import org.joinmastodon.android.events.EmojiReactionsUpdatedEvent; -import org.joinmastodon.android.events.StatusCountersUpdatedEvent; -import org.joinmastodon.android.ui.text.HtmlParser; import org.joinmastodon.android.utils.StatusTextEncoder; -import org.parceler.Parcel; import java.lang.reflect.Type; -import java.time.Instant; import java.util.ArrayList; -import java.util.List; -import java.util.Locale; -import java.util.Objects; import java.util.regex.Pattern; @Parcel @@ -104,6 +95,7 @@ public class Status extends BaseModel implements DisplayItemsParent, Searchable{ private transient String strippedText; public transient TranslationState translationState=TranslationState.HIDDEN; public transient Translation translation; + public transient boolean fromStatusCreated; public Status(){}