// 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) | |||||
} | |||||
} |
import ( | import ( | ||||
"code.gitea.io/gitea/models" | "code.gitea.io/gitea/models" | ||||
"code.gitea.io/gitea/modules/git" | "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/base" | ||||
"code.gitea.io/gitea/modules/notification/indexer" | "code.gitea.io/gitea/modules/notification/indexer" | ||||
"code.gitea.io/gitea/modules/notification/mail" | "code.gitea.io/gitea/modules/notification/mail" | ||||
} | } | ||||
RegisterNotifier(indexer.NewNotifier()) | RegisterNotifier(indexer.NewNotifier()) | ||||
RegisterNotifier(webhook.NewNotifier()) | RegisterNotifier(webhook.NewNotifier()) | ||||
RegisterNotifier(action.NewNotifier()) | |||||
} | } | ||||
// NotifyCreateIssueComment notifies issue comment related message to notifiers | // NotifyCreateIssueComment notifies issue comment related message to notifiers |
"code.gitea.io/gitea/modules/notification/base" | "code.gitea.io/gitea/modules/notification/base" | ||||
"code.gitea.io/gitea/modules/setting" | "code.gitea.io/gitea/modules/setting" | ||||
api "code.gitea.io/gitea/modules/structs" | api "code.gitea.io/gitea/modules/structs" | ||||
"code.gitea.io/gitea/modules/webhook" | |||||
webhook_module "code.gitea.io/gitea/modules/webhook" | webhook_module "code.gitea.io/gitea/modules/webhook" | ||||
) | ) | ||||
} | } | ||||
func (m *webhookNotifier) NotifyNewIssue(issue *models.Issue) { | 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) | mode, _ := models.AccessLevel(issue.Poster, issue.Repo) | ||||
if err := webhook_module.PrepareWebhooks(issue.Repo, models.HookEventIssues, &api.IssuePayload{ | if err := webhook_module.PrepareWebhooks(issue.Repo, models.HookEventIssues, &api.IssuePayload{ | ||||
Action: api.HookIssueOpened, | Action: api.HookIssueOpened, | ||||
} | } | ||||
} | } | ||||
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) { | func (m *webhookNotifier) NotifyIssueChangeContent(doer *models.User, issue *models.Issue, oldContent string) { | ||||
mode, _ := models.AccessLevel(issue.Poster, issue.Repo) | mode, _ := models.AccessLevel(issue.Poster, issue.Repo) | ||||
var err error | var err error |
package issue | package issue | ||||
import ( | import ( | ||||
"fmt" | |||||
"code.gitea.io/gitea/models" | "code.gitea.io/gitea/models" | ||||
"code.gitea.io/gitea/modules/log" | |||||
"code.gitea.io/gitea/modules/notification" | "code.gitea.io/gitea/modules/notification" | ||||
) | ) | ||||
} | } | ||||
} | } | ||||
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) | notification.NotifyNewIssue(issue) | ||||
return nil | return nil |
"code.gitea.io/gitea/models" | "code.gitea.io/gitea/models" | ||||
"code.gitea.io/gitea/modules/git" | "code.gitea.io/gitea/modules/git" | ||||
"code.gitea.io/gitea/modules/log" | "code.gitea.io/gitea/modules/log" | ||||
"code.gitea.io/gitea/modules/notification" | |||||
api "code.gitea.io/gitea/modules/structs" | api "code.gitea.io/gitea/modules/structs" | ||||
"code.gitea.io/gitea/modules/webhook" | "code.gitea.io/gitea/modules/webhook" | ||||
issue_service "code.gitea.io/gitea/services/issue" | issue_service "code.gitea.io/gitea/services/issue" | ||||
} | } | ||||
} | } | ||||
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 | pr.Issue = pull | ||||
pull.PullRequest = pr | 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 | return nil | ||||
} | } |