Add option to filter packmate thread branches where you don't follow all the participants.

staging
multiple creatures 2019-04-29 00:54:44 -05:00
parent 933d7afa87
commit db67333d62
6 changed files with 27 additions and 15 deletions

View File

@ -44,6 +44,7 @@ class Settings::PreferencesController < Settings::BaseController
:setting_hide_mntions_muted, :setting_hide_mntions_muted,
:setting_hide_mntions_blocked, :setting_hide_mntions_blocked,
:setting_hide_mntions_blocker, :setting_hide_mntions_blocker,
:setting_hide_mntions_packm8,
:setting_gently_kobolds, :setting_gently_kobolds,
:setting_user_is_kobold, :setting_user_is_kobold,

View File

@ -33,7 +33,7 @@ class StatusFilter
return true if account&.user&.setting_hide_replies_blocker && reply_to_blocker? return true if account&.user&.setting_hide_replies_blocker && reply_to_blocker?
# kajiht has no filters if status has no mentions # kajiht has no filters if status has no mentions
return false if status&.mentions.nil? return false if status&.mentions.blank?
# Grab a list of account IDs mentioned in the status. # Grab a list of account IDs mentioned in the status.
mentioned_account_ids = status.mentions.pluck(:account_id) mentioned_account_ids = status.mentions.pluck(:account_id)
@ -41,22 +41,21 @@ class StatusFilter
# Don't filter statuses mentioning you. # Don't filter statuses mentioning you.
return false if mentioned_account_ids.include?(account.id) return false if mentioned_account_ids.include?(account.id)
# Otherwise, filter the status if it mentions someone you've muted. return true if mentioned_account_ids.any? do |mentioned_account_id|
return true if account&.user&.setting_hide_mntions_muted && @preloaded_relations[:muting] && mentioned_account_ids.any? do |mentioned_account_id| should_filter = account&.user&.setting_hide_mntions_muted && @preloaded_relations[:muting] && @preloaded_relations[:muting][mentioned_account_id]
@preloaded_relations[:muting][mentioned_account_id] should_filter ||= account&.user&.setting_hide_mntions_blocked && @preloaded_relations[:blocking] && @preloaded_relations[:blocking][mentioned_account_id]
if status.reply?
if status.private_visibility?
should_filter ||= (account&.user&.setting_hide_mntions_packm8 && @preloaded_relations[:following] && !@preloaded_relations[:following][mentioned_account_id])
end
should_filter ||= account&.user&.setting_hide_mntions_blocker && Account.find(mentioned_account_id)&.blocking?(status.account_id)
end
should_filter
end end
return true if account.muting?(mentioned_account_ids)
# Same as above, but for blocks: return true if account&.user&.setting_hide_mntions_packm8 && status.reply? && status.private_visibility? && (mentioned_account_ids - account.following_ids).any?
return true if account&.user&.setting_hide_mntions_blocked && @preloaded_relations[:blocking] && mentioned_account_ids.any? do |mentioned_account_id| return true if account&.user&.setting_hide_mntions_muted && account.muting?(mentioned_account_ids)
@preloaded_relations[:blocking][mentioned_account_id] account&.user&.setting_hide_mntions_blocked && account.blocking?(mentioned_account_ids)
end
return true if account.blocking?(mentioned_account_ids)
# Filter statuses that mention someone who's blocking you.
return true if account&.user&.setting_hide_mntions_blocker && status.reply && mentioned_account_ids.any? do |mentioned_account_id|
Account.find(mentioned_account_id)&.blocking?(status.account_id)
end
end end
def reply_to_blocked? def reply_to_blocked?

View File

@ -29,6 +29,7 @@ class UserSettingsDecorator
user.settings['hide_mntions_muted'] = hide_mntions_muted_preference if change?('setting_hide_mntions_muted') user.settings['hide_mntions_muted'] = hide_mntions_muted_preference if change?('setting_hide_mntions_muted')
user.settings['hide_mntions_blocked']= hide_mntions_blocked_preference if change?('setting_hide_mntions_blocked') user.settings['hide_mntions_blocked']= hide_mntions_blocked_preference if change?('setting_hide_mntions_blocked')
user.settings['hide_mntions_blocker']= hide_mntions_blocker_preference if change?('setting_hide_mntions_blocker') user.settings['hide_mntions_blocker']= hide_mntions_blocker_preference if change?('setting_hide_mntions_blocker')
user.settings['hide_mntions_packm8'] = hide_mntions_packm8_preference if change?('setting_hide_mntions_packm8')
user.settings['gently_kobolds'] = gently_kobolds_preference if change?('setting_gently_kobolds') user.settings['gently_kobolds'] = gently_kobolds_preference if change?('setting_gently_kobolds')
user.settings['user_is_kobold'] = user_is_kobold_preference if change?('setting_user_is_kobold') user.settings['user_is_kobold'] = user_is_kobold_preference if change?('setting_user_is_kobold')
@ -97,6 +98,10 @@ class UserSettingsDecorator
boolean_cast_setting 'setting_hide_mntions_blocker' boolean_cast_setting 'setting_hide_mntions_blocker'
end end
def hide_mntions_packm8_preference
boolean_cast_setting 'setting_hide_mntions_packm8'
end
def gently_kobolds_preference def gently_kobolds_preference
boolean_cast_setting 'setting_gently_kobolds' boolean_cast_setting 'setting_gently_kobolds'
end end

View File

@ -118,6 +118,7 @@ class User < ApplicationRecord
:hide_mntions_muted, :hide_mntions_muted,
:hide_mntions_blocked, :hide_mntions_blocked,
:hide_mntions_blocker, :hide_mntions_blocker,
:hide_mntions_packm8,
:gently_kobolds, :gently_kobolds,
:user_is_kobold, :user_is_kobold,
@ -262,6 +263,10 @@ class User < ApplicationRecord
settings.hide_mntions_blocker || true settings.hide_mntions_blocker || true
end end
def setting_hide_mntions_packm8
settings.hide_mntions_packm8 || true
end
def setting_gently_kobolds def setting_gently_kobolds
settings.gently_kobolds || false settings.gently_kobolds || false
end end

View File

@ -70,6 +70,7 @@
= f.input :setting_hide_mntions_muted, as: :boolean, wrapper: :with_label = f.input :setting_hide_mntions_muted, as: :boolean, wrapper: :with_label
= f.input :setting_hide_mntions_blocked, as: :boolean, wrapper: :with_label = f.input :setting_hide_mntions_blocked, as: :boolean, wrapper: :with_label
= f.input :setting_hide_mntions_blocker, as: :boolean, wrapper: :with_label = f.input :setting_hide_mntions_blocker, as: :boolean, wrapper: :with_label
= f.input :setting_hide_mntions_packm8, as: :boolean, wrapper: :with_label
.fields-group .fields-group
= f.input :setting_unfollow_modal, as: :boolean, wrapper: :with_label = f.input :setting_unfollow_modal, as: :boolean, wrapper: :with_label

View File

@ -123,6 +123,7 @@ en:
setting_hide_mntions_muted: Filter mentions of those who you are muting setting_hide_mntions_muted: Filter mentions of those who you are muting
setting_hide_mntions_blocked: Filter mentions of those who you are blocking setting_hide_mntions_blocked: Filter mentions of those who you are blocking
setting_hide_mntions_blocker: Filter mentions of those who are blocking you setting_hide_mntions_blocker: Filter mentions of those who are blocking you
setting_hide_mntions_packm8: Filter group chat branches addressed to participants you aren't a packmate of
setting_gently_kobolds: Gently the kobolds setting_gently_kobolds: Gently the kobolds
setting_user_is_kobold: I am a kobold setting_user_is_kobold: I am a kobold
setting_aggregate_reblogs: Group repeats in timelines setting_aggregate_reblogs: Group repeats in timelines