yarr/storage/settings.go
Nazar Kanaev 6a63d49823 go fmt
2020-10-20 20:54:05 +01:00

92 lines
1.9 KiB
Go

package storage
import "encoding/json"
func settingsDefaults() map[string]interface{} {
return map[string]interface{}{
"filter": "",
"feed": "",
"feed_list_width": 300,
"item_list_width": 300,
"sort_newest_first": true,
"theme_name": "light",
"theme_font": "",
"theme_size": 1,
"refresh_rate": 0,
}
}
func (s *Storage) GetSettingsValue(key string) interface{} {
row := s.db.QueryRow(`select val from settings where key=?`, key)
if row == nil {
return settingsDefaults()[key]
}
var val []byte
row.Scan(&val)
if len(val) == 0 {
return nil
}
var valDecoded interface{}
if err := json.Unmarshal([]byte(val), &valDecoded); err != nil {
s.log.Print(err)
return nil
}
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{} {
result := settingsDefaults()
rows, err := s.db.Query(`select key, val from settings;`)
if err != nil {
s.log.Print(err)
return result
}
for rows.Next() {
var key string
var val []byte
var valDecoded interface{}
rows.Scan(&key, &val)
if err = json.Unmarshal([]byte(val), &valDecoded); err != nil {
s.log.Print(err)
continue
}
result[key] = valDecoded
}
return result
}
func (s *Storage) UpdateSettings(kv map[string]interface{}) bool {
defaults := settingsDefaults()
for key, val := range kv {
if defaults[key] == nil {
continue
}
valEncoded, err := json.Marshal(val)
if err != nil {
s.log.Print(err)
return false
}
_, err = s.db.Exec(`
insert into settings (key, val) values (?, ?)
on conflict (key) do update set val=?`,
key, valEncoded, valEncoded,
)
if err != nil {
s.log.Print(err)
return false
}
}
return true
}