diff options
author | zeripath <art27@cantab.net> | 2021-02-19 10:05:35 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-19 11:05:35 +0100 |
commit | 092299891f07326f65b27e050c7aa8a9595b3445 (patch) | |
tree | dd2eb099539a3bf10d8151396116ba964314a56c /routers | |
parent | 430b3b780619bfcdcf0af209e0cba45caa32efbd (diff) | |
download | gitea-092299891f07326f65b27e050c7aa8a9595b3445.tar.gz gitea-092299891f07326f65b27e050c7aa8a9595b3445.zip |
Move the stopwatches to the eventsource stream (#14588)
Move the stopwatches to the eventsource stream
Use the /user/events eventsource to update the stopwatches
instead of polling /api/v1/user/stopwatches if the eventsource
is enabled.
Signed-off-by: Andrew Thornton <art27@cantab.net>
Diffstat (limited to 'routers')
-rw-r--r-- | routers/events/events.go | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/routers/events/events.go b/routers/events/events.go index a1131f29e3..2b78d8603b 100644 --- a/routers/events/events.go +++ b/routers/events/events.go @@ -5,13 +5,17 @@ package events import ( + "encoding/json" "net/http" "time" + "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/context" + "code.gitea.io/gitea/modules/convert" "code.gitea.io/gitea/modules/eventsource" "code.gitea.io/gitea/modules/graceful" "code.gitea.io/gitea/modules/log" + "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/routers/user" ) @@ -55,6 +59,8 @@ func Events(ctx *context.Context) { timer := time.NewTicker(30 * time.Second) + stopwatchTimer := time.NewTicker(setting.UI.Notification.MinTimeout) + loop: for { select { @@ -75,6 +81,32 @@ loop: case <-shutdownCtx.Done(): go unregister() break loop + case <-stopwatchTimer.C: + sws, err := models.GetUserStopwatches(ctx.User.ID, models.ListOptions{}) + if err != nil { + log.Error("Unable to GetUserStopwatches: %v", err) + continue + } + apiSWs, err := convert.ToStopWatches(sws) + if err != nil { + log.Error("Unable to APIFormat stopwatches: %v", err) + continue + } + dataBs, err := json.Marshal(apiSWs) + if err != nil { + log.Error("Unable to marshal stopwatches: %v", err) + continue + } + _, err = (&eventsource.Event{ + Name: "stopwatches", + Data: string(dataBs), + }).WriteTo(ctx.Resp) + if err != nil { + log.Error("Unable to write to EventStream for user %s: %v", ctx.User.Name, err) + go unregister() + break loop + } + ctx.Resp.Flush() case event, ok := <-messageChan: if !ok { break loop |