2019-01-17 17:23:22 +03:00
// 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 indexer
import (
"code.gitea.io/gitea/models"
2019-12-08 22:15:35 +03:00
code_indexer "code.gitea.io/gitea/modules/indexer/code"
2019-02-21 03:54:05 +03:00
issue_indexer "code.gitea.io/gitea/modules/indexer/issues"
2019-02-19 17:39:39 +03:00
"code.gitea.io/gitea/modules/log"
2019-01-17 17:23:22 +03:00
"code.gitea.io/gitea/modules/notification/base"
2019-12-08 22:15:35 +03:00
"code.gitea.io/gitea/modules/setting"
2019-01-17 17:23:22 +03:00
)
type indexerNotifier struct {
base . NullNotifier
}
var (
_ base . Notifier = & indexerNotifier { }
)
// NewNotifier create a new indexerNotifier notifier
func NewNotifier ( ) base . Notifier {
return & indexerNotifier { }
}
func ( r * indexerNotifier ) NotifyCreateIssueComment ( doer * models . User , repo * models . Repository ,
issue * models . Issue , comment * models . Comment ) {
if comment . Type == models . CommentTypeComment {
2019-02-19 17:39:39 +03:00
if issue . Comments == nil {
if err := issue . LoadDiscussComments ( ) ; err != nil {
2019-04-02 10:48:31 +03:00
log . Error ( "LoadComments failed: %v" , err )
2019-02-19 17:39:39 +03:00
return
}
} else {
issue . Comments = append ( issue . Comments , comment )
}
2019-02-21 03:54:05 +03:00
issue_indexer . UpdateIssueIndexer ( issue )
2019-01-17 17:23:22 +03:00
}
}
func ( r * indexerNotifier ) NotifyNewIssue ( issue * models . Issue ) {
2019-02-21 03:54:05 +03:00
issue_indexer . UpdateIssueIndexer ( issue )
2019-01-17 17:23:22 +03:00
}
func ( r * indexerNotifier ) NotifyNewPullRequest ( pr * models . PullRequest ) {
2019-02-21 03:54:05 +03:00
issue_indexer . UpdateIssueIndexer ( pr . Issue )
2019-01-17 17:23:22 +03:00
}
func ( r * indexerNotifier ) NotifyUpdateComment ( doer * models . User , c * models . Comment , oldContent string ) {
if c . Type == models . CommentTypeComment {
2019-02-19 17:39:39 +03:00
var found bool
if c . Issue . Comments != nil {
for i := 0 ; i < len ( c . Issue . Comments ) ; i ++ {
if c . Issue . Comments [ i ] . ID == c . ID {
c . Issue . Comments [ i ] = c
found = true
break
}
}
}
if ! found {
if err := c . Issue . LoadDiscussComments ( ) ; err != nil {
2019-04-02 10:48:31 +03:00
log . Error ( "LoadComments failed: %v" , err )
2019-02-19 17:39:39 +03:00
return
}
}
2019-02-21 03:54:05 +03:00
issue_indexer . UpdateIssueIndexer ( c . Issue )
2019-01-17 17:23:22 +03:00
}
}
func ( r * indexerNotifier ) NotifyDeleteComment ( doer * models . User , comment * models . Comment ) {
if comment . Type == models . CommentTypeComment {
2019-10-30 13:02:46 +03:00
if err := comment . LoadIssue ( ) ; err != nil {
log . Error ( "LoadIssue: %v" , err )
return
}
2019-02-19 17:39:39 +03:00
var found bool
if comment . Issue . Comments != nil {
for i := 0 ; i < len ( comment . Issue . Comments ) ; i ++ {
if comment . Issue . Comments [ i ] . ID == comment . ID {
comment . Issue . Comments = append ( comment . Issue . Comments [ : i ] , comment . Issue . Comments [ i + 1 : ] ... )
found = true
break
}
}
}
if ! found {
if err := comment . Issue . LoadDiscussComments ( ) ; err != nil {
2019-04-02 10:48:31 +03:00
log . Error ( "LoadComments failed: %v" , err )
2019-02-19 17:39:39 +03:00
return
}
}
// reload comments to delete the old comment
2019-02-21 03:54:05 +03:00
issue_indexer . UpdateIssueIndexer ( comment . Issue )
2019-01-17 17:23:22 +03:00
}
}
func ( r * indexerNotifier ) NotifyDeleteRepository ( doer * models . User , repo * models . Repository ) {
2019-02-21 03:54:05 +03:00
issue_indexer . DeleteRepoIssueIndexer ( repo )
2019-12-08 22:15:35 +03:00
if setting . Indexer . RepoIndexerEnabled {
code_indexer . DeleteRepoFromIndexer ( repo )
}
}
func ( r * indexerNotifier ) NotifyMigrateRepository ( doer * models . User , u * models . User , repo * models . Repository ) {
2019-12-13 00:46:43 +03:00
issue_indexer . UpdateRepoIndexer ( repo )
2019-12-08 22:15:35 +03:00
if setting . Indexer . RepoIndexerEnabled && ! repo . IsEmpty {
code_indexer . UpdateRepoIndexer ( repo )
}
}
func ( r * indexerNotifier ) NotifyPushCommits ( pusher * models . User , repo * models . Repository , refName , oldCommitID , newCommitID string , commits * models . PushCommits ) {
if setting . Indexer . RepoIndexerEnabled && refName == repo . DefaultBranch {
code_indexer . UpdateRepoIndexer ( repo )
}
2019-01-17 17:23:22 +03:00
}
func ( r * indexerNotifier ) NotifyIssueChangeContent ( doer * models . User , issue * models . Issue , oldContent string ) {
2019-02-21 03:54:05 +03:00
issue_indexer . UpdateIssueIndexer ( issue )
2019-01-17 17:23:22 +03:00
}
func ( r * indexerNotifier ) NotifyIssueChangeTitle ( doer * models . User , issue * models . Issue , oldTitle string ) {
2019-02-21 03:54:05 +03:00
issue_indexer . UpdateIssueIndexer ( issue )
2019-01-17 17:23:22 +03:00
}