about summary refs log tree commit diff
path: root/app/lib/status_filter.rb
diff options
context:
space:
mode:
authormultiple creatures <dev@multiple-creature.party>2019-04-22 16:46:41 -0500
committermultiple creatures <dev@multiple-creature.party>2019-05-21 03:16:22 -0500
commitaf7e3a88d4a6574564b75da1ddd56b45819fd0a7 (patch)
tree728436a5ec2df9f9ca7e41eb6d9c2fae3ab2cbbd /app/lib/status_filter.rb
parent15b35d99ce296b06b9b82c9f9e85f0e1f2a571ac (diff)
Anxiety reduction: make block/mute reply filters more granular and add options to control what to filter.
Diffstat (limited to 'app/lib/status_filter.rb')
-rw-r--r--app/lib/status_filter.rb19
1 files changed, 15 insertions, 4 deletions
diff --git a/app/lib/status_filter.rb b/app/lib/status_filter.rb
index b50057c24..b2e80ec92 100644
--- a/app/lib/status_filter.rb
+++ b/app/lib/status_filter.rb
@@ -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