polls in embeds

This commit is contained in:
Cynthia Foxwell 2025-04-04 19:54:16 -06:00
parent 8042c65ce3
commit 33db7b46cb
No known key found for this signature in database

View File

@ -1,10 +1,26 @@
# SPDX-License-Identifier: AGPL-3.0-only # SPDX-License-Identifier: AGPL-3.0-only
import strutils, strformat, options, json, sequtils, times import strutils, strformat, options, json, sequtils, times, math
import ".."/[types, formatters, utils] import ".."/[types, formatters, utils]
proc formatTweetForMastoAPI*(tweet: Tweet, cfg: Config, prefs: Prefs): string = proc formatTweetForMastoAPI*(tweet: Tweet, cfg: Config, prefs: Prefs): string =
var content = replaceUrls(tweet.text, prefs) var content = replaceUrls(tweet.text, prefs)
if tweet.poll.isSome():
let poll = get(tweet.poll)
content &= "\n<blockquote>"
for i in 0 ..< poll.options.len:
let
leader = if poll.leader == i: " leader" else: ""
val = poll.values[i]
perc = if val > 0: val / poll.votes * 100 else: 0
percStr = (&"{perc:>3.0f}").strip(chars={'.'}) & '%'
barLen = round((perc / 100) * 32).int
bar = repeat("", barLen)
notBar = repeat("&nbsp;", 32 - barLen)
content &= &"<b>{poll.options[i]}</b> ({val}, {percStr})\n<code>{bar}{notBar}</code>\n"
content &= &"\n{insertSep($poll.votes, ',')} votes • {poll.status}</blockquote>"
if tweet.quote.isSome(): if tweet.quote.isSome():
let let
quote = get(tweet.quote) quote = get(tweet.quote)