From eee0a40224ddcd17d541da5268063d5bdda4892f Mon Sep 17 00:00:00 2001 From: Grishka Date: Wed, 6 Mar 2024 15:39:36 +0300 Subject: [PATCH] Filter posts by account when opening a featured hashtag closes #786 --- .../requests/accounts/GetAccountStatuses.java | 6 ++- .../fragments/AccountTimelineFragment.java | 3 +- .../FeaturedHashtagsListFragment.java | 8 +++- .../HashtagFeaturedTimelineFragment.java | 47 +++++++++++++++++++ .../fragments/PinnedPostsListFragment.java | 2 +- .../fragments/ProfileFeaturedFragment.java | 11 +++-- .../report/ReportAddPostsChoiceFragment.java | 2 +- 7 files changed, 69 insertions(+), 10 deletions(-) create mode 100644 mastodon/src/main/java/org/joinmastodon/android/fragments/HashtagFeaturedTimelineFragment.java diff --git a/mastodon/src/main/java/org/joinmastodon/android/api/requests/accounts/GetAccountStatuses.java b/mastodon/src/main/java/org/joinmastodon/android/api/requests/accounts/GetAccountStatuses.java index 0b8271d5..145c6302 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/api/requests/accounts/GetAccountStatuses.java +++ b/mastodon/src/main/java/org/joinmastodon/android/api/requests/accounts/GetAccountStatuses.java @@ -1,5 +1,7 @@ package org.joinmastodon.android.api.requests.accounts; +import android.text.TextUtils; + import com.google.gson.reflect.TypeToken; import org.joinmastodon.android.api.MastodonAPIRequest; @@ -10,7 +12,7 @@ import java.util.List; import androidx.annotation.NonNull; public class GetAccountStatuses extends MastodonAPIRequest>{ - public GetAccountStatuses(String id, String maxID, String minID, int limit, @NonNull Filter filter){ + public GetAccountStatuses(String id, String maxID, String minID, int limit, @NonNull Filter filter, String hashtag){ super(HttpMethod.GET, "/accounts/"+id+"/statuses", new TypeToken<>(){}); if(maxID!=null) addQueryParameter("max_id", maxID); @@ -29,6 +31,8 @@ public class GetAccountStatuses extends MastodonAPIRequest>{ case OWN_POSTS_AND_REPLIES -> addQueryParameter("exclude_reblogs", "true"); case PINNED -> addQueryParameter("pinned", "true"); } + if(!TextUtils.isEmpty(hashtag)) + addQueryParameter("tagged", hashtag); } public enum Filter{ diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/AccountTimelineFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/AccountTimelineFragment.java index 0bfe2906..c1ab1e6c 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/AccountTimelineFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/AccountTimelineFragment.java @@ -10,7 +10,6 @@ import org.joinmastodon.android.R; import org.joinmastodon.android.api.requests.accounts.GetAccountStatuses; import org.joinmastodon.android.api.session.AccountSessionManager; import org.joinmastodon.android.events.RemoveAccountPostsEvent; -import org.joinmastodon.android.events.StatusCreatedEvent; import org.joinmastodon.android.model.Account; import org.joinmastodon.android.model.FilterContext; import org.joinmastodon.android.model.Status; @@ -58,7 +57,7 @@ public class AccountTimelineFragment extends StatusListFragment{ @Override protected void doLoadData(int offset, int count){ - currentRequest=new GetAccountStatuses(user.id, offset>0 ? getMaxID() : null, null, count, filter) + currentRequest=new GetAccountStatuses(user.id, offset>0 ? getMaxID() : null, null, count, filter, null) .setCallback(new SimpleCallback<>(this){ @Override public void onSuccess(List result){ diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/FeaturedHashtagsListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/FeaturedHashtagsListFragment.java index 8851aa34..8d69b177 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/FeaturedHashtagsListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/FeaturedHashtagsListFragment.java @@ -10,7 +10,6 @@ import org.joinmastodon.android.model.Account; import org.joinmastodon.android.model.Hashtag; import org.joinmastodon.android.ui.displayitems.HashtagStatusDisplayItem; import org.joinmastodon.android.ui.displayitems.StatusDisplayItem; -import org.joinmastodon.android.ui.utils.UiUtils; import org.parceler.Parcels; import java.util.Collections; @@ -19,6 +18,7 @@ import java.util.Objects; import java.util.stream.Collectors; import androidx.recyclerview.widget.RecyclerView; +import me.grishka.appkit.Nav; public class FeaturedHashtagsListFragment extends BaseStatusListFragment{ private Account account; @@ -45,7 +45,11 @@ public class FeaturedHashtagsListFragment extends BaseStatusListFragment0 ? getMaxID() : null, null, count, GetAccountStatuses.Filter.DEFAULT, hashtag.name) + .setCallback(new SimpleCallback<>(this){ + @Override + public void onSuccess(List result){ + if(getActivity()==null) + return; + boolean empty=result.isEmpty(); + AccountSessionManager.get(accountID).filterStatuses(result, FilterContext.ACCOUNT); + onDataLoaded(result, !empty); + } + }) + .exec(accountID); + } +} diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/PinnedPostsListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/PinnedPostsListFragment.java index 65dafa5b..0ae7e178 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/PinnedPostsListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/PinnedPostsListFragment.java @@ -25,7 +25,7 @@ public class PinnedPostsListFragment extends StatusListFragment{ @Override protected void doLoadData(int offset, int count){ - new GetAccountStatuses(account.id, null, null, 100, GetAccountStatuses.Filter.PINNED) + new GetAccountStatuses(account.id, null, null, 100, GetAccountStatuses.Filter.PINNED, null) .setCallback(new SimpleCallback<>(this){ @Override public void onSuccess(List result){ diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFeaturedFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFeaturedFragment.java index 5f915057..d17c8410 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFeaturedFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFeaturedFragment.java @@ -18,7 +18,6 @@ import org.joinmastodon.android.ui.displayitems.FooterStatusDisplayItem; import org.joinmastodon.android.ui.displayitems.HashtagStatusDisplayItem; import org.joinmastodon.android.ui.displayitems.SectionHeaderStatusDisplayItem; import org.joinmastodon.android.ui.displayitems.StatusDisplayItem; -import org.joinmastodon.android.ui.utils.UiUtils; import org.parceler.Parcels; import java.util.ArrayList; @@ -93,7 +92,13 @@ public class ProfileFeaturedFragment extends BaseStatusListFragment UiUtils.openHashtagTimeline(getActivity(), accountID, res.hashtag); + case HASHTAG -> { + Bundle args=new Bundle(); + args.putParcelable("targetAccount", Parcels.wrap(profileAccount)); + args.putParcelable("hashtag", Parcels.wrap(res.hashtag)); + args.putString("account", accountID); + Nav.go(getActivity(), HashtagFeaturedTimelineFragment.class, args); + } case STATUS -> { Status status=res.status.getContentStatus(); Bundle args=new Bundle(); @@ -109,7 +114,7 @@ public class ProfileFeaturedFragment extends BaseStatusListFragment(this){ @Override public void onSuccess(List result){ diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/report/ReportAddPostsChoiceFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/report/ReportAddPostsChoiceFragment.java index 85f9c698..db46823e 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/report/ReportAddPostsChoiceFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/report/ReportAddPostsChoiceFragment.java @@ -81,7 +81,7 @@ public class ReportAddPostsChoiceFragment extends StatusListFragment{ @Override protected void doLoadData(int offset, int count){ - currentRequest=new GetAccountStatuses(reportAccount.id, offset>0 ? getMaxID() : null, null, count, GetAccountStatuses.Filter.OWN_POSTS_AND_REPLIES) + currentRequest=new GetAccountStatuses(reportAccount.id, offset>0 ? getMaxID() : null, null, count, GetAccountStatuses.Filter.OWN_POSTS_AND_REPLIES, null) .setCallback(new SimpleCallback<>(this){ @Override public void onSuccess(List result){