Commit 403b7271 authored by Douwe Maan's avatar Douwe Maan

Slightly refactor getting note notification recipients.

parent d2bd6067
...@@ -53,7 +53,7 @@ module Mentionable ...@@ -53,7 +53,7 @@ module Mentionable
# Extract GFM references to other Mentionables from this Mentionable. Always excludes its #local_reference. # Extract GFM references to other Mentionables from this Mentionable. Always excludes its #local_reference.
def references(p = project, text = mentionable_text) def references(p = project, text = mentionable_text)
return [] if text.blank? return [] if text.blank?
ext = Gitlab::ReferenceExtractor.new(p) ext = Gitlab::ReferenceExtractor.new(p)
ext.analyze(text) ext.analyze(text)
......
...@@ -123,32 +123,29 @@ class NotificationService ...@@ -123,32 +123,29 @@ class NotificationService
return true if note.note.start_with?('Status changed to closed') return true if note.note.start_with?('Status changed to closed')
return true if note.cross_reference? && note.system == true return true if note.cross_reference? && note.system == true
opts = { noteable_type: note.noteable_type, project_id: note.project_id }
target = note.noteable target = note.noteable
if target.respond_to?(:participants) recipients = []
recipients = target.participants
else
recipients = note.mentioned_users
end
if note.commit_id.present? if note.commit_id.present?
opts.merge!(commit_id: note.commit_id)
recipients << note.commit_author recipients << note.commit_author
else
opts.merge!(noteable_id: note.noteable_id)
end end
# Get users who left comment in thread # Get users who left comment in thread
recipients = recipients.concat(User.where(id: Note.where(opts).pluck(:author_id))) recipients = recipients.concat(noteable_commenters(note))
# Merge project watchers # Merge project watchers
recipients = recipients.concat(project_watchers(note.project)).compact.uniq recipients = recipients.concat(project_watchers(note.project)).compact.uniq
# Reject mention users unless mentioned in comment # Reject users with Mention notification level
recipients = reject_mention_users(recipients - note.mentioned_users, note.project) recipients = reject_mention_users(recipients, note.project)
recipients = recipients + note.mentioned_users
# Add explicitly mentioned users
if target.respond_to?(:participants)
recipients = recipients.concat(target.participants)
else
recipients = recipients.concat(note.mentioned_users)
end
# Reject mutes users # Reject mutes users
recipients = reject_muted_users(recipients, note.project) recipients = reject_muted_users(recipients, note.project)
...@@ -195,6 +192,18 @@ class NotificationService ...@@ -195,6 +192,18 @@ class NotificationService
protected 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 # Get project users with WATCH notification level
def project_watchers(project) def project_watchers(project)
project_members = project_member_notification(project) project_members = project_member_notification(project)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment