put code in method, add todo

This commit is contained in:
sk
2023-06-02 01:16:21 +02:00
parent 3985de5b14
commit f373e7df3e
2 changed files with 62 additions and 25 deletions

View File

@@ -27,10 +27,10 @@ public class ThreadFragmentTest {
fakeStatus("younger ancestor", "oldest ancestor") fakeStatus("younger ancestor", "oldest ancestor")
); );
context.descendants = List.of( context.descendants = List.of(
fakeStatus("first reply", "main"), fakeStatus("first reply", "main status"),
fakeStatus("reply to first reply", "first reply"), fakeStatus("reply to first reply", "first reply"),
fakeStatus("third level reply", "reply to first reply"), fakeStatus("third level reply", "reply to first reply"),
fakeStatus("another reply", "main") fakeStatus("another reply", "main status")
); );
List<Pair<String, Integer>> actual = List<Pair<String, Integer>> actual =
ThreadFragment.countAncestryLevels("main status", context); ThreadFragment.countAncestryLevels("main status", context);
@@ -55,4 +55,36 @@ public class ThreadFragmentTest {
actual.stream().map(p -> p.second).collect(Collectors.toList()) actual.stream().map(p -> p.second).collect(Collectors.toList())
); );
} }
@Test
public void sortStatusContext() {
StatusContext context = new StatusContext();
context.ancestors = List.of(
fakeStatus("younger ancestor", "oldest ancestor"),
fakeStatus("oldest ancestor", null)
);
context.descendants = List.of(
fakeStatus("reply to first reply", "first reply"),
fakeStatus("third level reply", "reply to first reply"),
fakeStatus("first reply", "main status"),
fakeStatus("another reply", "main status")
);
ThreadFragment.sortStatusContext(
fakeStatus("main status", "younger ancestor"),
context
);
List<Status> expectedAncestors = List.of(
fakeStatus("oldest ancestor", null),
fakeStatus("younger ancestor", "oldest ancestor")
);
List<Status> expectedDescendants = List.of(
fakeStatus("first reply", "main status"),
fakeStatus("reply to first reply", "first reply"),
fakeStatus("third level reply", "reply to first reply"),
fakeStatus("another reply", "main status")
);
// TODO: ??? i have no idea how this code works. it certainly doesn't return what i'd expect
}
} }

View File

@@ -122,28 +122,10 @@ public class ThreadFragment extends StatusListFragment implements ProvidesAssist
data.add(mainStatus); data.add(mainStatus);
onAppendItems(Collections.singletonList(mainStatus)); onAppendItems(Collections.singletonList(mainStatus));
} }
if(isInstanceAkkoma()){
List<String> threadIds=new ArrayList<>();
threadIds.add(mainStatus.id);
for(Status s:result.descendants){
if(threadIds.contains(s.inReplyToId)){
threadIds.add(s.id);
}
}
threadIds.add(mainStatus.inReplyToId);
for(int i=result.ancestors.size()-1; i >= 0; i--){
Status s=result.ancestors.get(i);
if(s.inReplyToId != null && threadIds.contains(s.id)){
threadIds.add(s.inReplyToId);
}
}
result.ancestors=result.ancestors.stream().filter(s -> threadIds.contains(s.id)).collect(Collectors.toList()); // TODO: figure out how this code works
result.descendants=getDescendantsOrdered(mainStatus.id, if(isInstanceAkkoma()) sortStatusContext(mainStatus, result);
result.descendants.stream()
.filter(s -> threadIds.contains(s.id))
.collect(Collectors.toList()));
}
result.descendants=filterStatuses(result.descendants); result.descendants=filterStatuses(result.descendants);
result.ancestors=filterStatuses(result.ancestors); result.ancestors=filterStatuses(result.ancestors);
@@ -196,7 +178,30 @@ public class ThreadFragment extends StatusListFragment implements ProvidesAssist
return levels; return levels;
} }
private List<Status> getDescendantsOrdered(String id, List<Status> statuses){ public static void sortStatusContext(Status mainStatus, StatusContext context) {
List<String> threadIds=new ArrayList<>();
threadIds.add(mainStatus.id);
for(Status s:context.descendants){
if(threadIds.contains(s.inReplyToId)){
threadIds.add(s.id);
}
}
threadIds.add(mainStatus.inReplyToId);
for(int i=context.ancestors.size()-1; i >= 0; i--){
Status s=context.ancestors.get(i);
if(s.inReplyToId != null && threadIds.contains(s.id)){
threadIds.add(s.inReplyToId);
}
}
context.ancestors=context.ancestors.stream().filter(s -> threadIds.contains(s.id)).collect(Collectors.toList());
context.descendants=getDescendantsOrdered(mainStatus.id,
context.descendants.stream()
.filter(s -> threadIds.contains(s.id))
.collect(Collectors.toList()));
}
private static List<Status> getDescendantsOrdered(String id, List<Status> statuses){
List<Status> out=new ArrayList<>(); List<Status> out=new ArrayList<>();
for(Status s:getDirectDescendants(id, statuses)){ for(Status s:getDirectDescendants(id, statuses)){
out.add(s); out.add(s);
@@ -208,7 +213,7 @@ public class ThreadFragment extends StatusListFragment implements ProvidesAssist
return out; return out;
} }
private List<Status> getDirectDescendants(String id, List<Status> statuses){ private static List<Status> getDirectDescendants(String id, List<Status> statuses){
return statuses.stream() return statuses.stream()
.filter(s -> s.inReplyToId.equals(id)) .filter(s -> s.inReplyToId.equals(id))
.collect(Collectors.toList()); .collect(Collectors.toList());