diff --git a/src/cache.nim b/src/cache.nim index f6da5be..cfc3717 100644 --- a/src/cache.nim +++ b/src/cache.nim @@ -10,12 +10,9 @@ template safeAddColumn(field: typedesc): untyped = dbFromTypes("cache.db", "", "", "", [Profile, Video]) withDb: - try: - createTables() - except DbError: - discard - Video.title.safeAddColumn - Video.description.safeAddColumn + Video.createTable(force=true) + try: Profile.createTable() + except DbError: discard safeAddColumn Profile.lowername @@ -80,3 +77,14 @@ proc getCachedVideo*(id: int64): Option[Video] = return some Video.getOne("videoId = ?", $id) except KeyError: return none Video + +proc cacheCleaner*() {.async.} = + while true: + await sleepAsync(profileCacheTime.inMilliseconds.int) + withDb: + let up = "updated<" & $toUnix(getTime() - profileCacheTime) + var profiles = Profile.getMany(10000, cond=up) + var videos = Video.getMany(10000, cond=up) + transaction: + for p in profiles.mitems: delete(p) + for v in videos.mitems: delete(v) diff --git a/src/nitter.nim b/src/nitter.nim index 054db01..8ea24ce 100644 --- a/src/nitter.nim +++ b/src/nitter.nim @@ -3,7 +3,7 @@ from net import Port import jester -import types, config, prefs, formatters +import types, config, prefs, formatters, cache import views/[general, about] import routes/[ preferences, timeline, status, media, search, rss, list, @@ -25,6 +25,8 @@ createMediaRouter(cfg) createEmbedRouter(cfg) createRssRouter(cfg) +asyncCheck cacheCleaner() + settings: port = Port(cfg.port) staticDir = cfg.staticDir diff --git a/src/types.nim b/src/types.nim index 93991f3..b349496 100644 --- a/src/types.nim +++ b/src/types.nim @@ -52,6 +52,11 @@ dbTypes: parseIt: parseEnum[VideoType](it.s) formatIt: dbValue($it) .}: VideoType + updated* {. + dbType: "INTEGER" + parseIt: it.i.fromUnix() + formatIt: dbValue(getTime().toUnix()) + .}: Time genPrefsType()