From 5db0e60450b72e70fe3eeedb22930c43ea18fccc Mon Sep 17 00:00:00 2001 From: Balazs Toldi Date: Fri, 13 Oct 2023 18:21:37 +0200 Subject: [PATCH] Fixing issue with swiping to see new posts. This commit fixes the issue with Fetching new posts when swiping on the post detail page. --- .../activities/ViewPostDetailActivity.java | 58 +++++-------------- .../toldi/infinityforlemmy/apis/LemmyAPI.java | 25 +++++++- .../post/PostPagingSource.java | 6 +- 3 files changed, 40 insertions(+), 49 deletions(-) diff --git a/app/src/main/java/eu/toldi/infinityforlemmy/activities/ViewPostDetailActivity.java b/app/src/main/java/eu/toldi/infinityforlemmy/activities/ViewPostDetailActivity.java index 8453a8b6..69b3dcb2 100644 --- a/app/src/main/java/eu/toldi/infinityforlemmy/activities/ViewPostDetailActivity.java +++ b/app/src/main/java/eu/toldi/infinityforlemmy/activities/ViewPostDetailActivity.java @@ -67,6 +67,7 @@ import eu.toldi.infinityforlemmy.SaveComment; import eu.toldi.infinityforlemmy.SaveThing; import eu.toldi.infinityforlemmy.SortType; import eu.toldi.infinityforlemmy.SortTypeSelectionCallback; +import eu.toldi.infinityforlemmy.apis.LemmyAPI; import eu.toldi.infinityforlemmy.apis.RedditAPI; import eu.toldi.infinityforlemmy.asynctasks.SwitchAccount; import eu.toldi.infinityforlemmy.comment.Comment; @@ -533,62 +534,31 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele Handler handler = new Handler(Looper.getMainLooper()); if (postType != HistoryPostPagingSource.TYPE_READ_POSTS) { + int nextPage = posts.size() / 25 + 1; + mExecutor.execute(() -> { - RedditAPI api = (mAccessToken == null ? mRetrofit.getRetrofit() : mOauthRetrofit).create(RedditAPI.class); + LemmyAPI api = mRetrofit.getRetrofit().create(LemmyAPI.class); Call call; - String afterKey = posts.isEmpty() ? null : posts.get(posts.size() - 1).getFullName(); + switch (postType) { case PostPagingSource.TYPE_SUBREDDIT: - if (mAccessToken == null) { - call = api.getSubredditBestPosts(subredditName, sortType, sortTime, afterKey); - } else { - call = api.getSubredditBestPostsOauth(subredditName, sortType, - sortTime, afterKey, APIUtils.getOAuthHeader(mAccessToken)); - } + call = api.getPosts(null, sortType.value, nextPage, 25, null, post.getSubredditNamePrefixed(), false, mAccessToken); break; case PostPagingSource.TYPE_USER: - if (mAccessToken == null) { - call = api.getUserPosts(username, afterKey, sortType, sortTime); - } else { - call = api.getUserPostsOauth(username, userWhere, afterKey, sortType, - sortTime, APIUtils.getOAuthHeader(mAccessToken)); - } + call = api.getUserPosts(username, sortType.value, nextPage, 25, false, mAccessToken); break; case PostPagingSource.TYPE_SEARCH: - if (subredditName == null) { - if (mAccessToken == null) { - call = api.searchPosts(query, afterKey, sortType, sortTime, - trendingSource); - } else { - call = api.searchPostsOauth(query, afterKey, sortType, - sortTime, trendingSource, APIUtils.getOAuthHeader(mAccessToken)); - } - } else { - if (mAccessToken == null) { - call = api.searchPostsInSpecificSubreddit(subredditName, query, - sortType, sortTime, afterKey); - } else { - call = api.searchPostsInSpecificSubredditOauth(subredditName, query, - sortType, sortTime, afterKey, - APIUtils.getOAuthHeader(mAccessToken)); - } - } + call = api.search(query, null, subredditName, null, "Post", sortType.value, "All", nextPage, 25, mAccessToken); break; case PostPagingSource.TYPE_MULTI_REDDIT: - if (mAccessToken == null) { - call = api.getMultiRedditPosts(multiPath, afterKey, sortTime); - } else { - call = api.getMultiRedditPostsOauth(multiPath, afterKey, - sortTime, APIUtils.getOAuthHeader(mAccessToken)); - } - break; + // TODO: Implement multi community + case PostPagingSource.TYPE_ANONYMOUS_FRONT_PAGE: - //case PostPagingSource.TYPE_ANONYMOUS_MULTIREDDIT - call = api.getSubredditBestPosts(subredditName, sortType, sortTime, afterKey); - break; + // TODO: Implement anonymous front page + default: - call = api.getBestPosts(sortType, sortTime, afterKey, - APIUtils.getOAuthHeader(mAccessToken)); + String type = (subredditName.equals("all")) ? "All" : (subredditName.equals("local")) ? "Local" : "Subscribed"; + call = api.getPosts(type, sortType.value, nextPage, 25, null, null, false, mAccessToken); } try { diff --git a/app/src/main/java/eu/toldi/infinityforlemmy/apis/LemmyAPI.java b/app/src/main/java/eu/toldi/infinityforlemmy/apis/LemmyAPI.java index 57e9d767..8604524f 100644 --- a/app/src/main/java/eu/toldi/infinityforlemmy/apis/LemmyAPI.java +++ b/app/src/main/java/eu/toldi/infinityforlemmy/apis/LemmyAPI.java @@ -101,7 +101,16 @@ public interface LemmyAPI { Call postDelete(@Body DeletePostDTO params); @GET("api/v3/user") - ListenableFuture> getUserPosts( + ListenableFuture> getUserPostsListenableFuture( + @Query("username") String username, + @Query("sort") String sort, + @Query("page") Integer page, + @Query("limit") Integer limit, + @Query("saved_only") Boolean saved_only, + @Query("auth") String access_token); + + @GET("api/v3/user") + Call getUserPosts( @Query("username") String username, @Query("sort") String sort, @Query("page") Integer page, @@ -129,7 +138,19 @@ public interface LemmyAPI { ); @GET("api/v3/post/list") - ListenableFuture> getPosts( + ListenableFuture> getPostsListenableFuture( + @Query("type_") String type_, + @Query("sort") String sort, + @Query("page") Integer page, + @Query("limit") Integer limit, + @Query("community_id") Integer community_id, + @Query("community_name") String community_name, + @Query("saved_only") Boolean saved_only, + @Query("auth") String auth + ); + + @GET("api/v3/post/list") + Call getPosts( @Query("type_") String type_, @Query("sort") String sort, @Query("page") Integer page, 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 68c2007a..59c8ffe0 100644 --- a/app/src/main/java/eu/toldi/infinityforlemmy/post/PostPagingSource.java +++ b/app/src/main/java/eu/toldi/infinityforlemmy/post/PostPagingSource.java @@ -244,7 +244,7 @@ public class PostPagingSource extends ListenableFuturePagingSource> pageFuture = Futures.transform(bestPost, this::transformData, executor); @@ -259,7 +259,7 @@ public class PostPagingSource extends ListenableFuturePagingSource> loadSubredditPosts(@NonNull LoadParams loadParams, LemmyAPI api) { ListenableFuture> subredditPost; - subredditPost = api.getPosts(null,sortType.getType().value,loadParams.getKey(),25,null,subredditOrUserName,false,accessToken); + subredditPost = api.getPostsListenableFuture(null, sortType.getType().value, loadParams.getKey(), 25, null, subredditOrUserName, false, accessToken); ListenableFuture> pageFuture = Futures.transform(subredditPost, this::transformData, executor); @@ -274,7 +274,7 @@ public class PostPagingSource extends ListenableFuturePagingSource> loadUserPosts(@NonNull LoadParams loadParams, LemmyAPI api) { ListenableFuture> userPosts; - userPosts = api.getUserPosts(subredditOrUserName, sortType.getType().value, loadParams.getKey(), 25, userWhere.equals(USER_WHERE_SAVED), accessToken); + userPosts = api.getUserPostsListenableFuture(subredditOrUserName, sortType.getType().value, loadParams.getKey(), 25, userWhere.equals(USER_WHERE_SAVED), accessToken); ListenableFuture> pageFuture = Futures.transform(userPosts, this::transformData, executor);