refresh rate

This commit is contained in:
Nazar Kanaev 2020-10-13 22:16:24 +01:00
parent e17ce0fb31
commit 78844def40
3 changed files with 58 additions and 16 deletions

View File

@ -372,6 +372,9 @@ func SettingsHandler(rw http.ResponseWriter, req *http.Request) {
return return
} }
if db(req).UpdateSettings(settings) { if db(req).UpdateSettings(settings) {
if _, ok := settings["refresh_rate"]; ok {
handler(req).refreshRate <- db(req).GetSettingsValueInt64("refresh_rate")
}
rw.WriteHeader(http.StatusOK) rw.WriteHeader(http.StatusOK)
} else { } else {
rw.WriteHeader(http.StatusBadRequest) rw.WriteHeader(http.StatusBadRequest)

View File

@ -16,6 +16,7 @@ type Handler struct {
log *log.Logger log *log.Logger
feedQueue chan storage.Feed feedQueue chan storage.Feed
queueSize *int32 queueSize *int32
refreshRate chan int64
} }
func New(db *storage.Storage, logger *log.Logger, addr string) *Handler { func New(db *storage.Storage, logger *log.Logger, addr string) *Handler {
@ -26,6 +27,7 @@ func New(db *storage.Storage, logger *log.Logger, addr string) *Handler {
feedQueue: make(chan storage.Feed, 3000), feedQueue: make(chan storage.Feed, 3000),
queueSize: &queueSize, queueSize: &queueSize,
Addr: addr, Addr: addr,
refreshRate: make(chan int64),
} }
} }
@ -103,10 +105,37 @@ func (h *Handler) startJobs() {
} }
go h.db.DeleteOldItems() go h.db.DeleteOldItems()
go h.db.SyncSearch() go h.db.SyncSearch()
//h.fetchAllFeeds()
go func() {
var refreshTicker *time.Ticker
refreshTick := make(<-chan time.Time)
for {
select {
case <-refreshTick:
h.fetchAllFeeds()
case val := <-h.refreshRate:
if refreshTicker != nil {
refreshTicker.Stop()
if val == 0 {
refreshTick = make(<-chan time.Time)
}
}
if val > 0 {
refreshTicker = time.NewTicker(time.Duration(val) * time.Second)
refreshTick = refreshTicker.C
}
}
}
}()
refreshRate := h.db.GetSettingsValueInt64("refresh_rate")
h.refreshRate <- refreshRate
if refreshRate > 0 {
h.fetchAllFeeds()
}
} }
func (h *Handler) fetchAllFeeds() { func (h *Handler) fetchAllFeeds() {
h.log.Print("Refreshing all feeds")
for _, feed := range h.db.ListFeeds() { for _, feed := range h.db.ListFeeds() {
h.fetchFeed(feed) h.fetchFeed(feed)
} }

View File

@ -31,6 +31,16 @@ func (s *Storage) GetSettingsValue(key string) interface{} {
return valDecoded return valDecoded
} }
func (s *Storage) GetSettingsValueInt64(key string) int64 {
val := s.GetSettingsValue(key)
if val != nil {
if fval, ok := val.(float64); ok {
return int64(fval)
}
}
return 0
}
func (s *Storage) GetSettings() map[string]interface{} { func (s *Storage) GetSettings() map[string]interface{} {
result := settingsDefaults() result := settingsDefaults()
rows, err := s.db.Query(`select key, val from settings;`) rows, err := s.db.Query(`select key, val from settings;`)