"Show reblogs" per-follower UI/database changes
TODO: * Tests (particularly for FollowRequests). * Anything to respect the setting when putting reblogs in timelines.
This commit is contained in:
@@ -5,7 +5,11 @@ module AccountInteractions
|
||||
|
||||
class_methods do
|
||||
def following_map(target_account_ids, account_id)
|
||||
follow_mapping(Follow.where(target_account_id: target_account_ids, account_id: account_id), :target_account_id)
|
||||
Follow.where(target_account_id: target_account_ids, account_id: account_id).each_with_object({}) do |follow, mapping|
|
||||
mapping[follow.target_account_id] = {
|
||||
reblogs: follow.show_reblogs?
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
def followed_by_map(target_account_ids, account_id)
|
||||
@@ -25,7 +29,11 @@ module AccountInteractions
|
||||
end
|
||||
|
||||
def requested_map(target_account_ids, account_id)
|
||||
follow_mapping(FollowRequest.where(target_account_id: target_account_ids, account_id: account_id), :target_account_id)
|
||||
FollowRequest.where(target_account_id: target_account_ids, account_id: account_id).each_with_object({}) do |follow_request, mapping|
|
||||
mapping[follow_request.target_account_id] = {
|
||||
reblogs: follow_request.show_reblogs?
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
def domain_blocking_map(target_account_ids, account_id)
|
||||
@@ -66,8 +74,15 @@ module AccountInteractions
|
||||
has_many :domain_blocks, class_name: 'AccountDomainBlock', dependent: :destroy
|
||||
end
|
||||
|
||||
def follow!(other_account)
|
||||
active_relationships.find_or_create_by!(target_account: other_account)
|
||||
def follow!(other_account, reblogs: nil)
|
||||
reblogs = true if reblogs.nil?
|
||||
rel = active_relationships.create_with(show_reblogs: reblogs).find_or_create_by!(target_account: other_account)
|
||||
if rel.show_reblogs != reblogs
|
||||
rel.show_reblogs = reblogs
|
||||
rel.save!
|
||||
end
|
||||
|
||||
rel
|
||||
end
|
||||
|
||||
def block!(other_account)
|
||||
|
@@ -8,6 +8,7 @@
|
||||
# account_id :integer not null
|
||||
# id :integer not null, primary key
|
||||
# target_account_id :integer not null
|
||||
# show_reblogs :boolean default(TRUE), not null
|
||||
#
|
||||
|
||||
class Follow < ApplicationRecord
|
||||
|
@@ -8,6 +8,7 @@
|
||||
# account_id :integer not null
|
||||
# id :integer not null, primary key
|
||||
# target_account_id :integer not null
|
||||
# show_reblogs :boolean default(TRUE), not null
|
||||
#
|
||||
|
||||
class FollowRequest < ApplicationRecord
|
||||
@@ -21,7 +22,7 @@ class FollowRequest < ApplicationRecord
|
||||
validates :account_id, uniqueness: { scope: :target_account_id }
|
||||
|
||||
def authorize!
|
||||
account.follow!(target_account)
|
||||
account.follow!(target_account, reblogs: reblogs)
|
||||
MergeWorker.perform_async(target_account.id, account.id)
|
||||
|
||||
destroy!
|
||||
|
Reference in New Issue
Block a user