I muted user Alice to avoid seeing their posts.
Bob (who I haven't muted) boosted one of Alice's posts.
Aside from blocking Alice (which I'd rather not do), how can I ensure I don't see her posts unless I specifically ask for them?
master (If you're a user, don't worry about this).As far as fixing:
The actual request and read filter happens in app/lib/feed_manager.rb filter_from_home? and filter_from_mentions?, which _look_ like they contain relevant code here:
check_for_mutes = [status.account_id]
check_for_mutes.concat([status.reblog.account_id]) if status.reblog?
This might be broken, I'll look for relevant tests.
Javascript live updates at app/javascript/mastodon/reducers/statuses.js fn filterStatuses (and the similar filterNotifications):
const filterStatuses = (state, relationship) => {
state.forEach(status => {
if (status.get('account') !== relationship.id) {
return;
}
state = deleteStatus(state, status.get('id'), state.filter(item => item.get('reblog') === status.get('id')));
});
return state;
};
The status.get('account') will get the booster's account, and the boosted's account doesn't get examined.
Similar code in timelines.js: filterTimelines
Use-case for this.
Alice is at an event and is love-tooting the event. I don't want spoilers about the event so I mute her for the time being (I still want to interact with Alice, just not right now while she's spoiling the event).
Bob decides he really likes that Alice is live-tooting this event and decides to boost all of Alice's toots about the event. As it stands now I have to block Alice (which I don't want to do as she will then be unable to follow me) or somehow mute Bob as well (which I don't want to do because Bob has other interesting things to say in the interim).
I'd like to mute Alice for the duration but Bob is making that difficult. Bob's boosts are circumventing the mute for Alice.
LMK if this use-case needs further elaboration. Thanks!
Hm. Tests include this case (feed_manager_spec.rb):
it 'returns true for reblog by followee of muted account' do
status = Fabricate(:status, text: 'Hello world', account: jeff)
reblog = Fabricate(:status, reblog: status, account: alice)
bob.follow!(alice)
bob.mute!(jeff)
expect(FeedManager.instance.filter?(:home, reblog, bob.id)).to be true
end
One possibility here is that the test is fabricating status objects with nested information (the reblog's account) that isn't actually available to the FeedManager for some reason.
Aside from blocking Alice (which I'd rather not do), how can I ensure I don't see her posts unless I specifically ask for them?
Seems like even this doesn't work; I'm still seeing toots in my home feed that were written by someone I've muted _and_ blocked, but boosted by someone I follow.
Most helpful comment
Use-case for this.
Alice is at an event and is love-tooting the event. I don't want spoilers about the event so I mute her for the time being (I still want to interact with Alice, just not right now while she's spoiling the event).
Bob decides he really likes that Alice is live-tooting this event and decides to boost all of Alice's toots about the event. As it stands now I have to block Alice (which I don't want to do as she will then be unable to follow me) or somehow mute Bob as well (which I don't want to do because Bob has other interesting things to say in the interim).
I'd like to mute Alice for the duration but Bob is making that difficult. Bob's boosts are circumventing the mute for Alice.
LMK if this use-case needs further elaboration. Thanks!