2018-10-18 14:23:05 +03:00
// 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 ui
import (
"code.gitea.io/gitea/models"
2019-03-27 12:33:00 +03:00
"code.gitea.io/gitea/modules/git"
2018-10-18 14:23:05 +03:00
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/notification/base"
)
type (
notificationService struct {
2019-01-13 17:42:55 +03:00
base . NullNotifier
2018-10-18 14:23:05 +03:00
issueQueue chan issueNotificationOpts
}
issueNotificationOpts struct {
issue * models . Issue
notificationAuthorID int64
}
)
var (
_ base . Notifier = & notificationService { }
)
// NewNotifier create a new notificationService notifier
func NewNotifier ( ) base . Notifier {
return & notificationService {
issueQueue : make ( chan issueNotificationOpts , 100 ) ,
}
}
func ( ns * notificationService ) Run ( ) {
2019-06-12 22:41:28 +03:00
for opts := range ns . issueQueue {
if err := models . CreateOrUpdateIssueNotifications ( opts . issue , opts . notificationAuthorID ) ; err != nil {
log . Error ( "Was unable to create issue notification: %v" , err )
2018-10-18 14:23:05 +03:00
}
}
}
func ( ns * notificationService ) NotifyCreateIssueComment ( doer * models . User , repo * models . Repository ,
issue * models . Issue , comment * models . Comment ) {
ns . issueQueue <- issueNotificationOpts {
issue ,
doer . ID ,
}
}
func ( ns * notificationService ) NotifyNewIssue ( issue * models . Issue ) {
ns . issueQueue <- issueNotificationOpts {
issue ,
issue . Poster . ID ,
}
}
func ( ns * notificationService ) NotifyIssueChangeStatus ( doer * models . User , issue * models . Issue , isClosed bool ) {
ns . issueQueue <- issueNotificationOpts {
issue ,
doer . ID ,
}
}
func ( ns * notificationService ) NotifyMergePullRequest ( pr * models . PullRequest , doer * models . User , gitRepo * git . Repository ) {
ns . issueQueue <- issueNotificationOpts {
pr . Issue ,
doer . ID ,
}
}
func ( ns * notificationService ) NotifyNewPullRequest ( pr * models . PullRequest ) {
ns . issueQueue <- issueNotificationOpts {
pr . Issue ,
pr . Issue . PosterID ,
}
}
func ( ns * notificationService ) NotifyPullRequestReview ( pr * models . PullRequest , r * models . Review , c * models . Comment ) {
ns . issueQueue <- issueNotificationOpts {
pr . Issue ,
r . Reviewer . ID ,
}
}