Skip to content

Commit 491887d

Browse files
lunnyzeripath
authored andcommitted
Move actions to notification (#8785)
1 parent 7971b05 commit 491887d

File tree

5 files changed

+118
-37
lines changed

5 files changed

+118
-37
lines changed

modules/notification/action/action.go

+77
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
// Copyright 2019 The Gitea Authors. All rights reserved.
2+
// Use of this source code is governed by a MIT-style
3+
// license that can be found in the LICENSE file.
4+
5+
package action
6+
7+
import (
8+
"fmt"
9+
10+
"code.gitea.io/gitea/models"
11+
"code.gitea.io/gitea/modules/log"
12+
"code.gitea.io/gitea/modules/notification/base"
13+
)
14+
15+
type actionNotifier struct {
16+
base.NullNotifier
17+
}
18+
19+
var (
20+
_ base.Notifier = &actionNotifier{}
21+
)
22+
23+
// NewNotifier create a new webhookNotifier notifier
24+
func NewNotifier() base.Notifier {
25+
return &actionNotifier{}
26+
}
27+
28+
func (a *actionNotifier) NotifyNewIssue(issue *models.Issue) {
29+
if err := issue.LoadPoster(); err != nil {
30+
log.Error("issue.LoadPoster: %v", err)
31+
return
32+
}
33+
if err := issue.LoadRepo(); err != nil {
34+
log.Error("issue.LoadRepo: %v", err)
35+
return
36+
}
37+
repo := issue.Repo
38+
39+
if err := models.NotifyWatchers(&models.Action{
40+
ActUserID: issue.Poster.ID,
41+
ActUser: issue.Poster,
42+
OpType: models.ActionCreateIssue,
43+
Content: fmt.Sprintf("%d|%s", issue.Index, issue.Title),
44+
RepoID: repo.ID,
45+
Repo: repo,
46+
IsPrivate: repo.IsPrivate,
47+
}); err != nil {
48+
log.Error("NotifyWatchers: %v", err)
49+
}
50+
}
51+
52+
func (a *actionNotifier) NotifyNewPullRequest(pull *models.PullRequest) {
53+
if err := pull.LoadIssue(); err != nil {
54+
log.Error("pull.LoadIssue: %v", err)
55+
return
56+
}
57+
if err := pull.Issue.LoadRepo(); err != nil {
58+
log.Error("pull.Issue.LoadRepo: %v", err)
59+
return
60+
}
61+
if err := pull.Issue.LoadPoster(); err != nil {
62+
log.Error("pull.Issue.LoadPoster: %v", err)
63+
return
64+
}
65+
66+
if err := models.NotifyWatchers(&models.Action{
67+
ActUserID: pull.Issue.Poster.ID,
68+
ActUser: pull.Issue.Poster,
69+
OpType: models.ActionCreatePullRequest,
70+
Content: fmt.Sprintf("%d|%s", pull.Issue.Index, pull.Issue.Title),
71+
RepoID: pull.Issue.Repo.ID,
72+
Repo: pull.Issue.Repo,
73+
IsPrivate: pull.Issue.Repo.IsPrivate,
74+
}); err != nil {
75+
log.Error("NotifyWatchers: %v", err)
76+
}
77+
}

modules/notification/notification.go

+2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ package notification
77
import (
88
"code.gitea.io/gitea/models"
99
"code.gitea.io/gitea/modules/git"
10+
"code.gitea.io/gitea/modules/notification/action"
1011
"code.gitea.io/gitea/modules/notification/base"
1112
"code.gitea.io/gitea/modules/notification/indexer"
1213
"code.gitea.io/gitea/modules/notification/mail"
@@ -33,6 +34,7 @@ func NewContext() {
3334
}
3435
RegisterNotifier(indexer.NewNotifier())
3536
RegisterNotifier(webhook.NewNotifier())
37+
RegisterNotifier(action.NewNotifier())
3638
}
3739

3840
// NotifyCreateIssueComment notifies issue comment related message to notifiers

modules/notification/webhook/webhook.go

+36
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"code.gitea.io/gitea/modules/notification/base"
1111
"code.gitea.io/gitea/modules/setting"
1212
api "code.gitea.io/gitea/modules/structs"
13+
"code.gitea.io/gitea/modules/webhook"
1314
webhook_module "code.gitea.io/gitea/modules/webhook"
1415
)
1516

@@ -251,6 +252,15 @@ func (m *webhookNotifier) NotifyIssueChangeStatus(doer *models.User, issue *mode
251252
}
252253

253254
func (m *webhookNotifier) NotifyNewIssue(issue *models.Issue) {
255+
if err := issue.LoadRepo(); err != nil {
256+
log.Error("issue.LoadRepo: %v", err)
257+
return
258+
}
259+
if err := issue.LoadPoster(); err != nil {
260+
log.Error("issue.LoadPoster: %v", err)
261+
return
262+
}
263+
254264
mode, _ := models.AccessLevel(issue.Poster, issue.Repo)
255265
if err := webhook_module.PrepareWebhooks(issue.Repo, models.HookEventIssues, &api.IssuePayload{
256266
Action: api.HookIssueOpened,
@@ -263,6 +273,32 @@ func (m *webhookNotifier) NotifyNewIssue(issue *models.Issue) {
263273
}
264274
}
265275

276+
func (m *webhookNotifier) NotifyNewPullRequest(pull *models.PullRequest) {
277+
if err := pull.LoadIssue(); err != nil {
278+
log.Error("pull.LoadIssue: %v", err)
279+
return
280+
}
281+
if err := pull.Issue.LoadRepo(); err != nil {
282+
log.Error("pull.Issue.LoadRepo: %v", err)
283+
return
284+
}
285+
if err := pull.Issue.LoadPoster(); err != nil {
286+
log.Error("pull.Issue.LoadPoster: %v", err)
287+
return
288+
}
289+
290+
mode, _ := models.AccessLevel(pull.Issue.Poster, pull.Issue.Repo)
291+
if err := webhook.PrepareWebhooks(pull.Issue.Repo, models.HookEventPullRequest, &api.PullRequestPayload{
292+
Action: api.HookIssueOpened,
293+
Index: pull.Issue.Index,
294+
PullRequest: pull.APIFormat(),
295+
Repository: pull.Issue.Repo.APIFormat(mode),
296+
Sender: pull.Issue.Poster.APIFormat(),
297+
}); err != nil {
298+
log.Error("PrepareWebhooks: %v", err)
299+
}
300+
}
301+
266302
func (m *webhookNotifier) NotifyIssueChangeContent(doer *models.User, issue *models.Issue, oldContent string) {
267303
mode, _ := models.AccessLevel(issue.Poster, issue.Repo)
268304
var err error

services/issue/issue.go

-15
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,7 @@
55
package issue
66

77
import (
8-
"fmt"
9-
108
"code.gitea.io/gitea/models"
11-
"code.gitea.io/gitea/modules/log"
129
"code.gitea.io/gitea/modules/notification"
1310
)
1411

@@ -24,18 +21,6 @@ func NewIssue(repo *models.Repository, issue *models.Issue, labelIDs []int64, uu
2421
}
2522
}
2623

27-
if err := models.NotifyWatchers(&models.Action{
28-
ActUserID: issue.Poster.ID,
29-
ActUser: issue.Poster,
30-
OpType: models.ActionCreateIssue,
31-
Content: fmt.Sprintf("%d|%s", issue.Index, issue.Title),
32-
RepoID: repo.ID,
33-
Repo: repo,
34-
IsPrivate: repo.IsPrivate,
35-
}); err != nil {
36-
log.Error("NotifyWatchers: %v", err)
37-
}
38-
3924
notification.NotifyNewIssue(issue)
4025

4126
return nil

services/pull/pull.go

+3-22
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"code.gitea.io/gitea/models"
1111
"code.gitea.io/gitea/modules/git"
1212
"code.gitea.io/gitea/modules/log"
13+
"code.gitea.io/gitea/modules/notification"
1314
api "code.gitea.io/gitea/modules/structs"
1415
"code.gitea.io/gitea/modules/webhook"
1516
issue_service "code.gitea.io/gitea/services/issue"
@@ -27,30 +28,10 @@ func NewPullRequest(repo *models.Repository, pull *models.Issue, labelIDs []int6
2728
}
2829
}
2930

30-
if err := models.NotifyWatchers(&models.Action{
31-
ActUserID: pull.Poster.ID,
32-
ActUser: pull.Poster,
33-
OpType: models.ActionCreatePullRequest,
34-
Content: fmt.Sprintf("%d|%s", pull.Index, pull.Title),
35-
RepoID: repo.ID,
36-
Repo: repo,
37-
IsPrivate: repo.IsPrivate,
38-
}); err != nil {
39-
log.Error("NotifyWatchers: %v", err)
40-
}
41-
4231
pr.Issue = pull
4332
pull.PullRequest = pr
44-
mode, _ := models.AccessLevel(pull.Poster, repo)
45-
if err := webhook.PrepareWebhooks(repo, models.HookEventPullRequest, &api.PullRequestPayload{
46-
Action: api.HookIssueOpened,
47-
Index: pull.Index,
48-
PullRequest: pr.APIFormat(),
49-
Repository: repo.APIFormat(mode),
50-
Sender: pull.Poster.APIFormat(),
51-
}); err != nil {
52-
log.Error("PrepareWebhooks: %v", err)
53-
}
33+
34+
notification.NotifyNewPullRequest(pr)
5435

5536
return nil
5637
}

0 commit comments

Comments
 (0)