From ee7f2e271ca0ab7ef7ce5676f328d3acb5cdd4e1 Mon Sep 17 00:00:00 2001 From: Balazs Toldi Date: Thu, 19 Oct 2023 14:20:33 +0200 Subject: [PATCH] Prototype multicomm Signed-off-by: Balazs Toldi --- .../activities/CreateMultiRedditActivity.java | 11 +++- .../fragments/PostFragment.java | 6 ++- .../multireddit/CreateMultiReddit.java | 3 +- .../post/PostPagingSource.java | 53 ++++++++----------- 4 files changed, 38 insertions(+), 35 deletions(-) diff --git a/app/src/main/java/eu/toldi/infinityforlemmy/activities/CreateMultiRedditActivity.java b/app/src/main/java/eu/toldi/infinityforlemmy/activities/CreateMultiRedditActivity.java index 7ef0eab2..fedf458c 100644 --- a/app/src/main/java/eu/toldi/infinityforlemmy/activities/CreateMultiRedditActivity.java +++ b/app/src/main/java/eu/toldi/infinityforlemmy/activities/CreateMultiRedditActivity.java @@ -159,8 +159,17 @@ public class CreateMultiRedditActivity extends BaseActivity { return true; } + // Create a list of community qualified names seperated by a comma + StringBuilder subredditList = new StringBuilder(); + String prefix = ""; + for (SubredditWithSelection s : mSubreddits) { + subredditList.append(prefix); + prefix = ","; + subredditList.append(s.getQualifiedName()); + } + CreateMultiReddit.anonymousCreateMultiReddit(mExecutor, new Handler(), mRedditDataRoomDatabase, - "/user/" + mAccountName + "/m/" + nameEditText.getText().toString(), + mAccountName, subredditList.toString(), nameEditText.getText().toString(), descriptionEditText.getText().toString(), mSubreddits, new CreateMultiReddit.CreateMultiRedditListener() { @Override diff --git a/app/src/main/java/eu/toldi/infinityforlemmy/fragments/PostFragment.java b/app/src/main/java/eu/toldi/infinityforlemmy/fragments/PostFragment.java index e8ea6881..759968dd 100644 --- a/app/src/main/java/eu/toldi/infinityforlemmy/fragments/PostFragment.java +++ b/app/src/main/java/eu/toldi/infinityforlemmy/fragments/PostFragment.java @@ -970,7 +970,8 @@ public class PostFragment extends Fragment implements FragmentCommunicator { this.postFilter = postFilter; postFilter.allowNSFW = !mSharedPreferences.getBoolean(SharedPreferencesUtils.DISABLE_NSFW_FOREVER, false) && mNsfwAndSpoilerSharedPreferences.getBoolean(SharedPreferencesUtils.NSFW_BASE, false); this.concatenatedSubredditNames = concatenatedSubredditNames; - showErrorView(R.string.anonymous_homepage_not_implemented); + //showErrorView(R.string.anonymous_homepage_not_implemented); + initializeAndBindPostViewModelForAnonymous(concatenatedSubredditNames); } }); } else { @@ -1012,7 +1013,8 @@ public class PostFragment extends Fragment implements FragmentCommunicator { if (activity != null && !activity.isFinishing() && !activity.isDestroyed() && !isDetached()) { postFilter.allowNSFW = !mSharedPreferences.getBoolean(SharedPreferencesUtils.DISABLE_NSFW_FOREVER, false) && mNsfwAndSpoilerSharedPreferences.getBoolean(SharedPreferencesUtils.NSFW_BASE, false); this.concatenatedSubredditNames = concatenatedSubredditNames; - showErrorView(R.string.anonymous_homepage_not_implemented); + //showErrorView(R.string.anonymous_homepage_not_implemented); + initializeAndBindPostViewModelForAnonymous(concatenatedSubredditNames); } }); } else { diff --git a/app/src/main/java/eu/toldi/infinityforlemmy/multireddit/CreateMultiReddit.java b/app/src/main/java/eu/toldi/infinityforlemmy/multireddit/CreateMultiReddit.java index c17585de..d8f6ec6a 100644 --- a/app/src/main/java/eu/toldi/infinityforlemmy/multireddit/CreateMultiReddit.java +++ b/app/src/main/java/eu/toldi/infinityforlemmy/multireddit/CreateMultiReddit.java @@ -63,6 +63,7 @@ public class CreateMultiReddit { public static void anonymousCreateMultiReddit(Executor executor, Handler handler, RedditDataRoomDatabase redditDataRoomDatabase, + String accountName, String multipath, String name, String description, List subreddits, CreateMultiRedditListener createMultiRedditListener) { @@ -71,7 +72,7 @@ public class CreateMultiReddit { redditDataRoomDatabase.accountDao().insert(Account.getAnonymousAccount()); } redditDataRoomDatabase.multiRedditDao().insert(new MultiReddit(multipath, name, name, description, - null, null, "private", "-", 0, System.currentTimeMillis(), true, false, false)); + null, null, "private", accountName, 0, System.currentTimeMillis(), true, false, false)); List anonymousMultiredditSubreddits = new ArrayList<>(); for (SubredditWithSelection s : subreddits) { anonymousMultiredditSubreddits.add(new AnonymousMultiredditSubreddit(multipath, s.getQualifiedName())); diff --git a/app/src/main/java/eu/toldi/infinityforlemmy/post/PostPagingSource.java b/app/src/main/java/eu/toldi/infinityforlemmy/post/PostPagingSource.java index 59c8ffe0..54a4ddc1 100644 --- a/app/src/main/java/eu/toldi/infinityforlemmy/post/PostPagingSource.java +++ b/app/src/main/java/eu/toldi/infinityforlemmy/post/PostPagingSource.java @@ -1,6 +1,7 @@ package eu.toldi.infinityforlemmy.post; import android.content.SharedPreferences; +import android.os.Build; import androidx.annotation.NonNull; import androidx.paging.ListenableFuturePagingSource; @@ -13,6 +14,7 @@ import org.jetbrains.annotations.Nullable; import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; import java.util.LinkedHashSet; import java.util.List; import java.util.Objects; @@ -97,15 +99,7 @@ public class PostPagingSource extends ListenableFuturePagingSource(new ArrayList<>(), null, null)); case TYPE_MULTI_REDDIT: - return loadMultipleSubredditPosts(loadParams, api, List.of(multiRedditPath.split(Pattern.quote("+")))); - /* default: - return loadAnonymousHomePosts(loadParams, api);*/ + return loadMultipleSubredditPosts(loadParams, api, List.of(multiRedditPath.split(Pattern.quote(",")))); + case TYPE_ANONYMOUS_FRONT_PAGE: + default: + return loadAnonymousHomePosts(loadParams, api); } } @@ -309,7 +300,7 @@ public class PostPagingSource extends ListenableFuturePagingSource> subredditPost; - subredditPost = api.getPosts(null, sortType.getType().value, loadParams.getKey(), 25, null, community, false, accessToken); + subredditPost = api.getPostsListenableFuture(null, sortType.getType().value, loadParams.getKey(), 25, null, community, false, accessToken); ListenableFuture> communityFuture = Futures.transform(subredditPost, this::transformData, executor); @@ -333,6 +324,12 @@ public class PostPagingSource extends ListenableFuturePagingSource= Build.VERSION_CODES.N) { + combinedPosts.sort((o1, o2) -> Long.compare(o2.getPostTimeMillis(), o1.getPostTimeMillis())); + } + } return new LoadResult.Page<>(combinedPosts, null, null); }, executor); } @@ -350,20 +347,6 @@ public class PostPagingSource extends ListenableFuturePagingSource> pageFuture = Futures.transform(multiRedditPosts, this::transformData, executor); - ListenableFuture> partialLoadResultFuture = - Futures.catching(pageFuture, HttpException.class, - LoadResult.Error::new, executor); - - return Futures.catching(partialLoadResultFuture, - IOException.class, LoadResult.Error::new, executor); - } - - private ListenableFuture> loadAnonymousHomePosts(@NonNull LoadParams loadParams, LemmyAPI api) { - ListenableFuture> anonymousHomePosts; - anonymousHomePosts = api.getSubredditBestPostsListenableFuture(subredditOrUserName, sortType.getType(), sortType.getTime(), loadParams.getKey()); - - ListenableFuture> pageFuture = Futures.transform(anonymousHomePosts, this::transformData, executor); - ListenableFuture> partialLoadResultFuture = Futures.catching(pageFuture, HttpException.class, LoadResult.Error::new, executor); @@ -372,6 +355,14 @@ public class PostPagingSource extends ListenableFuturePagingSource> loadAnonymousHomePosts(@NonNull LoadParams loadParams, LemmyAPI api) { + if (subredditOrUserName == null) { + // Return empty list + return Futures.immediateFuture(new LoadResult.Page<>(new ArrayList<>(), null, null)); + } + return loadMultipleSubredditPosts(loadParams, api, Arrays.asList(subredditOrUserName.split(Pattern.quote(",")))); + } + @Override public boolean getKeyReuseSupported() { //TODO: Figure out why this is needed