events for boosts, adapt removeStatus method
This commit is contained in:
parent
7e80ed6af2
commit
db18c7a0d0
|
@ -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<Status> 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));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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<Status>
|
|||
}
|
||||
}
|
||||
|
||||
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<Status>
|
|||
if(index==-1) return;
|
||||
int lastIndex;
|
||||
for(lastIndex=index;lastIndex<displayItems.size();lastIndex++){
|
||||
if(!displayItems.get(lastIndex).getContentID().equals(status.id))
|
||||
break;
|
||||
StatusDisplayItem item=displayItems.get(lastIndex);
|
||||
String id=deleteContent ? item.getContentID() : item.parentID;
|
||||
if(!id.equals(status.id)) break;
|
||||
}
|
||||
displayItems.subList(index, lastIndex).clear();
|
||||
adapter.notifyItemRangeRemoved(index, lastIndex-index);
|
||||
}
|
||||
|
||||
protected void removeStatus(Status status){
|
||||
Status removeStatus=status.getContentStatus();
|
||||
String removeId=removeStatus.id;
|
||||
boolean deleteContent=status==status.getContentStatus();
|
||||
int ancestorFirstIndex=-1, ancestorLastIndex=-1;
|
||||
for(int i=0;i<displayItems.size();i++){
|
||||
StatusDisplayItem item=displayItems.get(i);
|
||||
if(item.getContentID().equals(removeId)){
|
||||
removeStatusDisplayItems(removeStatus, i, ancestorFirstIndex, ancestorLastIndex);
|
||||
String id=deleteContent ? item.getContentID() : item.parentID;
|
||||
if(id.equals(status.id)){
|
||||
removeStatusDisplayItems(status, i, ancestorFirstIndex, ancestorLastIndex, deleteContent);
|
||||
ancestorFirstIndex=ancestorLastIndex=-1;
|
||||
continue;
|
||||
}
|
||||
if(item.getContentID().equals(removeStatus.inReplyToId)){
|
||||
if(id.equals(status.inReplyToId)){
|
||||
if(ancestorFirstIndex==-1) ancestorFirstIndex=i;
|
||||
ancestorLastIndex=i;
|
||||
}
|
||||
}
|
||||
iterateRemoveStatus(data, removeId);
|
||||
iterateRemoveStatus(preloadedData, removeId);
|
||||
iterateRemoveStatus(data, status.id);
|
||||
iterateRemoveStatus(preloadedData, status.id);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -291,6 +294,18 @@ public abstract class StatusListFragment extends BaseStatusListFragment<Status>
|
|||
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))
|
||||
|
|
|
@ -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->{});
|
||||
|
|
|
@ -626,10 +626,6 @@ public class UiUtils {
|
|||
.show();
|
||||
}
|
||||
|
||||
public static void confirmDeletePost(Activity activity, String accountID, Status status, Consumer<Status> resultCallback) {
|
||||
confirmDeletePost(activity, accountID, status, resultCallback, false);
|
||||
}
|
||||
|
||||
public static void confirmDeletePost(Activity activity, String accountID, Status status, Consumer<Status> resultCallback, boolean forRedraft) {
|
||||
Status s=status.getContentStatus();
|
||||
showConfirmationAlert(activity,
|
||||
|
|
Loading…
Reference in New Issue