2018-10-18 14:23:05 +03:00
// Copyright 2018 The Gitea Authors. All rights reserved.
2016-12-30 19:44:54 +03:00
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package notification
import (
"code.gitea.io/gitea/models"
2019-11-03 23:59:09 +03:00
"code.gitea.io/gitea/modules/notification/action"
2018-10-18 14:23:05 +03:00
"code.gitea.io/gitea/modules/notification/base"
2019-01-17 17:23:22 +03:00
"code.gitea.io/gitea/modules/notification/indexer"
2019-01-13 17:42:55 +03:00
"code.gitea.io/gitea/modules/notification/mail"
2018-10-18 14:23:05 +03:00
"code.gitea.io/gitea/modules/notification/ui"
2019-10-15 08:03:05 +03:00
"code.gitea.io/gitea/modules/notification/webhook"
2020-01-10 12:34:21 +03:00
"code.gitea.io/gitea/modules/repository"
2019-10-25 17:46:37 +03:00
"code.gitea.io/gitea/modules/setting"
2016-12-30 19:44:54 +03:00
)
2018-10-18 14:23:05 +03:00
var (
notifiers [ ] base . Notifier
)
// RegisterNotifier providers method to receive notify messages
func RegisterNotifier ( notifier base . Notifier ) {
go notifier . Run ( )
notifiers = append ( notifiers , notifier )
}
2019-10-25 17:46:37 +03:00
// NewContext registers notification handlers
func NewContext ( ) {
2018-10-18 14:23:05 +03:00
RegisterNotifier ( ui . NewNotifier ( ) )
2019-10-25 17:46:37 +03:00
if setting . Service . EnableNotifyMail {
RegisterNotifier ( mail . NewNotifier ( ) )
}
2019-01-17 17:23:22 +03:00
RegisterNotifier ( indexer . NewNotifier ( ) )
2019-10-15 08:03:05 +03:00
RegisterNotifier ( webhook . NewNotifier ( ) )
2019-11-03 23:59:09 +03:00
RegisterNotifier ( action . NewNotifier ( ) )
2018-10-18 14:23:05 +03:00
}
// NotifyCreateIssueComment notifies issue comment related message to notifiers
func NotifyCreateIssueComment ( doer * models . User , repo * models . Repository ,
issue * models . Issue , comment * models . Comment ) {
for _ , notifier := range notifiers {
notifier . NotifyCreateIssueComment ( doer , repo , issue , comment )
2016-12-30 19:44:54 +03:00
}
2018-10-18 14:23:05 +03:00
}
2016-12-30 19:44:54 +03:00
2018-10-18 14:23:05 +03:00
// NotifyNewIssue notifies new issue to notifiers
func NotifyNewIssue ( issue * models . Issue ) {
for _ , notifier := range notifiers {
notifier . NotifyNewIssue ( issue )
2016-12-30 19:44:54 +03:00
}
2018-10-18 14:23:05 +03:00
}
2016-12-30 19:44:54 +03:00
2018-10-18 14:23:05 +03:00
// NotifyIssueChangeStatus notifies close or reopen issue to notifiers
2019-12-16 00:57:34 +03:00
func NotifyIssueChangeStatus ( doer * models . User , issue * models . Issue , actionComment * models . Comment , closeOrReopen bool ) {
2018-10-18 14:23:05 +03:00
for _ , notifier := range notifiers {
2019-12-16 00:57:34 +03:00
notifier . NotifyIssueChangeStatus ( doer , issue , actionComment , closeOrReopen )
2016-12-30 19:44:54 +03:00
}
2018-10-18 14:23:05 +03:00
}
2016-12-30 19:44:54 +03:00
2018-10-18 14:23:05 +03:00
// NotifyMergePullRequest notifies merge pull request to notifiers
2020-01-16 19:24:20 +03:00
func NotifyMergePullRequest ( pr * models . PullRequest , doer * models . User ) {
2018-10-18 14:23:05 +03:00
for _ , notifier := range notifiers {
2020-01-16 19:24:20 +03:00
notifier . NotifyMergePullRequest ( pr , doer )
2018-10-18 14:23:05 +03:00
}
}
// NotifyNewPullRequest notifies new pull request to notifiers
func NotifyNewPullRequest ( pr * models . PullRequest ) {
for _ , notifier := range notifiers {
notifier . NotifyNewPullRequest ( pr )
}
}
2019-11-05 14:04:08 +03:00
// NotifyPullRequestSynchronized notifies Synchronized pull request
func NotifyPullRequestSynchronized ( doer * models . User , pr * models . PullRequest ) {
for _ , notifier := range notifiers {
notifier . NotifyPullRequestSynchronized ( doer , pr )
}
}
2018-10-18 14:23:05 +03:00
// NotifyPullRequestReview notifies new pull request review
func NotifyPullRequestReview ( pr * models . PullRequest , review * models . Review , comment * models . Comment ) {
for _ , notifier := range notifiers {
notifier . NotifyPullRequestReview ( pr , review , comment )
}
}
2019-12-16 09:20:25 +03:00
// NotifyPullRequestChangeTargetBranch notifies when a pull request's target branch was changed
func NotifyPullRequestChangeTargetBranch ( doer * models . User , pr * models . PullRequest , oldBranch string ) {
for _ , notifier := range notifiers {
notifier . NotifyPullRequestChangeTargetBranch ( doer , pr , oldBranch )
}
}
2018-10-18 14:23:05 +03:00
// NotifyUpdateComment notifies update comment to notifiers
func NotifyUpdateComment ( doer * models . User , c * models . Comment , oldContent string ) {
for _ , notifier := range notifiers {
notifier . NotifyUpdateComment ( doer , c , oldContent )
}
}
// NotifyDeleteComment notifies delete comment to notifiers
func NotifyDeleteComment ( doer * models . User , c * models . Comment ) {
for _ , notifier := range notifiers {
notifier . NotifyDeleteComment ( doer , c )
}
}
// NotifyNewRelease notifies new release to notifiers
func NotifyNewRelease ( rel * models . Release ) {
for _ , notifier := range notifiers {
notifier . NotifyNewRelease ( rel )
}
}
// NotifyUpdateRelease notifies update release to notifiers
func NotifyUpdateRelease ( doer * models . User , rel * models . Release ) {
for _ , notifier := range notifiers {
notifier . NotifyUpdateRelease ( doer , rel )
}
}
// NotifyDeleteRelease notifies delete release to notifiers
func NotifyDeleteRelease ( doer * models . User , rel * models . Release ) {
for _ , notifier := range notifiers {
notifier . NotifyDeleteRelease ( doer , rel )
}
}
// NotifyIssueChangeMilestone notifies change milestone to notifiers
2019-11-02 06:33:20 +03:00
func NotifyIssueChangeMilestone ( doer * models . User , issue * models . Issue , oldMilestoneID int64 ) {
2018-10-18 14:23:05 +03:00
for _ , notifier := range notifiers {
2019-11-02 06:33:20 +03:00
notifier . NotifyIssueChangeMilestone ( doer , issue , oldMilestoneID )
2018-10-18 14:23:05 +03:00
}
}
// NotifyIssueChangeContent notifies change content to notifiers
func NotifyIssueChangeContent ( doer * models . User , issue * models . Issue , oldContent string ) {
for _ , notifier := range notifiers {
notifier . NotifyIssueChangeContent ( doer , issue , oldContent )
}
}
// NotifyIssueChangeAssignee notifies change content to notifiers
2019-10-25 17:46:37 +03:00
func NotifyIssueChangeAssignee ( doer * models . User , issue * models . Issue , assignee * models . User , removed bool , comment * models . Comment ) {
2018-10-18 14:23:05 +03:00
for _ , notifier := range notifiers {
2019-10-25 17:46:37 +03:00
notifier . NotifyIssueChangeAssignee ( doer , issue , assignee , removed , comment )
2018-10-18 14:23:05 +03:00
}
}
// NotifyIssueClearLabels notifies clear labels to notifiers
func NotifyIssueClearLabels ( doer * models . User , issue * models . Issue ) {
for _ , notifier := range notifiers {
notifier . NotifyIssueClearLabels ( doer , issue )
}
}
// NotifyIssueChangeTitle notifies change title to notifiers
func NotifyIssueChangeTitle ( doer * models . User , issue * models . Issue , oldTitle string ) {
for _ , notifier := range notifiers {
notifier . NotifyIssueChangeTitle ( doer , issue , oldTitle )
}
}
// NotifyIssueChangeLabels notifies change labels to notifiers
func NotifyIssueChangeLabels ( doer * models . User , issue * models . Issue ,
addedLabels [ ] * models . Label , removedLabels [ ] * models . Label ) {
for _ , notifier := range notifiers {
notifier . NotifyIssueChangeLabels ( doer , issue , addedLabels , removedLabels )
}
2016-12-30 19:44:54 +03:00
}
2018-10-18 14:23:05 +03:00
// NotifyCreateRepository notifies create repository to notifiers
func NotifyCreateRepository ( doer * models . User , u * models . User , repo * models . Repository ) {
for _ , notifier := range notifiers {
notifier . NotifyCreateRepository ( doer , u , repo )
2016-12-30 19:44:54 +03:00
}
}
2018-10-18 14:23:05 +03:00
// NotifyMigrateRepository notifies create repository to notifiers
func NotifyMigrateRepository ( doer * models . User , u * models . User , repo * models . Repository ) {
for _ , notifier := range notifiers {
notifier . NotifyMigrateRepository ( doer , u , repo )
2016-12-30 19:44:54 +03:00
}
}
2019-11-03 09:59:26 +03:00
2019-11-15 11:06:11 +03:00
// NotifyTransferRepository notifies create repository to notifiers
func NotifyTransferRepository ( doer * models . User , repo * models . Repository , newOwnerName string ) {
for _ , notifier := range notifiers {
notifier . NotifyTransferRepository ( doer , repo , newOwnerName )
}
}
// NotifyDeleteRepository notifies delete repository to notifiers
func NotifyDeleteRepository ( doer * models . User , repo * models . Repository ) {
for _ , notifier := range notifiers {
notifier . NotifyDeleteRepository ( doer , repo )
}
}
// NotifyForkRepository notifies fork repository to notifiers
func NotifyForkRepository ( doer * models . User , oldRepo , repo * models . Repository ) {
for _ , notifier := range notifiers {
notifier . NotifyForkRepository ( doer , oldRepo , repo )
}
}
// NotifyRenameRepository notifies repository renamed
func NotifyRenameRepository ( doer * models . User , repo * models . Repository , oldName string ) {
for _ , notifier := range notifiers {
notifier . NotifyRenameRepository ( doer , repo , oldName )
}
}
2019-11-03 09:59:26 +03:00
// NotifyPushCommits notifies commits pushed to notifiers
2020-01-10 12:34:21 +03:00
func NotifyPushCommits ( pusher * models . User , repo * models . Repository , refName , oldCommitID , newCommitID string , commits * repository . PushCommits ) {
2019-11-03 09:59:26 +03:00
for _ , notifier := range notifiers {
notifier . NotifyPushCommits ( pusher , repo , refName , oldCommitID , newCommitID , commits )
}
}
2019-11-06 09:43:03 +03:00
// NotifyCreateRef notifies branch or tag creation to notifiers
func NotifyCreateRef ( pusher * models . User , repo * models . Repository , refType , refFullName string ) {
for _ , notifier := range notifiers {
notifier . NotifyCreateRef ( pusher , repo , refType , refFullName )
}
}
// NotifyDeleteRef notifies branch or tag deletion to notifiers
func NotifyDeleteRef ( pusher * models . User , repo * models . Repository , refType , refFullName string ) {
for _ , notifier := range notifiers {
notifier . NotifyDeleteRef ( pusher , repo , refType , refFullName )
}
}
2019-11-24 08:16:59 +03:00
// NotifySyncPushCommits notifies commits pushed to notifiers
2020-01-10 12:34:21 +03:00
func NotifySyncPushCommits ( pusher * models . User , repo * models . Repository , refName , oldCommitID , newCommitID string , commits * repository . PushCommits ) {
2019-11-24 08:16:59 +03:00
for _ , notifier := range notifiers {
notifier . NotifySyncPushCommits ( pusher , repo , refName , oldCommitID , newCommitID , commits )
}
}
// NotifySyncCreateRef notifies branch or tag creation to notifiers
func NotifySyncCreateRef ( pusher * models . User , repo * models . Repository , refType , refFullName string ) {
for _ , notifier := range notifiers {
notifier . NotifySyncCreateRef ( pusher , repo , refType , refFullName )
}
}
// NotifySyncDeleteRef notifies branch or tag deletion to notifiers
func NotifySyncDeleteRef ( pusher * models . User , repo * models . Repository , refType , refFullName string ) {
for _ , notifier := range notifiers {
notifier . NotifySyncDeleteRef ( pusher , repo , refType , refFullName )
}
}