aboutsummaryrefslogtreecommitdiffstats
path: root/modules/notification
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2019-02-19 22:39:39 +0800
committertechknowlogick <matti@mdranta.net>2019-02-19 09:39:39 -0500
commit830ae614560b0c504c00d693b63d9889bac1a2d8 (patch)
tree5fd933f8124f4dd30d0215def2a7bcc0181573be /modules/notification
parent094263db4d9f1b53c4b4c021005eec07baddd253 (diff)
downloadgitea-830ae614560b0c504c00d693b63d9889bac1a2d8.tar.gz
gitea-830ae614560b0c504c00d693b63d9889bac1a2d8.zip
Refactor issue indexer (#5363)
Diffstat (limited to 'modules/notification')
-rw-r--r--modules/notification/indexer/indexer.go62
1 files changed, 54 insertions, 8 deletions
diff --git a/modules/notification/indexer/indexer.go b/modules/notification/indexer/indexer.go
index 3fd3352188..66d483c017 100644
--- a/modules/notification/indexer/indexer.go
+++ b/modules/notification/indexer/indexer.go
@@ -6,6 +6,7 @@ package indexer
import (
"code.gitea.io/gitea/models"
+ "code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/notification/base"
)
@@ -25,38 +26,83 @@ func NewNotifier() base.Notifier {
func (r *indexerNotifier) NotifyCreateIssueComment(doer *models.User, repo *models.Repository,
issue *models.Issue, comment *models.Comment) {
if comment.Type == models.CommentTypeComment {
- models.UpdateIssueIndexer(issue.ID)
+ if issue.Comments == nil {
+ if err := issue.LoadDiscussComments(); err != nil {
+ log.Error(4, "LoadComments failed: %v", err)
+ return
+ }
+ } else {
+ issue.Comments = append(issue.Comments, comment)
+ }
+
+ models.UpdateIssueIndexer(issue)
}
}
func (r *indexerNotifier) NotifyNewIssue(issue *models.Issue) {
- models.UpdateIssueIndexer(issue.ID)
+ models.UpdateIssueIndexer(issue)
}
func (r *indexerNotifier) NotifyNewPullRequest(pr *models.PullRequest) {
- models.UpdateIssueIndexer(pr.Issue.ID)
+ models.UpdateIssueIndexer(pr.Issue)
}
func (r *indexerNotifier) NotifyUpdateComment(doer *models.User, c *models.Comment, oldContent string) {
if c.Type == models.CommentTypeComment {
- models.UpdateIssueIndexer(c.IssueID)
+ 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 {
+ log.Error(4, "LoadComments failed: %v", err)
+ return
+ }
+ }
+
+ models.UpdateIssueIndexer(c.Issue)
}
}
func (r *indexerNotifier) NotifyDeleteComment(doer *models.User, comment *models.Comment) {
if comment.Type == models.CommentTypeComment {
- models.UpdateIssueIndexer(comment.IssueID)
+ 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 {
+ log.Error(4, "LoadComments failed: %v", err)
+ return
+ }
+ }
+ // reload comments to delete the old comment
+ models.UpdateIssueIndexer(comment.Issue)
}
}
func (r *indexerNotifier) NotifyDeleteRepository(doer *models.User, repo *models.Repository) {
- models.DeleteRepoFromIndexer(repo)
+ models.DeleteRepoIssueIndexer(repo)
}
func (r *indexerNotifier) NotifyIssueChangeContent(doer *models.User, issue *models.Issue, oldContent string) {
- models.UpdateIssueIndexer(issue.ID)
+ models.UpdateIssueIndexer(issue)
}
func (r *indexerNotifier) NotifyIssueChangeTitle(doer *models.User, issue *models.Issue, oldTitle string) {
- models.UpdateIssueIndexer(issue.ID)
+ models.UpdateIssueIndexer(issue)
}