mirror of
https://github.com/nkanaev/yarr.git
synced 2025-05-25 05:29:20 +00:00
refresh rate
This commit is contained in:
parent
e17ce0fb31
commit
78844def40
@ -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)
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
|
@ -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;`)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user