diff --git a/tools/bin/td b/tools/bin/td
index c67d26e..da56f52 100644
--- a/tools/bin/td
+++ b/tools/bin/td
@@ -49,21 +49,21 @@ fi
mod_time() {
if [ -n "$1" ] && [ -f "$1" ]; then
case "$(uname)" in
- Linux|CYGWIN_NT*|Haiku)
- stat -c %Y "$1"
+ Linux | CYGWIN_NT* | Haiku)
+ stat -c %Y "$1"
;;
- *BSD|DragonFly|Minix)
- stat -f %m "$1"
+ *BSD | DragonFly | Minix)
+ stat -f %m "$1"
;;
*)
# Platform unknown, force rebuilding the whole
# project every time.
- echo "0"
+ echo "0"
;;
- esac
+ esac
else
- echo "0"
- fi
+ echo "0"
+ fi
}
# Substitute shell variables in a stream with their actual value
@@ -79,7 +79,7 @@ setsubst() {
echo "s|\\\${[a-zA-Z_]*}||g"
echo "s|'''|'|g"
- ) > "$SED"
+ ) >"$SED"
sed -f "$SED" $@
rm "$SED"
@@ -104,7 +104,7 @@ recipe_build() {
if [ $(basename "$obj" .o) != "$MAIN" ]; then
objs="$objs $obj"
fi
-
+
if [ $(mod_time "$src") -ge $(mod_time "../$obj") ]; then
echo "CC $(basename $obj)"
obj_dir=$(dirname "../$obj")
@@ -195,9 +195,9 @@ recipe_site() {
echo "$dest"
mkdir -p "$dir"
- setsubst "$file" > "$dest"
+ setsubst "$file" >"$dest"
done
- cd - > /dev/null
+ cd - >/dev/null
find man/ -name '*.[1-9]' | while IFS= read -r man; do
dir=$(dirname "$man")
@@ -206,7 +206,7 @@ recipe_site() {
mkdir -p "$TELODENDRIA_PUB/$dir/"
mandoc -Thtml \
-O style=/style.css,man=/man/man%S/%N.%S.html "$man" \
- > "$TELODENDRIA_PUB/$dir/$html.html"
+ >"$TELODENDRIA_PUB/$dir/$html.html"
echo "$TELODENDRIA_PUB/$dir/$html.html"
done
}
@@ -235,7 +235,7 @@ recipe_release() {
# Checksum the release tarball.
sha256 "Telodendria-v$TELODENDRIA_VERSION.tar.gz" \
- > "Telodendria-v$TELODENDRIA_VERSION.tar.gz.sha256"
+ >"Telodendria-v$TELODENDRIA_VERSION.tar.gz.sha256"
# Sign the release tarball.
if [ ! -z "$TELODENDRIA_SIGNIFY_SECRET" ]; then
@@ -280,7 +280,7 @@ recipe_patch() {
echo " this patch under the conditions specified in it."
echo
cvs -q diff -uNp $PATCHSET | grep -v '^\? '
- ) > "$PATCH_FILE"
+ ) >"$PATCH_FILE"
"$EDITOR" "$PATCH_FILE"
echo "$PATCH_FILE"
@@ -288,7 +288,7 @@ recipe_patch() {
recipe_diff() {
tmp_patch="/tmp/telodendria-$(date +%s).patch"
- cvs -q diff -uNp $PATCHSET > "$tmp_patch"
+ cvs -q diff -uNp $PATCHSET >"$tmp_patch"
if [ -z "$PAGER" ]; then
PAGER="less -F"
fi
@@ -306,4 +306,3 @@ done
if [ -z "$1" ]; then
recipe_build
fi
-
diff --git a/tools/bin/tp b/tools/bin/tp
index 21f61ba..d0e069c 100755
--- a/tools/bin/tp
+++ b/tools/bin/tp
@@ -7,8 +7,8 @@
. "$(pwd)/tools/lib/common.sh"
if [ -z "$TELODENDRIA_PUB" ]; then
- echo "TELODENDRIA_PUB not set."
- exit 1
+ echo "TELODENDRIA_PUB not set."
+ exit 1
fi
TP_DIR="$TELODENDRIA_PUB/patches"
@@ -16,110 +16,133 @@ TP_DIR="$TELODENDRIA_PUB/patches"
CURL="curl -s"
if [ ! -d "$TP_DIR" ]; then
- echo "$TP_DIR does not exist."
- exit 1
+ 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/$PATCHES_ROOM/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.\"$PATCHES_ROOM\".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'
+ msg="$1"
+ if [ ! -z "$msg" ]; then
+ (
+ printf '{'
+ printf '"body":'
+ json -e "$msg"
+ printf ',"formatted_body":'
+ json -e "$msg"
+ printf ',"format":"org.matrix.custom.html",'
+ printf '"msgtype":"m.text"'
+ printf '}'
+ ) | $CURL -X PUT -d @- "$HOMESERVER/client/v3/rooms/$PATCHES_ROOM/send/m.room.message/$(date +%s)?access_token=$ACCESS_TOKEN"
+ fi
}
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)
+ "ingress")
+ timeline="/tmp/timeline.json"
+ $CURL "$HOMESERVER/client/v3/sync?access_token=$ACCESS_TOKEN" |
+ json -s "rooms->join->${PATCHES_ROOM}->timeline" >"$timeline"
- if [ "$ext" != "patch" ] || [ "$size" -gt "$MAX_SIZE" ] || [ -f "$TP_DIR/ingress/$id.patch" ]; then
- continue
- fi
+ length=$(cat "$timeline" | json -s "events->@length")
- if ! $CURL -o "$TP_DIR/ingress/$id.patch" "$HOMESERVER/media/v3/download/$server/$id"; then
+ i=0
+ while [ $i -lt $length ]; do
+ content=$(cat "$timeline" | json -s "events[$i]->content->^body->^formatted_body")
+ i=$((i + 1))
+
+ type=$(echo "$content" | json -s "msgtype->@decode")
+ if [ "$type" != "m.file" ]; then
+ continue
+ fi
+
+ size=$(echo "$content" | json -s "info->size")
+ if [ "$size" -gt "$MAX_SIZE" ]; then
+ continue
+ fi
+
+ file=$(echo "$content" | json -s "filename->@decode")
+ ext=$(echo "$file" | rev | cut -d '.' -f 1 | rev)
+ if [ "$ext" != "patch" ]; then
+ continue
+ fi
+
+ url=$(echo "$content" | json -s "url->@decode")
+ id=$(echo "$url" | cut -d '/' -f 4)
+
+ if [ -f "$TP_DIR/ingress/$id.patch" ]; then
+ continue
+ fi
+
+ server=$(echo "$url" | cut -d '/' -f 3)
+
+ if ! $CURL -o "$TP_DIR/ingress/$id.patch" "$HOMESERVER/media/v3/download/$server/$id"; then
rm "$TP_DIR/ingress/$id.patch"
echo "Failed to fetch mxc://$server/$id."
echo "Will try again next time."
continue
fi
- 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"
- )
+ 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"
+ echo "$count" >"$TP_DIR/count.txt"
- matrix_send "Queued $file
as #$count" > /dev/null
- 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"
- msg="Patch #$2 was marked as ${1}ed."
- msgFile="/tmp/patchmsg-$(date +%s).txt"
- $EDITOR "$msgFile"
- if [ -f "$msgFile" ]; then
- msg="$msg
$(cat $msgFile)" - fi - matrix_send "$msg" - else - echo "Patch #$2 doesn't exist in the queue." - exit 1 - fi - ;; - *) - echo "No action specified." - exit 1 - ;; + matrix_send "Queued
—$DISPLAY_NAME ($MXID)
$file
as #$count" >/dev/null
+ 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"
+ msg="Patch #$2 was marked as ${1}ed."
+ msgFile="/tmp/patchmsg-$(date +%s).txt"
+ $EDITOR "$msgFile"
+ if [ -f "$msgFile" ]; then
+ msg="$msg$(cat $msgFile)" + fi + matrix_send "$msg" + else + echo "Patch #$2 doesn't exist in the queue." + exit 1 + fi + ;; + *) + echo "No action specified." + exit 1 + ;; esac diff --git a/tools/src/json.c b/tools/src/json.c index 3aab262..1f98cfb 100644 --- a/tools/src/json.c +++ b/tools/src/json.c @@ -101,7 +101,7 @@ query(char *select, HashMap * json) func = 1; } - else if (keyName[0] == '!') + else if (keyName[0] == '^') { if (JsonValueType(val) == JSON_OBJECT) {
—$DISPLAY_NAME ($MXID)