From 503a24967d332dbb7a843c2330bf5d3fd9c72b69 Mon Sep 17 00:00:00 2001 From: KMY Date: Tue, 12 Sep 2023 22:21:53 +0900 Subject: [PATCH] Fix emoji reaction streaming --- app/lib/activitypub/activity/like.rb | 2 +- app/lib/activitypub/activity/undo.rb | 2 +- app/services/emoji_react_service.rb | 2 +- app/services/un_emoji_react_service.rb | 2 +- app/workers/delivery_emoji_reaction_worker.rb | 33 ++++--------------- 5 files changed, 11 insertions(+), 30 deletions(-) diff --git a/app/lib/activitypub/activity/like.rb b/app/lib/activitypub/activity/like.rb index 7765f7ed27..c18d042438 100644 --- a/app/lib/activitypub/activity/like.rb +++ b/app/lib/activitypub/activity/like.rb @@ -109,7 +109,7 @@ class ActivityPub::Activity::Like < ActivityPub::Activity 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) } 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 def render_emoji_reaction(emoji_group) diff --git a/app/lib/activitypub/activity/undo.rb b/app/lib/activitypub/activity/undo.rb index cad1fc4368..4e3a14c059 100644 --- a/app/lib/activitypub/activity/undo.rb +++ b/app/lib/activitypub/activity/undo.rb @@ -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['domain'] = emoji_reaction.custom_emoji.domain if emoji_reaction.custom_emoji 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 def render_emoji_reaction(emoji_group) diff --git a/app/services/emoji_react_service.rb b/app/services/emoji_react_service.rb index 8cdd30cd8b..e45a481e08 100644 --- a/app/services/emoji_react_service.rb +++ b/app/services/emoji_react_service.rb @@ -68,7 +68,7 @@ class EmojiReactService < BaseService 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) } 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 def bump_potential_friendship(account, status) diff --git a/app/services/un_emoji_react_service.rb b/app/services/un_emoji_react_service.rb index fa0b54ca2f..b5953685f4 100644 --- a/app/services/un_emoji_react_service.rb +++ b/app/services/un_emoji_react_service.rb @@ -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['domain'] = emoji_reaction.custom_emoji.domain if emoji_reaction.custom_emoji 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 def build_json(emoji_reaction) diff --git a/app/workers/delivery_emoji_reaction_worker.rb b/app/workers/delivery_emoji_reaction_worker.rb index 9e069ad4c7..4d0154bfb8 100644 --- a/app/workers/delivery_emoji_reaction_worker.rb +++ b/app/workers/delivery_emoji_reaction_worker.rb @@ -6,23 +6,21 @@ class DeliveryEmojiReactionWorker include Lockable include AccountScope - def perform(payload_json, emoji_reaction_id, _status_id, _my_account_id = nil) - emoji_reaction = EmojiReaction.find(emoji_reaction_id) - status = emoji_reaction&.status + def perform(payload_json, emoji_reaction_id, status_id, _my_account_id = nil) + emoji_reaction = emoji_reaction_id ? EmojiReaction.find(emoji_reaction_id) : nil + status = Status.find(status_id) if status.present? - return if status.account.excluded_from_timeline_domains.include?(emoji_reaction.account.domain) - scope = scope_status(status) policy = status.account.emoji_reaction_policy return if policy == :block_and_hide - scope = scope.merge(policy_scope(status.account)) unless policy == :allow - 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.excluded_from_timeline_domains.include?(emoji_reaction.account.domain) + next if account.user.present? && (account.user.setting_stop_emoji_reaction_streaming || !account.user.setting_enable_emoji_reaction) + 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) end @@ -32,21 +30,4 @@ class DeliveryEmojiReactionWorker rescue ActiveRecord::RecordNotFound true 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