diff options
Diffstat (limited to 'routers/events/events.go')
-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 |