Fix emoji reaction streaming
This commit is contained in:
parent
9ea0d28d77
commit
503a24967d
5 changed files with 11 additions and 30 deletions
|
@ -109,7 +109,7 @@ class ActivityPub::Activity::Like < ActivityPub::Activity
|
||||||
emoji_group = @original_status.emoji_reactions_grouped_by_name
|
emoji_group = @original_status.emoji_reactions_grouped_by_name
|
||||||
.find { |reaction_group| reaction_group['name'] == emoji_reaction.name && (!reaction_group.key?(:domain) || reaction_group['domain'] == emoji_reaction.custom_emoji&.domain) }
|
.find { |reaction_group| reaction_group['name'] == emoji_reaction.name && (!reaction_group.key?(:domain) || reaction_group['domain'] == emoji_reaction.custom_emoji&.domain) }
|
||||||
emoji_group['status_id'] = @original_status.id.to_s
|
emoji_group['status_id'] = @original_status.id.to_s
|
||||||
DeliveryEmojiReactionWorker.perform_async(render_emoji_reaction(emoji_group), emoji_reaction.id, emoji_reaction.account_id)
|
DeliveryEmojiReactionWorker.perform_async(render_emoji_reaction(emoji_group), emoji_reaction.id, @original_status.id, emoji_reaction.account_id)
|
||||||
end
|
end
|
||||||
|
|
||||||
def render_emoji_reaction(emoji_group)
|
def render_emoji_reaction(emoji_group)
|
||||||
|
|
|
@ -149,7 +149,7 @@ class ActivityPub::Activity::Undo < ActivityPub::Activity
|
||||||
emoji_group = { 'name' => emoji_reaction.name, 'count' => 0, 'account_ids' => [], 'status_id' => @original_status.id.to_s }
|
emoji_group = { 'name' => emoji_reaction.name, 'count' => 0, 'account_ids' => [], 'status_id' => @original_status.id.to_s }
|
||||||
emoji_group['domain'] = emoji_reaction.custom_emoji.domain if emoji_reaction.custom_emoji
|
emoji_group['domain'] = emoji_reaction.custom_emoji.domain if emoji_reaction.custom_emoji
|
||||||
end
|
end
|
||||||
DeliveryEmojiReactionWorker.perform_async(render_emoji_reaction(emoji_group), emoji_reaction.id, emoji_reaction.account_id)
|
DeliveryEmojiReactionWorker.perform_async(render_emoji_reaction(emoji_group), nil, @original_status.id, emoji_reaction.account_id)
|
||||||
end
|
end
|
||||||
|
|
||||||
def render_emoji_reaction(emoji_group)
|
def render_emoji_reaction(emoji_group)
|
||||||
|
|
|
@ -68,7 +68,7 @@ class EmojiReactService < BaseService
|
||||||
emoji_group = emoji_reaction.status.emoji_reactions_grouped_by_name
|
emoji_group = emoji_reaction.status.emoji_reactions_grouped_by_name
|
||||||
.find { |reaction_group| reaction_group['name'] == emoji_reaction.name && (!reaction_group.key?(:domain) || reaction_group['domain'] == emoji_reaction.custom_emoji&.domain) }
|
.find { |reaction_group| reaction_group['name'] == emoji_reaction.name && (!reaction_group.key?(:domain) || reaction_group['domain'] == emoji_reaction.custom_emoji&.domain) }
|
||||||
emoji_group['status_id'] = emoji_reaction.status_id.to_s
|
emoji_group['status_id'] = emoji_reaction.status_id.to_s
|
||||||
DeliveryEmojiReactionWorker.perform_async(render_emoji_reaction(emoji_group), emoji_reaction.id, emoji_reaction.account_id)
|
DeliveryEmojiReactionWorker.perform_async(render_emoji_reaction(emoji_group), emoji_reaction.id, emoji_reaction.status_id, emoji_reaction.account_id)
|
||||||
end
|
end
|
||||||
|
|
||||||
def bump_potential_friendship(account, status)
|
def bump_potential_friendship(account, status)
|
||||||
|
|
|
@ -48,7 +48,7 @@ class UnEmojiReactService < BaseService
|
||||||
emoji_group = { 'name' => emoji_reaction.name, 'count' => 0, 'account_ids' => [], 'status_id' => @status.id.to_s }
|
emoji_group = { 'name' => emoji_reaction.name, 'count' => 0, 'account_ids' => [], 'status_id' => @status.id.to_s }
|
||||||
emoji_group['domain'] = emoji_reaction.custom_emoji.domain if emoji_reaction.custom_emoji
|
emoji_group['domain'] = emoji_reaction.custom_emoji.domain if emoji_reaction.custom_emoji
|
||||||
end
|
end
|
||||||
DeliveryEmojiReactionWorker.perform_async(render_emoji_reaction(emoji_group), emoji_reaction.id, emoji_reaction.account_id)
|
DeliveryEmojiReactionWorker.perform_async(render_emoji_reaction(emoji_group), nil, @status.id, emoji_reaction.account_id)
|
||||||
end
|
end
|
||||||
|
|
||||||
def build_json(emoji_reaction)
|
def build_json(emoji_reaction)
|
||||||
|
|
|
@ -6,23 +6,21 @@ class DeliveryEmojiReactionWorker
|
||||||
include Lockable
|
include Lockable
|
||||||
include AccountScope
|
include AccountScope
|
||||||
|
|
||||||
def perform(payload_json, emoji_reaction_id, _status_id, _my_account_id = nil)
|
def perform(payload_json, emoji_reaction_id, status_id, _my_account_id = nil)
|
||||||
emoji_reaction = EmojiReaction.find(emoji_reaction_id)
|
emoji_reaction = emoji_reaction_id ? EmojiReaction.find(emoji_reaction_id) : nil
|
||||||
status = emoji_reaction&.status
|
status = Status.find(status_id)
|
||||||
|
|
||||||
if status.present?
|
if status.present?
|
||||||
return if status.account.excluded_from_timeline_domains.include?(emoji_reaction.account.domain)
|
|
||||||
|
|
||||||
scope = scope_status(status)
|
scope = scope_status(status)
|
||||||
|
|
||||||
policy = status.account.emoji_reaction_policy
|
policy = status.account.emoji_reaction_policy
|
||||||
return if policy == :block_and_hide
|
return if policy == :block_and_hide
|
||||||
|
|
||||||
scope = scope.merge(policy_scope(status.account)) unless policy == :allow
|
|
||||||
|
|
||||||
scope.includes(:user).find_each do |account|
|
scope.includes(:user).find_each do |account|
|
||||||
next unless (account.user.nil? || (!account.user&.setting_stop_emoji_reaction_streaming && !account.user&.setting_enable_emoji_reaction)) && redis.exists?("subscribed:timeline:#{account.id}")
|
next if account.user.present? && (account.user.setting_stop_emoji_reaction_streaming || !account.user.setting_enable_emoji_reaction)
|
||||||
next if account.excluded_from_timeline_domains.include?(emoji_reaction.account.domain)
|
next unless redis.exists?("subscribed:timeline:#{account.id}")
|
||||||
|
next if emoji_reaction.present? && account.excluded_from_timeline_domains.include?(emoji_reaction.account.domain)
|
||||||
|
next if policy != :allow && !status.account.show_emoji_reaction?(account)
|
||||||
|
|
||||||
redis.publish("timeline:#{account.id}", payload_json)
|
redis.publish("timeline:#{account.id}", payload_json)
|
||||||
end
|
end
|
||||||
|
@ -32,21 +30,4 @@ class DeliveryEmojiReactionWorker
|
||||||
rescue ActiveRecord::RecordNotFound
|
rescue ActiveRecord::RecordNotFound
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
def policy_scope(account)
|
|
||||||
case account.emoji_reaction_policy
|
|
||||||
when :blocked, :block_and_hide
|
|
||||||
nil
|
|
||||||
when :followees_only
|
|
||||||
account.following
|
|
||||||
when :followers_only
|
|
||||||
account.followers
|
|
||||||
when :mutuals_only
|
|
||||||
account.mutuals
|
|
||||||
when :outside_only
|
|
||||||
Account.where(id: account.following.pluck(:id) + account.followers.pluck(:id))
|
|
||||||
else
|
|
||||||
Account
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue