forked from mirrors/Fedilab
Fix issue #442 - Tags not filtered
This commit is contained in:
parent
1dae37549b
commit
2fa46290a1
4 changed files with 83 additions and 49 deletions
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
for (String filterContext : filter.context) {
|
||||
if (filterTimeLineType.getValue().equalsIgnoreCase(filterContext)) {
|
||||
if (filter.whole_word) {
|
||||
|
||||
Pattern p = Pattern.compile("\\b(" + Pattern.quote(filter.phrase) + ")\\b", Pattern.CASE_INSENSITIVE);
|
||||
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) {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in a new issue