Commit 2fa46290 authored by Thomas's avatar Thomas
Browse files

Fix issue #442 - Tags not filtered

parent 1dae3754
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -120,6 +120,9 @@ public class FilterActivity extends BaseActivity implements FilterAdapter.Delete
                        case "thread":
                            popupAddFilterBinding.contextConversation.setChecked(true);
                            break;
                        case "account":
                            popupAddFilterBinding.contextProfiles.setChecked(true);
                            break;
                    }
                }
            popupAddFilterBinding.contextWholeWord.setChecked(filter.whole_word);
@@ -137,7 +140,7 @@ public class FilterActivity extends BaseActivity implements FilterAdapter.Delete
                    popupAddFilterBinding.addPhrase.setError(context.getString(R.string.cannot_be_empty));
                    return;
                }
                if (!popupAddFilterBinding.contextConversation.isChecked() && !popupAddFilterBinding.contextHome.isChecked() && !popupAddFilterBinding.contextPublic.isChecked() && !popupAddFilterBinding.contextNotification.isChecked()) {
                if (!popupAddFilterBinding.contextConversation.isChecked() && !popupAddFilterBinding.contextHome.isChecked() && !popupAddFilterBinding.contextPublic.isChecked() && !popupAddFilterBinding.contextNotification.isChecked() && !popupAddFilterBinding.contextProfiles.isChecked()) {
                    popupAddFilterBinding.contextDescription.setError(context.getString(R.string.cannot_be_empty));
                    return;
                }
@@ -152,6 +155,8 @@ public class FilterActivity extends BaseActivity implements FilterAdapter.Delete
                        contextFilter.add("notifications");
                    if (popupAddFilterBinding.contextConversation.isChecked())
                        contextFilter.add("thread");
                    if (popupAddFilterBinding.contextProfiles.isChecked())
                        contextFilter.add("account");
                    filterSent.context = contextFilter;
                    filterSent.expires_at_sent = expire[0];
                    filterSent.phrase = popupAddFilterBinding.addPhrase.getText().toString();
+62 −48
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import androidx.lifecycle.ViewModelStoreOwner;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
@@ -91,20 +92,34 @@ public class TimelineHelper {
        }
        //If there are filters:
        if (BaseMainActivity.mainFilters != null && BaseMainActivity.mainFilters.size() > 0 && statuses != null && statuses.size() > 0) {

            //Loop through filters
            for (Filter filter : BaseMainActivity.mainFilters) {
                if (filter.expires_at != null && filter.expires_at.before(new Date())) {
                    //Expired filter
                    continue;
                }

                for (String filterContext : filter.context) {
                    if (filterTimeLineType.getValue().equalsIgnoreCase(filterContext)) {
                        if (filter.whole_word) {
                if (filterTimeLineType == Timeline.TimeLineEnum.HOME) {
                    if (!filter.context.contains("home")) continue;
                } else if (filterTimeLineType == Timeline.TimeLineEnum.NOTIFICATION) {
                    if (!filter.context.contains("notification")) continue;
                } else if (filterTimeLineType == Timeline.TimeLineEnum.CONTEXT) {
                    if (!filter.context.contains("thread")) continue;
                } else if (filterTimeLineType == Timeline.TimeLineEnum.ACCOUNT_TIMELINE) {
                    if (!filter.context.contains("account")) continue;
                } else {
                    if (!filter.context.contains("public")) continue;
                }

                            Pattern p = Pattern.compile("\\b(" + Pattern.quote(filter.phrase) + ")\\b", Pattern.CASE_INSENSITIVE);
                if (filter.whole_word) {
                    Pattern p = Pattern.compile("(^|\\W)(" + Pattern.quote(filter.phrase) + ")($|\\W)", Pattern.CASE_INSENSITIVE);
                    for (Status status : statuses) {
                        String content;
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
                            content = Html.fromHtml(status.reblog != null ? status.reblog.content : status.content, Html.FROM_HTML_MODE_LEGACY).toString();
                        else
                            content = Html.fromHtml(status.reblog != null ? status.reblog.content : status.content).toString();

                        Matcher m = p.matcher(content);
                        if (m.find()) {
                            statusesToRemove.add(status);
@@ -146,8 +161,7 @@ public class TimelineHelper {
                        }
                    }
                }
                    }
                }

            }
        }
        if (statuses != null) {
+14 −0
Original line number Diff line number Diff line
@@ -109,6 +109,20 @@
                    android:text="@string/context_conversation"
                    app:buttonTint="@color/cyanea_accent_dark_reference" />
            </androidx.appcompat.widget.LinearLayoutCompat>

            <androidx.appcompat.widget.LinearLayoutCompat
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">

                <com.google.android.material.checkbox.MaterialCheckBox
                    android:id="@+id/context_profiles"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:text="@string/profiles"
                    app:buttonTint="@color/cyanea_accent_dark_reference" />
            </androidx.appcompat.widget.LinearLayoutCompat>
        </androidx.appcompat.widget.LinearLayoutCompat>

        <com.google.android.material.checkbox.MaterialCheckBox
+1 −0
Original line number Diff line number Diff line
@@ -1984,4 +1984,5 @@
    <string name="followed_tags">Followed tags</string>
    <string name="follow_tag">Follow tag</string>
    <string name="action_lists_edit">Edit list</string>
    <string name="profiles">Profiles</string>
</resources>