From db18c7a0d040dad16913e170ceb283f85da3dab1 Mon Sep 17 00:00:00 2001 From: sk Date: Mon, 16 Oct 2023 19:14:16 +0200 Subject: [PATCH] events for boosts, adapt removeStatus method --- .../api/StatusInteractionController.java | 27 +++++++++----- .../android/events/ReblogDeletedEvent.java | 11 ++++++ .../android/fragments/StatusListFragment.java | 37 +++++++++++++------ .../displayitems/HeaderStatusDisplayItem.java | 8 ++-- .../android/ui/utils/UiUtils.java | 4 -- 5 files changed, 58 insertions(+), 29 deletions(-) create mode 100644 mastodon/src/main/java/org/joinmastodon/android/events/ReblogDeletedEvent.java diff --git a/mastodon/src/main/java/org/joinmastodon/android/api/StatusInteractionController.java b/mastodon/src/main/java/org/joinmastodon/android/api/StatusInteractionController.java index 8baabf20aa..05f3d41565 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/api/StatusInteractionController.java +++ b/mastodon/src/main/java/org/joinmastodon/android/api/StatusInteractionController.java @@ -7,7 +7,10 @@ import org.joinmastodon.android.api.requests.statuses.SetStatusBookmarked; import org.joinmastodon.android.api.requests.statuses.SetStatusFavorited; import org.joinmastodon.android.api.requests.statuses.SetStatusReblogged; +import org.joinmastodon.android.events.ReblogDeletedEvent; import org.joinmastodon.android.events.StatusCountersUpdatedEvent; +import org.joinmastodon.android.events.StatusCreatedEvent; +import org.joinmastodon.android.events.StatusDeletedEvent; import org.joinmastodon.android.model.Status; import org.joinmastodon.android.model.StatusPrivacy; @@ -48,7 +51,7 @@ public void onSuccess(Status result){ runningFavoriteRequests.remove(status.id); result.favouritesCount = Math.max(0, status.favouritesCount + (favorited ? 1 : -1)); cb.accept(result); - if (updateCounters) E.post(new StatusCountersUpdatedEvent(result)); + if(updateCounters) E.post(new StatusCountersUpdatedEvent(result)); } @Override @@ -57,13 +60,13 @@ public void onError(ErrorResponse error){ error.showToast(MastodonApp.context); status.favourited=!favorited; cb.accept(status); - if (updateCounters) E.post(new StatusCountersUpdatedEvent(status)); + if(updateCounters) E.post(new StatusCountersUpdatedEvent(status)); } }) .exec(accountID); runningFavoriteRequests.put(status.id, req); status.favourited=favorited; - if (updateCounters) E.post(new StatusCountersUpdatedEvent(status)); + if(updateCounters) E.post(new StatusCountersUpdatedEvent(status)); } public void setReblogged(Status status, boolean reblogged, StatusPrivacy visibility, Consumer cb){ @@ -78,11 +81,15 @@ public void setReblogged(Status status, boolean reblogged, StatusPrivacy visibil .setCallback(new Callback<>(){ @Override public void onSuccess(Status reblog){ - Status result = reblog.getContentStatus(); + Status result=reblog.getContentStatus(); runningReblogRequests.remove(status.id); result.reblogsCount = Math.max(0, status.reblogsCount + (reblogged ? 1 : -1)); cb.accept(result); - if (updateCounters) E.post(new StatusCountersUpdatedEvent(result)); + if(updateCounters){ + E.post(new StatusCountersUpdatedEvent(result)); + if(reblogged) E.post(new StatusCreatedEvent(reblog, accountID)); + else E.post(new ReblogDeletedEvent(status.id, accountID)); + } } @Override @@ -91,13 +98,13 @@ public void onError(ErrorResponse error){ error.showToast(MastodonApp.context); status.reblogged=!reblogged; cb.accept(status); - if (updateCounters) E.post(new StatusCountersUpdatedEvent(status)); + if(updateCounters) E.post(new StatusCountersUpdatedEvent(status)); } }) .exec(accountID); runningReblogRequests.put(status.id, req); status.reblogged=reblogged; - if (updateCounters) E.post(new StatusCountersUpdatedEvent(status)); + if(updateCounters) E.post(new StatusCountersUpdatedEvent(status)); } public void setBookmarked(Status status, boolean bookmarked){ @@ -118,7 +125,7 @@ public void setBookmarked(Status status, boolean bookmarked, Consumer cb public void onSuccess(Status result){ runningBookmarkRequests.remove(status.id); cb.accept(result); - if (updateCounters) E.post(new StatusCountersUpdatedEvent(result)); + if(updateCounters) E.post(new StatusCountersUpdatedEvent(result)); } @Override @@ -127,12 +134,12 @@ public void onError(ErrorResponse error){ error.showToast(MastodonApp.context); status.bookmarked=!bookmarked; cb.accept(status); - if (updateCounters) E.post(new StatusCountersUpdatedEvent(status)); + if(updateCounters) E.post(new StatusCountersUpdatedEvent(status)); } }) .exec(accountID); runningBookmarkRequests.put(status.id, req); status.bookmarked=bookmarked; - if (updateCounters) E.post(new StatusCountersUpdatedEvent(status)); + if(updateCounters) E.post(new StatusCountersUpdatedEvent(status)); } } diff --git a/mastodon/src/main/java/org/joinmastodon/android/events/ReblogDeletedEvent.java b/mastodon/src/main/java/org/joinmastodon/android/events/ReblogDeletedEvent.java new file mode 100644 index 0000000000..fbc0edfe5b --- /dev/null +++ b/mastodon/src/main/java/org/joinmastodon/android/events/ReblogDeletedEvent.java @@ -0,0 +1,11 @@ +package org.joinmastodon.android.events; + +public class ReblogDeletedEvent{ + public final String statusID; + public final String accountID; + + public ReblogDeletedEvent(String statusID, String accountID){ + this.statusID=statusID; + this.accountID=accountID; + } +} diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/StatusListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/StatusListFragment.java index 507822f7aa..8e0e2cc5e1 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/StatusListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/StatusListFragment.java @@ -13,6 +13,7 @@ import org.joinmastodon.android.api.session.AccountSessionManager; import org.joinmastodon.android.events.EmojiReactionsUpdatedEvent; import org.joinmastodon.android.events.PollUpdatedEvent; +import org.joinmastodon.android.events.ReblogDeletedEvent; import org.joinmastodon.android.events.RemoveAccountPostsEvent; import org.joinmastodon.android.events.StatusCountersUpdatedEvent; import org.joinmastodon.android.events.StatusCreatedEvent; @@ -184,13 +185,14 @@ private void iterateRemoveStatus(List l, String id){ } } - private void removeStatusDisplayItems(Status status, int index, int ancestorFirstIndex, int ancestorLastIndex){ + private void removeStatusDisplayItems(Status status, int index, int ancestorFirstIndex, int ancestorLastIndex, boolean deleteContent){ // did we find an ancestor that is also the status' neighbor? if(ancestorFirstIndex>=0 && ancestorLastIndex==index-1){ for(int i=ancestorFirstIndex; i<=ancestorLastIndex; i++){ StatusDisplayItem item=displayItems.get(i); + String id=deleteContent ? item.getContentID() : item.parentID; // update ancestor to have no descendant anymore - if(item.getContentID().equals(status.inReplyToId)) item.hasDescendantNeighbor=false; + if(id.equals(status.inReplyToId)) item.hasDescendantNeighbor=false; } adapter.notifyItemRangeChanged(ancestorFirstIndex, ancestorLastIndex-ancestorFirstIndex+1); } @@ -198,31 +200,32 @@ private void removeStatusDisplayItems(Status status, int index, int ancestorFirs if(index==-1) return; int lastIndex; for(lastIndex=index;lastIndex{ Nav.go(item.parentFragment.getActivity(), ComposeFragment.class, args); }, true); - } else { + }else{ Nav.go(item.parentFragment.getActivity(), ComposeFragment.class, args); } } @@ -242,7 +242,7 @@ public void onError(ErrorResponse error){ if (item.scheduledStatus != null) { UiUtils.confirmDeleteScheduledPost(item.parentFragment.getActivity(), item.parentFragment.getAccountID(), item.scheduledStatus, ()->{}); } else { - UiUtils.confirmDeletePost(item.parentFragment.getActivity(), item.parentFragment.getAccountID(), item.status, s->{}); + UiUtils.confirmDeletePost(item.parentFragment.getActivity(), item.parentFragment.getAccountID(), item.status, s->{}, false); } }else if(id==R.id.pin || id==R.id.unpin) { UiUtils.confirmPinPost(item.parentFragment.getActivity(), item.parentFragment.getAccountID(), item.status, !item.status.pinned, s->{}); diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java b/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java index 9d8b960f8e..d15e4642db 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java @@ -626,10 +626,6 @@ public void onError(ErrorResponse error){ .show(); } - public static void confirmDeletePost(Activity activity, String accountID, Status status, Consumer resultCallback) { - confirmDeletePost(activity, accountID, status, resultCallback, false); - } - public static void confirmDeletePost(Activity activity, String accountID, Status status, Consumer resultCallback, boolean forRedraft) { Status s=status.getContentStatus(); showConfirmationAlert(activity,