diff options
Diffstat (limited to 'modules')
-rw-r--r-- | modules/notification/mail/mail.go | 12 | ||||
-rw-r--r-- | modules/notification/ui/ui.go | 40 |
2 files changed, 47 insertions, 5 deletions
diff --git a/modules/notification/mail/mail.go b/modules/notification/mail/mail.go index 0927e182c1..5bfb0b3ef8 100644 --- a/modules/notification/mail/mail.go +++ b/modules/notification/mail/mail.go @@ -73,6 +73,18 @@ func (m *mailNotifier) NotifyIssueChangeStatus(doer *models.User, issue *models. } } +func (m *mailNotifier) NotifyIssueChangeTitle(doer *models.User, issue *models.Issue, oldTitle string) { + if err := issue.LoadPullRequest(); err != nil { + log.Error("issue.LoadPullRequest: %v", err) + return + } + if issue.IsPull && models.HasWorkInProgressPrefix(oldTitle) && !issue.PullRequest.IsWorkInProgress() { + if err := mailer.MailParticipants(issue, doer, models.ActionPullRequestReadyForReview, nil); err != nil { + log.Error("MailParticipants: %v", err) + } + } +} + func (m *mailNotifier) NotifyNewPullRequest(pr *models.PullRequest, mentions []*models.User) { if err := mailer.MailParticipants(pr.Issue, pr.Issue.Poster, models.ActionCreatePullRequest, mentions); err != nil { log.Error("MailParticipants: %v", err) diff --git a/modules/notification/ui/ui.go b/modules/notification/ui/ui.go index b1374f5608..f372d6759c 100644 --- a/modules/notification/ui/ui.go +++ b/modules/notification/ui/ui.go @@ -94,6 +94,19 @@ func (ns *notificationService) NotifyIssueChangeStatus(doer *models.User, issue }) } +func (ns *notificationService) NotifyIssueChangeTitle(doer *models.User, issue *models.Issue, oldTitle string) { + if err := issue.LoadPullRequest(); err != nil { + log.Error("issue.LoadPullRequest: %v", err) + return + } + if issue.IsPull && models.HasWorkInProgressPrefix(oldTitle) && !issue.PullRequest.IsWorkInProgress() { + _ = ns.issueQueue.Push(issueNotificationOpts{ + IssueID: issue.ID, + NotificationAuthorID: doer.ID, + }) + } +} + func (ns *notificationService) NotifyMergePullRequest(pr *models.PullRequest, doer *models.User) { _ = ns.issueQueue.Push(issueNotificationOpts{ IssueID: pr.Issue.ID, @@ -106,15 +119,32 @@ func (ns *notificationService) NotifyNewPullRequest(pr *models.PullRequest, ment log.Error("Unable to load issue: %d for pr: %d: Error: %v", pr.IssueID, pr.ID, err) return } - _ = ns.issueQueue.Push(issueNotificationOpts{ - IssueID: pr.Issue.ID, - NotificationAuthorID: pr.Issue.PosterID, - }) + toNotify := make(map[int64]struct{}, 32) + repoWatchers, err := models.GetRepoWatchersIDs(pr.Issue.RepoID) + if err != nil { + log.Error("GetRepoWatchersIDs: %v", err) + return + } + for _, id := range repoWatchers { + toNotify[id] = struct{}{} + } + issueParticipants, err := models.GetParticipantsIDsByIssueID(pr.IssueID) + if err != nil { + log.Error("GetParticipantsIDsByIssueID: %v", err) + return + } + for _, id := range issueParticipants { + toNotify[id] = struct{}{} + } + delete(toNotify, pr.Issue.PosterID) for _, mention := range mentions { + toNotify[mention.ID] = struct{}{} + } + for receiverID := range toNotify { _ = ns.issueQueue.Push(issueNotificationOpts{ IssueID: pr.Issue.ID, NotificationAuthorID: pr.Issue.PosterID, - ReceiverID: mention.ID, + ReceiverID: receiverID, }) } } |