summaryrefslogtreecommitdiffstats
path: root/routers
diff options
context:
space:
mode:
authorNorwin <noerw@users.noreply.github.com>2021-01-21 14:51:52 +0000
committerGitHub <noreply@github.com>2021-01-21 15:51:52 +0100
commitb5570d3e680570343c1552bfc972b19b161209cd (patch)
tree548fbcdb9a760b47c54ac931c0180d87d08029d5 /routers
parent56a89296050096df29d0a653019c194631cc6562 (diff)
downloadgitea-b5570d3e680570343c1552bfc972b19b161209cd.tar.gz
gitea-b5570d3e680570343c1552bfc972b19b161209cd.zip
Display current stopwatch in navbar (#14122)
* add notification about running stopwatch to header * serialize seconds, duration in stopwatches api * ajax update stopwatch i should get my testenv working locally... * new variant: hover dialog * noscript compatibility * js: live-update stopwatch time * js live update robustness
Diffstat (limited to 'routers')
-rw-r--r--routers/repo/issue_stopwatch.go45
-rw-r--r--routers/routes/macaron.go1
2 files changed, 46 insertions, 0 deletions
diff --git a/routers/repo/issue_stopwatch.go b/routers/repo/issue_stopwatch.go
index 28105dfe03..b8efb3b841 100644
--- a/routers/repo/issue_stopwatch.go
+++ b/routers/repo/issue_stopwatch.go
@@ -6,6 +6,7 @@ package repo
import (
"net/http"
+ "strings"
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/context"
@@ -61,3 +62,47 @@ func CancelStopwatch(c *context.Context) {
url := issue.HTMLURL()
c.Redirect(url, http.StatusSeeOther)
}
+
+// GetActiveStopwatch is the middleware that sets .ActiveStopwatch on context
+func GetActiveStopwatch(c *context.Context) {
+ if strings.HasPrefix(c.Req.URL.Path, "/api") {
+ return
+ }
+
+ if !c.IsSigned {
+ return
+ }
+
+ _, sw, err := models.HasUserStopwatch(c.User.ID)
+ if err != nil {
+ c.ServerError("HasUserStopwatch", err)
+ return
+ }
+
+ if sw == nil || sw.ID == 0 {
+ return
+ }
+
+ issue, err := models.GetIssueByID(sw.IssueID)
+ if err != nil || issue == nil {
+ c.ServerError("GetIssueByID", err)
+ return
+ }
+ if err = issue.LoadRepo(); err != nil {
+ c.ServerError("LoadRepo", err)
+ return
+ }
+
+ c.Data["ActiveStopwatch"] = StopwatchTmplInfo{
+ issue.Repo.FullName(),
+ issue.Index,
+ sw.Seconds() + 1, // ensure time is never zero in ui
+ }
+}
+
+// StopwatchTmplInfo is a view on a stopwatch specifically for template rendering
+type StopwatchTmplInfo struct {
+ RepoSlug string
+ IssueIndex int64
+ Seconds int64
+}
diff --git a/routers/routes/macaron.go b/routers/routes/macaron.go
index 34978724a8..f64a0a597b 100644
--- a/routers/routes/macaron.go
+++ b/routers/routes/macaron.go
@@ -176,6 +176,7 @@ func RegisterMacaronRoutes(m *macaron.Macaron) {
}
m.Use(user.GetNotificationCount)
+ m.Use(repo.GetActiveStopwatch)
m.Use(func(ctx *context.Context) {
ctx.Data["UnitWikiGlobalDisabled"] = models.UnitTypeWiki.UnitGlobalDisabled()
ctx.Data["UnitIssuesGlobalDisabled"] = models.UnitTypeIssues.UnitGlobalDisabled()