1
0
Fork 0
forked from gitea/nas

Wip: スタンプの転送 (#81)

* Fix: 自分で自分に絵文字リアクションをつけた時、他サーバーに転送されない問題

* 修正

* 修正
This commit is contained in:
KMY(雪あすか) 2023-10-11 12:03:20 +09:00 committed by GitHub
parent 1630529358
commit 674cce1c9e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 54 additions and 2 deletions

View file

@ -14,6 +14,7 @@ class EmojiReactService < BaseService
def call(account, status, name)
status = status.reblog if status.reblog? && !status.reblog.nil?
authorize_with account, status, :emoji_reaction?
@status = status
emoji_reaction = nil
@ -36,6 +37,9 @@ class EmojiReactService < BaseService
notify_to_followers(emoji_reaction)
bump_potential_friendship(account, status)
write_stream(emoji_reaction)
forward_for_emoji_reaction!(emoji_reaction)
relay_for_emoji_reaction!(emoji_reaction)
relay_friend_for_emoji_reaction!(emoji_reaction)
emoji_reaction
end
@ -79,11 +83,33 @@ class EmojiReactService < BaseService
end
def build_json(emoji_reaction)
Oj.dump(serialize_payload(emoji_reaction, ActivityPub::EmojiReactionSerializer, signer: emoji_reaction.account))
@build_json = Oj.dump(serialize_payload(emoji_reaction, ActivityPub::EmojiReactionSerializer, signer: emoji_reaction.account))
end
def render_emoji_reaction(emoji_group)
# @rendered_emoji_reaction ||= InlineRenderer.render(HashObject.new(emoji_group), nil, :emoji_reaction)
@render_emoji_reaction ||= Oj.dump(event: :emoji_reaction, payload: emoji_group.to_json)
end
def forward_for_emoji_reaction!(emoji_reaction)
return unless @status.local?
ActivityPub::RawDistributionWorker.perform_async(build_json(emoji_reaction), @status.account.id, [@status.account.preferred_inbox_url])
end
def relay_for_emoji_reaction!(emoji_reaction)
return unless @status.local? && @status.public_visibility?
ActivityPub::DeliveryWorker.push_bulk(Relay.enabled.pluck(:inbox_url)) do |inbox_url|
[build_json(emoji_reaction), @status.account.id, inbox_url]
end
end
def relay_friend_for_emoji_reaction!(emoji_reaction)
return unless @status.local? && @status.distributable_friend?
ActivityPub::DeliveryWorker.push_bulk(FriendDomain.distributables.pluck(:inbox_url)) do |inbox_url|
[build_json(emoji_reaction), @status.account.id, inbox_url]
end
end
end

View file

@ -15,6 +15,10 @@ class UnEmojiReactService < BaseService
create_notification(emoji_reaction) if !@status.account.local? && @status.account.activitypub?
notify_to_followers(emoji_reaction) if @status.account.local?
write_stream(emoji_reaction)
forward_for_undo_emoji_reaction!(emoji_reaction)
relay_for_undo_emoji_reaction!(emoji_reaction)
relay_friend_for_undo_emoji_reaction!(emoji_reaction)
else
account = Account.find(account_id)
bulk(account, @status)
@ -52,11 +56,33 @@ class UnEmojiReactService < BaseService
end
def build_json(emoji_reaction)
Oj.dump(serialize_payload(emoji_reaction, ActivityPub::UndoEmojiReactionSerializer, signer: emoji_reaction.account))
@build_json = Oj.dump(serialize_payload(emoji_reaction, ActivityPub::UndoEmojiReactionSerializer, signer: emoji_reaction.account))
end
def render_emoji_reaction(emoji_group)
# @rendered_emoji_reaction ||= InlineRenderer.render(emoji_group, nil, :emoji_reaction)
Oj.dump(event: :emoji_reaction, payload: emoji_group.to_json)
end
def forward_for_undo_emoji_reaction!(emoji_reaction)
return unless @status.local?
ActivityPub::RawDistributionWorker.perform_async(build_json(emoji_reaction), @status.account.id, [@status.account.preferred_inbox_url])
end
def relay_for_undo_emoji_reaction!(emoji_reaction)
return unless @status.local? && @status.public_visibility?
ActivityPub::DeliveryWorker.push_bulk(Relay.enabled.pluck(:inbox_url)) do |inbox_url|
[build_json(emoji_reaction), @status.account.id, inbox_url]
end
end
def relay_friend_for_undo_emoji_reaction!(emoji_reaction)
return unless @status.local? && @status.distributable_friend?
ActivityPub::DeliveryWorker.push_bulk(FriendDomain.distributables.pluck(:inbox_url)) do |inbox_url|
[build_json(emoji_reaction), @status.account.id, inbox_url]
end
end
end