diff --git a/src/twtxt.nim b/src/twtxt.nim index 1e1b5b5..ce3588b 100644 --- a/src/twtxt.nim +++ b/src/twtxt.nim @@ -49,7 +49,7 @@ proc fromDBRow*(r: Row): Tweet = proc getTweetsFrom*(url: string, username: string): seq[Tweet] = var res = newSeq[Tweet]() - let body = url.getContent() + let body = url.getContent(timeout=20_000) for line in body.splitLines().items(): if line.len > 0: @@ -57,7 +57,7 @@ proc getTweetsFrom*(url: string, username: string): seq[Tweet] = return res -proc updateTweetsOnce*() = +proc updateTweetsOnce*() {. gcsafe .} = var db = open("./data/twtxt.db", nil, nil, nil) var users = db.getAllRows sql"select * from users" @@ -65,20 +65,14 @@ proc updateTweetsOnce*() = for user in users.items(): echo "updating " & $user - let - username = user[1] - url = user[2] - tweets = getTweetsFrom(url, username) - - for tweet in tweets.items(): - try: - db.exec(sql"insert into tweets values(null, ?, ?, ?);", username, tweet.date.timeInfoToTime().toSeconds().int(), tweet.message) - except: discard - -when isMainModule: - while true: try: - updateTweetsOnce() - except: discard + let + username = user[1] + url = user[2] + tweets = getTweetsFrom(url, username) - sleep 300_000 # 5 minutes + for tweet in tweets.items(): + try: + db.exec(sql"insert into tweets values(null, ?, ?, ?);", username, tweet.date.timeInfoToTime().toSeconds().int(), tweet.message) + except: discard + except: discard diff --git a/src/twtxt.nims b/src/twtxt.nims index 96c7687..acae44c 100644 --- a/src/twtxt.nims +++ b/src/twtxt.nims @@ -1,2 +1,3 @@ --define:ssl --threads:on +--threadAnalysis:off diff --git a/src/twtxtlist.nim b/src/twtxtlist.nim index 61cef0e..e7927f7 100644 --- a/src/twtxtlist.nim +++ b/src/twtxtlist.nim @@ -95,8 +95,6 @@ routes: db.exec(sql"insert into users values (null, ?, ?)", username, url) - updateTweetsOnce() - redirect "/users/" & username & "/0" except: fail() diff --git a/src/worker.nim b/src/worker.nim new file mode 100644 index 0000000..b28532a --- /dev/null +++ b/src/worker.nim @@ -0,0 +1,9 @@ +import os, threadpool, twtxt + +when isMainModule: + while true: + try: + spawn updateTweetsOnce() + except: discard + + sleep 300_000 # 5 minutes diff --git a/src/worker.nims b/src/worker.nims new file mode 100644 index 0000000..31dc1fa --- /dev/null +++ b/src/worker.nims @@ -0,0 +1,3 @@ +--define:ssl +--threads:on +--threadAnalysis:off diff --git a/twtxtlist.nimble b/twtxtlist.nimble index 75e3ffb..586d00e 100644 --- a/twtxtlist.nimble +++ b/twtxtlist.nimble @@ -5,7 +5,7 @@ author = "Christine Dodrill" description = "a list of twtxt hacker feeds" license = "MIT" srcDir = "src" -bin = @["twtxtlist", "twtxt"] +bin = @["twtxtlist", "worker"] # Dependencies @@ -18,6 +18,4 @@ task db, "SQLite database prompt": task run, "Run app": exec "nimble build" - exec "./twtxt &" exec "./twtxtlist" - exec "killall twtxt"