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 {
2019-11-12 11:33:34 +03:00
issueID int64
commentID int64
2018-10-18 14:23:05 +03:00
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 {
2019-11-12 11:33:34 +03:00
if err := models . CreateOrUpdateIssueNotifications ( opts . issueID , opts . commentID , opts . notificationAuthorID ) ; err != nil {
2019-06-12 22:41:28 +03:00
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 ) {
2019-11-12 11:33:34 +03:00
var opts = issueNotificationOpts {
issueID : issue . ID ,
notificationAuthorID : doer . ID ,
}
if comment != nil {
opts . commentID = comment . ID
2018-10-18 14:23:05 +03:00
}
2019-11-12 11:33:34 +03:00
ns . issueQueue <- opts
2018-10-18 14:23:05 +03:00
}
func ( ns * notificationService ) NotifyNewIssue ( issue * models . Issue ) {
ns . issueQueue <- issueNotificationOpts {
2019-11-12 11:33:34 +03:00
issueID : issue . ID ,
notificationAuthorID : issue . Poster . ID ,
2018-10-18 14:23:05 +03:00
}
}
2019-12-16 00:57:34 +03:00
func ( ns * notificationService ) NotifyIssueChangeStatus ( doer * models . User , issue * models . Issue , actionComment * models . Comment , isClosed bool ) {
2018-10-18 14:23:05 +03:00
ns . issueQueue <- issueNotificationOpts {
2019-11-12 11:33:34 +03:00
issueID : issue . ID ,
notificationAuthorID : doer . ID ,
2018-10-18 14:23:05 +03:00
}
}
func ( ns * notificationService ) NotifyMergePullRequest ( pr * models . PullRequest , doer * models . User , gitRepo * git . Repository ) {
ns . issueQueue <- issueNotificationOpts {
2019-11-12 11:33:34 +03:00
issueID : pr . Issue . ID ,
notificationAuthorID : doer . ID ,
2018-10-18 14:23:05 +03:00
}
}
func ( ns * notificationService ) NotifyNewPullRequest ( pr * models . PullRequest ) {
ns . issueQueue <- issueNotificationOpts {
2019-11-12 11:33:34 +03:00
issueID : pr . Issue . ID ,
notificationAuthorID : pr . Issue . PosterID ,
2018-10-18 14:23:05 +03:00
}
}
func ( ns * notificationService ) NotifyPullRequestReview ( pr * models . PullRequest , r * models . Review , c * models . Comment ) {
2019-11-12 11:33:34 +03:00
var opts = issueNotificationOpts {
issueID : pr . Issue . ID ,
notificationAuthorID : r . Reviewer . ID ,
}
if c != nil {
opts . commentID = c . ID
2018-10-18 14:23:05 +03:00
}
2019-11-12 11:33:34 +03:00
ns . issueQueue <- opts
2018-10-18 14:23:05 +03:00
}