Add extensive delivery of emoji reactions
This commit is contained in:
parent
55889974a3
commit
6e86e744d2
5 changed files with 24 additions and 6 deletions
|
@ -44,7 +44,10 @@ class ActivityPub::Activity::Like < ActivityPub::Activity
|
||||||
EmojiReaction.find_by(account: @account, status: @original_status)&.destroy!
|
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'])
|
reaction = @original_status.emoji_reactions.create!(account: @account, name: shortcode, custom_emoji: emoji, uri: @json['id'])
|
||||||
|
|
||||||
NotifyService.new.call(@original_status.account, :emoji_reaction, reaction) if @original_status.account.local?
|
if @original_status.account.local?
|
||||||
|
NotifyService.new.call(@original_status.account, :emoji_reaction, reaction)
|
||||||
|
ActivityPub::RawDistributionWorker.perform_async(Oj.dump(@json), @original_status.account.id, [@account.preferred_inbox_url])
|
||||||
|
end
|
||||||
rescue Seahorse::Client::NetworkingError
|
rescue Seahorse::Client::NetworkingError
|
||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
|
|
|
@ -110,7 +110,7 @@ class ActivityPub::Activity::Undo < ActivityPub::Activity
|
||||||
def undo_like
|
def undo_like
|
||||||
status = status_from_uri(target_uri)
|
status = status_from_uri(target_uri)
|
||||||
|
|
||||||
return if status.nil? || !status.account.local?
|
return if status.nil?
|
||||||
|
|
||||||
if shortcode.present?
|
if shortcode.present?
|
||||||
emoji_tag = @object['tag'].is_a?(Array) ? @object['tag']&.first : @object['tag']
|
emoji_tag = @object['tag'].is_a?(Array) ? @object['tag']&.first : @object['tag']
|
||||||
|
@ -121,6 +121,10 @@ class ActivityPub::Activity::Undo < ActivityPub::Activity
|
||||||
|
|
||||||
if @account.reacted?(status, shortcode, emoji)
|
if @account.reacted?(status, shortcode, emoji)
|
||||||
status.emoji_reactions.where(account: @account, name: shortcode, custom_emoji: emoji).first&.destroy
|
status.emoji_reactions.where(account: @account, name: shortcode, custom_emoji: emoji).first&.destroy
|
||||||
|
|
||||||
|
if status.account.local?
|
||||||
|
ActivityPub::RawDistributionWorker.perform_async(Oj.dump(@json), status.account.id, [@account.preferred_inbox_url])
|
||||||
|
end
|
||||||
else
|
else
|
||||||
delete_later!(object_uri)
|
delete_later!(object_uri)
|
||||||
end
|
end
|
||||||
|
|
|
@ -33,6 +33,10 @@ class EmojiReaction < ApplicationRecord
|
||||||
self.status = status.reblog if status&.reblog?
|
self.status = status.reblog if status&.reblog?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def sign?
|
||||||
|
true
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def queue_publish
|
def queue_publish
|
||||||
|
|
|
@ -5,6 +5,8 @@ class EmojiReactionService < BaseService
|
||||||
include Payloadable
|
include Payloadable
|
||||||
|
|
||||||
def call(account, status, emoji)
|
def call(account, status, emoji)
|
||||||
|
@account = account
|
||||||
|
|
||||||
emoji_reaction = EmojiReaction.find_by(account_id: account.id, status_id: status.id)
|
emoji_reaction = EmojiReaction.find_by(account_id: account.id, status_id: status.id)
|
||||||
|
|
||||||
return emoji_reaction unless emoji_reaction.nil?
|
return emoji_reaction unless emoji_reaction.nil?
|
||||||
|
@ -27,7 +29,8 @@ class EmojiReactionService < BaseService
|
||||||
status = emoji_reaction.status
|
status = emoji_reaction.status
|
||||||
|
|
||||||
if status.account.local?
|
if status.account.local?
|
||||||
NotifyService.new.call(status.account, :emoji_reaction, emoji_reaction)
|
NotifyService.new.call(status.account, :emoji_reaction, emoji_reaction) if status.account.local?
|
||||||
|
ActivityPub::RawDistributionWorker.perform_async(build_json(emoji_reaction), status.account.id, [@account.preferred_inbox_url])
|
||||||
elsif status.account.activitypub?
|
elsif status.account.activitypub?
|
||||||
ActivityPub::DeliveryWorker.perform_async(build_json(emoji_reaction), emoji_reaction.account_id, status.account.inbox_url)
|
ActivityPub::DeliveryWorker.perform_async(build_json(emoji_reaction), emoji_reaction.account_id, status.account.inbox_url)
|
||||||
end
|
end
|
||||||
|
@ -40,6 +43,6 @@ class EmojiReactionService < BaseService
|
||||||
end
|
end
|
||||||
|
|
||||||
def build_json(emoji_reaction)
|
def build_json(emoji_reaction)
|
||||||
Oj.dump(serialize_payload(emoji_reaction, ActivityPub::EmojiReactionSerializer))
|
Oj.dump(serialize_payload(emoji_reaction, ActivityPub::EmojiReactionSerializer, signer: @account))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,6 +4,8 @@ class UnEmojiReactionService < BaseService
|
||||||
include Payloadable
|
include Payloadable
|
||||||
|
|
||||||
def call(account, status)
|
def call(account, status)
|
||||||
|
@account = account
|
||||||
|
|
||||||
emoji_reaction = EmojiReaction.find_by!(account: account, status: status)
|
emoji_reaction = EmojiReaction.find_by!(account: account, status: status)
|
||||||
|
|
||||||
emoji_reaction.destroy!
|
emoji_reaction.destroy!
|
||||||
|
@ -16,12 +18,14 @@ class UnEmojiReactionService < BaseService
|
||||||
def create_notification(emoji_reaction)
|
def create_notification(emoji_reaction)
|
||||||
status = emoji_reaction.status
|
status = emoji_reaction.status
|
||||||
|
|
||||||
if !status.account.local? && status.account.activitypub?
|
if status.account.local?
|
||||||
|
ActivityPub::RawDistributionWorker.perform_async(build_json(emoji_reaction), status.account.id, [@account.preferred_inbox_url])
|
||||||
|
elsif status.account.activitypub?
|
||||||
ActivityPub::DeliveryWorker.perform_async(build_json(emoji_reaction), emoji_reaction.account_id, status.account.inbox_url)
|
ActivityPub::DeliveryWorker.perform_async(build_json(emoji_reaction), emoji_reaction.account_id, status.account.inbox_url)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def build_json(emoji_reaction)
|
def build_json(emoji_reaction)
|
||||||
Oj.dump(serialize_payload(emoji_reaction, ActivityPub::UndoEmojiReactionSerializer))
|
Oj.dump(serialize_payload(emoji_reaction, ActivityPub::UndoEmojiReactionSerializer, signer: @account))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue