Option "Show media posts with missing alt text"
This commit is contained in:
@@ -1,6 +1,15 @@
|
||||
package org.joinmastodon.android.utils;
|
||||
|
||||
import static org.joinmastodon.android.model.Filter.FilterAction.HIDE;
|
||||
import static org.joinmastodon.android.model.Filter.FilterAction.WARN;
|
||||
import static org.joinmastodon.android.model.Filter.FilterContext.ACCOUNT;
|
||||
import static org.joinmastodon.android.model.Filter.FilterContext.HOME;
|
||||
import static org.joinmastodon.android.model.Filter.FilterContext.NOTIFICATIONS;
|
||||
import static org.joinmastodon.android.model.Filter.FilterContext.PUBLIC;
|
||||
import static org.joinmastodon.android.model.Filter.FilterContext.THREAD;
|
||||
|
||||
import org.joinmastodon.android.api.session.AccountSessionManager;
|
||||
import org.joinmastodon.android.model.AltTextFilter;
|
||||
import org.joinmastodon.android.model.Filter;
|
||||
import org.joinmastodon.android.model.Status;
|
||||
|
||||
@@ -11,7 +20,11 @@ import java.util.function.Predicate;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public class StatusFilterPredicate implements Predicate<Status>{
|
||||
public class StatusFilterPredicate implements Predicate<Status> {
|
||||
|
||||
//Hide in timelines and warn in threads
|
||||
private final List<Filter> clientFilters = List.of( new AltTextFilter(HIDE, HOME, PUBLIC, ACCOUNT),
|
||||
new AltTextFilter(WARN, THREAD, NOTIFICATIONS));
|
||||
private final List<Filter> filters;
|
||||
private final Filter.FilterContext context;
|
||||
private final Filter.FilterAction action;
|
||||
@@ -19,26 +32,26 @@ public class StatusFilterPredicate implements Predicate<Status>{
|
||||
|
||||
/**
|
||||
* @param context null makes the predicate pass automatically
|
||||
* @param action defines what the predicate should check:
|
||||
* status should not be hidden or should not display with warning
|
||||
* @param action defines what the predicate should check:
|
||||
* status should not be hidden or should not display with warning
|
||||
*/
|
||||
public StatusFilterPredicate(List<Filter> filters, Filter.FilterContext context, Filter.FilterAction action){
|
||||
public StatusFilterPredicate(List<Filter> filters, Filter.FilterContext context, Filter.FilterAction action) {
|
||||
this.filters = filters;
|
||||
this.context = context;
|
||||
this.action = action;
|
||||
}
|
||||
|
||||
public StatusFilterPredicate(List<Filter> filters, Filter.FilterContext context){
|
||||
this(filters, context, Filter.FilterAction.HIDE);
|
||||
public StatusFilterPredicate(List<Filter> filters, Filter.FilterContext context) {
|
||||
this(filters, context, HIDE);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param context null makes the predicate pass automatically
|
||||
* @param action defines what the predicate should check:
|
||||
* status should not be hidden or should not display with warning
|
||||
* @param action defines what the predicate should check:
|
||||
* status should not be hidden or should not display with warning
|
||||
*/
|
||||
public StatusFilterPredicate(String accountID, Filter.FilterContext context, Filter.FilterAction action){
|
||||
filters=AccountSessionManager.getInstance().getAccount(accountID).wordFilters.stream().filter(f->f.context.contains(context)).collect(Collectors.toList());
|
||||
public StatusFilterPredicate(String accountID, Filter.FilterContext context, Filter.FilterAction action) {
|
||||
filters = AccountSessionManager.getInstance().getAccount(accountID).wordFilters.stream().filter(f -> f.context.contains(context)).collect(Collectors.toList());
|
||||
this.context = context;
|
||||
this.action = action;
|
||||
}
|
||||
@@ -46,8 +59,8 @@ public class StatusFilterPredicate implements Predicate<Status>{
|
||||
/**
|
||||
* @param context null makes the predicate pass automatically
|
||||
*/
|
||||
public StatusFilterPredicate(String accountID, Filter.FilterContext context){
|
||||
this(accountID, context, Filter.FilterAction.HIDE);
|
||||
public StatusFilterPredicate(String accountID, Filter.FilterContext context) {
|
||||
this(accountID, context, HIDE);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -57,7 +70,7 @@ public class StatusFilterPredicate implements Predicate<Status>{
|
||||
* false = filter this status
|
||||
*/
|
||||
@Override
|
||||
public boolean test(Status status){
|
||||
public boolean test(Status status) {
|
||||
if (context == null) return true;
|
||||
|
||||
Stream<Filter> matchingFilters = status.filtered != null
|
||||
@@ -72,9 +85,21 @@ public class StatusFilterPredicate implements Predicate<Status>{
|
||||
// only apply filters for given context
|
||||
.filter(filter -> filter.context.contains(context))
|
||||
// treating filterAction = null (from filters list) as FilterAction.HIDE
|
||||
.filter(filter -> filter.filterAction == null ? action == Filter.FilterAction.HIDE : filter.filterAction == action)
|
||||
.filter(filter -> filter.filterAction == null ? action == HIDE : filter.filterAction == action)
|
||||
.findAny();
|
||||
|
||||
//Apply client filters if no server filter is triggered
|
||||
if (applyingFilter.isEmpty()) {
|
||||
applyingFilter = clientFilters.stream()
|
||||
// only apply filters for given context
|
||||
.filter(filter -> filter.context.contains(context))
|
||||
// treating filterAction = null (from filters list) as FilterAction.HIDE
|
||||
.filter(filter -> filter.filterAction == null ? action == HIDE : filter.filterAction == action)
|
||||
//client filter has to match the status
|
||||
.filter(filter -> filter.matches(status))
|
||||
.findAny();
|
||||
}
|
||||
|
||||
this.applyingFilter = applyingFilter.orElse(null);
|
||||
return applyingFilter.isEmpty();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user