2019-09-24 08:02:49 +03:00
// Copyright 2019 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package mailer
import (
"fmt"
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/log"
2019-10-14 01:29:10 +03:00
"code.gitea.io/gitea/modules/references"
2019-09-24 08:02:49 +03:00
)
// MailParticipantsComment sends new comment emails to repository watchers
// and mentioned people.
func MailParticipantsComment ( c * models . Comment , opType models . ActionType , issue * models . Issue ) error {
return mailParticipantsComment ( models . DefaultDBContext ( ) , c , opType , issue )
}
func mailParticipantsComment ( ctx models . DBContext , c * models . Comment , opType models . ActionType , issue * models . Issue ) ( err error ) {
2019-10-14 01:29:10 +03:00
rawMentions := references . FindAllMentionsMarkdown ( c . Content )
2019-10-10 19:45:11 +03:00
userMentions , err := issue . ResolveMentionsByVisibility ( ctx , c . Poster , rawMentions )
if err != nil {
return fmt . Errorf ( "ResolveMentionsByVisibility [%d]: %v" , c . IssueID , err )
}
if err = models . UpdateIssueMentions ( ctx , c . IssueID , userMentions ) ; err != nil {
2019-09-24 08:02:49 +03:00
return fmt . Errorf ( "UpdateIssueMentions [%d]: %v" , c . IssueID , err )
}
2019-10-10 19:45:11 +03:00
mentions := make ( [ ] string , len ( userMentions ) )
for i , u := range userMentions {
mentions [ i ] = u . LowerName
}
2019-09-24 08:02:49 +03:00
if len ( c . Content ) > 0 {
if err = mailIssueCommentToParticipants ( issue , c . Poster , c . Content , c , mentions ) ; err != nil {
log . Error ( "mailIssueCommentToParticipants: %v" , err )
}
}
switch opType {
case models . ActionCloseIssue :
ct := fmt . Sprintf ( "Closed #%d." , issue . Index )
if err = mailIssueCommentToParticipants ( issue , c . Poster , ct , c , mentions ) ; err != nil {
log . Error ( "mailIssueCommentToParticipants: %v" , err )
}
case models . ActionReopenIssue :
ct := fmt . Sprintf ( "Reopened #%d." , issue . Index )
if err = mailIssueCommentToParticipants ( issue , c . Poster , ct , c , mentions ) ; err != nil {
log . Error ( "mailIssueCommentToParticipants: %v" , err )
}
}
return nil
}