status.nim 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import asyncdispatch, strutils, sequtils, uri, options
  2. import jester
  3. import router_utils
  4. import ".."/[api, types, formatters, agents]
  5. import ../views/[general, status]
  6. export uri, sequtils, options
  7. export router_utils
  8. export api, formatters, agents
  9. export status
  10. proc createStatusRouter*(cfg: Config) =
  11. router status:
  12. get "/@name/status/@id":
  13. cond '.' notin @"name"
  14. let prefs = cookiePrefs()
  15. let conversation = await getTweet(@"name", @"id", @"max_position", getAgent())
  16. if conversation == nil or conversation.tweet.id == 0:
  17. var error = "Tweet not found"
  18. if conversation != nil and conversation.tweet.tombstone.len > 0:
  19. error = conversation.tweet.tombstone
  20. resp Http404, showError(error, cfg)
  21. var
  22. title = pageTitle(conversation.tweet.profile)
  23. desc = conversation.tweet.text
  24. images = conversation.tweet.photos
  25. video = ""
  26. if conversation.tweet.video.isSome():
  27. images = @[get(conversation.tweet.video).thumb]
  28. video = getVideoEmbed(cfg, conversation.tweet.id)
  29. elif conversation.tweet.gif.isSome():
  30. images = @[get(conversation.tweet.gif).thumb]
  31. video = getGifUrl(get(conversation.tweet.gif).url)
  32. let html = renderConversation(conversation, prefs, getPath() & "#m")
  33. resp renderMain(html, request, cfg, title, desc, images=images, video=video)
  34. get "/@name/@s/@id/@m/?@i?":
  35. cond @"s" in ["status", "statuses"]
  36. cond @"m" in ["video", "photo"]
  37. redirect("/$1/status/$2" % [@"name", @"id"])
  38. get "/@name/statuses/@id":
  39. redirect("/$1/status/$2" % [@"name", @"id"])
  40. get "/i/web/status/@id":
  41. redirect("/i/status/" & @"id")