You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
cointop/cointop/refresh.go

74 lines
1.4 KiB
Go

package cointop
import (
"strings"
"time"
log "github.com/sirupsen/logrus"
)
// Refresh triggers a force refresh of coin data
func (ct *Cointop) Refresh() error {
log.Debug("Refresh()")
go func() {
<-ct.limiter
ct.forceRefresh <- true
}()
return nil
}
// RefreshAll triggers a force refresh of all data
func (ct *Cointop) RefreshAll() error {
log.Debug("RefreshAll()")
ct.refreshMux.Lock()
defer ct.refreshMux.Unlock()
ct.setRefreshStatus()
ct.cache.Delete("allCoinsSlugMap")
ct.cache.Delete("market")
go func() {
ct.UpdateCoins()
ct.UpdateTable()
ct.UpdateChart()
}()
return nil
}
// SetRefreshStatus sets the refresh ticker
func (ct *Cointop) setRefreshStatus() {
log.Debug("setRefreshStatus()")
go func() {
ct.loadingTicks("refreshing", 900)
ct.RowChanged()
}()
}
// LoadingTicks sets the loading ticking dots
func (ct *Cointop) loadingTicks(s string, t int) {
log.Debug("loadingTicks()")
interval := 150
k := 0
for i := 0; i < (t / interval); i++ {
ct.UpdateStatusbar(s + strings.Repeat(".", k))
time.Sleep(time.Duration(i*interval) * time.Millisecond)
k = k + 1
if k > 3 {
k = 0
}
}
}
// intervalFetchData does a force refresh at every interval
func (ct *Cointop) intervalFetchData() {
log.Debug("intervalFetchData()")
go func() {
for {
select {
case <-ct.forceRefresh:
ct.RefreshAll()
case <-ct.refreshTicker.C:
ct.RefreshAll()
}
}
}()
}