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
This commit is contained in:
Thiago 'Jedi' Abreu 2022-12-28 10:49:45 -03:00 committed by GitHub
parent 6107698a76
commit 6220ce6780
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 20 additions and 0 deletions

View File

@ -6,12 +6,14 @@ import com.google.gson.annotations.SerializedName;
import org.joinmastodon.android.api.ObjectValidationException; import org.joinmastodon.android.api.ObjectValidationException;
import org.joinmastodon.android.api.RequiredField; import org.joinmastodon.android.api.RequiredField;
import org.parceler.Parcel;
import java.time.Instant; import java.time.Instant;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.List; import java.util.List;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@Parcel
public class Filter extends BaseModel{ public class Filter extends BaseModel{
@RequiredField @RequiredField
public String id; public String id;
@ -21,6 +23,7 @@ public class Filter extends BaseModel{
public Instant expiresAt; public Instant expiresAt;
public boolean irreversible; public boolean irreversible;
public boolean wholeWord; public boolean wholeWord;
public String filterAction;
@SerializedName("context") @SerializedName("context")
private List<FilterContext> _context; private List<FilterContext> _context;

View File

@ -0,0 +1,8 @@
package org.joinmastodon.android.model;
import org.parceler.Parcel;
@Parcel
public class FilterResult extends BaseModel {
public Filter filter;
}

View File

@ -40,6 +40,7 @@ public class Status extends BaseModel implements DisplayItemsParent{
public long favouritesCount; public long favouritesCount;
public long repliesCount; public long repliesCount;
public Instant editedAt; public Instant editedAt;
public List<FilterResult> filtered;
public String url; public String url;
public String inReplyToId; public String inReplyToId;

View File

@ -2,8 +2,10 @@ package org.joinmastodon.android.utils;
import org.joinmastodon.android.api.session.AccountSessionManager; import org.joinmastodon.android.api.session.AccountSessionManager;
import org.joinmastodon.android.model.Filter; import org.joinmastodon.android.model.Filter;
import org.joinmastodon.android.model.FilterResult;
import org.joinmastodon.android.model.Status; import org.joinmastodon.android.model.Status;
import java.time.Instant;
import java.util.List; import java.util.List;
import java.util.function.Predicate; import java.util.function.Predicate;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -21,6 +23,12 @@ public class StatusFilterPredicate implements Predicate<Status>{
@Override @Override
public boolean test(Status status){ 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){ for(Filter filter:filters){
if(filter.matches(status)) if(filter.matches(status))
return false; return false;