diff --git a/Clover/app/src/main/java/org/floens/chan/core/manager/FilterEngine.java b/Clover/app/src/main/java/org/floens/chan/core/manager/FilterEngine.java index def966b3..412e861e 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/manager/FilterEngine.java +++ b/Clover/app/src/main/java/org/floens/chan/core/manager/FilterEngine.java @@ -130,7 +130,7 @@ public class FilterEngine { } /** - * Get all enabled filters, thread safe if locked on {@link #getEnabledFiltersLock()}. + * Get all enabled filters. * * @return List of enabled filters */ @@ -138,15 +138,6 @@ public class FilterEngine { return enabledFilters; } - /** - * Lock for usage of {@link #getEnabledFilters()} - * - * @return Object to call synchronized on - */ - public Object getEnabledFiltersLock() { - return enabledFilters; - } - public boolean matches(Filter filter, Post post) { // Post has not been finish()ed yet, account for invalid values String text = null; @@ -179,16 +170,14 @@ public class FilterEngine { FilterType type = FilterType.forId(filter.type); if (type.isRegex) { Matcher matcher = null; - synchronized (filter.compiledMatcherLock) { - if (!forceCompile) { - matcher = filter.compiledMatcher; - } + if (!forceCompile) { + matcher = filter.compiledMatcher; + } - if (matcher == null) { - Pattern compiledPattern = compile(filter.pattern); - matcher = filter.compiledMatcher = compiledPattern.matcher(""); - Logger.d(TAG, "Resulting pattern: " + filter.compiledMatcher); - } + if (matcher == null) { + Pattern compiledPattern = compile(filter.pattern); + matcher = filter.compiledMatcher = compiledPattern.matcher(""); + Logger.d(TAG, "Resulting pattern: " + filter.compiledMatcher); } if (matcher != null) { diff --git a/Clover/app/src/main/java/org/floens/chan/core/model/Filter.java b/Clover/app/src/main/java/org/floens/chan/core/model/Filter.java index ef03f110..df2de087 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/model/Filter.java +++ b/Clover/app/src/main/java/org/floens/chan/core/model/Filter.java @@ -50,11 +50,8 @@ public class Filter { @DatabaseField(canBeNull = false) public int color; - public final Object compiledMatcherLock = new Object(); - /** * Cached version of {@link #pattern} compiled by {@link org.floens.chan.core.manager.FilterEngine#compile(String)}. - * Thread safe when synchronized on {@link #compiledMatcherLock} */ public Matcher compiledMatcher; @@ -67,4 +64,17 @@ public class Filter { action = filter.action; color = filter.color; } + + public Filter copy() { + Filter copy = new Filter(); + copy.id = id; + copy.enabled = enabled; + copy.type = type; + copy.pattern = pattern; + copy.allBoards = allBoards; + copy.boards = boards; + copy.action = action; + copy.color = color; + return copy; + } } diff --git a/Clover/app/src/main/java/org/floens/chan/core/net/ChanReaderRequest.java b/Clover/app/src/main/java/org/floens/chan/core/net/ChanReaderRequest.java index 99f8c577..9494a707 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/net/ChanReaderRequest.java +++ b/Clover/app/src/main/java/org/floens/chan/core/net/ChanReaderRequest.java @@ -26,6 +26,7 @@ import org.floens.chan.Chan; import org.floens.chan.chan.ChanUrls; import org.floens.chan.core.database.DatabaseManager; import org.floens.chan.core.manager.FilterEngine; +import org.floens.chan.core.model.Board; import org.floens.chan.core.model.Filter; import org.floens.chan.core.model.Loadable; import org.floens.chan.core.model.Post; @@ -42,6 +43,7 @@ public class ChanReaderRequest extends JsonReaderRequest filters; private ChanReaderRequest(String url, Listener listener, ErrorListener errorListener) { super(url, listener, errorListener); @@ -66,6 +68,17 @@ public class ChanReaderRequest extends JsonReaderRequest(cached); + request.filters = new ArrayList<>(); + for (Filter filter : request.filterEngine.getEnabledFilters()) { + List boards = request.filterEngine.getBoardsForFilter(filter); + for (Board board : boards) { + if (board.value.equals(loadable.board)) { + request.filters.add(filter.copy()); + break; + } + } + } + return request; } @@ -344,28 +357,25 @@ public class ChanReaderRequest extends JsonReaderRequest filters = filterEngine.getEnabledFilters(); - int filterSize = filters.size(); - for (int i = 0; i < filterSize; i++) { - Filter filter = filters.get(i); - if (filterEngine.matches(filter, post)) { - FilterEngine.FilterAction action = FilterEngine.FilterAction.forId(filter.action); - switch (action) { - case COLOR: - post.filterHighlightedColor = filter.color; - break; - case HIDE: - if (!loadable.isThreadMode()) { - post.filterStub = true; - } - break; - case REMOVE: - if (!loadable.isThreadMode()) { - post.filterRemove = true; - } - break; - } + int filterSize = filters.size(); + for (int i = 0; i < filterSize; i++) { + Filter filter = filters.get(i); + if (filterEngine.matches(filter, post)) { + FilterEngine.FilterAction action = FilterEngine.FilterAction.forId(filter.action); + switch (action) { + case COLOR: + post.filterHighlightedColor = filter.color; + break; + case HIDE: + if (!loadable.isThreadMode()) { + post.filterStub = true; + } + break; + case REMOVE: + if (!loadable.isThreadMode()) { + post.filterRemove = true; + } + break; } } }