diff --git a/app/lib/activitypub/activity/like.rb b/app/lib/activitypub/activity/like.rb index 910e40e48..93e5d7dcc 100644 --- a/app/lib/activitypub/activity/like.rb +++ b/app/lib/activitypub/activity/like.rb @@ -6,12 +6,10 @@ class ActivityPub::Activity::Like < ActivityPub::Activity return if @original_status.nil? || !@original_status.account.local? || delete_arrived_first?(@json['id']) - lock_or_fail("like:#{object_uri}") do - if shortcode.nil? - process_favourite - else - process_emoji_reaction - end + if shortcode.nil? + process_favourite + else + process_emoji_reaction end end @@ -42,7 +40,6 @@ class ActivityPub::Activity::Like < ActivityPub::Activity return if EmojiReaction.where(account: @account, status: @original_status).count >= EmojiReaction::EMOJI_REACTION_PER_ACCOUNT_LIMIT - EmojiReaction.find_by(account: @account, status: @original_status)&.destroy reaction = @original_status.emoji_reactions.create!(account: @account, name: shortcode, custom_emoji: emoji, uri: @json['id']) write_stream(reaction) @@ -103,4 +100,4 @@ class ActivityPub::Activity::Like < ActivityPub::Activity def render_emoji_reaction(emoji_group) @render_emoji_reaction ||= Oj.dump(event: :emoji_reaction, payload: emoji_group.to_json) end -end +end \ No newline at end of file diff --git a/app/lib/activitypub/activity/undo.rb b/app/lib/activitypub/activity/undo.rb index a8558f457..9b5a72b80 100644 --- a/app/lib/activitypub/activity/undo.rb +++ b/app/lib/activitypub/activity/undo.rb @@ -121,19 +121,18 @@ class ActivityPub::Activity::Undo < ActivityPub::Activity if shortcode.present? emoji_tag = @object['tag'].is_a?(Array) ? @object['tag']&.first : @object['tag'] + emoji = nil if emoji_tag.present? && emoji_tag['id'].present? - emoji = CustomEmoji.find_by(shortcode: shortcode, domain: @account.domain) + domain = URI.split(emoji_tag['id'])[2] + domain = nil if domain == Rails.configuration.x.local_domain || domain == Rails.configuration.x.web_domain + emoji = CustomEmoji.find_by(shortcode: shortcode, domain: domain) if emoji_tag.present? && emoji_tag['id'].present? end - if @account.reacted?(@original_status, shortcode, emoji) - @original_status.emoji_reactions.where(account: @account, name: shortcode, custom_emoji: emoji).first&.destroy + emoji_reaction = @original_status.emoji_reactions.where(account: @account, name: shortcode, custom_emoji: emoji).first - if @original_status.account.local? - forward_for_undo_emoji_reaction - relay_for_undo_emoji_reaction - end - else - delete_later!(object_uri) + if emoji_reaction + emoji_reaction.destroy + write_stream(emoji_reaction) end else undo_like_original @@ -147,10 +146,10 @@ class ActivityPub::Activity::Undo < ActivityPub::Activity emoji_group['status_id'] = @original_status.id.to_s else # name: emoji_reaction.name, count: 0, domain: emoji_reaction.domain - 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' => @original_status.id.to_s } emoji_group['domain'] = emoji_reaction.custom_emoji.domain if emoji_reaction.custom_emoji end - FeedAnyJsonWorker.perform_async(render_emoji_reaction(emoji_group), @original_status.id, emoji_reaction.account_id) + DeliveryEmojiReactionWorker.perform_async(render_emoji_reaction(emoji_group), @original_status.id, emoji_reaction.account_id) if Setting.streaming_emoji_reaction && (@original_status.local? || Setting.streaming_other_servers_emoji_reaction) end def render_emoji_reaction(emoji_group)