attempt to fix a weird edge case with replies

This commit is contained in:
Cynthia Foxwell 2025-04-04 13:23:39 -06:00
parent 7a6548cb2b
commit 38f2ede5c0
No known key found for this signature in database
3 changed files with 42 additions and 27 deletions

View File

@ -53,10 +53,10 @@ proc createActivityPubRouter*(cfg: Config) =
mediaObj["type"] = %"image"
mediaObj["url"] = %image
mediaObj["preview_url"] = %image
mediaObj["remote_url"] = newJNull()
mediaObj["preview_remote_url"] = newJNull()
mediaObj["remote_url"] = %image
mediaObj["preview_remote_url"] = %image
mediaObj["text_url"] = newJNull()
mediaObj["description"] = newJNull() # FIXME (not used by discord, i like a11y)
mediaObj["description"] = newJNull() # FIXME this requires refactoring images
# FIXME but this probably isnt used by discord
mediaObj["meta"] = newJObject()
@ -66,32 +66,40 @@ proc createActivityPubRouter*(cfg: Config) =
let
videoObj = get(tweet.video)
vars = videoObj.variants.filterIt(it.contentType == mp4)
videoUrl = vars[^1].url
videoPreview = getUrlPrefix(cfg) & getPicUrl(videoObj.thumb)
var mediaObj = newJObject()
var description = videoObj.title
if videoObj.description.len > 0:
description = videoObj.description
mediaObj["id"] = %"150745989836308480"
mediaObj["type"] = %"video"
mediaObj["url"] = %vars[^1].url
mediaObj["preview_url"] = %(getUrlPrefix(cfg) & getPicUrl(videoObj.thumb))
mediaObj["remote_url"] = newJNull()
mediaObj["preview_remote_url"] = newJNull()
mediaObj["url"] = %videoUrl
mediaObj["preview_url"] = %videoPreview
mediaObj["remote_url"] = %videoUrl
mediaObj["preview_remote_url"] = %videoPreview
mediaObj["text_url"] = newJNull()
mediaObj["description"] = newJNull() # FIXME (not used by discord, i like a11y)
mediaObj["description"] = %description
# FIXME but this probably isnt used by discord
mediaObj["meta"] = newJObject()
media.add(mediaObj)
elif tweet.gif.isSome():
let gif = get(tweet.gif)
let
gif = get(tweet.gif)
gifUrl = getUrlPrefix(cfg) & getPicUrl(gif.url)
gifPreview = getUrlPrefix(cfg) & getPicUrl(gif.thumb)
var mediaObj = newJObject()
mediaObj["id"] = %"150745989836308480"
mediaObj["type"] = %"video"
mediaObj["url"] = %(&"https://{gif.url}")
mediaObj["preview_url"] = %(getUrlPrefix(cfg) & getPicUrl(gif.thumb))
mediaObj["remote_url"] = newJNull()
mediaObj["preview_remote_url"] = newJNull()
mediaObj["url"] = %gifUrl
mediaObj["preview_url"] = %gifPreview
mediaObj["remote_url"] = %gifUrl
mediaObj["preview_remote_url"] = %gifPreview
mediaObj["text_url"] = newJNull()
mediaObj["description"] = newJNull() # FIXME (not used by discord, i like a11y)
mediaObj["description"] = newJNull() # FIXME this requires refactoring gifs
# FIXME but this probably isnt used by discord
mediaObj["meta"] = newJObject()
@ -105,8 +113,9 @@ proc createActivityPubRouter*(cfg: Config) =
postJson["edited_at"] = newJNull()
postJson["reblog"] = newJNull()
if tweet.replyId != 0:
let replyUser = await getGraphUser(tweet.replyHandle)
postJson["in_reply_to_id"] = %(&"{tweet.replyId}")
postJson["in_reply_to_account_id"] = %""
postJson["in_reply_to_account_id"] = %replyUser.id
else:
postJson["in_reply_to_id"] = newJNull()
postJson["in_reply_to_account_id"] = newJNull()

View File

@ -59,12 +59,14 @@ proc renderHead*(prefs: Prefs; cfg: Config; req: Request; titleText=""; desc="";
script(src="/js/baguetteBox.min.js", `async`="")
script(src="/js/zoom.js")
let isDiscord = req.headers.getOrDefault("User-Agent").toString().contains("Discordbot")
if theme.len > 0:
link(rel="stylesheet", type="text/css", href=(&"/css/themes/{theme}.css"))
link(rel="icon", type="image/png", sizes="32x32", href=(&"{getUrlPrefix(cfg)}/favicon-32x32.png"))
link(rel="icon", type="image/png", sizes="16x16", href=(&"{getUrlPrefix(cfg)}/favicon-16x16.png"))
link(rel="apple-touch-icon", sizes="180x180", href="/apple-touch-icon.png")
link(rel="apple-touch-icon", sizes="180x180", href="/apple-touch-icon.png?v=2")
link(rel="manifest", href="/site.webmanifest")
link(rel="mask-icon", href="/safari-pinned-tab.svg", color="#ff6c60")
link(rel="search", type="application/opensearchdescription+xml", title=cfg.title,
@ -103,9 +105,6 @@ proc renderHead*(prefs: Prefs; cfg: Config; req: Request; titleText=""; desc="";
meta(property="og:locale", content="en_US")
var siteName = "Nitter"
let isDiscord = req.headers.getOrDefault("User-Agent").toString().contains("Discordbot")
if time.isSome and not isDiscord:
let timeObj = time.get
let timeStr = $timeObj

View File

@ -39,11 +39,13 @@ proc getActivityStream*(tweet: Tweet, cfg: Config, prefs: Prefs): JsonNode =
if tweet.photos.len > 0:
for url in tweet.photos:
let image = getUrlPrefix(cfg) & getPicUrl(url)
var mediaObj = newJObject()
let
image = getUrlPrefix(cfg) & getPicUrl(url)
splitUrl = url.split('.')
var mediaObj = newJObject()
mediaObj["type"] = %"Document"
mediaObj["mediaType"] = %"image/png"
mediaObj["mediaType"] = %("image/" & splitUrl[^1])
mediaObj["url"] = %image
mediaObj["name"] = newJNull() # FIXME a11y
@ -53,21 +55,26 @@ proc getActivityStream*(tweet: Tweet, cfg: Config, prefs: Prefs): JsonNode =
let
videoObj = get(tweet.video)
vars = videoObj.variants.filterIt(it.contentType == mp4)
var mediaObj = newJObject()
var description = videoObj.title
if videoObj.description.len > 0:
description = videoObj.description
var mediaObj = newJObject()
mediaObj["type"] = %"Document"
mediaObj["mediaType"] = %"video/mp4"
mediaObj["url"] = %vars[^1].url
mediaObj["name"] = newJNull() # FIXME a11y
mediaObj["name"] = %description
media.add(mediaObj)
elif tweet.gif.isSome():
let gif = get(tweet.gif)
var mediaObj = newJObject()
let
gif = get(tweet.gif)
gifUrl = getUrlPrefix(cfg) & getPicUrl(gif.url)
var mediaObj = newJObject()
mediaObj["type"] = %"Document"
mediaObj["mediaType"] = %"video/mp4"
mediaObj["url"] = %(&"https://{gif.url}")
mediaObj["url"] = %gifUrl
mediaObj["name"] = newJNull() # FIXME a11y
media.add(mediaObj)