0
0
Fork 0

Fix too many forwards (#5854)

* Avoid sending explicit Undo->Announce when original deleted

* Do not forward a reply back to the server that sent it

* Deduplicate inboxes of rebloggers' followers for delete forwarding

* Adjust test

* Fix wrong class, bad SQL, wrong variable, outdated comment
This commit is contained in:
Eugen Rochko 2017-11-30 03:50:05 +01:00 committed by GitHub
parent dc1ebd45a3
commit 85e97ecab6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 27 additions and 15 deletions

View file

@ -3,7 +3,7 @@
class RemoveStatusService < BaseService
include StreamEntryRenderer
def call(status)
def call(status, options = {})
@payload = Oj.dump(event: :delete, payload: status.id.to_s)
@status = status
@account = status.account
@ -11,6 +11,7 @@ class RemoveStatusService < BaseService
@mentions = status.mentions.includes(:account).to_a
@reblogs = status.reblogs.to_a
@stream_entry = status.stream_entry
@options = options
remove_from_self if status.account.local?
remove_from_followers
@ -22,7 +23,12 @@ class RemoveStatusService < BaseService
@status.destroy!
return unless @account.local?
# There is no reason to send out Undo activities when the
# cause is that the original object has been removed, since
# original object being removed implicitly removes reblogs
# of it. The Delete activity of the original is forwarded
# separately.
return if !@account.local? || @options[:original_removed]
remove_from_remote_followers
remove_from_remote_affected
@ -104,7 +110,7 @@ class RemoveStatusService < BaseService
# without us being able to do all the fancy stuff
@reblogs.each do |reblog|
RemoveStatusService.new.call(reblog)
RemoveStatusService.new.call(reblog, original_removed: true)
end
end