notea-de-me/app/crawler/notes.sh

96 lines
1.6 KiB
Bash

#! /bin/bash
notes() (
ids() {
_recurse_ids "" "$(_tree)"
}
_tree() {
__tree "$@"
}
__tree() {
_nncurl $NOTES_ADDR/api/v0/tree
}
_nncurl() {
curl -sS "$@"
}
_recurse_ids() {
local prefix="$1"
local json="$2"
if echo "$json" | jq .Branches | grep -q ^null$; then
return 0
fi
local b64lines="$(echo "$json" | jq -r '.Branches | keys[]' | while read -r line; do echo "$line" | base64; done)"
if [ -z "$b64lines" ]; then
return 0
fi
for line in $b64lines; do
line="$(echo "$line" | base64 --decode)"
local subfix="$(printf "%s/%s" "$prefix" "$line")"
subfix="${subfix#/}"
if ! _is_deleted "$subfix"; then
echo "$subfix"
fi
_recurse_ids "$subfix" "$(echo "$json" | jq -c ".Branches[\"$line\"]")"
done
}
meta() {
local id="$1"
local tree="$(_tree)"
for subid in ${id//\// }; do
tree="$(echo "$tree" | jq -c .Branches | jq -c ".[\"$subid\"]")"
done
echo "$tree" | jq .Leaf
}
_is_deleted() {
local id="$1"
while [ -n "$id" ]; do
if meta "$id" | jq .Deleted | grep -q true; then
return 0
fi
if [ "$id" == "${id%/*}" ]; then
return 1
fi
id="${id%/*}"
done
return 1
}
get() {
_get "$@"
}
_get() {
_nncurl $NOTES_ADDR/api/v0/files/$1
}
put() {
set -u
local ret=0
if ! _put "$@"; then
ret=1
fi
set +u
return $ret
}
_put() {
local id="$1"
local title="$2"
local body="$3"
echo "$body" | _nncurl \
-X PUT \
-H "Title: $title" \
-d "$body" \
$NOTES_ADDR/api/v0/files/$id
}
"$@"
)