Jordan Bancino
3cfc064913
I'm not doing much to document this, because it's mainly just an internal script. No normal person is going to be running it, it's really just for me.
116 lines
2.8 KiB
Bash
Executable file
116 lines
2.8 KiB
Bash
Executable file
#!/usr/bin/env sh
|
|
#
|
|
# tp: "Telodendria Patch"
|
|
#
|
|
# This script is used to manage the patch queue.
|
|
|
|
if [ -f "$(pwd)/.env" ]; then
|
|
. "$(pwd)/.env"
|
|
fi
|
|
|
|
if [ -z "$TELODENDRIA_PUB" ]; then
|
|
echo "TELODENDRIA_PUB not set."
|
|
exit 1
|
|
fi
|
|
|
|
TP_DIR="$TELODENDRIA_PUB/patches"
|
|
|
|
CURL="curl -s"
|
|
|
|
if [ ! -d "$TP_DIR" ]; then
|
|
echo "$TP_DIR does not exist."
|
|
exit 1
|
|
fi
|
|
|
|
matrix_send() {
|
|
msg="$1"
|
|
if [ ! -z "$msg" ]; then
|
|
jq --null-input \
|
|
--arg body "$msg" \
|
|
--arg formatted_body "$msg" \
|
|
--arg format "org.matrix.custom.html" \
|
|
--arg msgtype "m.text" \
|
|
'{"body":$body,"formatted_body":$formatted_body,"format":$format,"msgtype":$msgtype}' |
|
|
$CURL -X PUT -d @- "$HOMESERVER/client/v3/rooms/$ROOM_ID/send/m.room.message/$(date +%s)?access_token=$ACCESS_TOKEN"
|
|
fi
|
|
}
|
|
|
|
matrix_get_files() {
|
|
$CURL "$HOMESERVER/client/v3/sync?access_token=$ACCESS_TOKEN" |
|
|
jq ".rooms.join.\"$ROOM_ID\".timeline.events[] | select(.type==\"m.room.message\") | .content | select(.msgtype==\"m.file\") | [.body,.info.size,.url] | @tsv" |
|
|
cut -d '"' -f 2 |
|
|
sed 's/\\t/,/g'
|
|
}
|
|
|
|
case "$1" in
|
|
"ingress")
|
|
matrix_get_files | while IFS="," read -r file size url; do
|
|
server=$(echo "$url" | cut -d '/' -f 3)
|
|
id=$(echo "$url" | cut -d '/' -f 4)
|
|
ext=$(echo "$file" | rev | cut -d '.' -f 1 | rev)
|
|
|
|
if [ "$ext" != "patch" ] || [ "$size" -gt "$MAX_SIZE" ] || [ -f "$TP_DIR/ingress/$id.patch" ]; then
|
|
continue
|
|
fi
|
|
|
|
$CURL -o "$TP_DIR/ingress/$id.patch" "$HOMESERVER/media/v3/download/$server/$id"
|
|
|
|
count=$(cat "$TP_DIR/count.txt")
|
|
count=$((count + 1))
|
|
cp "$TP_DIR/ingress/$id.patch" "$TP_DIR/p/$count.patch"
|
|
(
|
|
cd "$TP_DIR/queued"
|
|
ln -s "../p/$count.patch" "$count.patch"
|
|
)
|
|
|
|
echo "$count" > "$TP_DIR/count.txt"
|
|
|
|
matrix_send "Queued <code>$file</code> as <a href=\"https://telodendria.io/patches/p/$count.patch\">#$count</a>"
|
|
done
|
|
;;
|
|
"queue")
|
|
find "$TP_DIR/queued" -name '*.patch' | while IFS= read -r patch; do
|
|
n=$(basename "$patch" .patch)
|
|
echo "Patch #$n:"
|
|
head -n3 "$patch"
|
|
echo
|
|
done
|
|
;;
|
|
"view")
|
|
if [ -f "$TP_DIR/queued/$2.patch" ]; then
|
|
less "$TP_DIR/queued/$2.patch"
|
|
else
|
|
echo "Patch #$2 doesn't exist in the queue."
|
|
exit 1
|
|
fi
|
|
;;
|
|
"apply")
|
|
if [ -f "$TP_DIR/queued/$2.patch" ]; then
|
|
patch < "$TP_DIR/queued/$2.patch"
|
|
else
|
|
echo "Patch #$2 doesn't exist in the queue."
|
|
exit 1
|
|
fi
|
|
;;
|
|
"reverse")
|
|
if [ -f "$TP_DIR/queued/$2.patch" ]; then
|
|
patch -R < "$TP_DIR/queued/$2.patch"
|
|
else
|
|
echo "Patch #$2 doesn't exist in the queue."
|
|
exit 1
|
|
fi
|
|
;;
|
|
"accept"|"reject")
|
|
if [ -f "$TP_DIR/queued/$2.patch" ]; then
|
|
mv "$TP_DIR/queued/$2.patch" "$TP_DIR/${1}ed/$2.patch"
|
|
matrix_send "Patch <a href=\"https://telodendria.io/patches/p/$2.patch\">#$2</a> was marked as ${1}ed."
|
|
else
|
|
echo "Patch #$2 doesn't exist in the queue."
|
|
exit 1
|
|
fi
|
|
;;
|
|
*)
|
|
echo "No action specified."
|
|
exit 1
|
|
;;
|
|
esac
|