mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-05-25 11:22:16 +00:00
Refactor issue indexer (#5363)
This commit is contained in:
parent
094263db4d
commit
830ae61456
22 changed files with 1046 additions and 117 deletions
|
@ -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)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue