From 263ead73616dba43a0337c2a3edaf96a6382d533 Mon Sep 17 00:00:00 2001 From: Fire Demon Date: Tue, 21 Jul 2020 01:44:16 -0500 Subject: [Feature] Add post and thread (un)hiding to backend --- app/models/concerns/account_interactions.rb | 30 +++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) (limited to 'app/models/concerns/account_interactions.rb') diff --git a/app/models/concerns/account_interactions.rb b/app/models/concerns/account_interactions.rb index 01a711493..d5e2fe985 100644 --- a/app/models/concerns/account_interactions.rb +++ b/app/models/concerns/account_interactions.rb @@ -90,9 +90,10 @@ module AccountInteractions has_many :muting, -> { order('mutes.id desc') }, through: :mute_relationships, source: :target_account has_many :muted_by_relationships, class_name: 'Mute', foreign_key: :target_account_id, dependent: :destroy has_many :muted_by, -> { order('mutes.id desc') }, through: :muted_by_relationships, source: :account - has_many :conversation_mutes, dependent: :destroy + has_many :conversation_mutes, inverse_of: :account, dependent: :destroy has_many :domain_blocks, class_name: 'AccountDomainBlock', dependent: :destroy has_many :announcement_mutes, dependent: :destroy + has_many :status_mutes, inverse_of: :account, dependent: :destroy end def follow!(other_account, reblogs: nil, uri: nil, rate_limit: false) @@ -132,15 +133,15 @@ module AccountInteractions remove_potential_friendship(other_account) # When toggling a mute between hiding and allowing notifications, the mute will already exist, so the find_or_create_by! call will return the existing Mute without updating the hide_notifications attribute. Therefore, we check that hide_notifications? is what we want and set it if it isn't. - if mute.hide_notifications? != notifications - mute.update!(hide_notifications: notifications, timelines_only: timelines_only) - end + mute.update!(hide_notifications: notifications, timelines_only: timelines_only) if mute.hide_notifications? != notifications mute end - def mute_conversation!(conversation) - conversation_mutes.find_or_create_by!(conversation: conversation) + def mute_conversation!(conversation, hidden: false) + mute = conversation_mutes.find_or_create_by!(conversation: conversation) + mute.update(hidden: hidden) if mute.hidden? != hidden + mute end def block_domain!(other_domain) @@ -172,6 +173,15 @@ module AccountInteractions block&.destroy end + def mute_status!(status) + status_mutes.find_or_create_by!(status: status) + end + + def unmute_status!(status) + mute = status_mutes.find_by(status: status) + mute&.destroy + end + def following?(other_account) active_relationships.where(target_account: other_account).exists? end @@ -192,6 +202,10 @@ module AccountInteractions conversation_mutes.where(conversation: conversation).exists? end + def hiding_conversation?(conversation) + conversation_mutes.where(conversation: conversation, hidden: true).exists? + end + def muting_notifications?(other_account) mute_relationships.where(target_account: other_account, hide_notifications: true).exists? end @@ -200,6 +214,10 @@ module AccountInteractions active_relationships.where(target_account: other_account, show_reblogs: false).exists? end + def muting_status?(status) + status_mutes.where(status: status).exists? + end + def requested?(other_account) follow_requests.where(target_account: other_account).exists? end -- cgit