Clean up media api code
This commit is contained in:
parent
6b6e5b3a40
commit
9487d11fcb
1 changed files with 36 additions and 49 deletions
85
src/api.nim
85
src/api.nim
|
@ -30,6 +30,39 @@ var
|
||||||
tokenUpdated: Time
|
tokenUpdated: Time
|
||||||
tokenLifetime = initDuration(minutes=20)
|
tokenLifetime = initDuration(minutes=20)
|
||||||
|
|
||||||
|
macro genMediaGet(media: untyped; token=false) =
|
||||||
|
let
|
||||||
|
mediaName = capitalizeAscii($media)
|
||||||
|
multi = ident("get" & mediaName & "s")
|
||||||
|
convo = ident("getConversation" & mediaName & "s")
|
||||||
|
single = ident("get" & mediaName)
|
||||||
|
|
||||||
|
quote do:
|
||||||
|
proc `multi`(thread: Thread; agent: string; token="") {.async.} =
|
||||||
|
if thread == nil: return
|
||||||
|
var `media` = thread.tweets.filterIt(it.`media`.isSome)
|
||||||
|
when `token`:
|
||||||
|
var gToken = token
|
||||||
|
if gToken.len == 0: gToken = await getGuestToken(agent)
|
||||||
|
await all(`media`.mapIt(`single`(it, token, agent)))
|
||||||
|
else:
|
||||||
|
await all(`media`.mapIt(`single`(it, agent)))
|
||||||
|
|
||||||
|
proc `convo`(convo: Conversation; agent: string) {.async.} =
|
||||||
|
var futs: seq[Future[void]]
|
||||||
|
when `token`:
|
||||||
|
var token = await getGuestToken(agent)
|
||||||
|
futs.add `single`(convo.tweet, token, agent)
|
||||||
|
futs.add `multi`(convo.before, token, agent)
|
||||||
|
futs.add `multi`(convo.after, token, agent)
|
||||||
|
futs.add convo.replies.mapIt(`multi`(it, token, agent))
|
||||||
|
else:
|
||||||
|
futs.add `single`(convo.tweet, agent)
|
||||||
|
futs.add `multi`(convo.before, agent)
|
||||||
|
futs.add `multi`(convo.after, agent)
|
||||||
|
futs.add convo.replies.mapIt(`multi`(it, agent))
|
||||||
|
await all(futs)
|
||||||
|
|
||||||
template newClient() {.dirty.} =
|
template newClient() {.dirty.} =
|
||||||
var client = newAsyncHttpClient()
|
var client = newAsyncHttpClient()
|
||||||
defer: client.close()
|
defer: client.close()
|
||||||
|
@ -112,30 +145,6 @@ proc getVideo*(tweet: Tweet; token, agent: string) {.async.} =
|
||||||
tweet.video = none(Video)
|
tweet.video = none(Video)
|
||||||
tokenUses.inc
|
tokenUses.inc
|
||||||
|
|
||||||
proc getVideos*(thread: Thread; agent: string; token="") {.async.} =
|
|
||||||
if thread == nil: return
|
|
||||||
|
|
||||||
var gToken = token
|
|
||||||
if gToken.len == 0:
|
|
||||||
gToken = await getGuestToken(agent)
|
|
||||||
|
|
||||||
var videoFuts: seq[Future[void]]
|
|
||||||
for tweet in thread.tweets.filterIt(it.video.isSome):
|
|
||||||
videoFuts.add getVideo(tweet, gToken, agent)
|
|
||||||
|
|
||||||
await all(videoFuts)
|
|
||||||
|
|
||||||
proc getConversationVideos*(convo: Conversation; agent: string) {.async.} =
|
|
||||||
var token = await getGuestToken(agent)
|
|
||||||
var futs: seq[Future[void]]
|
|
||||||
|
|
||||||
futs.add getVideo(convo.tweet, token, agent)
|
|
||||||
futs.add convo.replies.mapIt(getVideos(it, token, agent))
|
|
||||||
futs.add getVideos(convo.before, token, agent)
|
|
||||||
futs.add getVideos(convo.after, token, agent)
|
|
||||||
|
|
||||||
await all(futs)
|
|
||||||
|
|
||||||
proc getPoll*(tweet: Tweet; agent: string) {.async.} =
|
proc getPoll*(tweet: Tweet; agent: string) {.async.} =
|
||||||
if tweet.poll.isNone(): return
|
if tweet.poll.isNone(): return
|
||||||
|
|
||||||
|
@ -153,19 +162,6 @@ proc getPoll*(tweet: Tweet; agent: string) {.async.} =
|
||||||
|
|
||||||
tweet.poll = some(parsePoll(html))
|
tweet.poll = some(parsePoll(html))
|
||||||
|
|
||||||
proc getPolls*(thread: Thread; agent: string) {.async.} =
|
|
||||||
if thread == nil: return
|
|
||||||
var polls = thread.tweets.filterIt(it.poll.isSome)
|
|
||||||
await all(polls.mapIt(getPoll(it, agent)))
|
|
||||||
|
|
||||||
proc getConversationPolls*(convo: Conversation; agent: string) {.async.} =
|
|
||||||
var futs: seq[Future[void]]
|
|
||||||
futs.add getPoll(convo.tweet, agent)
|
|
||||||
futs.add getPolls(convo.before, agent)
|
|
||||||
futs.add getPolls(convo.after, agent)
|
|
||||||
futs.add convo.replies.mapIt(getPolls(it, agent))
|
|
||||||
await all(futs)
|
|
||||||
|
|
||||||
proc getCard*(tweet: Tweet; agent: string) {.async.} =
|
proc getCard*(tweet: Tweet; agent: string) {.async.} =
|
||||||
if tweet.card.isNone(): return
|
if tweet.card.isNone(): return
|
||||||
|
|
||||||
|
@ -183,18 +179,9 @@ proc getCard*(tweet: Tweet; agent: string) {.async.} =
|
||||||
|
|
||||||
parseCard(get(tweet.card), html)
|
parseCard(get(tweet.card), html)
|
||||||
|
|
||||||
proc getCards*(thread: Thread; agent: string) {.async.} =
|
genMediaGet(video, token=true)
|
||||||
if thread == nil: return
|
genMediaGet(poll)
|
||||||
var cards = thread.tweets.filterIt(it.card.isSome)
|
genMediaGet(card)
|
||||||
await all(cards.mapIt(getCard(it, agent)))
|
|
||||||
|
|
||||||
proc getConversationCards*(convo: Conversation; agent: string) {.async.} =
|
|
||||||
var futs: seq[Future[void]]
|
|
||||||
futs.add getCard(convo.tweet, agent)
|
|
||||||
futs.add getCards(convo.before, agent)
|
|
||||||
futs.add getCards(convo.after, agent)
|
|
||||||
futs.add convo.replies.mapIt(getCards(it, agent))
|
|
||||||
await all(futs)
|
|
||||||
|
|
||||||
proc getPhotoRail*(username, agent: string): Future[seq[GalleryPhoto]] {.async.} =
|
proc getPhotoRail*(username, agent: string): Future[seq[GalleryPhoto]] {.async.} =
|
||||||
let headers = newHttpHeaders({
|
let headers = newHttpHeaders({
|
||||||
|
|
Loading…
Reference in a new issue