summaryrefslogtreecommitdiffstats
path: root/routers
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2018-10-18 19:23:05 +0800
committerGitHub <noreply@github.com>2018-10-18 19:23:05 +0800
commitea619b39b2f2a3c1fb5ad28ebd4a269b2f822111 (patch)
treeef101ad2b39dc5be1744e4488bcdd5beab16e45d /routers
parentdd62ca7ba9b49e799a8bea896cff1b209f813b7e (diff)
downloadgitea-ea619b39b2f2a3c1fb5ad28ebd4a269b2f822111.tar.gz
gitea-ea619b39b2f2a3c1fb5ad28ebd4a269b2f822111.zip
Add notification interface and refactor UI notifications (#5085)
* add notification interface and refactor UI notifications * add missing methods on notification interface and notifiy only issue status really changed * implement NotifyPullRequestReview for ui notification
Diffstat (limited to 'routers')
-rw-r--r--routers/api/v1/repo/issue.go5
-rw-r--r--routers/api/v1/repo/issue_comment.go3
-rw-r--r--routers/api/v1/repo/pull.go5
-rw-r--r--routers/repo/issue.go27
-rw-r--r--routers/repo/pull.go4
-rw-r--r--routers/repo/pull_review.go10
6 files changed, 40 insertions, 14 deletions
diff --git a/routers/api/v1/repo/issue.go b/routers/api/v1/repo/issue.go
index f8ef0fe3d9..4b634c9ca6 100644
--- a/routers/api/v1/repo/issue.go
+++ b/routers/api/v1/repo/issue.go
@@ -13,6 +13,7 @@ import (
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/indexer"
+ "code.gitea.io/gitea/modules/notification"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/util"
@@ -207,6 +208,8 @@ func CreateIssue(ctx *context.APIContext, form api.CreateIssueOption) {
return
}
+ notification.NotifyNewIssue(issue)
+
if form.Closed {
if err := issue.ChangeStatus(ctx.User, ctx.Repo.Repository, true); err != nil {
if models.IsErrDependenciesLeft(err) {
@@ -337,6 +340,8 @@ func EditIssue(ctx *context.APIContext, form api.EditIssueOption) {
ctx.Error(500, "ChangeStatus", err)
return
}
+
+ notification.NotifyIssueChangeStatus(ctx.User, issue, api.StateClosed == api.StateType(*form.State))
}
// Refetch from database to assign some automatic values
diff --git a/routers/api/v1/repo/issue_comment.go b/routers/api/v1/repo/issue_comment.go
index ba627bb8a2..f958922914 100644
--- a/routers/api/v1/repo/issue_comment.go
+++ b/routers/api/v1/repo/issue_comment.go
@@ -9,6 +9,7 @@ import (
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/context"
+ "code.gitea.io/gitea/modules/notification"
api "code.gitea.io/sdk/gitea"
)
@@ -163,6 +164,8 @@ func CreateIssueComment(ctx *context.APIContext, form api.CreateIssueCommentOpti
return
}
+ notification.NotifyCreateIssueComment(ctx.User, ctx.Repo.Repository, issue, comment)
+
ctx.JSON(201, comment.APIFormat())
}
diff --git a/routers/api/v1/repo/pull.go b/routers/api/v1/repo/pull.go
index 1527b8e8c9..0ec2d36871 100644
--- a/routers/api/v1/repo/pull.go
+++ b/routers/api/v1/repo/pull.go
@@ -14,6 +14,7 @@ import (
"code.gitea.io/gitea/modules/auth"
"code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/log"
+ "code.gitea.io/gitea/modules/notification"
"code.gitea.io/gitea/modules/util"
api "code.gitea.io/sdk/gitea"
@@ -270,6 +271,8 @@ func CreatePullRequest(ctx *context.APIContext, form api.CreatePullRequestOption
return
}
+ notification.NotifyNewPullRequest(pr)
+
log.Trace("Pull request created: %d/%d", repo.ID, prIssue.ID)
ctx.JSON(201, pr.APIFormat())
}
@@ -386,6 +389,8 @@ func EditPullRequest(ctx *context.APIContext, form api.EditPullRequestOption) {
ctx.Error(500, "ChangeStatus", err)
return
}
+
+ notification.NotifyIssueChangeStatus(ctx.User, issue, api.StateClosed == api.StateType(*form.State))
}
// Refetch from database
diff --git a/routers/repo/issue.go b/routers/repo/issue.go
index 3cce483062..3bcfdf1b04 100644
--- a/routers/repo/issue.go
+++ b/routers/repo/issue.go
@@ -490,7 +490,7 @@ func NewIssuePost(ctx *context.Context, form auth.CreateIssueForm) {
return
}
- notification.Service.NotifyIssue(issue, ctx.User.ID)
+ notification.NotifyNewIssue(issue)
log.Trace("Issue created: %d/%d", repo.ID, issue.ID)
ctx.Redirect(ctx.Repo.RepoLink + "/issues/" + com.ToStr(issue.Index))
@@ -1004,15 +1004,19 @@ func UpdateIssueStatus(ctx *context.Context) {
return
}
for _, issue := range issues {
- if err := issue.ChangeStatus(ctx.User, issue.Repo, isClosed); err != nil {
- if models.IsErrDependenciesLeft(err) {
- ctx.JSON(http.StatusPreconditionFailed, map[string]interface{}{
- "error": "cannot close this issue because it still has open dependencies",
- })
+ if issue.IsClosed != isClosed {
+ if err := issue.ChangeStatus(ctx.User, issue.Repo, isClosed); err != nil {
+ if models.IsErrDependenciesLeft(err) {
+ ctx.JSON(http.StatusPreconditionFailed, map[string]interface{}{
+ "error": "cannot close this issue because it still has open dependencies",
+ })
+ return
+ }
+ ctx.ServerError("ChangeStatus", err)
return
}
- ctx.ServerError("ChangeStatus", err)
- return
+
+ notification.NotifyIssueChangeStatus(ctx.User, issue, isClosed)
}
}
ctx.JSON(200, map[string]interface{}{
@@ -1072,7 +1076,8 @@ func NewComment(ctx *context.Context, form auth.CreateCommentForm) {
if pr != nil {
ctx.Flash.Info(ctx.Tr("repo.pulls.open_unmerged_pull_exists", pr.Index))
} else {
- if err := issue.ChangeStatus(ctx.User, ctx.Repo.Repository, form.Status == "close"); err != nil {
+ isClosed := form.Status == "close"
+ if err := issue.ChangeStatus(ctx.User, ctx.Repo.Repository, isClosed); err != nil {
log.Error(4, "ChangeStatus: %v", err)
if models.IsErrDependenciesLeft(err) {
@@ -1088,7 +1093,7 @@ func NewComment(ctx *context.Context, form auth.CreateCommentForm) {
} else {
log.Trace("Issue [%d] status changed to closed: %v", issue.ID, issue.IsClosed)
- notification.Service.NotifyIssue(issue, ctx.User.ID)
+ notification.NotifyIssueChangeStatus(ctx.User, issue, isClosed)
}
}
}
@@ -1116,7 +1121,7 @@ func NewComment(ctx *context.Context, form auth.CreateCommentForm) {
return
}
- notification.Service.NotifyIssue(issue, ctx.User.ID)
+ notification.NotifyCreateIssueComment(ctx.User, ctx.Repo.Repository, issue, comment)
log.Trace("Comment created: %d/%d/%d", ctx.Repo.Repository.ID, issue.ID, comment.ID)
}
diff --git a/routers/repo/pull.go b/routers/repo/pull.go
index 57fe33f855..4ec1c27cea 100644
--- a/routers/repo/pull.go
+++ b/routers/repo/pull.go
@@ -580,7 +580,7 @@ func MergePullRequest(ctx *context.Context, form auth.MergePullRequestForm) {
return
}
- notification.Service.NotifyIssue(pr.Issue, ctx.User.ID)
+ notification.NotifyMergePullRequest(pr, ctx.User, ctx.Repo.GitRepo)
log.Trace("Pull request merged: %d", pr.ID)
ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + com.ToStr(pr.Index))
@@ -888,7 +888,7 @@ func CompareAndPullRequestPost(ctx *context.Context, form auth.CreateIssueForm)
return
}
- notification.Service.NotifyIssue(pullIssue, ctx.User.ID)
+ notification.NotifyNewPullRequest(pullRequest)
log.Trace("Pull request created: %d/%d", repo.ID, pullIssue.ID)
ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + com.ToStr(pullIssue.Index))
diff --git a/routers/repo/pull_review.go b/routers/repo/pull_review.go
index 9d1db3ff4e..91257fea33 100644
--- a/routers/repo/pull_review.go
+++ b/routers/repo/pull_review.go
@@ -79,7 +79,7 @@ func CreateCodeComment(ctx *context.Context, form auth.CodeCommentForm) {
}
// Send no notification if comment is pending
if !form.IsReview {
- notification.Service.NotifyIssue(issue, ctx.User.ID)
+ notification.NotifyCreateIssueComment(ctx.User, issue.Repo, issue, comment)
}
log.Trace("Comment created: %d/%d/%d", ctx.Repo.Repository.ID, issue.ID, comment.ID)
@@ -184,5 +184,13 @@ func SubmitReview(ctx *context.Context, form auth.SubmitReviewForm) {
ctx.ServerError("Publish", err)
return
}
+
+ pr, err := issue.GetPullRequest()
+ if err != nil {
+ ctx.ServerError("GetPullRequest", err)
+ return
+ }
+ notification.NotifyPullRequestReview(pr, review, comm)
+
ctx.Redirect(fmt.Sprintf("%s/pulls/%d#%s", ctx.Repo.RepoLink, issue.Index, comm.HashTag()))
}