}); err != nil {
log.Error(4, "NotifyWatchers: %v", err)
}
- if err = issue.MailParticipants(); err != nil {
- log.Error(4, "MailParticipants: %v", err)
- }
mode, _ := AccessLevel(issue.Poster, issue.Repo)
if err = PrepareWebhooks(repo, HookEventIssues, &api.IssuePayload{
// MailParticipants sends new comment emails to repository watchers
// and mentioned people.
-func (c *Comment) MailParticipants(e Engine, opType ActionType, issue *Issue) (err error) {
+func (c *Comment) MailParticipants(opType ActionType, issue *Issue) (err error) {
+ return c.mailParticipants(x, opType, issue)
+}
+
+func (c *Comment) mailParticipants(e Engine, opType ActionType, issue *Issue) (err error) {
mentions := markup.FindAllMentions(c.Content)
if err = UpdateIssueMentions(e, c.IssueID, mentions); err != nil {
return fmt.Errorf("UpdateIssueMentions [%d]: %v", c.IssueID, err)
if err = notifyWatchers(e, act); err != nil {
log.Error(4, "notifyWatchers: %v", err)
}
- if err = comment.MailParticipants(e, act.OpType, opts.Issue); err != nil {
- log.Error(4, "MailParticipants: %v", err)
- }
}
return nil
}
IsPrivate: repo.IsPrivate,
}); err != nil {
log.Error(4, "NotifyWatchers: %v", err)
- } else if err = pull.MailParticipants(); err != nil {
- log.Error(4, "MailParticipants: %v", err)
}
pr.Issue = pull
+++ /dev/null
-// Copyright 2018 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 base
-
-import (
- "code.gitea.io/git"
- "code.gitea.io/gitea/models"
-)
-
-// Notifier defines an interface to notify receiver
-type Notifier interface {
- Run()
-
- NotifyCreateRepository(doer *models.User, u *models.User, repo *models.Repository)
- NotifyMigrateRepository(doer *models.User, u *models.User, repo *models.Repository)
- NotifyDeleteRepository(doer *models.User, repo *models.Repository)
- NotifyForkRepository(doer *models.User, oldRepo, repo *models.Repository)
-
- NotifyNewIssue(*models.Issue)
- NotifyIssueChangeStatus(*models.User, *models.Issue, bool)
- NotifyIssueChangeMilestone(doer *models.User, issue *models.Issue)
- NotifyIssueChangeAssignee(doer *models.User, issue *models.Issue, removed bool)
- NotifyIssueChangeContent(doer *models.User, issue *models.Issue, oldContent string)
- NotifyIssueClearLabels(doer *models.User, issue *models.Issue)
- NotifyIssueChangeTitle(doer *models.User, issue *models.Issue, oldTitle string)
- NotifyIssueChangeLabels(doer *models.User, issue *models.Issue,
- addedLabels []*models.Label, removedLabels []*models.Label)
-
- NotifyNewPullRequest(*models.PullRequest)
- NotifyMergePullRequest(*models.PullRequest, *models.User, *git.Repository)
- NotifyPullRequestReview(*models.PullRequest, *models.Review, *models.Comment)
-
- NotifyCreateIssueComment(*models.User, *models.Repository,
- *models.Issue, *models.Comment)
- NotifyUpdateComment(*models.User, *models.Comment, string)
- NotifyDeleteComment(*models.User, *models.Comment)
-
- NotifyNewRelease(rel *models.Release)
- NotifyUpdateRelease(doer *models.User, rel *models.Release)
- NotifyDeleteRelease(doer *models.User, rel *models.Release)
-}
--- /dev/null
+// Copyright 2018 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 base
+
+import (
+ "code.gitea.io/git"
+ "code.gitea.io/gitea/models"
+)
+
+// Notifier defines an interface to notify receiver
+type Notifier interface {
+ Run()
+
+ NotifyCreateRepository(doer *models.User, u *models.User, repo *models.Repository)
+ NotifyMigrateRepository(doer *models.User, u *models.User, repo *models.Repository)
+ NotifyDeleteRepository(doer *models.User, repo *models.Repository)
+ NotifyForkRepository(doer *models.User, oldRepo, repo *models.Repository)
+
+ NotifyNewIssue(*models.Issue)
+ NotifyIssueChangeStatus(*models.User, *models.Issue, bool)
+ NotifyIssueChangeMilestone(doer *models.User, issue *models.Issue)
+ NotifyIssueChangeAssignee(doer *models.User, issue *models.Issue, removed bool)
+ NotifyIssueChangeContent(doer *models.User, issue *models.Issue, oldContent string)
+ NotifyIssueClearLabels(doer *models.User, issue *models.Issue)
+ NotifyIssueChangeTitle(doer *models.User, issue *models.Issue, oldTitle string)
+ NotifyIssueChangeLabels(doer *models.User, issue *models.Issue,
+ addedLabels []*models.Label, removedLabels []*models.Label)
+
+ NotifyNewPullRequest(*models.PullRequest)
+ NotifyMergePullRequest(*models.PullRequest, *models.User, *git.Repository)
+ NotifyPullRequestReview(*models.PullRequest, *models.Review, *models.Comment)
+
+ NotifyCreateIssueComment(*models.User, *models.Repository,
+ *models.Issue, *models.Comment)
+ NotifyUpdateComment(*models.User, *models.Comment, string)
+ NotifyDeleteComment(*models.User, *models.Comment)
+
+ NotifyNewRelease(rel *models.Release)
+ NotifyUpdateRelease(doer *models.User, rel *models.Release)
+ NotifyDeleteRelease(doer *models.User, rel *models.Release)
+}
--- /dev/null
+// 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 base
+
+import (
+ "code.gitea.io/git"
+ "code.gitea.io/gitea/models"
+)
+
+// NullNotifier implements a blank notifier
+type NullNotifier struct {
+}
+
+var (
+ _ Notifier = &NullNotifier{}
+)
+
+// Run places a place holder function
+func (*NullNotifier) Run() {
+}
+
+// NotifyCreateIssueComment places a place holder function
+func (*NullNotifier) NotifyCreateIssueComment(doer *models.User, repo *models.Repository,
+ issue *models.Issue, comment *models.Comment) {
+}
+
+// NotifyNewIssue places a place holder function
+func (*NullNotifier) NotifyNewIssue(issue *models.Issue) {
+}
+
+// NotifyIssueChangeStatus places a place holder function
+func (*NullNotifier) NotifyIssueChangeStatus(doer *models.User, issue *models.Issue, isClosed bool) {
+}
+
+// NotifyNewPullRequest places a place holder function
+func (*NullNotifier) NotifyNewPullRequest(pr *models.PullRequest) {
+}
+
+// NotifyPullRequestReview places a place holder function
+func (*NullNotifier) NotifyPullRequestReview(pr *models.PullRequest, r *models.Review, comment *models.Comment) {
+}
+
+// NotifyMergePullRequest places a place holder function
+func (*NullNotifier) NotifyMergePullRequest(pr *models.PullRequest, doer *models.User, baseRepo *git.Repository) {
+}
+
+// NotifyUpdateComment places a place holder function
+func (*NullNotifier) NotifyUpdateComment(doer *models.User, c *models.Comment, oldContent string) {
+}
+
+// NotifyDeleteComment places a place holder function
+func (*NullNotifier) NotifyDeleteComment(doer *models.User, c *models.Comment) {
+}
+
+// NotifyDeleteRepository places a place holder function
+func (*NullNotifier) NotifyDeleteRepository(doer *models.User, repo *models.Repository) {
+}
+
+// NotifyForkRepository places a place holder function
+func (*NullNotifier) NotifyForkRepository(doer *models.User, oldRepo, repo *models.Repository) {
+}
+
+// NotifyNewRelease places a place holder function
+func (*NullNotifier) NotifyNewRelease(rel *models.Release) {
+}
+
+// NotifyUpdateRelease places a place holder function
+func (*NullNotifier) NotifyUpdateRelease(doer *models.User, rel *models.Release) {
+}
+
+// NotifyDeleteRelease places a place holder function
+func (*NullNotifier) NotifyDeleteRelease(doer *models.User, rel *models.Release) {
+}
+
+// NotifyIssueChangeMilestone places a place holder function
+func (*NullNotifier) NotifyIssueChangeMilestone(doer *models.User, issue *models.Issue) {
+}
+
+// NotifyIssueChangeContent places a place holder function
+func (*NullNotifier) NotifyIssueChangeContent(doer *models.User, issue *models.Issue, oldContent string) {
+}
+
+// NotifyIssueChangeAssignee places a place holder function
+func (*NullNotifier) NotifyIssueChangeAssignee(doer *models.User, issue *models.Issue, removed bool) {
+}
+
+// NotifyIssueClearLabels places a place holder function
+func (*NullNotifier) NotifyIssueClearLabels(doer *models.User, issue *models.Issue) {
+}
+
+// NotifyIssueChangeTitle places a place holder function
+func (*NullNotifier) NotifyIssueChangeTitle(doer *models.User, issue *models.Issue, oldTitle string) {
+}
+
+// NotifyIssueChangeLabels places a place holder function
+func (*NullNotifier) NotifyIssueChangeLabels(doer *models.User, issue *models.Issue,
+ addedLabels []*models.Label, removedLabels []*models.Label) {
+}
+
+// NotifyCreateRepository places a place holder function
+func (*NullNotifier) NotifyCreateRepository(doer *models.User, u *models.User, repo *models.Repository) {
+}
+
+// NotifyMigrateRepository places a place holder function
+func (*NullNotifier) NotifyMigrateRepository(doer *models.User, u *models.User, repo *models.Repository) {
+}
--- /dev/null
+// 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 (
+ "code.gitea.io/gitea/models"
+ "code.gitea.io/gitea/modules/log"
+ "code.gitea.io/gitea/modules/notification/base"
+)
+
+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
+ }
+
+ if err := comment.MailParticipants(act, issue); err != nil {
+ log.Error(4, "MailParticipants: %v", err)
+ }
+}
+
+func (m *mailNotifier) NotifyNewIssue(issue *models.Issue) {
+ if err := issue.MailParticipants(); err != nil {
+ log.Error(4, "MailParticipants: %v", err)
+ }
+}
+
+func (m *mailNotifier) NotifyIssueChangeStatus(doer *models.User, issue *models.Issue, isClosed bool) {
+ if err := issue.MailParticipants(); err != nil {
+ log.Error(4, "MailParticipants: %v", err)
+ }
+}
+
+func (m *mailNotifier) NotifyNewPullRequest(pr *models.PullRequest) {
+ if err := pr.Issue.MailParticipants(); err != nil {
+ log.Error(4, "MailParticipants: %v", err)
+ }
+}
+
+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 {
+ act = models.ActionCommentIssue
+ }
+ if err := comment.MailParticipants(act, pr.Issue); err != nil {
+ log.Error(4, "MailParticipants: %v", err)
+ }
+}
"code.gitea.io/git"
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/notification/base"
+ "code.gitea.io/gitea/modules/notification/mail"
"code.gitea.io/gitea/modules/notification/ui"
)
func init() {
RegisterNotifier(ui.NewNotifier())
+ RegisterNotifier(mail.NewNotifier())
}
// NotifyCreateIssueComment notifies issue comment related message to notifiers
type (
notificationService struct {
+ base.NullNotifier
issueQueue chan issueNotificationOpts
}
r.Reviewer.ID,
}
}
-
-func (ns *notificationService) NotifyUpdateComment(doer *models.User, c *models.Comment, oldContent string) {
-}
-
-func (ns *notificationService) NotifyDeleteComment(doer *models.User, c *models.Comment) {
-}
-
-func (ns *notificationService) NotifyDeleteRepository(doer *models.User, repo *models.Repository) {
-}
-
-func (ns *notificationService) NotifyForkRepository(doer *models.User, oldRepo, repo *models.Repository) {
-}
-
-func (ns *notificationService) NotifyNewRelease(rel *models.Release) {
-}
-
-func (ns *notificationService) NotifyUpdateRelease(doer *models.User, rel *models.Release) {
-}
-
-func (ns *notificationService) NotifyDeleteRelease(doer *models.User, rel *models.Release) {
-}
-
-func (ns *notificationService) NotifyIssueChangeMilestone(doer *models.User, issue *models.Issue) {
-}
-
-func (ns *notificationService) NotifyIssueChangeContent(doer *models.User, issue *models.Issue, oldContent string) {
-}
-
-func (ns *notificationService) NotifyIssueChangeAssignee(doer *models.User, issue *models.Issue, removed bool) {
-}
-
-func (ns *notificationService) NotifyIssueClearLabels(doer *models.User, issue *models.Issue) {
-}
-
-func (ns *notificationService) NotifyIssueChangeTitle(doer *models.User, issue *models.Issue, oldTitle string) {
-}
-
-func (ns *notificationService) NotifyIssueChangeLabels(doer *models.User, issue *models.Issue,
- addedLabels []*models.Label, removedLabels []*models.Label) {
-}
-
-func (ns *notificationService) NotifyCreateRepository(doer *models.User, u *models.User, repo *models.Repository) {
-}
-
-func (ns *notificationService) NotifyMigrateRepository(doer *models.User, u *models.User, repo *models.Repository) {
-}