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/repo | |
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/repo')
-rw-r--r-- | routers/repo/issue_stopwatch.go | 45 |
1 files changed, 45 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 +} |