status.nim 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import asyncdispatch, strutils, sequtils, uri
  2. import jester
  3. import router_utils
  4. import ".."/[api, types, formatters, agents]
  5. import ../views/[general, status]
  6. export uri, sequtils
  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", @"after", getAgent())
  16. if conversation == nil or conversation.tweet.id.len == 0:
  17. if conversation != nil and conversation.tweet.tombstone.len > 0:
  18. resp Http404, showError(conversation.tweet.tombstone, cfg.title)
  19. else:
  20. resp Http404, showError("Tweet not found", cfg.title)
  21. let
  22. title = pageTitle(conversation.tweet.profile)
  23. desc = conversation.tweet.text
  24. html = renderConversation(conversation, prefs, getPath())
  25. if conversation.tweet.video.isSome():
  26. let thumb = get(conversation.tweet.video).thumb
  27. let vidUrl = getVideoEmbed(conversation.tweet.id)
  28. resp renderMain(html, request, cfg.title, title, desc, images = @[thumb],
  29. `type`="video", video=vidUrl)
  30. elif conversation.tweet.gif.isSome():
  31. let thumb = get(conversation.tweet.gif).thumb
  32. let vidUrl = getVideoEmbed(conversation.tweet.id)
  33. resp renderMain(html, request, cfg.title, title, desc, images = @[thumb],
  34. `type`="video", video=vidUrl)
  35. else:
  36. resp renderMain(html, request, cfg.title, title, desc,
  37. images=conversation.tweet.photos, `type`="photo")
  38. get "/@name/status/@id/photo/@i":
  39. redirect("/$1/status/$2" % [@"name", @"id"])
  40. get "/@name/statuses/@id":
  41. redirect("/$1/status/$2" % [@"name", @"id"])
  42. get "/i/web/status/@id":
  43. redirect("/i/status/" & @"id")