]> cat aescling's git repositories - mastodon.git/commitdiff
Actually filter blocked reblogs from feed
authoraschmitz <aschmitz@lardbucket.org>
Sun, 12 Nov 2017 04:10:49 +0000 (22:10 -0600)
committeraschmitz <aschmitz@lardbucket.org>
Sun, 12 Nov 2017 04:10:49 +0000 (22:10 -0600)
And even a relevant test. Whoops.

app/lib/feed_manager.rb
spec/lib/feed_manager_spec.rb

index 2ddfac33661520e7b0796a8d678812cfd60e2abe..3b16b5d52821ef912432a1837bea2cfbeaa473a9 100644 (file)
@@ -160,7 +160,9 @@ class FeedManager
       should_filter &&= status.account_id != status.in_reply_to_account_id                                               # and it's not a self-reply
       return should_filter
     elsif status.reblog?                                                                                                 # Filter out a reblog
-      should_filter   = Block.where(account_id: status.reblog.account_id, target_account_id: receiver_id).exists?        # or if the author of the reblogged status is blocking me
+      src_id = status.account_id
+      should_filter   = Follow.where(account_id: receiver_id, target_account_id: src_id, show_reblogs: false).exists?    # if the reblogger's reblogs are suppressed
+      should_filter ||= Block.where(account_id: status.reblog.account_id, target_account_id: receiver_id).exists?        # or if the author of the reblogged status is blocking me
       should_filter ||= AccountDomainBlock.where(account_id: receiver_id, domain: status.reblog.account.domain).exists?  # or the author's domain is blocked
       return should_filter
     end
index e678d3ca4a318ec948fc1e54536cd8f88af63706..715d853067a4036f5150c93d1dff6cd58a29e038 100644 (file)
@@ -56,6 +56,13 @@ RSpec.describe FeedManager do
         expect(FeedManager.instance.filter?(:home, reblog, bob.id)).to be true
       end
 
+      it 'returns true for reblog from account with reblogs disabled' do
+        status = Fabricate(:status, text: 'Hello world', account: jeff)
+        reblog = Fabricate(:status, reblog: status, account: alice)
+        bob.follow!(alice, reblogs: false)
+        expect(FeedManager.instance.filter?(:home, reblog, bob.id)).to be true
+      end
+
       it 'returns false for reply by followee to another followee' do
         status = Fabricate(:status, text: 'Hello world', account: jeff)
         reply  = Fabricate(:status, text: 'Nay', thread: status, account: alice)