fix gap max_id when post before gap is filtered
hopefully fixes sk22#856
This commit is contained in:
parent
5d07cde6dd
commit
50e313cff0
|
@ -26,6 +26,7 @@ import java.io.IOException;
|
|||
import java.util.ArrayList;
|
||||
import java.util.EnumSet;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import me.grishka.appkit.api.Callback;
|
||||
|
@ -69,7 +70,7 @@ public class CacheController{
|
|||
Status status=MastodonAPIController.gson.fromJson(cursor.getString(0), Status.class);
|
||||
status.postprocess();
|
||||
int flags=cursor.getInt(1);
|
||||
status.hasGapAfter=((flags & POST_FLAG_GAP_AFTER)!=0);
|
||||
status.hasGapAfter=((flags & POST_FLAG_GAP_AFTER)!=0) ? status.id : null;
|
||||
newMaxID=status.id;
|
||||
result.add(status);
|
||||
}while(cursor.moveToNext());
|
||||
|
@ -113,7 +114,7 @@ public class CacheController{
|
|||
values.put("id", s.id);
|
||||
values.put("json", MastodonAPIController.gson.toJson(s));
|
||||
int flags=0;
|
||||
if(s.hasGapAfter)
|
||||
if(Objects.equals(s.hasGapAfter, s.id))
|
||||
flags|=POST_FLAG_GAP_AFTER;
|
||||
values.put("flags", flags);
|
||||
values.put("time", s.createdAt.getEpochSecond());
|
||||
|
|
|
@ -280,14 +280,14 @@ public class AccountSession{
|
|||
if(filterStatusContainingObject(o, extractor, context, profile)){
|
||||
Status s=extractor.apply(o);
|
||||
removeUs.add(o);
|
||||
if(s!=null && s.hasGapAfter && i>0){
|
||||
if(s!=null && s.hasGapAfter!=null && i>0){
|
||||
// oops, we're about to remove an item that has a gap after...
|
||||
// gotta find the previous status that's not also about to be removed
|
||||
for(int j=i-1; j>=0; j--){
|
||||
T p=objects.get(j);
|
||||
Status prev=extractor.apply(objects.get(j));
|
||||
if(prev!=null && !removeUs.contains(p)){
|
||||
prev.hasGapAfter=true;
|
||||
prev.hasGapAfter=s.hasGapAfter;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -140,7 +140,7 @@ public class HomeTimelineFragment extends StatusListFragment {
|
|||
if(!data.isEmpty() && last.id.equals(data.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{
|
||||
result.get(result.size()-1).hasGapAfter=true;
|
||||
last.hasGapAfter=last.id;
|
||||
toAdd=result;
|
||||
}
|
||||
List<String> existingIds=data.stream().map(Status::getID).collect(Collectors.toList());
|
||||
|
@ -176,10 +176,10 @@ public class HomeTimelineFragment extends StatusListFragment {
|
|||
gap.loading=true;
|
||||
dataLoading=true;
|
||||
|
||||
String maxID = null;
|
||||
String minID = null;
|
||||
String maxID=null;
|
||||
String minID=null;
|
||||
if (downwards) {
|
||||
maxID = item.getItemID();
|
||||
maxID=item.getItem().getMaxID();
|
||||
} else {
|
||||
int gapPos=displayItems.indexOf(gap);
|
||||
StatusDisplayItem nextItem=displayItems.get(gapPos + 1);
|
||||
|
@ -202,7 +202,7 @@ public class HomeTimelineFragment extends StatusListFragment {
|
|||
adapter.notifyItemRemoved(getMainAdapterOffset()+gapPos);
|
||||
Status gapStatus=getStatusByID(gap.parentID);
|
||||
if(gapStatus!=null){
|
||||
gapStatus.hasGapAfter=false;
|
||||
gapStatus.hasGapAfter=null;
|
||||
AccountSessionManager.getInstance().getAccount(accountID).getCacheController().putHomeTimeline(Collections.singletonList(gapStatus), false);
|
||||
}
|
||||
}else{
|
||||
|
@ -215,7 +215,7 @@ public class HomeTimelineFragment extends StatusListFragment {
|
|||
idsBelowGap.add(s.id);
|
||||
}else if(s.id.equals(gap.parentID)){
|
||||
belowGap=true;
|
||||
s.hasGapAfter=false;
|
||||
s.hasGapAfter=null;
|
||||
AccountSessionManager.getInstance().getAccount(accountID).getCacheController().putHomeTimeline(Collections.singletonList(s), false);
|
||||
}else{
|
||||
gapPostIndex++;
|
||||
|
@ -228,7 +228,8 @@ public class HomeTimelineFragment extends StatusListFragment {
|
|||
break;
|
||||
}
|
||||
if(endIndex==result.size()){
|
||||
result.get(result.size()-1).hasGapAfter=true;
|
||||
Status last=result.get(result.size()-1);
|
||||
last.hasGapAfter=last.id;
|
||||
}else{
|
||||
result=result.subList(0, endIndex);
|
||||
}
|
||||
|
@ -273,7 +274,7 @@ public class HomeTimelineFragment extends StatusListFragment {
|
|||
.filter(s->Objects.equals(s.id, gap.parentID))
|
||||
.findFirst();
|
||||
if (gapStatus.isPresent()) {
|
||||
gapStatus.get().hasGapAfter=false;
|
||||
gapStatus.get().hasGapAfter=null;
|
||||
AccountSessionManager.getInstance().getAccount(accountID).getCacheController().putHomeTimeline(Collections.singletonList(gapStatus.get()), false);
|
||||
}
|
||||
targetList.clear();
|
||||
|
|
|
@ -100,7 +100,7 @@ public class Status extends BaseModel implements DisplayItemsParent, Searchable{
|
|||
public transient boolean spoilerRevealed;
|
||||
public transient boolean sensitiveRevealed;
|
||||
public transient boolean textExpanded, textExpandable;
|
||||
public transient boolean hasGapAfter;
|
||||
public transient String hasGapAfter;
|
||||
private transient String strippedText;
|
||||
public transient TranslationState translationState=TranslationState.HIDDEN;
|
||||
public transient Translation translation;
|
||||
|
|
|
@ -25,6 +25,10 @@ public class GapStatusDisplayItem extends StatusDisplayItem{
|
|||
this.status=status;
|
||||
}
|
||||
|
||||
public String getMaxID(){
|
||||
return status.hasGapAfter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type getType(){
|
||||
return Type.GAP;
|
||||
|
|
|
@ -293,7 +293,7 @@ public abstract class StatusDisplayItem{
|
|||
footer=new FooterStatusDisplayItem(parentID, fragment, statusForContent, accountID);
|
||||
footer.hideCounts=hideCounts;
|
||||
items.add(footer);
|
||||
if(status.hasGapAfter && !(fragment instanceof ThreadFragment))
|
||||
if(status.hasGapAfter!=null && !(fragment instanceof ThreadFragment))
|
||||
items.add(new GapStatusDisplayItem(parentID, fragment, status));
|
||||
}
|
||||
int i=1;
|
||||
|
|
Loading…
Reference in New Issue