From ae96b4bf559de9b5c6e94c006fab80938f0f4b27 Mon Sep 17 00:00:00 2001
From: Benjamin Neff <benjamin@coding4coffee.ch>
Date: Thu, 12 May 2016 05:01:04 +0200
Subject: [PATCH] refactor message notifications

all visibilities are already in the conversation, so we can send
all notifications at once.
---
 app/models/notifications/private_message.rb | 19 +++++++++----------
 lib/diaspora/federation/receive.rb          |  2 +-
 2 files changed, 10 insertions(+), 11 deletions(-)

diff --git a/app/models/notifications/private_message.rb b/app/models/notifications/private_message.rb
index b97c40183b..9c9d02eb78 100644
--- a/app/models/notifications/private_message.rb
+++ b/app/models/notifications/private_message.rb
@@ -8,22 +8,21 @@ module Notifications
       "notifications.private_message"
     end
 
-    def self.notify(object, recipient_user_ids)
+    def self.notify(object, _recipient_user_ids)
       case object
       when Conversation
-        object.messages.each do |message|
-          recipient_ids = recipient_user_ids - [message.author.owner_id]
-          User.where(id: recipient_ids).find_each {|recipient| notify_message(message, recipient) }
-        end
+        object.messages.each {|message| notify_message(message) }
       when Message
-        recipients = object.conversation.participants.select(&:local?) - [object.author]
-        recipients.each {|recipient| notify_message(object, recipient.owner) }
+        notify_message(object)
       end
     end
 
-    def self.notify_message(message, recipient)
-      message.increase_unread(recipient)
-      new(recipient: recipient).email_the_user(message, message.author)
+    def self.notify_message(message)
+      recipient_ids = message.conversation.participants.local.where.not(id: message.author_id).pluck(:owner_id)
+      User.where(id: recipient_ids).find_each do |recipient|
+        message.increase_unread(recipient)
+        new(recipient: recipient).email_the_user(message, message.author)
+      end
     end
     private_class_method :notify_message
   end
diff --git a/lib/diaspora/federation/receive.rb b/lib/diaspora/federation/receive.rb
index 467fae4567..53916b0ae3 100644
--- a/lib/diaspora/federation/receive.rb
+++ b/lib/diaspora/federation/receive.rb
@@ -37,7 +37,7 @@ module Diaspora
 
       def self.conversation(entity)
         author = author_of(entity)
-        try_load_existing_guid(Conversation, entity.guid, author) do
+        ignore_existing_guid(Conversation, entity.guid, author) do
           Conversation.new(
             author:              author,
             guid:                entity.guid,
-- 
GitLab