diff options
author | Norwin <noerw@users.noreply.github.com> | 2021-01-21 14:51:52 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-21 15:51:52 +0100 |
commit | b5570d3e680570343c1552bfc972b19b161209cd (patch) | |
tree | 548fbcdb9a760b47c54ac931c0180d87d08029d5 /routers | |
parent | 56a89296050096df29d0a653019c194631cc6562 (diff) | |
download | gitea-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.go | 45 | ||||
-rw-r--r-- | routers/routes/macaron.go | 1 |
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() |