diff options
-rw-r--r-- | app/services/notification_service.rb | 37 |
1 files changed, 13 insertions, 24 deletions
diff --git a/app/services/notification_service.rb b/app/services/notification_service.rb index 203e654c18f..ab5a653d5c0 100644 --- a/app/services/notification_service.rb +++ b/app/services/notification_service.rb @@ -130,22 +130,23 @@ class NotificationService if note.commit_id.present? recipients << note.commit_author end - - # Get users who left comment in thread - recipients = recipients.concat(noteable_commenters(note)) + + # Add all users participating in the thread (author, assignee, comment authors) + participants = + if target.is_a?(Commit) + author_ids = Note.for_commit_id(target.id).pluck(:author_id).uniq + User.where(id: author_ids) + else + target.participants + end + recipients = recipients.concat(participants) # Merge project watchers recipients = recipients.concat(project_watchers(note.project)).compact.uniq - # Reject users with Mention notification level - recipients = reject_mention_users(recipients, note.project) - - # Add explicitly mentioned users - if target.respond_to?(:participants) - recipients = recipients.concat(target.participants) - else - recipients = recipients.concat(note.mentioned_users) - end + # Reject users with Mention notification level, except those mentioned in _this_ note. + recipients = reject_mention_users(recipients - note.mentioned_users, note.project) + recipients = recipients + note.mentioned_users # Reject mutes users recipients = reject_muted_users(recipients, note.project) @@ -216,18 +217,6 @@ class NotificationService protected - def noteable_commenters(note) - opts = { noteable_type: note.noteable_type, project_id: note.project_id } - - if note.commit_id.present? - opts.merge!(commit_id: note.commit_id) - else - opts.merge!(noteable_id: note.noteable_id) - end - - User.where(id: Note.where(opts).pluck(:author_id)) - end - # Get project users with WATCH notification level def project_watchers(project) project_members = project_member_notification(project) |