Store preferences in cookies, add config defaults
This commit is contained in:
@@ -1,54 +1,15 @@
|
||||
import strutils, sequtils, macros
|
||||
import norm/sqlite
|
||||
import tables
|
||||
import types, prefs_impl
|
||||
from config import get
|
||||
from parsecfg import nil
|
||||
|
||||
import prefs_impl, types
|
||||
export genUpdatePrefs
|
||||
export genUpdatePrefs, genResetPrefs
|
||||
|
||||
template safeAddColumn(field: typedesc): untyped =
|
||||
try: field.addColumn
|
||||
except DbError: discard
|
||||
var defaultPrefs*: Prefs
|
||||
|
||||
dbFromTypes("prefs.db", "", "", "", [Prefs])
|
||||
proc updateDefaultPrefs*(cfg: parsecfg.Config) =
|
||||
genDefaultPrefs()
|
||||
|
||||
withDb:
|
||||
try:
|
||||
createTables()
|
||||
except DbError:
|
||||
discard
|
||||
safeAddColumn Prefs.theme
|
||||
safeAddColumn Prefs.hidePins
|
||||
safeAddColumn Prefs.hideReplies
|
||||
safeAddColumn Prefs.infiniteScroll
|
||||
safeAddColumn Prefs.replaceInstagram
|
||||
|
||||
proc getDefaultPrefs(cfg: Config): Prefs =
|
||||
result = genDefaultPrefs()
|
||||
result.replaceTwitter = cfg.hostname
|
||||
result.theme = cfg.defaultTheme
|
||||
|
||||
proc cache*(prefs: var Prefs) =
|
||||
withDb:
|
||||
try:
|
||||
doAssert prefs.id != 0
|
||||
discard Prefs.getOne("id = ?", prefs.id)
|
||||
prefs.update()
|
||||
except AssertionError, KeyError:
|
||||
prefs.insert()
|
||||
|
||||
proc getPrefs*(id: string; cfg: Config): Prefs =
|
||||
if id.len == 0:
|
||||
return getDefaultPrefs(cfg)
|
||||
|
||||
withDb:
|
||||
try:
|
||||
result.getOne("id = ?", id)
|
||||
if result.theme.len == 0:
|
||||
result.theme = cfg.defaultTheme
|
||||
except KeyError:
|
||||
result = getDefaultPrefs(cfg)
|
||||
|
||||
proc resetPrefs*(prefs: var Prefs; cfg: Config) =
|
||||
var defPrefs = getDefaultPrefs(cfg)
|
||||
defPrefs.id = prefs.id
|
||||
cache(defPrefs)
|
||||
prefs = defPrefs
|
||||
proc getPrefs*(cookies: Table[string, string]): Prefs =
|
||||
result = defaultPrefs
|
||||
genCookiePrefs()
|
||||
|
||||
Reference in New Issue
Block a user