Anxiety reduction: make block/mute reply filters more granular and add options to control what to filter.

staging
multiple creatures 2019-04-22 16:46:41 -05:00
parent 15b35d99ce
commit af7e3a88d4
6 changed files with 93 additions and 4 deletions

View File

@ -38,6 +38,12 @@ class Settings::PreferencesController < Settings::BaseController
:setting_larger_buttons,
:setting_larger_drawer,
:setting_remove_filtered,
:setting_hide_replies_muted,
:setting_hide_replies_blocked,
:setting_hide_replies_blocker,
:setting_hide_mntions_muted,
:setting_hide_mntions_blocked,
:setting_hide_mntions_blocker,
:setting_gently_kobolds,
:setting_user_is_kobold,

View File

@ -28,7 +28,9 @@ class StatusFilter
def filtered_reference?
# filter muted/blocked
return true if reply_to_blocked? || reply_to_muted?
return true if account&.user&.setting_hide_replies_blocked? && reply_to_blocked?
return true if account&.user&.setting_hide_replies_muted? && reply_to_muted?
return true if account&.user&.setting_hide_replies_blocker? && reply_to_blocker?
# kajiht has no filters if status has no mentions
return false if status&.mentions.nil?
@ -40,16 +42,21 @@ class StatusFilter
return false if mentioned_account_ids.include?(account.id)
# Otherwise, filter the status if it mentions someone you've muted.
return true if @preloaded_relations[:muting] && 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|
@preloaded_relations[:muting][mentioned_account_id]
end
return true if account.muting?(mentioned_account_ids)
# Same as above, but for blocks:
return true if @preloaded_relations[:blocking] && mentioned_account_ids.any? do |mentioned_account_id|
return true if account&.user&.setting_hide_mntions_blocked && @preloaded_relations[:blocking] && mentioned_account_ids.any? do |mentioned_account_id|
@preloaded_relations[:blocking][mentioned_account_id]
end
account.blocking?(mentioned_account_ids)
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
def reply_to_blocked?
@ -76,6 +83,10 @@ class StatusFilter
@preloaded_relations[:following] ? @preloaded_relations[:following][status.account_id] : account&.following?(status.account_id)
end
def reply_to_blocker?
status.reply? && status.in_reply_to_account.blocking?(status.account_id)
end
def non_self_reply?
status.reply? && status.in_reply_to_account_id != status.account_id
end

View File

@ -23,6 +23,12 @@ class UserSettingsDecorator
user.settings['larger_buttons'] = larger_buttons_preference if change?('setting_larger_buttons')
user.settings['larger_drawer'] = larger_drawer_preference if change?('setting_larger_drawer')
user.settings['remove_filtered'] = remove_filtered_preference if change?('setting_remove_filtered')
user.settings['hide_replies_muted'] = hide_replies_muted_preference if change?('setting_hide_replies_muted')
user.settings['hide_replies_blocked']= hide_replies_blocked_preference if change?('setting_hide_replies_blocked')
user.settings['hide_replies_blocker']= hide_replies_blocker_preference if change?('setting_hide_replies_blocker')
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_blocker']= hide_mntions_blocker_preference if change?('setting_hide_mntions_blocker')
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')
@ -67,6 +73,30 @@ class UserSettingsDecorator
boolean_cast_setting 'setting_remove_filtered'
end
def hide_replies_muted_preference
boolean_cast_setting 'setting_hide_replies_muted'
end
def hide_replies_blocked_preference
boolean_cast_setting 'setting_hide_replies_blocked'
end
def hide_replies_blocker_preference
boolean_cast_setting 'setting_hide_replies_blocker'
end
def hide_mntions_muted_preference
boolean_cast_setting 'setting_hide_mntions_muted'
end
def hide_mntions_blocked_preference
boolean_cast_setting 'setting_hide_mntions_blocked'
end
def hide_mntions_blocker_preference
boolean_cast_setting 'setting_hide_mntions_blocker'
end
def gently_kobolds_preference
boolean_cast_setting 'setting_gently_kobolds'
end

View File

@ -112,6 +112,12 @@ class User < ApplicationRecord
:larger_buttons,
:larger_drawer,
:remove_filtered,
:hide_replies_muted,
:hide_replies_blocked,
:hide_replies_blocker,
:hide_mntions_muted,
:hide_mntions_blocked,
:hide_mntions_blocker,
:gently_kobolds,
:user_is_kobold,
@ -232,6 +238,30 @@ class User < ApplicationRecord
settings.remove_filtered || false
end
def setting_hide_replies_muted
settings.hide_replies_muted || true
end
def setting_hide_replies_blocked
settings.hide_replies_blocked || true
end
def setting_hide_replies_blocker
settings.hide_replies_blocker || true
end
def setting_hide_mntions_muted
settings.hide_mntions_muted || true
end
def setting_hide_mntions_blocked
settings.hide_mntions_blocked || true
end
def setting_hide_mntions_blocker
settings.hide_mntions_blocker || true
end
def setting_gently_kobolds
settings.gently_kobolds || false
end

View File

@ -64,6 +64,12 @@
.fields-group
= f.input :setting_remove_filtered, as: :boolean, wrapper: :with_label
= f.input :setting_hide_replies_muted, as: :boolean, wrapper: :with_label
= f.input :setting_hide_replies_blocked, as: :boolean, wrapper: :with_label
= f.input :setting_hide_replies_blocker, 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_blocker, as: :boolean, wrapper: :with_label
.fields-group
= f.input :setting_unfollow_modal, as: :boolean, wrapper: :with_label

View File

@ -114,6 +114,12 @@ en:
setting_larger_buttons: Increase size and spacing of action buttons
setting_larger_drawer: Increase width of compose drawer column
setting_remove_filtered: Don't show placeholder gap for filtered roars
setting_hide_replies_muted: Filter replies to those who you are muting
setting_hide_replies_blocked: Filter replies to those who you are blocking
setting_hide_replies_blocker: Filter replies to those who are blocking you
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_blocker: Filter mentions of those who are blocking you
setting_gently_kobolds: Gently the kobolds
setting_user_is_kobold: I am a kobold
setting_aggregate_reblogs: Group repeats in timelines