diff options
author | Charles E. Lehner <cel@celehner.com> | 2020-09-14 12:02:16 -0400 |
---|---|---|
committer | Charles E. Lehner <cel@celehner.com> | 2020-09-14 15:28:06 -0400 |
commit | 9e1732f8e505ff08d960384b95701ae8250b0f29 (patch) | |
tree | 988112a41b7ced117e47e93924bd094b798388c3 | |
parent | 4f61b5ec0e90e9ffe51fded4426a38958c8f7e04 (diff) |
Save history
-rwxr-xr-x | gemini.filter.dpi | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/gemini.filter.dpi b/gemini.filter.dpi index f2e885b..7558980 100755 --- a/gemini.filter.dpi +++ b/gemini.filter.dpi @@ -251,6 +251,8 @@ serve_gemini_input() { serve_real_redirect "$url" } +blobs_dir=${ssb_path:-~/.${ssb_appname:-ssb}}/blobs + serve_gemini() { url=${1%%#*} url_noquery=${url%%\?*} @@ -277,7 +279,9 @@ serve_gemini_response() { read status meta send_status_msg "Status: $status" meta=$(echo "$meta" | sed 's/\s*$//') - case "$status" in + mkdir -p $blobs_dir/tmp ~/.dillo/gemini + tmp=$(mktemp $blobs_dir/tmp/XXXXXXXXXXXX) + tee "$tmp" | case "$status" in 1*) serve_input "$url" "$meta";; 2*) serve_success "$meta";; 3*) serve_redirect "$meta";; @@ -287,6 +291,16 @@ serve_gemini_response() { '') serve_missing_status "$meta";; *) serve_status_not_supported "$status" "$meta";; esac + dest=$blobs_dir/sha256/$(sha256sum "$tmp" | awk '{print substr($1, 1, 2) "/" substr($1, 3)}') + if test -e "$dest" && cmp -s "$tmp" "$dest" + then + # unchanged resource + rm "$tmp" + else + mkdir -p "${dest#/*}" + mv "$tmp" "$dest" + fi + printf "%s %s %s %s\n" "$(date -u +%FT%TZ)" "$dest" "$url" "$status $meta" >>~/.dillo/gemini/history.txt } case "$url" in |