]> source.dussan.org Git - gitea.git/commitdiff
Move actions to notification (#8785)
authorLunny Xiao <xiaolunwen@gmail.com>
Sun, 3 Nov 2019 20:59:09 +0000 (04:59 +0800)
committerzeripath <art27@cantab.net>
Sun, 3 Nov 2019 20:59:09 +0000 (20:59 +0000)
modules/notification/action/action.go [new file with mode: 0644]
modules/notification/notification.go
modules/notification/webhook/webhook.go
services/issue/issue.go
services/pull/pull.go

diff --git a/modules/notification/action/action.go b/modules/notification/action/action.go
new file mode 100644 (file)
index 0000000..15228f6
--- /dev/null
@@ -0,0 +1,77 @@
+// 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 action
+
+import (
+       "fmt"
+
+       "code.gitea.io/gitea/models"
+       "code.gitea.io/gitea/modules/log"
+       "code.gitea.io/gitea/modules/notification/base"
+)
+
+type actionNotifier struct {
+       base.NullNotifier
+}
+
+var (
+       _ base.Notifier = &actionNotifier{}
+)
+
+// NewNotifier create a new webhookNotifier notifier
+func NewNotifier() base.Notifier {
+       return &actionNotifier{}
+}
+
+func (a *actionNotifier) NotifyNewIssue(issue *models.Issue) {
+       if err := issue.LoadPoster(); err != nil {
+               log.Error("issue.LoadPoster: %v", err)
+               return
+       }
+       if err := issue.LoadRepo(); err != nil {
+               log.Error("issue.LoadRepo: %v", err)
+               return
+       }
+       repo := issue.Repo
+
+       if err := models.NotifyWatchers(&models.Action{
+               ActUserID: issue.Poster.ID,
+               ActUser:   issue.Poster,
+               OpType:    models.ActionCreateIssue,
+               Content:   fmt.Sprintf("%d|%s", issue.Index, issue.Title),
+               RepoID:    repo.ID,
+               Repo:      repo,
+               IsPrivate: repo.IsPrivate,
+       }); err != nil {
+               log.Error("NotifyWatchers: %v", err)
+       }
+}
+
+func (a *actionNotifier) NotifyNewPullRequest(pull *models.PullRequest) {
+       if err := pull.LoadIssue(); err != nil {
+               log.Error("pull.LoadIssue: %v", err)
+               return
+       }
+       if err := pull.Issue.LoadRepo(); err != nil {
+               log.Error("pull.Issue.LoadRepo: %v", err)
+               return
+       }
+       if err := pull.Issue.LoadPoster(); err != nil {
+               log.Error("pull.Issue.LoadPoster: %v", err)
+               return
+       }
+
+       if err := models.NotifyWatchers(&models.Action{
+               ActUserID: pull.Issue.Poster.ID,
+               ActUser:   pull.Issue.Poster,
+               OpType:    models.ActionCreatePullRequest,
+               Content:   fmt.Sprintf("%d|%s", pull.Issue.Index, pull.Issue.Title),
+               RepoID:    pull.Issue.Repo.ID,
+               Repo:      pull.Issue.Repo,
+               IsPrivate: pull.Issue.Repo.IsPrivate,
+       }); err != nil {
+               log.Error("NotifyWatchers: %v", err)
+       }
+}
index 6532f9d614aad986ae81d6148c3c9f4476c5f767..1fd30229406bb173a6430c6bbe288a0728ae9e70 100644 (file)
@@ -7,6 +7,7 @@ package notification
 import (
        "code.gitea.io/gitea/models"
        "code.gitea.io/gitea/modules/git"
+       "code.gitea.io/gitea/modules/notification/action"
        "code.gitea.io/gitea/modules/notification/base"
        "code.gitea.io/gitea/modules/notification/indexer"
        "code.gitea.io/gitea/modules/notification/mail"
@@ -33,6 +34,7 @@ func NewContext() {
        }
        RegisterNotifier(indexer.NewNotifier())
        RegisterNotifier(webhook.NewNotifier())
+       RegisterNotifier(action.NewNotifier())
 }
 
 // NotifyCreateIssueComment notifies issue comment related message to notifiers
index 13d33e10114faa14d13abbb3c5aeba7438c52da1..7d28c1c8b98373af56af356a0f5f982f8064d73c 100644 (file)
@@ -10,6 +10,7 @@ import (
        "code.gitea.io/gitea/modules/notification/base"
        "code.gitea.io/gitea/modules/setting"
        api "code.gitea.io/gitea/modules/structs"
+       "code.gitea.io/gitea/modules/webhook"
        webhook_module "code.gitea.io/gitea/modules/webhook"
 )
 
@@ -251,6 +252,15 @@ func (m *webhookNotifier) NotifyIssueChangeStatus(doer *models.User, issue *mode
 }
 
 func (m *webhookNotifier) NotifyNewIssue(issue *models.Issue) {
+       if err := issue.LoadRepo(); err != nil {
+               log.Error("issue.LoadRepo: %v", err)
+               return
+       }
+       if err := issue.LoadPoster(); err != nil {
+               log.Error("issue.LoadPoster: %v", err)
+               return
+       }
+
        mode, _ := models.AccessLevel(issue.Poster, issue.Repo)
        if err := webhook_module.PrepareWebhooks(issue.Repo, models.HookEventIssues, &api.IssuePayload{
                Action:     api.HookIssueOpened,
@@ -263,6 +273,32 @@ func (m *webhookNotifier) NotifyNewIssue(issue *models.Issue) {
        }
 }
 
+func (m *webhookNotifier) NotifyNewPullRequest(pull *models.PullRequest) {
+       if err := pull.LoadIssue(); err != nil {
+               log.Error("pull.LoadIssue: %v", err)
+               return
+       }
+       if err := pull.Issue.LoadRepo(); err != nil {
+               log.Error("pull.Issue.LoadRepo: %v", err)
+               return
+       }
+       if err := pull.Issue.LoadPoster(); err != nil {
+               log.Error("pull.Issue.LoadPoster: %v", err)
+               return
+       }
+
+       mode, _ := models.AccessLevel(pull.Issue.Poster, pull.Issue.Repo)
+       if err := webhook.PrepareWebhooks(pull.Issue.Repo, models.HookEventPullRequest, &api.PullRequestPayload{
+               Action:      api.HookIssueOpened,
+               Index:       pull.Issue.Index,
+               PullRequest: pull.APIFormat(),
+               Repository:  pull.Issue.Repo.APIFormat(mode),
+               Sender:      pull.Issue.Poster.APIFormat(),
+       }); err != nil {
+               log.Error("PrepareWebhooks: %v", err)
+       }
+}
+
 func (m *webhookNotifier) NotifyIssueChangeContent(doer *models.User, issue *models.Issue, oldContent string) {
        mode, _ := models.AccessLevel(issue.Poster, issue.Repo)
        var err error
index ee2f176a43373d941334aa64906bb9e302b29d4a..aa06ba409730f0e53409e00b7b3747859ccf09dc 100644 (file)
@@ -5,10 +5,7 @@
 package issue
 
 import (
-       "fmt"
-
        "code.gitea.io/gitea/models"
-       "code.gitea.io/gitea/modules/log"
        "code.gitea.io/gitea/modules/notification"
 )
 
@@ -24,18 +21,6 @@ func NewIssue(repo *models.Repository, issue *models.Issue, labelIDs []int64, uu
                }
        }
 
-       if err := models.NotifyWatchers(&models.Action{
-               ActUserID: issue.Poster.ID,
-               ActUser:   issue.Poster,
-               OpType:    models.ActionCreateIssue,
-               Content:   fmt.Sprintf("%d|%s", issue.Index, issue.Title),
-               RepoID:    repo.ID,
-               Repo:      repo,
-               IsPrivate: repo.IsPrivate,
-       }); err != nil {
-               log.Error("NotifyWatchers: %v", err)
-       }
-
        notification.NotifyNewIssue(issue)
 
        return nil
index 0a4c4a7eeecabf7a70ff5046554fafb6e53f94c0..20939c397fa4daf14df00d8d522959fd7509597d 100644 (file)
@@ -10,6 +10,7 @@ import (
        "code.gitea.io/gitea/models"
        "code.gitea.io/gitea/modules/git"
        "code.gitea.io/gitea/modules/log"
+       "code.gitea.io/gitea/modules/notification"
        api "code.gitea.io/gitea/modules/structs"
        "code.gitea.io/gitea/modules/webhook"
        issue_service "code.gitea.io/gitea/services/issue"
@@ -27,30 +28,10 @@ func NewPullRequest(repo *models.Repository, pull *models.Issue, labelIDs []int6
                }
        }
 
-       if err := models.NotifyWatchers(&models.Action{
-               ActUserID: pull.Poster.ID,
-               ActUser:   pull.Poster,
-               OpType:    models.ActionCreatePullRequest,
-               Content:   fmt.Sprintf("%d|%s", pull.Index, pull.Title),
-               RepoID:    repo.ID,
-               Repo:      repo,
-               IsPrivate: repo.IsPrivate,
-       }); err != nil {
-               log.Error("NotifyWatchers: %v", err)
-       }
-
        pr.Issue = pull
        pull.PullRequest = pr
-       mode, _ := models.AccessLevel(pull.Poster, repo)
-       if err := webhook.PrepareWebhooks(repo, models.HookEventPullRequest, &api.PullRequestPayload{
-               Action:      api.HookIssueOpened,
-               Index:       pull.Index,
-               PullRequest: pr.APIFormat(),
-               Repository:  repo.APIFormat(mode),
-               Sender:      pull.Poster.APIFormat(),
-       }); err != nil {
-               log.Error("PrepareWebhooks: %v", err)
-       }
+
+       notification.NotifyNewPullRequest(pr)
 
        return nil
 }