From 499a8a1cdd815cc25554371598140f5fb01e216f Mon Sep 17 00:00:00 2001 From: silverwind Date: Tue, 11 Jun 2019 21:27:38 +0200 Subject: [PATCH] Various fixes for issue mail notifications (#7165) - Send individual mails for actions and comments - Send mail for new issues/prs without a comment - Use correct sender for reopen/close actions - Hopefully fixed all bugs related to missing mails Fixes: https://github.com/go-gitea/gitea/issues/7124 Fixes: https://github.com/go-gitea/gitea/issues/5977 --- models/issue_comment.go | 19 +++++++++++----- models/issue_mail.go | 37 ++++++++++++++++++++++--------- modules/notification/mail/mail.go | 6 ++--- 3 files changed, 42 insertions(+), 20 deletions(-) diff --git a/models/issue_comment.go b/models/issue_comment.go index 60fb5b0420..0d2e917f85 100644 --- a/models/issue_comment.go +++ b/models/issue_comment.go @@ -403,16 +403,23 @@ func (c *Comment) mailParticipants(e Engine, opType ActionType, issue *Issue) (e return fmt.Errorf("UpdateIssueMentions [%d]: %v", c.IssueID, err) } - content := c.Content + if len(c.Content) > 0 { + if err = mailIssueCommentToParticipants(e, issue, c.Poster, c.Content, c, mentions); err != nil { + log.Error("mailIssueCommentToParticipants: %v", err) + } + } switch opType { case ActionCloseIssue: - content = fmt.Sprintf("Closed #%d", issue.Index) + ct := fmt.Sprintf("Closed #%d.", issue.Index) + if err = mailIssueCommentToParticipants(e, issue, c.Poster, ct, c, mentions); err != nil { + log.Error("mailIssueCommentToParticipants: %v", err) + } case ActionReopenIssue: - content = fmt.Sprintf("Reopened #%d", issue.Index) - } - if err = mailIssueCommentToParticipants(e, issue, c.Poster, content, c, mentions); err != nil { - log.Error("mailIssueCommentToParticipants: %v", err) + ct := fmt.Sprintf("Reopened #%d.", issue.Index) + if err = mailIssueCommentToParticipants(e, issue, c.Poster, ct, c, mentions); err != nil { + log.Error("mailIssueCommentToParticipants: %v", err) + } } return nil diff --git a/models/issue_mail.go b/models/issue_mail.go index 16f85ba378..01a12b16d2 100644 --- a/models/issue_mail.go +++ b/models/issue_mail.go @@ -118,26 +118,41 @@ func mailIssueCommentToParticipants(e Engine, issue *Issue, doer *User, content // MailParticipants sends new issue thread created emails to repository watchers // and mentioned people. -func (issue *Issue) MailParticipants(opType ActionType) (err error) { - return issue.mailParticipants(x, opType) +func (issue *Issue) MailParticipants(doer *User, opType ActionType) (err error) { + return issue.mailParticipants(x, doer, opType) } -func (issue *Issue) mailParticipants(e Engine, opType ActionType) (err error) { +func (issue *Issue) mailParticipants(e Engine, doer *User, opType ActionType) (err error) { mentions := markup.FindAllMentions(issue.Content) + if err = UpdateIssueMentions(e, issue.ID, mentions); err != nil { return fmt.Errorf("UpdateIssueMentions [%d]: %v", issue.ID, err) } - var content = issue.Content - switch opType { - case ActionCloseIssue, ActionClosePullRequest: - content = fmt.Sprintf("Closed #%d", issue.Index) - case ActionReopenIssue, ActionReopenPullRequest: - content = fmt.Sprintf("Reopened #%d", issue.Index) + if len(issue.Content) > 0 { + if err = mailIssueCommentToParticipants(e, issue, doer, issue.Content, nil, mentions); err != nil { + log.Error("mailIssueCommentToParticipants: %v", err) + } } - if err = mailIssueCommentToParticipants(e, issue, issue.Poster, content, nil, mentions); err != nil { - log.Error("mailIssueCommentToParticipants: %v", err) + switch opType { + case ActionCreateIssue, ActionCreatePullRequest: + if len(issue.Content) == 0 { + ct := fmt.Sprintf("Created #%d.", issue.Index) + if err = mailIssueCommentToParticipants(e, issue, doer, ct, nil, mentions); err != nil { + log.Error("mailIssueCommentToParticipants: %v", err) + } + } + case ActionCloseIssue, ActionClosePullRequest: + ct := fmt.Sprintf("Closed #%d.", issue.Index) + if err = mailIssueCommentToParticipants(e, issue, doer, ct, nil, mentions); err != nil { + log.Error("mailIssueCommentToParticipants: %v", err) + } + case ActionReopenIssue, ActionReopenPullRequest: + ct := fmt.Sprintf("Reopened #%d.", issue.Index) + if err = mailIssueCommentToParticipants(e, issue, doer, ct, nil, mentions); err != nil { + log.Error("mailIssueCommentToParticipants: %v", err) + } } return nil diff --git a/modules/notification/mail/mail.go b/modules/notification/mail/mail.go index 9689f4d4ab..9d0db4f415 100644 --- a/modules/notification/mail/mail.go +++ b/modules/notification/mail/mail.go @@ -42,7 +42,7 @@ func (m *mailNotifier) NotifyCreateIssueComment(doer *models.User, repo *models. } func (m *mailNotifier) NotifyNewIssue(issue *models.Issue) { - if err := issue.MailParticipants(models.ActionCreateIssue); err != nil { + if err := issue.MailParticipants(issue.Poster, models.ActionCreateIssue); err != nil { log.Error("MailParticipants: %v", err) } } @@ -63,13 +63,13 @@ func (m *mailNotifier) NotifyIssueChangeStatus(doer *models.User, issue *models. } } - if err := issue.MailParticipants(actionType); err != nil { + if err := issue.MailParticipants(doer, actionType); err != nil { log.Error("MailParticipants: %v", err) } } func (m *mailNotifier) NotifyNewPullRequest(pr *models.PullRequest) { - if err := pr.Issue.MailParticipants(models.ActionCreatePullRequest); err != nil { + if err := pr.Issue.MailParticipants(pr.Issue.Poster, models.ActionCreatePullRequest); err != nil { log.Error("MailParticipants: %v", err) } }