commit bacd6ee2f95dfae233f5a74af8447f8021f51e2f Author: Jaidyn Ann <10477760+JadedCtrl@users.noreply.github.com> Date: Thu Mar 28 00:43:34 2024 -0500 Init diff --git a/fedi2html.sh b/fedi2html.sh new file mode 100755 index 0000000..1dcb364 --- /dev/null +++ b/fedi2html.sh @@ -0,0 +1,124 @@ +#!/bin/sh +#――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― +# Name: fedi2html.sh +# Desc: +# Reqs: +# Date: +#――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― + + +url_id() { + local url="$1" + # Pleroma-style URLs: https://jam.xwx.moe/notice/Ac6PIZAP0ZzkMTYBBg + # Mastodon-style URLs: https://esperanto.masto.host/@minjo/111461250815264185 + if echo "$url" | grep "/notice/" > /dev/null; then + echo "$url" \ + | sed 's%.*/notice/%%' + else + echo "$url" \ + | sed 's%.*/@[[:alnum:]]*/%%' + fi +} + + +url_server() { + local url="$1" + local protocol="$(echo "$url" | grep --only-matching '[[:alnum:]]*://')" + printf "$protocol" + echo "$url" \ + | sed 's%^'"$protocol"'%%' \ + | sed 's%/.*%%' +} + + +statuses_api_request() { + local post_url="$1" + local api_request="$2" + if test -n "$api_request"; then + api_request="/$api_request" + fi + + local id="$(url_id "$url")" + local server="$(url_server "$url")" + curl --location --header 'Accept: application/json,application/activity+json' \ + "$server/api/v1/statuses/${id}${api_request}" +} + + +fetch_post_context() { + local url="$1" + statuses_api_request "$url" "context" +} + + +fetch_post() { + local url="$1" + statuses_api_request "$url" +} + + +POST_TEMPLATE=' + + + + +
+ + + $ACCOUNT_NAME + $ACCOUNT_ID + + + + +
+ $POST_CONTENT +
+
+ + +' + + +replace_emojis() { + local post_data="$1" + local emojis="$2" + + # So, this function is recusive; in hindsight, it didn’t have to be. oh well! + if test -n "$post_data" -a -z "$emojis"; then + # Init case; start subsitutions in next level of recursion + replace_emojis \ + "" \ + "$(echo "$post_data" \ + | jq -r '.emojis[]|(.url + "\t" + .shortcode)')" + elif test -n "$emojis"; then + # Substitute the current emoji (first line of $emojis) + local url="$(echo "$emojis" | head -1 | awk '{print $1}')" + local shortcode="$(echo "$emojis" | head -1 | awk '{print $2}')" + + sed "s%:${shortcode}:%%g" \ + | replace_emojis \ + "" \ + "$(echo "$emojis" | tail +2)" + else + # End-case; $emojis is empty, so our job is done. + # Just print the results. + cat + fi +} + + +render_post() { + local post_data="$1" + local ACCOUNT_URL="$(echo "$post_data" | jq -r .account.url)" + local ACCOUNT_ID="$(echo "$post_data" | jq -r .account.fqn)" + local ACCOUNT_NAME="$(echo "$post_data" | jq -r .account.display_name | replace_emojis "$post_data")" + local ACCOUNT_AVATAR="$(echo "$post_data" | jq -r .account.avatar)" + local POST_URL="$(echo "$post_data" | jq -r .url)" + local POST_DATE="$(echo "$post_data" | jq -r .created_at)" + local POST_CONTENT="$(echo "$post_data" | jq -r .content | replace_emojis "$post_data")" + eval "echo \"$(echo "$POST_TEMPLATE" | sed 's%\"%\\\"%g')\"" +} + + +