settigs storage & api

This commit is contained in:
Nazar Kanaev
2020-07-06 13:14:10 +01:00
parent eb0db50413
commit 0761da85e7
4 changed files with 81 additions and 0 deletions

57
storage/settings.go Normal file
View File

@@ -0,0 +1,57 @@
package storage
import "encoding/json"
func settingsDefaults() map[string]interface{} {
return map[string]interface{}{
"filter": "all",
"feed_list_width": 300,
"item_list_width": 300,
}
}
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
}

View File

@@ -45,6 +45,11 @@ create table if not exists items (
create index if not exists idx_item_feed_id on items(feed_id);
create index if not exists idx_item_status on items(status);
create unique index if not exists idx_item_guid on items(guid);
create table if not exists settings (
key string primary key,
val blob
);
`
type Storage struct {