diff options
Diffstat (limited to 'contrib/get-cursors.sh')
-rwxr-xr-x | contrib/get-cursors.sh | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/contrib/get-cursors.sh b/contrib/get-cursors.sh new file mode 100755 index 0000000..755213a --- /dev/null +++ b/contrib/get-cursors.sh @@ -0,0 +1,80 @@ +#!/bin/bash +# Fetches bibata cursor svgs +set -e + +start() { + _LAST_MSG="$@" + echo -e "\x1b[0;1;34m@\x1b[0;34m $@\x1b[0m" +} +complete() { + if [[ "$1" == "" ]]; then + complete "$_LAST_MSG" + else + echo -e "\x1b[0;1;32m+\x1b[0;32m $@\x1b[0m" + fi +} +err() { + if [[ "$1" == "" ]]; then + err "$_LAST_MSG" + else + echo -e "\x1b[0;1;31m!\x1b[0;31m $@\x1b[0m" 1>&2; + fi +} +info() { + echo -e "\x1b[0;1;94mi\x1b[0;94m $@\x1b[0m" 1>&2; +} + +mkdir -p cursors +for type in Modern Original; do + type_dir="cursors/$type" + type_meta="$type_dir/meta.json" + mkdir -p "$type_dir" + start "Get Cursor Metadata for CursorType($type)" + curl -fsSL "https://www.bibata.live/api/svg?type=${type}&v=1.0.2" | jq -M > "$type_meta" + complete + + jq -Mc '.data[]' "$type_meta" | while read cursor_json; do + cursor_name="$(jq -r .name <<< "$cursor_json")" + cursor_dir="$type_dir/$cursor_name" + cursor_assets="$cursor_dir/assets" + cursor_meta="$cursor_dir/meta.json" + cursorfile="$cursor_dir/cursor.json" + mkdir -p "$cursor_dir" "$cursor_assets" + if [[ -f "$cursor_meta" ]] && [[ "$(jq -M "." "$cursor_meta" | sha512sum | awk '{print $1}')" == "$(jq -M "." <<< "$cursor_json" | sha512sum | awk '{print $1}')" ]]; then + start "Ensuring all keyframes for Cursor($type, $cursor_name) are present" + idx=0 + jq -Mcr '.node_ids[]' "$cursor_meta" | while read node_id; do + node="Node($type, $cursor_name, Node($idx, $node_id))" + if ! [[ -f "$cursor_assets/$node_id.svg" ]]; then + cursor_url="$(jq -Mr ".urls[${idx}]" "$cursor_meta")" + start "Fetch missing $node - NodeIndex($idx)" + curl -fsSL "$cursor_url" -o "$cursor_assets/$node_id.svg" + ((idx=idx+1)) + complete "Fetched missing $node" + else + info "$node is already present" + fi + done + complete "Ensured all keyframes for Cursor($type, $cursor_name) are present" + else + if [[ -f "$cursor_meta" ]]; then info "MetaFile($cursor_meta) already exists but differs (it has FileHash(sha512, $(jq -M "$cursor_meta" | sha512sum | awk '{print $1}')), new version has FileHash(sha512, $(jq -M <<< "$cursor_json" | sha512sum | awk '{print $1}')))"; mv "$cursor_meta"; fi + jq -M <<< "$cursor_json" > "$cursor_meta" + start "Get keyframes for Cursor($type, $cursor_name)" + idx=0 + total=0 + jq -Mcr '.node_ids[]' "$cursor_meta" | while read id; do + rm -f "$cursor_assets/$node_id.svg" + ((total=total+1)) + done + jq -Mcr '.urls[]' "$cursor_meta" | while read cursor_url; do + node_id="$(jq -Mr ".node_ids[${idx}]" "$cursor_meta")" + node="Node($type, $cursor_name, Node($idx, $node_id))" + start "Fetch $node - NodeIndex($idx) of NodeCount($total)" + curl -fsSL "$cursor_url" -o "$cursor_assets/$node_id.svg" + ((idx=idx+1)) + complete "Fetched $node" + done + complete "Got keyframes for Cursor($type, $cursor_name)" + fi + done +done |