diff --git a/lib/diaspora/federated/retraction.rb b/lib/diaspora/federated/retraction.rb index f3e811a27..3eb09efe8 100644 --- a/lib/diaspora/federated/retraction.rb +++ b/lib/diaspora/federated/retraction.rb @@ -43,6 +43,10 @@ class Retraction data[:target][:public] end + def target_type + data[:target_type] + end + private attr_reader :target diff --git a/lib/diaspora/federation/dispatcher.rb b/lib/diaspora/federation/dispatcher.rb index 35d1dcfc5..349280d28 100644 --- a/lib/diaspora/federation/dispatcher.rb +++ b/lib/diaspora/federation/dispatcher.rb @@ -52,25 +52,22 @@ module Diaspora end def deliver_to_user_services - services.each do |service| - case object - when StatusMessage - Workers::PostToService.perform_async(service.id, object.id, opts[:url]) - when Retraction - Workers::DeletePostFromService.perform_async(service.id, object.target.id) - end + if object.is_a?(StatusMessage) && opts[:service_types] + post_to_services + elsif object.is_a?(Retraction) && object.target_type == "Post" + delete_from_services end end - def services - if opts[:services] - opts[:services] - elsif opts[:service_types] - sender.services.where(type: opts[:service_types]) - else - [] + def post_to_services + sender.services.where(type: opts[:service_types]).each do |service| + Workers::PostToService.perform_async(service.id, object.id, opts[:url]) end end + + def delete_from_services + sender.services.each {|service| Workers::DeletePostFromService.perform_async(service.id, object.target.id) } + end end end end