mirror of
				https://github.com/go-gitea/gitea
				synced 2025-10-30 19:08:37 +00:00 
			
		
		
		
	Move mail notification logic to service layer (#26905)
Extract from #22266
This commit is contained in:
		| @@ -15,10 +15,8 @@ import ( | |||||||
| 	"code.gitea.io/gitea/modules/notification/action" | 	"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/ui" | 	"code.gitea.io/gitea/modules/notification/ui" | ||||||
| 	"code.gitea.io/gitea/modules/repository" | 	"code.gitea.io/gitea/modules/repository" | ||||||
| 	"code.gitea.io/gitea/modules/setting" |  | ||||||
| ) | ) | ||||||
|  |  | ||||||
| var notifiers []base.Notifier | var notifiers []base.Notifier | ||||||
| @@ -32,9 +30,6 @@ func RegisterNotifier(notifier base.Notifier) { | |||||||
| // NewContext registers notification handlers | // NewContext registers notification handlers | ||||||
| func NewContext() { | func NewContext() { | ||||||
| 	RegisterNotifier(ui.NewNotifier()) | 	RegisterNotifier(ui.NewNotifier()) | ||||||
| 	if setting.Service.EnableNotifyMail { |  | ||||||
| 		RegisterNotifier(mail.NewNotifier()) |  | ||||||
| 	} |  | ||||||
| 	RegisterNotifier(indexer.NewNotifier()) | 	RegisterNotifier(indexer.NewNotifier()) | ||||||
| 	RegisterNotifier(action.NewNotifier()) | 	RegisterNotifier(action.NewNotifier()) | ||||||
| } | } | ||||||
|   | |||||||
| @@ -21,6 +21,7 @@ import ( | |||||||
| 	"code.gitea.io/gitea/modules/base" | 	"code.gitea.io/gitea/modules/base" | ||||||
| 	"code.gitea.io/gitea/modules/graceful" | 	"code.gitea.io/gitea/modules/graceful" | ||||||
| 	"code.gitea.io/gitea/modules/log" | 	"code.gitea.io/gitea/modules/log" | ||||||
|  | 	"code.gitea.io/gitea/modules/notification" | ||||||
| 	"code.gitea.io/gitea/modules/process" | 	"code.gitea.io/gitea/modules/process" | ||||||
| 	"code.gitea.io/gitea/modules/queue" | 	"code.gitea.io/gitea/modules/queue" | ||||||
| 	"code.gitea.io/gitea/modules/setting" | 	"code.gitea.io/gitea/modules/setting" | ||||||
| @@ -392,6 +393,10 @@ func NewContext(ctx context.Context) { | |||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	if setting.Service.EnableNotifyMail { | ||||||
|  | 		notification.RegisterNotifier(NewNotifier()) | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	switch setting.MailService.Protocol { | 	switch setting.MailService.Protocol { | ||||||
| 	case "sendmail": | 	case "sendmail": | ||||||
| 		Sender = &sendmailSender{} | 		Sender = &sendmailSender{} | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| // Copyright 2019 The Gitea Authors. All rights reserved. | // Copyright 2019 The Gitea Authors. All rights reserved. | ||||||
| // SPDX-License-Identifier: MIT | // SPDX-License-Identifier: MIT | ||||||
| 
 | 
 | ||||||
| package mail | package mailer | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"context" | 	"context" | ||||||
| @@ -13,7 +13,6 @@ import ( | |||||||
| 	user_model "code.gitea.io/gitea/models/user" | 	user_model "code.gitea.io/gitea/models/user" | ||||||
| 	"code.gitea.io/gitea/modules/log" | 	"code.gitea.io/gitea/modules/log" | ||||||
| 	"code.gitea.io/gitea/modules/notification/base" | 	"code.gitea.io/gitea/modules/notification/base" | ||||||
| 	"code.gitea.io/gitea/services/mailer" |  | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| type mailNotifier struct { | type mailNotifier struct { | ||||||
| @@ -43,13 +42,13 @@ func (m *mailNotifier) NotifyCreateIssueComment(ctx context.Context, doer *user_ | |||||||
| 		act = 0 | 		act = 0 | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if err := mailer.MailParticipantsComment(ctx, comment, act, issue, mentions); err != nil { | 	if err := MailParticipantsComment(ctx, comment, act, issue, mentions); err != nil { | ||||||
| 		log.Error("MailParticipantsComment: %v", err) | 		log.Error("MailParticipantsComment: %v", err) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (m *mailNotifier) NotifyNewIssue(ctx context.Context, issue *issues_model.Issue, mentions []*user_model.User) { | func (m *mailNotifier) NotifyNewIssue(ctx context.Context, issue *issues_model.Issue, mentions []*user_model.User) { | ||||||
| 	if err := mailer.MailParticipants(ctx, issue, issue.Poster, activities_model.ActionCreateIssue, mentions); err != nil { | 	if err := MailParticipants(ctx, issue, issue.Poster, activities_model.ActionCreateIssue, mentions); err != nil { | ||||||
| 		log.Error("MailParticipants: %v", err) | 		log.Error("MailParticipants: %v", err) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| @@ -70,7 +69,7 @@ func (m *mailNotifier) NotifyIssueChangeStatus(ctx context.Context, doer *user_m | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if err := mailer.MailParticipants(ctx, issue, doer, actionType, nil); err != nil { | 	if err := MailParticipants(ctx, issue, doer, actionType, nil); err != nil { | ||||||
| 		log.Error("MailParticipants: %v", err) | 		log.Error("MailParticipants: %v", err) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| @@ -81,14 +80,14 @@ func (m *mailNotifier) NotifyIssueChangeTitle(ctx context.Context, doer *user_mo | |||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 	if issue.IsPull && issues_model.HasWorkInProgressPrefix(oldTitle) && !issue.PullRequest.IsWorkInProgress() { | 	if issue.IsPull && issues_model.HasWorkInProgressPrefix(oldTitle) && !issue.PullRequest.IsWorkInProgress() { | ||||||
| 		if err := mailer.MailParticipants(ctx, issue, doer, activities_model.ActionPullRequestReadyForReview, nil); err != nil { | 		if err := MailParticipants(ctx, issue, doer, activities_model.ActionPullRequestReadyForReview, nil); err != nil { | ||||||
| 			log.Error("MailParticipants: %v", err) | 			log.Error("MailParticipants: %v", err) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (m *mailNotifier) NotifyNewPullRequest(ctx context.Context, pr *issues_model.PullRequest, mentions []*user_model.User) { | func (m *mailNotifier) NotifyNewPullRequest(ctx context.Context, pr *issues_model.PullRequest, mentions []*user_model.User) { | ||||||
| 	if err := mailer.MailParticipants(ctx, pr.Issue, pr.Issue.Poster, activities_model.ActionCreatePullRequest, mentions); err != nil { | 	if err := MailParticipants(ctx, pr.Issue, pr.Issue.Poster, activities_model.ActionCreatePullRequest, mentions); err != nil { | ||||||
| 		log.Error("MailParticipants: %v", err) | 		log.Error("MailParticipants: %v", err) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| @@ -102,13 +101,13 @@ func (m *mailNotifier) NotifyPullRequestReview(ctx context.Context, pr *issues_m | |||||||
| 	} else if comment.Type == issues_model.CommentTypeComment { | 	} else if comment.Type == issues_model.CommentTypeComment { | ||||||
| 		act = activities_model.ActionCommentPull | 		act = activities_model.ActionCommentPull | ||||||
| 	} | 	} | ||||||
| 	if err := mailer.MailParticipantsComment(ctx, comment, act, pr.Issue, mentions); err != nil { | 	if err := MailParticipantsComment(ctx, comment, act, pr.Issue, mentions); err != nil { | ||||||
| 		log.Error("MailParticipantsComment: %v", err) | 		log.Error("MailParticipantsComment: %v", err) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (m *mailNotifier) NotifyPullRequestCodeComment(ctx context.Context, pr *issues_model.PullRequest, comment *issues_model.Comment, mentions []*user_model.User) { | func (m *mailNotifier) NotifyPullRequestCodeComment(ctx context.Context, pr *issues_model.PullRequest, comment *issues_model.Comment, mentions []*user_model.User) { | ||||||
| 	if err := mailer.MailMentionsComment(ctx, pr, comment, mentions); err != nil { | 	if err := MailMentionsComment(ctx, pr, comment, mentions); err != nil { | ||||||
| 		log.Error("MailMentionsComment: %v", err) | 		log.Error("MailMentionsComment: %v", err) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| @@ -117,7 +116,7 @@ func (m *mailNotifier) NotifyIssueChangeAssignee(ctx context.Context, doer *user | |||||||
| 	// mail only sent to added assignees and not self-assignee | 	// mail only sent to added assignees and not self-assignee | ||||||
| 	if !removed && doer.ID != assignee.ID && assignee.EmailNotifications() != user_model.EmailNotificationsDisabled { | 	if !removed && doer.ID != assignee.ID && assignee.EmailNotifications() != user_model.EmailNotificationsDisabled { | ||||||
| 		ct := fmt.Sprintf("Assigned #%d.", issue.Index) | 		ct := fmt.Sprintf("Assigned #%d.", issue.Index) | ||||||
| 		if err := mailer.SendIssueAssignedMail(ctx, issue, doer, ct, comment, []*user_model.User{assignee}); err != nil { | 		if err := SendIssueAssignedMail(ctx, issue, doer, ct, comment, []*user_model.User{assignee}); err != nil { | ||||||
| 			log.Error("Error in SendIssueAssignedMail for issue[%d] to assignee[%d]: %v", issue.ID, assignee.ID, err) | 			log.Error("Error in SendIssueAssignedMail for issue[%d] to assignee[%d]: %v", issue.ID, assignee.ID, err) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| @@ -126,7 +125,7 @@ func (m *mailNotifier) NotifyIssueChangeAssignee(ctx context.Context, doer *user | |||||||
| func (m *mailNotifier) NotifyPullRequestReviewRequest(ctx context.Context, doer *user_model.User, issue *issues_model.Issue, reviewer *user_model.User, isRequest bool, comment *issues_model.Comment) { | func (m *mailNotifier) NotifyPullRequestReviewRequest(ctx context.Context, doer *user_model.User, issue *issues_model.Issue, reviewer *user_model.User, isRequest bool, comment *issues_model.Comment) { | ||||||
| 	if isRequest && doer.ID != reviewer.ID && reviewer.EmailNotifications() != user_model.EmailNotificationsDisabled { | 	if isRequest && doer.ID != reviewer.ID && reviewer.EmailNotifications() != user_model.EmailNotificationsDisabled { | ||||||
| 		ct := fmt.Sprintf("Requested to review %s.", issue.HTMLURL()) | 		ct := fmt.Sprintf("Requested to review %s.", issue.HTMLURL()) | ||||||
| 		if err := mailer.SendIssueAssignedMail(ctx, issue, doer, ct, comment, []*user_model.User{reviewer}); err != nil { | 		if err := SendIssueAssignedMail(ctx, issue, doer, ct, comment, []*user_model.User{reviewer}); err != nil { | ||||||
| 			log.Error("Error in SendIssueAssignedMail for issue[%d] to reviewer[%d]: %v", issue.ID, reviewer.ID, err) | 			log.Error("Error in SendIssueAssignedMail for issue[%d] to reviewer[%d]: %v", issue.ID, reviewer.ID, err) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| @@ -137,7 +136,7 @@ func (m *mailNotifier) NotifyMergePullRequest(ctx context.Context, doer *user_mo | |||||||
| 		log.Error("LoadIssue: %v", err) | 		log.Error("LoadIssue: %v", err) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 	if err := mailer.MailParticipants(ctx, pr.Issue, doer, activities_model.ActionMergePullRequest, nil); err != nil { | 	if err := MailParticipants(ctx, pr.Issue, doer, activities_model.ActionMergePullRequest, nil); err != nil { | ||||||
| 		log.Error("MailParticipants: %v", err) | 		log.Error("MailParticipants: %v", err) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| @@ -147,7 +146,7 @@ func (m *mailNotifier) NotifyAutoMergePullRequest(ctx context.Context, doer *use | |||||||
| 		log.Error("pr.LoadIssue: %v", err) | 		log.Error("pr.LoadIssue: %v", err) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 	if err := mailer.MailParticipants(ctx, pr.Issue, doer, activities_model.ActionAutoMergePullRequest, nil); err != nil { | 	if err := MailParticipants(ctx, pr.Issue, doer, activities_model.ActionAutoMergePullRequest, nil); err != nil { | ||||||
| 		log.Error("MailParticipants: %v", err) | 		log.Error("MailParticipants: %v", err) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| @@ -177,7 +176,7 @@ func (m *mailNotifier) NotifyPullRequestPushCommits(ctx context.Context, doer *u | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (m *mailNotifier) NotifyPullReviewDismiss(ctx context.Context, doer *user_model.User, review *issues_model.Review, comment *issues_model.Comment) { | func (m *mailNotifier) NotifyPullReviewDismiss(ctx context.Context, doer *user_model.User, review *issues_model.Review, comment *issues_model.Comment) { | ||||||
| 	if err := mailer.MailParticipantsComment(ctx, comment, activities_model.ActionPullReviewDismissed, review.Issue, nil); err != nil { | 	if err := MailParticipantsComment(ctx, comment, activities_model.ActionPullReviewDismissed, review.Issue, nil); err != nil { | ||||||
| 		log.Error("MailParticipantsComment: %v", err) | 		log.Error("MailParticipantsComment: %v", err) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| @@ -192,11 +191,11 @@ func (m *mailNotifier) NotifyNewRelease(ctx context.Context, rel *repo_model.Rel | |||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	mailer.MailNewRelease(ctx, rel) | 	MailNewRelease(ctx, rel) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (m *mailNotifier) NotifyRepoPendingTransfer(ctx context.Context, doer, newOwner *user_model.User, repo *repo_model.Repository) { | func (m *mailNotifier) NotifyRepoPendingTransfer(ctx context.Context, doer, newOwner *user_model.User, repo *repo_model.Repository) { | ||||||
| 	if err := mailer.SendRepoTransferNotifyMail(ctx, doer, newOwner, repo); err != nil { | 	if err := SendRepoTransferNotifyMail(ctx, doer, newOwner, repo); err != nil { | ||||||
| 		log.Error("SendRepoTransferNotifyMail: %v", err) | 		log.Error("SendRepoTransferNotifyMail: %v", err) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
		Reference in New Issue
	
	Block a user