diff --git a/src/prefs.nim b/src/prefs.nim index 8ae56ee..e2aea5c 100644 --- a/src/prefs.nim +++ b/src/prefs.nim @@ -1,9 +1,20 @@ -import strutils +import sequtils, macros import types import prefs_impl export genUpdatePrefs +static: + var pFields: seq[string] + for id in getTypeImpl(Prefs)[2]: + if $id[0] == "id": continue + pFields.add $id[0] + + let pDefs = toSeq(allPrefs()).mapIt(it.name) + let missing = pDefs.filterIt(it notin pFields) + if missing.len > 0: + raiseAssert("{$1} missing from the Prefs type" % missing.join(", ")) + withCustomDb("prefs.db", "", "", ""): try: createTables() diff --git a/src/prefs_impl.nim b/src/prefs_impl.nim index 53c37ee..410ec95 100644 --- a/src/prefs_impl.nim +++ b/src/prefs_impl.nim @@ -54,7 +54,7 @@ const prefList*: Table[string, seq[Pref]] = { ] }.toTable -iterator allPrefs(): Pref = +iterator allPrefs*(): Pref = for k, v in prefList: for pref in v: yield pref @@ -93,18 +93,3 @@ macro genUpdatePrefs*(): untyped = result.add quote do: cache(prefs) -macro genPrefsType*(): untyped = - result = nnkTypeSection.newTree(nnkTypeDef.newTree( - nnkPostfix.newTree(ident("*"), ident("Prefs")), newEmptyNode(), - nnkObjectTy.newTree(newEmptyNode(), newEmptyNode(), nnkRecList.newTree()))) - - result[0][2][2].add nnkIdentDefs.newTree( - nnkPostfix.newTree(ident("*"), ident("id")), ident("int"), newEmptyNode()) - - for pref in allPrefs(): - result[0][2][2].add nnkIdentDefs.newTree( - nnkPostfix.newTree(ident("*"), ident(pref.name)), - (case pref.kind - of checkbox: ident("bool") - of input, select: ident("string")), - newEmptyNode()) diff --git a/src/types.nim b/src/types.nim index 7256b9b..e254c4e 100644 --- a/src/types.nim +++ b/src/types.nim @@ -50,7 +50,14 @@ db("cache.db", "", "", ""): formatIt: dbValue($it) .}: VideoType - genPrefsType() + Prefs* = object + videoPlayback*: bool + autoplayGifs*: bool + hideTweetStats*: bool + hideBanner*: bool + stickyProfile*: bool + replaceYouTube*: string + replaceTwitter*: string type QueryKind* = enum