From f373e7df3ec28840fcc0b198f11cc9de79f23c10 Mon Sep 17 00:00:00 2001 From: sk Date: Fri, 2 Jun 2023 01:16:21 +0200 Subject: [PATCH] put code in method, add todo --- .../android/fragments/ThreadFragmentTest.java | 36 ++++++++++++- .../android/fragments/ThreadFragment.java | 51 ++++++++++--------- 2 files changed, 62 insertions(+), 25 deletions(-) diff --git a/mastodon/src/androidTest/java/org/joinmastodon/android/fragments/ThreadFragmentTest.java b/mastodon/src/androidTest/java/org/joinmastodon/android/fragments/ThreadFragmentTest.java index 911a46273..da091656c 100644 --- a/mastodon/src/androidTest/java/org/joinmastodon/android/fragments/ThreadFragmentTest.java +++ b/mastodon/src/androidTest/java/org/joinmastodon/android/fragments/ThreadFragmentTest.java @@ -27,10 +27,10 @@ public class ThreadFragmentTest { fakeStatus("younger ancestor", "oldest ancestor") ); context.descendants = List.of( - fakeStatus("first reply", "main"), + fakeStatus("first reply", "main status"), fakeStatus("reply to first reply", "first reply"), fakeStatus("third level reply", "reply to first reply"), - fakeStatus("another reply", "main") + fakeStatus("another reply", "main status") ); List> actual = ThreadFragment.countAncestryLevels("main status", context); @@ -55,4 +55,36 @@ public class ThreadFragmentTest { 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 expectedAncestors = List.of( + fakeStatus("oldest ancestor", null), + fakeStatus("younger ancestor", "oldest ancestor") + ); + List 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 + } } \ No newline at end of file diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/ThreadFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/ThreadFragment.java index f70d17ed0..e7ce4717e 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ThreadFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ThreadFragment.java @@ -122,28 +122,10 @@ public class ThreadFragment extends StatusListFragment implements ProvidesAssist data.add(mainStatus); onAppendItems(Collections.singletonList(mainStatus)); } - if(isInstanceAkkoma()){ - List 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()); - result.descendants=getDescendantsOrdered(mainStatus.id, - result.descendants.stream() - .filter(s -> threadIds.contains(s.id)) - .collect(Collectors.toList())); - } + // TODO: figure out how this code works + if(isInstanceAkkoma()) sortStatusContext(mainStatus, result); + result.descendants=filterStatuses(result.descendants); result.ancestors=filterStatuses(result.ancestors); @@ -196,7 +178,30 @@ public class ThreadFragment extends StatusListFragment implements ProvidesAssist return levels; } - private List getDescendantsOrdered(String id, List statuses){ + public static void sortStatusContext(Status mainStatus, StatusContext context) { + List 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 getDescendantsOrdered(String id, List statuses){ List out=new ArrayList<>(); for(Status s:getDirectDescendants(id, statuses)){ out.add(s); @@ -208,7 +213,7 @@ public class ThreadFragment extends StatusListFragment implements ProvidesAssist return out; } - private List getDirectDescendants(String id, List statuses){ + private static List getDirectDescendants(String id, List statuses){ return statuses.stream() .filter(s -> s.inReplyToId.equals(id)) .collect(Collectors.toList());