prefs.nim 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import strutils, sequtils, macros
  2. import prefs_impl, types
  3. export genUpdatePrefs
  4. static:
  5. var pFields: seq[string]
  6. for id in getTypeImpl(Prefs)[2]:
  7. if $id[0] == "id": continue
  8. pFields.add $id[0]
  9. let pDefs = toSeq(allPrefs()).mapIt(it.name)
  10. let missing = pDefs.filterIt(it notin pFields)
  11. if missing.len > 0:
  12. raiseAssert("{$1} missing from the Prefs type" % missing.join(", "))
  13. dbFromTypes("prefs.db", "", "", "", [Prefs])
  14. withDb:
  15. try:
  16. createTables()
  17. except DbError:
  18. discard
  19. proc cache*(prefs: var Prefs) =
  20. withDb:
  21. try:
  22. doAssert prefs.id != 0
  23. discard Prefs.getOne("id = ?", prefs.id)
  24. prefs.update()
  25. except AssertionError, KeyError:
  26. prefs.insert()
  27. proc getPrefs*(id: string): Prefs =
  28. if id.len == 0: return genDefaultPrefs()
  29. withDb:
  30. try:
  31. result.getOne("id = ?", id)
  32. except KeyError:
  33. result = genDefaultPrefs()
  34. proc resetPrefs*(prefs: var Prefs) =
  35. var defPrefs = genDefaultPrefs()
  36. defPrefs.id = prefs.id
  37. cache(defPrefs)
  38. prefs = defPrefs