keyword mute: use mentions scope in home feed filtering (#454)
If a status shows up in mentions because all keyword mutes that might apply to it are marked as "don't apply to mentions", then it ought to show up in the home feed also.
This commit is contained in:
parent
e931cf656d
commit
908a770d2b
|
@ -153,7 +153,7 @@ class FeedManager
|
|||
def filter_from_home?(status, receiver_id)
|
||||
return false if receiver_id == status.account_id
|
||||
return true if status.reply? && (status.in_reply_to_id.nil? || status.in_reply_to_account_id.nil?)
|
||||
return true if keyword_filter?(status, receiver_id, Glitch::KeywordMute::Scopes::HomeFeed)
|
||||
return true if keyword_filter_from_home?(status, receiver_id)
|
||||
|
||||
check_for_mutes = [status.account_id]
|
||||
check_for_mutes.concat(status.mentions.pluck(:account_id))
|
||||
|
@ -182,6 +182,22 @@ class FeedManager
|
|||
false
|
||||
end
|
||||
|
||||
def keyword_filter_from_home?(status, receiver_id)
|
||||
# If this status mentions the receiver, use the mentions scope: it's
|
||||
# possible that the status will show up in the receiver's mentions, which
|
||||
# means it ought to show up in the home feed as well.
|
||||
#
|
||||
# If it doesn't mention the receiver but is still headed for the home feed,
|
||||
# use the home feed scope.
|
||||
scope = if status.mentions.pluck(:account_id).include?(receiver_id)
|
||||
Glitch::KeywordMute::Scopes::Mentions
|
||||
else
|
||||
Glitch::KeywordMute::Scopes::HomeFeed
|
||||
end
|
||||
|
||||
return true if keyword_filter?(status, receiver_id, scope)
|
||||
end
|
||||
|
||||
def keyword_filter?(status, receiver_id, scope)
|
||||
Glitch::KeywordMuteHelper.new(receiver_id).matches?(status, scope)
|
||||
end
|
||||
|
|
|
@ -187,6 +187,14 @@ RSpec.describe FeedManager do
|
|||
|
||||
expect(FeedManager.instance.filter?(:home, status, alice.id)).to be true
|
||||
end
|
||||
|
||||
it 'returns false if the status is muted by a keyword mute that does not apply to mentions' do
|
||||
Fabricate('Glitch::KeywordMute', account: alice, keyword: 'take', apply_to_mentions: false)
|
||||
status = Fabricate(:status, spoiler_text: 'This is a hot take', account: bob)
|
||||
status.mentions.create!(account_id: alice.id)
|
||||
|
||||
expect(FeedManager.instance.filter?(:home, status, alice.id)).to be false
|
||||
end
|
||||
end
|
||||
|
||||
context 'for mentions feed' do
|
||||
|
|
Reference in New Issue