prefs.nim 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import strutils, sequtils, macros
  2. import norm/sqlite
  3. import prefs_impl, types
  4. export genUpdatePrefs
  5. template safeAddColumn(field: typedesc): untyped =
  6. try: field.addColumn
  7. except DbError: discard
  8. dbFromTypes("prefs.db", "", "", "", [Prefs])
  9. withDb:
  10. try:
  11. createTables()
  12. except DbError:
  13. discard
  14. Prefs.theme.safeAddColumn
  15. Prefs.hidePins.safeAddColumn
  16. Prefs.hideReplies.safeAddColumn
  17. Prefs.infiniteScroll.safeAddColumn
  18. proc getDefaultPrefs(cfg: Config): Prefs =
  19. result = genDefaultPrefs()
  20. result.replaceTwitter = cfg.hostname
  21. result.theme = cfg.defaultTheme
  22. proc cache*(prefs: var Prefs) =
  23. withDb:
  24. try:
  25. doAssert prefs.id != 0
  26. discard Prefs.getOne("id = ?", prefs.id)
  27. prefs.update()
  28. except AssertionError, KeyError:
  29. prefs.insert()
  30. proc getPrefs*(id: string; cfg: Config): Prefs =
  31. if id.len == 0:
  32. return getDefaultPrefs(cfg)
  33. withDb:
  34. try:
  35. result.getOne("id = ?", id)
  36. if result.theme.len == 0:
  37. result.theme = cfg.defaultTheme
  38. except KeyError:
  39. result = getDefaultPrefs(cfg)
  40. proc resetPrefs*(prefs: var Prefs; cfg: Config) =
  41. var defPrefs = getDefaultPrefs(cfg)
  42. defPrefs.id = prefs.id
  43. cache(defPrefs)
  44. prefs = defPrefs