summaryrefslogtreecommitdiffstats
path: root/modules/notification
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2019-10-30 18:02:46 +0800
committerLauris BH <lauris@nix.lv>2019-10-30 12:02:46 +0200
commitac6accef092ea5a983a4a8ee35282246fc3c6fc5 (patch)
tree2a44c0198dd6e2f9c06eaa49603fd3d28793e1fa /modules/notification
parentf694bb45d79dcc093bc6332eabb3af063bc6b088 (diff)
downloadgitea-ac6accef092ea5a983a4a8ee35282246fc3c6fc5.tar.gz
gitea-ac6accef092ea5a983a4a8ee35282246fc3c6fc5.zip
Move webhook codes from service to webhook notification (#8712)
* Move webhook codes from service to webhook notification * move deletecomment webhook to notifications * fix notification
Diffstat (limited to 'modules/notification')
-rw-r--r--modules/notification/indexer/indexer.go5
-rw-r--r--modules/notification/webhook/webhook.go83
2 files changed, 88 insertions, 0 deletions
diff --git a/modules/notification/indexer/indexer.go b/modules/notification/indexer/indexer.go
index 453eb0c295..13baa76ac0 100644
--- a/modules/notification/indexer/indexer.go
+++ b/modules/notification/indexer/indexer.go
@@ -74,6 +74,11 @@ func (r *indexerNotifier) NotifyUpdateComment(doer *models.User, c *models.Comme
func (r *indexerNotifier) NotifyDeleteComment(doer *models.User, comment *models.Comment) {
if comment.Type == models.CommentTypeComment {
+ if err := comment.LoadIssue(); err != nil {
+ log.Error("LoadIssue: %v", err)
+ return
+ }
+
var found bool
if comment.Issue.Comments != nil {
for i := 0; i < len(comment.Issue.Comments); i++ {
diff --git a/modules/notification/webhook/webhook.go b/modules/notification/webhook/webhook.go
index a2af152edd..b4629ac56d 100644
--- a/modules/notification/webhook/webhook.go
+++ b/modules/notification/webhook/webhook.go
@@ -315,3 +315,86 @@ func (m *webhookNotifier) NotifyIssueChangeContent(doer *models.User, issue *mod
go models.HookQueue.Add(issue.RepoID)
}
}
+
+func (m *webhookNotifier) NotifyUpdateComment(doer *models.User, c *models.Comment, oldContent string) {
+ if err := c.LoadPoster(); err != nil {
+ log.Error("LoadPoster: %v", err)
+ return
+ }
+ if err := c.LoadIssue(); err != nil {
+ log.Error("LoadIssue: %v", err)
+ return
+ }
+
+ if err := c.Issue.LoadAttributes(); err != nil {
+ log.Error("LoadAttributes: %v", err)
+ return
+ }
+
+ mode, _ := models.AccessLevel(doer, c.Issue.Repo)
+ if err := models.PrepareWebhooks(c.Issue.Repo, models.HookEventIssueComment, &api.IssueCommentPayload{
+ Action: api.HookIssueCommentEdited,
+ Issue: c.Issue.APIFormat(),
+ Comment: c.APIFormat(),
+ Changes: &api.ChangesPayload{
+ Body: &api.ChangesFromPayload{
+ From: oldContent,
+ },
+ },
+ Repository: c.Issue.Repo.APIFormat(mode),
+ Sender: doer.APIFormat(),
+ IsPull: c.Issue.IsPull,
+ }); err != nil {
+ log.Error("PrepareWebhooks [comment_id: %d]: %v", c.ID, err)
+ } else {
+ go models.HookQueue.Add(c.Issue.Repo.ID)
+ }
+}
+
+func (m *webhookNotifier) NotifyCreateIssueComment(doer *models.User, repo *models.Repository,
+ issue *models.Issue, comment *models.Comment) {
+ mode, _ := models.AccessLevel(doer, repo)
+ if err := models.PrepareWebhooks(repo, models.HookEventIssueComment, &api.IssueCommentPayload{
+ Action: api.HookIssueCommentCreated,
+ Issue: issue.APIFormat(),
+ Comment: comment.APIFormat(),
+ Repository: repo.APIFormat(mode),
+ Sender: doer.APIFormat(),
+ IsPull: issue.IsPull,
+ }); err != nil {
+ log.Error("PrepareWebhooks [comment_id: %d]: %v", comment.ID, err)
+ } else {
+ go models.HookQueue.Add(repo.ID)
+ }
+}
+
+func (m *webhookNotifier) NotifyDeleteComment(doer *models.User, comment *models.Comment) {
+ if err := comment.LoadPoster(); err != nil {
+ log.Error("LoadPoster: %v", err)
+ return
+ }
+ if err := comment.LoadIssue(); err != nil {
+ log.Error("LoadIssue: %v", err)
+ return
+ }
+
+ if err := comment.Issue.LoadAttributes(); err != nil {
+ log.Error("LoadAttributes: %v", err)
+ return
+ }
+
+ mode, _ := models.AccessLevel(doer, comment.Issue.Repo)
+
+ if err := models.PrepareWebhooks(comment.Issue.Repo, models.HookEventIssueComment, &api.IssueCommentPayload{
+ Action: api.HookIssueCommentDeleted,
+ Issue: comment.Issue.APIFormat(),
+ Comment: comment.APIFormat(),
+ Repository: comment.Issue.Repo.APIFormat(mode),
+ Sender: doer.APIFormat(),
+ IsPull: comment.Issue.IsPull,
+ }); err != nil {
+ log.Error("PrepareWebhooks [comment_id: %d]: %v", comment.ID, err)
+ } else {
+ go models.HookQueue.Add(comment.Issue.Repo.ID)
+ }
+}