2019-01-13 17:42:55 +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 mail
import (
2019-10-25 17:46:37 +03:00
"fmt"
2019-01-13 17:42:55 +03:00
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/notification/base"
2019-09-24 08:02:49 +03:00
"code.gitea.io/gitea/services/mailer"
2019-01-13 17:42:55 +03:00
)
type mailNotifier struct {
base . NullNotifier
}
var (
_ base . Notifier = & mailNotifier { }
)
// NewNotifier create a new mailNotifier notifier
func NewNotifier ( ) base . Notifier {
return & mailNotifier { }
}
func ( m * mailNotifier ) NotifyCreateIssueComment ( doer * models . User , repo * models . Repository ,
issue * models . Issue , comment * models . Comment ) {
var act models . ActionType
if comment . Type == models . CommentTypeClose {
act = models . ActionCloseIssue
} else if comment . Type == models . CommentTypeReopen {
act = models . ActionReopenIssue
} else if comment . Type == models . CommentTypeComment {
act = models . ActionCommentIssue
} else if comment . Type == models . CommentTypeCode {
act = models . ActionCommentIssue
}
2019-09-24 08:02:49 +03:00
if err := mailer . MailParticipantsComment ( comment , act , issue ) ; err != nil {
2019-11-15 15:59:21 +03:00
log . Error ( "MailParticipantsComment: %v" , err )
2019-01-13 17:42:55 +03:00
}
}
func ( m * mailNotifier ) NotifyNewIssue ( issue * models . Issue ) {
2019-09-24 08:02:49 +03:00
if err := mailer . MailParticipants ( issue , issue . Poster , models . ActionCreateIssue ) ; err != nil {
2019-04-02 10:48:31 +03:00
log . Error ( "MailParticipants: %v" , err )
2019-01-13 17:42:55 +03:00
}
}
2019-12-16 00:57:34 +03:00
func ( m * mailNotifier ) NotifyIssueChangeStatus ( doer * models . User , issue * models . Issue , actionComment * models . Comment , isClosed bool ) {
2019-04-12 00:59:01 +03:00
var actionType models . ActionType
2020-01-03 20:13:22 +03:00
issue . Content = ""
2019-04-12 00:59:01 +03:00
if issue . IsPull {
if isClosed {
actionType = models . ActionClosePullRequest
} else {
actionType = models . ActionReopenPullRequest
}
} else {
if isClosed {
actionType = models . ActionCloseIssue
} else {
actionType = models . ActionReopenIssue
}
}
2019-09-24 08:02:49 +03:00
if err := mailer . MailParticipants ( issue , doer , actionType ) ; err != nil {
2019-04-02 10:48:31 +03:00
log . Error ( "MailParticipants: %v" , err )
2019-01-13 17:42:55 +03:00
}
}
func ( m * mailNotifier ) NotifyNewPullRequest ( pr * models . PullRequest ) {
2019-09-24 08:02:49 +03:00
if err := mailer . MailParticipants ( pr . Issue , pr . Issue . Poster , models . ActionCreatePullRequest ) ; err != nil {
2019-04-02 10:48:31 +03:00
log . Error ( "MailParticipants: %v" , err )
2019-01-13 17:42:55 +03:00
}
}
func ( m * mailNotifier ) NotifyPullRequestReview ( pr * models . PullRequest , r * models . Review , comment * models . Comment ) {
var act models . ActionType
if comment . Type == models . CommentTypeClose {
act = models . ActionCloseIssue
} else if comment . Type == models . CommentTypeReopen {
act = models . ActionReopenIssue
} else if comment . Type == models . CommentTypeComment {
2019-12-22 11:29:26 +03:00
act = models . ActionCommentPull
2019-01-13 17:42:55 +03:00
}
2019-09-24 08:02:49 +03:00
if err := mailer . MailParticipantsComment ( comment , act , pr . Issue ) ; err != nil {
2019-11-15 15:59:21 +03:00
log . Error ( "MailParticipantsComment: %v" , err )
2019-01-13 17:42:55 +03:00
}
}
2019-10-25 17:46:37 +03:00
func ( m * mailNotifier ) NotifyIssueChangeAssignee ( doer * models . User , issue * models . Issue , assignee * models . User , removed bool , comment * models . Comment ) {
// mail only sent to added assignees and not self-assignee
if ! removed && doer . ID != assignee . ID && assignee . EmailNotifications ( ) == models . EmailNotificationsEnabled {
ct := fmt . Sprintf ( "Assigned #%d." , issue . Index )
mailer . SendIssueAssignedMail ( issue , doer , ct , comment , [ ] string { assignee . Email } )
}
}
2019-11-21 20:08:42 +03:00
2020-04-30 23:24:08 +03:00
func ( m * mailNotifier ) NotifyPullReviewRequest ( doer * models . User , issue * models . Issue , reviewer * models . User , isRequest bool , comment * models . Comment ) {
2020-04-06 19:33:34 +03:00
if isRequest && doer . ID != reviewer . ID && reviewer . EmailNotifications ( ) == models . EmailNotificationsEnabled {
ct := fmt . Sprintf ( "Requested to review #%d." , issue . Index )
mailer . SendIssueAssignedMail ( issue , doer , ct , comment , [ ] string { reviewer . Email } )
}
}
2020-01-16 19:24:20 +03:00
func ( m * mailNotifier ) NotifyMergePullRequest ( pr * models . PullRequest , doer * models . User ) {
2019-11-21 20:08:42 +03:00
if err := pr . LoadIssue ( ) ; err != nil {
log . Error ( "pr.LoadIssue: %v" , err )
return
}
2020-01-03 20:13:22 +03:00
pr . Issue . Content = ""
2019-12-21 01:31:05 +03:00
if err := mailer . MailParticipants ( pr . Issue , doer , models . ActionMergePullRequest ) ; err != nil {
2019-11-21 20:08:42 +03:00
log . Error ( "MailParticipants: %v" , err )
}
}