From 6220ce67806d2fcd88664070d2bdd827efc9ccd2 Mon Sep 17 00:00:00 2001 From: Thiago 'Jedi' Abreu Date: Wed, 28 Dec 2022 10:49:45 -0300 Subject: [PATCH] Implement 4.0 filters with hide action (#202) * adding new "filtered" field for status * respect "hide" filter action on status * handling expire date for filter closes #161 --- .../main/java/org/joinmastodon/android/model/Filter.java | 3 +++ .../java/org/joinmastodon/android/model/FilterResult.java | 8 ++++++++ .../main/java/org/joinmastodon/android/model/Status.java | 1 + .../joinmastodon/android/utils/StatusFilterPredicate.java | 8 ++++++++ 4 files changed, 20 insertions(+) create mode 100644 mastodon/src/main/java/org/joinmastodon/android/model/FilterResult.java diff --git a/mastodon/src/main/java/org/joinmastodon/android/model/Filter.java b/mastodon/src/main/java/org/joinmastodon/android/model/Filter.java index 8a629a290..e3dec84a4 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/model/Filter.java +++ b/mastodon/src/main/java/org/joinmastodon/android/model/Filter.java @@ -6,12 +6,14 @@ import com.google.gson.annotations.SerializedName; import org.joinmastodon.android.api.ObjectValidationException; import org.joinmastodon.android.api.RequiredField; +import org.parceler.Parcel; import java.time.Instant; import java.util.EnumSet; import java.util.List; import java.util.regex.Pattern; +@Parcel public class Filter extends BaseModel{ @RequiredField public String id; @@ -21,6 +23,7 @@ public class Filter extends BaseModel{ public Instant expiresAt; public boolean irreversible; public boolean wholeWord; + public String filterAction; @SerializedName("context") private List _context; diff --git a/mastodon/src/main/java/org/joinmastodon/android/model/FilterResult.java b/mastodon/src/main/java/org/joinmastodon/android/model/FilterResult.java new file mode 100644 index 000000000..2b67ef4bf --- /dev/null +++ b/mastodon/src/main/java/org/joinmastodon/android/model/FilterResult.java @@ -0,0 +1,8 @@ +package org.joinmastodon.android.model; + +import org.parceler.Parcel; + +@Parcel +public class FilterResult extends BaseModel { + public Filter filter; +} diff --git a/mastodon/src/main/java/org/joinmastodon/android/model/Status.java b/mastodon/src/main/java/org/joinmastodon/android/model/Status.java index 31295c3d6..1ccc858d4 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/model/Status.java +++ b/mastodon/src/main/java/org/joinmastodon/android/model/Status.java @@ -40,6 +40,7 @@ public class Status extends BaseModel implements DisplayItemsParent{ public long favouritesCount; public long repliesCount; public Instant editedAt; + public List filtered; public String url; public String inReplyToId; diff --git a/mastodon/src/main/java/org/joinmastodon/android/utils/StatusFilterPredicate.java b/mastodon/src/main/java/org/joinmastodon/android/utils/StatusFilterPredicate.java index cf9e0829f..39c1a12f4 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/utils/StatusFilterPredicate.java +++ b/mastodon/src/main/java/org/joinmastodon/android/utils/StatusFilterPredicate.java @@ -2,8 +2,10 @@ package org.joinmastodon.android.utils; import org.joinmastodon.android.api.session.AccountSessionManager; import org.joinmastodon.android.model.Filter; +import org.joinmastodon.android.model.FilterResult; import org.joinmastodon.android.model.Status; +import java.time.Instant; import java.util.List; import java.util.function.Predicate; import java.util.stream.Collectors; @@ -21,6 +23,12 @@ public class StatusFilterPredicate implements Predicate{ @Override public boolean test(Status status){ + for(FilterResult filterResult:status.filtered){ + if (filterResult.filter.expiresAt.isAfter(Instant.now())) + continue; + if (filterResult.filter.filterAction.equals("hide")) + return false; + } for(Filter filter:filters){ if(filter.matches(status)) return false;