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 8baabf20a..05f3d4156 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.MastodonApp; 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 class StatusInteractionController{ 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 class StatusInteractionController{ 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 class StatusInteractionController{ .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 class StatusInteractionController{ 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 class StatusInteractionController{ 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 class StatusInteractionController{ 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 000000000..fbc0edfe5 --- /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 507822f7a..8e0e2cc5e 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.AccountLocalPreferences; 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 @@ public abstract class StatusListFragment extends BaseStatusListFragment } } - 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 @@ public abstract class StatusListFragment extends BaseStatusListFragment if(index==-1) return; int lastIndex; for(lastIndex=index;lastIndex removeStatus(status); } + @Subscribe + public void onReblogDeleted(ReblogDeletedEvent ev){ + if(!ev.accountID.equals(accountID)) + return; + for(Status item : data){ + if(item.getContentStatus().id.equals(ev.statusID) && item.reblog!=null){ + removeStatus(item); + break; + } + } + } + @Subscribe public void onStatusCreated(StatusCreatedEvent ev){ if(!ev.accountID.equals(accountID)) diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java index cfdfd5904..3f502982b 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java @@ -218,14 +218,14 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{ public void onSuccess(GetStatusSourceText.Response result){ args.putString("sourceText", result.text); args.putString("sourceSpoiler", result.spoilerText); - if (result.contentType != null) { + if(result.contentType!=null){ args.putString("sourceContentType", result.contentType.name()); } - if (redraft) { + if(redraft){ UiUtils.confirmDeletePost(item.parentFragment.getActivity(), item.parentFragment.getAccountID(), item.status, s->{ Nav.go(item.parentFragment.getActivity(), ComposeFragment.class, args); }, true); - } else { + }else{ Nav.go(item.parentFragment.getActivity(), ComposeFragment.class, args); } } @@ -242,7 +242,7 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{ 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 9d8b960f8..d15e4642d 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 class UiUtils { .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,