diff options
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/account.rb | 6 | ||||
-rw-r--r-- | app/models/follow_request.rb | 19 | ||||
-rw-r--r-- | app/models/status.rb | 2 |
3 files changed, 26 insertions, 1 deletions
diff --git a/app/models/account.rb b/app/models/account.rb index aa904588b..273c09833 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -34,6 +34,8 @@ class Account < ApplicationRecord has_many :notifications, inverse_of: :account, dependent: :destroy # Follow relations + has_many :follow_requests, dependent: :destroy + has_many :active_relationships, class_name: 'Follow', foreign_key: 'account_id', dependent: :destroy has_many :passive_relationships, class_name: 'Follow', foreign_key: 'target_account_id', dependent: :destroy @@ -179,6 +181,10 @@ class Account < ApplicationRecord def blocking_map(target_account_ids, account_id) Block.where(target_account_id: target_account_ids).where(account_id: account_id).map { |b| [b.target_account_id, true] }.to_h end + + def requested_map(target_account_ids, account_id) + FollowRequest.where(target_account_id: target_account_ids).where(account_id: account_id).map { |r| [r.target_account_id, true] }.to_h + end end before_create do diff --git a/app/models/follow_request.rb b/app/models/follow_request.rb new file mode 100644 index 000000000..132316fb4 --- /dev/null +++ b/app/models/follow_request.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +class FollowRequest < ApplicationRecord + belongs_to :account + belongs_to :target_account, class_name: 'Account' + + validates :account, :target_account, presence: true + validates :account_id, uniqueness: { scope: :target_account_id } + + def authorize! + account.follow!(target_account) + FeedManager.instance.merge_into_timeline(target_account, account) + destroy! + end + + def reject! + destroy! + end +end diff --git a/app/models/status.rb b/app/models/status.rb index 1e6298a0e..033ae0529 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -170,7 +170,7 @@ class Status < ApplicationRecord text.strip! self.reblog = reblog.reblog if reblog? && reblog.reblog? self.in_reply_to_account_id = thread.account_id if reply? - self.visibility = :public if visibility.nil? + self.visibility = (account.locked? ? :private : :public) if visibility.nil? end private |