From 42995cacc056869781aece180c2e363d425d6a3a Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sun, 5 Jun 2016 05:06:12 +0200 Subject: [PATCH] deliver retractions to services --- lib/diaspora/federated/retraction.rb | 4 ++++ lib/diaspora/federation/dispatcher.rb | 25 +++++++++++-------------- 2 files changed, 15 insertions(+), 14 deletions(-) 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