diff options
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/account.rb | 14 | ||||
-rw-r--r-- | app/models/conversation.rb | 2 | ||||
-rw-r--r-- | app/models/conversation_mute.rb | 14 | ||||
-rw-r--r-- | app/models/status.rb | 4 |
4 files changed, 33 insertions, 1 deletions
diff --git a/app/models/account.rb b/app/models/account.rb index d43cae038..bf3d92a51 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -84,6 +84,7 @@ class Account < ApplicationRecord # Mute relationships has_many :mute_relationships, class_name: 'Mute', foreign_key: 'account_id', dependent: :destroy has_many :muting, -> { order('mutes.id desc') }, through: :mute_relationships, source: :target_account + has_many :conversation_mutes # Media has_many :media_attachments, dependent: :destroy @@ -130,6 +131,10 @@ class Account < ApplicationRecord mute_relationships.find_or_create_by!(target_account: other_account) end + def mute_conversation!(conversation) + conversation_mutes.find_or_create_by!(conversation: conversation) + end + def unfollow!(other_account) follow = active_relationships.find_by(target_account: other_account) follow&.destroy @@ -145,6 +150,11 @@ class Account < ApplicationRecord mute&.destroy end + def unmute_conversation!(conversation) + mute = conversation_mutes.find_by(conversation: conversation) + mute&.destroy! + end + def following?(other_account) following.include?(other_account) end @@ -157,6 +167,10 @@ class Account < ApplicationRecord muting.include?(other_account) end + def muting_conversation?(conversation) + conversation_mutes.where(conversation: conversation).exists? + end + def requested?(other_account) follow_requests.where(target_account: other_account).exists? end diff --git a/app/models/conversation.rb b/app/models/conversation.rb index fbec961c7..3715e1049 100644 --- a/app/models/conversation.rb +++ b/app/models/conversation.rb @@ -10,7 +10,7 @@ # class Conversation < ApplicationRecord - validates :uri, uniqueness: true + validates :uri, uniqueness: true, if: :uri has_many :statuses diff --git a/app/models/conversation_mute.rb b/app/models/conversation_mute.rb new file mode 100644 index 000000000..79299b995 --- /dev/null +++ b/app/models/conversation_mute.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true +# == Schema Information +# +# Table name: conversation_mutes +# +# id :integer not null, primary key +# account_id :integer not null +# conversation_id :integer not null +# + +class ConversationMute < ApplicationRecord + belongs_to :account, required: true + belongs_to :conversation, required: true +end diff --git a/app/models/status.rb b/app/models/status.rb index 772cef238..7c39a273a 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -181,6 +181,10 @@ class Status < ApplicationRecord select('reblog_of_id').where(reblog_of_id: status_ids).where(account_id: account_id).map { |s| [s.reblog_of_id, true] }.to_h end + def mutes_map(conversation_ids, account_id) + ConversationMute.select('conversation_id').where(conversation_id: conversation_ids).where(account_id: account_id).map { |m| [m.conversation_id, true] }.to_h + end + def reload_stale_associations!(cached_items) account_ids = [] |