From 669c583f377555a7fad96ef86b1cbe65e1875e8f Mon Sep 17 00:00:00 2001 From: Sol Fisher Romanoff Date: Fri, 29 Jul 2022 21:33:54 +0300 Subject: [PATCH] Add toggle to hide posts mentioning blocked users --- .../settings_modal/tabs/filtering_tab.vue | 9 +++++++ src/components/status/status.js | 26 +++++++++++++++++-- src/i18n/en.json | 1 + src/modules/config.js | 1 + src/modules/instance.js | 1 + 5 files changed, 36 insertions(+), 2 deletions(-) diff --git a/src/components/settings_modal/tabs/filtering_tab.vue b/src/components/settings_modal/tabs/filtering_tab.vue index 97046ff0..7160b1fd 100644 --- a/src/components/settings_modal/tabs/filtering_tab.vue +++ b/src/components/settings_modal/tabs/filtering_tab.vue @@ -37,6 +37,15 @@ {{ $t('settings.hide_muted_posts') }} +
  • + + {{ $t('settings.hide_threads_with_blocked_users') }} + +
  • diff --git a/src/components/status/status.js b/src/components/status/status.js index dcf93688..a8bc4153 100644 --- a/src/components/status/status.js +++ b/src/components/status/status.js @@ -261,6 +261,22 @@ const Status = { hasMentionsLine () { return this.mentionsLine.length > 0 }, + mentionsBlockedUser () { + // XXX: doesn't work on domain blocks, because users from blocked domains + // don't appear in `attentions' and therefore cannot be filtered. + let mentions = false + + // find if user in mentions list is blocked + this.status.attentions.forEach((attn) => { + if (attn.id === this.currentUser.id) return + const relationship = this.$store.getters.relationship(attn.id) + if (relationship.blocking) { + mentions = true + } + }) + + return mentions + }, muted () { if (this.statusoid.user.id === this.currentUser.id) return false const reasonsToMute = this.userIsMuted || @@ -269,7 +285,9 @@ const Status = { // Wordfiltered this.muteWordHits.length > 0 || // bot status - (this.muteBotStatuses && this.botStatus && !this.compact) + (this.muteBotStatuses && this.botStatus && !this.compact) || + // mentions blocked user + this.mentionsBlockedUser return !this.unmuted && !this.shouldNotMute && reasonsToMute }, userIsMuted () { @@ -312,6 +330,9 @@ const Status = { hideFilteredStatuses () { return this.mergedConfig.hideFilteredStatuses }, + hideThreadsWithBlockedUsers () { + return this.mergedConfig.hideThreadsWithBlockedUsers + }, hideWordFilteredPosts () { return this.mergedConfig.hideWordFilteredPosts }, @@ -320,7 +341,8 @@ const Status = { (this.muted && this.hideFilteredStatuses) || (this.userIsMuted && this.hideMutedUsers) || (this.status.thread_muted && this.hideMutedThreads) || - (this.muteWordHits.length > 0 && this.hideWordFilteredPosts) + (this.muteWordHits.length > 0 && this.hideWordFilteredPosts) || + (this.mentionsBlockedUser && this.hideThreadsWithBlockedUsers) ) }, isFocused () { diff --git a/src/i18n/en.json b/src/i18n/en.json index 9ce58f85..202c8948 100644 --- a/src/i18n/en.json +++ b/src/i18n/en.json @@ -458,6 +458,7 @@ "hide_muted_threads": "Hide muted threads", "hide_post_stats": "Hide post statistics (e.g. the number of favorites)", "hide_shoutbox": "Hide instance shoutbox", + "hide_threads_with_blocked_users": "Hide threads tagging blocked users", "hide_user_stats": "Hide user statistics (e.g. the number of followers)", "hide_wallpaper": "Hide instance wallpaper", "hide_wordfiltered_statuses": "Hide word-filtered statuses", diff --git a/src/modules/config.js b/src/modules/config.js index 93d7487f..b78a579f 100644 --- a/src/modules/config.js +++ b/src/modules/config.js @@ -31,6 +31,7 @@ export const defaultState = { // bad name: actually hides posts of muted USERS hideMutedPosts: undefined, // instance default hideMutedThreads: undefined, // instance default + hideThreadsWithBlockedUsers: undefined, // instance default hideWordFilteredPosts: undefined, // instance default muteBotStatuses: undefined, // instance default collapseMessageWithSubject: undefined, // instance default diff --git a/src/modules/instance.js b/src/modules/instance.js index 8fe7f7a0..1ab6365f 100644 --- a/src/modules/instance.js +++ b/src/modules/instance.js @@ -30,6 +30,7 @@ const defaultState = { // bad name: actually hides posts of muted USERS hideMutedPosts: false, hideMutedThreads: true, + hideThreadsWithBlockedUsers: false, hideWordFilteredPosts: false, hidePostStats: false, hideBotIndication: false,