From 69b11cbfd2a3600c15541501638ffdf83af3972a Mon Sep 17 00:00:00 2001 From: Jesse Duffield Date: Sun, 2 Jun 2019 20:30:33 +1000 Subject: [PATCH] add new ticker task convenience function --- pkg/gui/containers_panel.go | 22 +++++++--------------- pkg/tasks/tasks.go | 17 +++++++++++++++++ 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/pkg/gui/containers_panel.go b/pkg/gui/containers_panel.go index 046a4250..c92c48b0 100644 --- a/pkg/gui/containers_panel.go +++ b/pkg/gui/containers_panel.go @@ -123,23 +123,15 @@ func (gui *Gui) renderContainerStats(mainView *gocui.View, container *commands.C mainView.Autoscroll = false mainView.Title = "Stats" - return gui.T.NewTask(func(stop chan struct{}) { - tickChan := time.NewTicker(time.Second) - for { - select { - case <-stop: - return - case <-tickChan.C: - width, _ := mainView.Size() + return gui.T.NewTickerTask(time.Second, func() { + width, _ := mainView.Size() - contents, err := container.RenderStats(width) - if err != nil { - gui.createErrorPanel(gui.g, err.Error()) - } - - gui.reRenderString(gui.g, "main", contents) - } + contents, err := container.RenderStats(width) + if err != nil { + gui.createErrorPanel(gui.g, err.Error()) } + + gui.reRenderString(gui.g, "main", contents) }) } diff --git a/pkg/tasks/tasks.go b/pkg/tasks/tasks.go index 995c8223..951b189c 100644 --- a/pkg/tasks/tasks.go +++ b/pkg/tasks/tasks.go @@ -2,6 +2,7 @@ package tasks import ( "sync" + "time" "github.com/sirupsen/logrus" ) @@ -53,3 +54,19 @@ func (t *Task) Stop() { <-t.notifyStopped return } + +// NewTickerTask is a convenience function for making a new task that repeats some action once per e.g. second +func (t *TaskManager) NewTickerTask(duration time.Duration, f func()) error { + return t.NewTask(func(stop chan struct{}) { + tickChan := time.NewTicker(time.Second) + f() // calling f first so that we're not waiting for the first tick + for { + select { + case <-stop: + return + case <-tickChan.C: + f() + } + } + }) +}