diff options
author | Lunny Xiao <xiaolunwen@gmail.com> | 2019-01-13 22:42:55 +0800 |
---|---|---|
committer | Lauris BH <lauris@nix.lv> | 2019-01-13 16:42:55 +0200 |
commit | beab2df1227f9b7e556aa5716d94feb3a3e2088e (patch) | |
tree | ef72c59cc4e3ab7ccaa29ffc5de4d3a4278e348e /modules/notification | |
parent | e5228b8369f7162026b6fa6c1a8a0f07b92d85c7 (diff) | |
download | gitea-beab2df1227f9b7e556aa5716d94feb3a3e2088e.tar.gz gitea-beab2df1227f9b7e556aa5716d94feb3a3e2088e.zip |
Refactor mail notification (#5110)
* mail notification implement interface
* fix file comment year
* use NullNotifier as parent struct of notifiers
Diffstat (limited to 'modules/notification')
-rw-r--r-- | modules/notification/base/notifier.go (renamed from modules/notification/base/base.go) | 0 | ||||
-rw-r--r-- | modules/notification/base/null.go | 108 | ||||
-rw-r--r-- | modules/notification/mail/mail.go | 74 | ||||
-rw-r--r-- | modules/notification/notification.go | 2 | ||||
-rw-r--r-- | modules/notification/ui/ui.go | 47 |
5 files changed, 185 insertions, 46 deletions
diff --git a/modules/notification/base/base.go b/modules/notification/base/notifier.go index bac90f5bb1..bac90f5bb1 100644 --- a/modules/notification/base/base.go +++ b/modules/notification/base/notifier.go diff --git a/modules/notification/base/null.go b/modules/notification/base/null.go new file mode 100644 index 0000000000..608bd0dcaa --- /dev/null +++ b/modules/notification/base/null.go @@ -0,0 +1,108 @@ +// 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) { +} diff --git a/modules/notification/mail/mail.go b/modules/notification/mail/mail.go new file mode 100644 index 0000000000..8bb4173449 --- /dev/null +++ b/modules/notification/mail/mail.go @@ -0,0 +1,74 @@ +// 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) + } +} diff --git a/modules/notification/notification.go b/modules/notification/notification.go index 3f3579394e..6f482e8819 100644 --- a/modules/notification/notification.go +++ b/modules/notification/notification.go @@ -8,6 +8,7 @@ import ( "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" ) @@ -23,6 +24,7 @@ func RegisterNotifier(notifier base.Notifier) { func init() { RegisterNotifier(ui.NewNotifier()) + RegisterNotifier(mail.NewNotifier()) } // NotifyCreateIssueComment notifies issue comment related message to notifiers diff --git a/modules/notification/ui/ui.go b/modules/notification/ui/ui.go index f0d708eb54..135e92abfd 100644 --- a/modules/notification/ui/ui.go +++ b/modules/notification/ui/ui.go @@ -13,6 +13,7 @@ import ( type ( notificationService struct { + base.NullNotifier issueQueue chan issueNotificationOpts } @@ -86,49 +87,3 @@ func (ns *notificationService) NotifyPullRequestReview(pr *models.PullRequest, r 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) { -} |