mirror of
https://github.com/taigrr/wtf
synced 2025-01-18 04:03:14 -08:00
Move the scheduler up into /app
This commit is contained in:
parent
a6d18e286a
commit
cfd3c731ba
37
app/scheduler.go
Normal file
37
app/scheduler.go
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
package app
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/wtfutil/wtf/wtf"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Schedule kicks off the first refresh of a module's data and then queues the rest of the
|
||||||
|
// data refreshes on a timer
|
||||||
|
func Schedule(widget wtf.Wtfable) {
|
||||||
|
widget.Refresh()
|
||||||
|
|
||||||
|
interval := time.Duration(widget.RefreshInterval()) * time.Second
|
||||||
|
|
||||||
|
if interval <= 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
tick := time.NewTicker(interval)
|
||||||
|
quit := make(chan struct{})
|
||||||
|
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case <-tick.C:
|
||||||
|
if widget.Enabled() {
|
||||||
|
widget.Refresh()
|
||||||
|
} else {
|
||||||
|
tick.Stop()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
case <-quit:
|
||||||
|
tick.Stop()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -47,8 +47,6 @@ func NewWtfApp(app *tview.Application, config *config.Config, configFilePath str
|
|||||||
|
|
||||||
wtf.ValidateWidgets(wtfApp.Widgets)
|
wtf.ValidateWidgets(wtfApp.Widgets)
|
||||||
|
|
||||||
wtfApp.scheduleWidgets()
|
|
||||||
|
|
||||||
return &wtfApp
|
return &wtfApp
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -56,13 +54,12 @@ func NewWtfApp(app *tview.Application, config *config.Config, configFilePath str
|
|||||||
|
|
||||||
// Start initializes the app
|
// Start initializes the app
|
||||||
func (wtfApp *WtfApp) Start() {
|
func (wtfApp *WtfApp) Start() {
|
||||||
|
wtfApp.scheduleWidgets()
|
||||||
go wtfApp.watchForConfigChanges()
|
go wtfApp.watchForConfigChanges()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Stop kills all the currently-running widgets in this app
|
// Stop kills all the currently-running widgets in this app
|
||||||
func (wtfApp *WtfApp) Stop() {
|
func (wtfApp *WtfApp) Stop() {
|
||||||
// TODO: Pretty sure we should kill their go routines that run them as well
|
|
||||||
// otherwise....?
|
|
||||||
wtfApp.disableAllWidgets()
|
wtfApp.disableAllWidgets()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -115,7 +112,7 @@ func (wtfApp *WtfApp) refreshAllWidgets() {
|
|||||||
|
|
||||||
func (wtfApp *WtfApp) scheduleWidgets() {
|
func (wtfApp *WtfApp) scheduleWidgets() {
|
||||||
for _, widget := range wtfApp.Widgets {
|
for _, widget := range wtfApp.Widgets {
|
||||||
go wtf.Schedule(widget)
|
go Schedule(widget)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,8 +2,7 @@ package wtf
|
|||||||
|
|
||||||
// Enablable is the interface that enforces enable/disable capabilities on a module
|
// Enablable is the interface that enforces enable/disable capabilities on a module
|
||||||
type Enablable interface {
|
type Enablable interface {
|
||||||
|
Disable()
|
||||||
Disabled() bool
|
Disabled() bool
|
||||||
Enabled() bool
|
Enabled() bool
|
||||||
|
|
||||||
Disable()
|
|
||||||
}
|
}
|
||||||
|
@ -1,42 +1,8 @@
|
|||||||
package wtf
|
package wtf
|
||||||
|
|
||||||
import (
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Schedulable is the interface that enforces scheduling capabilities on a module
|
// Schedulable is the interface that enforces scheduling capabilities on a module
|
||||||
type Schedulable interface {
|
type Schedulable interface {
|
||||||
Refresh()
|
Refresh()
|
||||||
Refreshing() bool
|
Refreshing() bool
|
||||||
RefreshInterval() int
|
RefreshInterval() int
|
||||||
}
|
}
|
||||||
|
|
||||||
// Schedule kicks off the first refresh of a module's data and then queues the rest of the
|
|
||||||
// data refreshes on a timer
|
|
||||||
func Schedule(widget Wtfable) {
|
|
||||||
widget.Refresh()
|
|
||||||
|
|
||||||
interval := time.Duration(widget.RefreshInterval()) * time.Second
|
|
||||||
|
|
||||||
if interval <= 0 {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
tick := time.NewTicker(interval)
|
|
||||||
quit := make(chan struct{})
|
|
||||||
|
|
||||||
for {
|
|
||||||
select {
|
|
||||||
case <-tick.C:
|
|
||||||
if widget.Enabled() {
|
|
||||||
widget.Refresh()
|
|
||||||
} else {
|
|
||||||
tick.Stop()
|
|
||||||
return
|
|
||||||
}
|
|
||||||
case <-quit:
|
|
||||||
tick.Stop()
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user