98 lines
1.6 KiB
Bash
98 lines
1.6 KiB
Bash
#! /bin/bash
|
|
|
|
notes() (
|
|
ids() {
|
|
_recurse_ids "" "$(_tree)"
|
|
}
|
|
|
|
_tree() {
|
|
local cache_key="notes cache _tree"
|
|
if cache get "$cache_key"; then
|
|
return 0
|
|
fi
|
|
__tree "$@" | cache put "$cache_key"
|
|
}
|
|
|
|
__tree() {
|
|
_nncurl $NOTES_ADDR/api/v0/tree
|
|
}
|
|
|
|
_nncurl() {
|
|
curl -sS "$@"
|
|
}
|
|
|
|
_recurse_ids() {
|
|
local prefix="$1"
|
|
local json="$2"
|
|
local b64lines="$(echo "$json" | jq -r '.Branches | keys[]' | base64)"
|
|
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 ".Branches.$line")"
|
|
done
|
|
}
|
|
|
|
meta() {
|
|
local id="$1"
|
|
id="${id//\//.Branches.}"
|
|
_tree | jq -c ".Branches.$id.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() {
|
|
local cache_key="notes cache $1"
|
|
if cache get "$cache_key"; then
|
|
return 0
|
|
fi
|
|
_get "$@" | cache put "$cache_key"
|
|
}
|
|
|
|
_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 @- \
|
|
$NOTES_ADDR/api/v0/files/$id
|
|
}
|
|
|
|
"$@"
|
|
)
|
|
|