diff options
| Commit | 375d11b33142e971a82f28ddb4cc7d386e3551cf (patch) | |
|---|---|---|
| Author | 2026-11-01 17:50:07 +0200 | |
| Committer | 2026-11-01 17:50:07 +0200 | |
| Files | 85373ae415fcff7142ee1194594e8bb1e381176b /scripts/bin/rclone.sh | |
| .files-375d11b33142e971a82f28ddb4cc7d386e3551cf.tar .files-375d11b33142e971a82f28ddb4cc7d386e3551cf.tar.gz .files-375d11b33142e971a82f28ddb4cc7d386e3551cf.zip | ||
| Parent | e41b78ee956a6adcfc07b3c453f70198214ca599 (diff) | |
feat!: Rework how .files are managed
1 files changed, 104 insertions, 0 deletions
| -rwxr-xr-x | scripts/bin/rclone.sh | 104 |
diff --git a/scripts/bin/rclone.sh b/scripts/bin/rclone.sh new file mode 100755 index 0000000..c8e0e16 --- /dev/null +++ b/scripts/bin/rclone.sh @@ -0,0 +1,104 @@ +#!/bin/sh + +: ${PREFIX:=$HOME/mnt} ${TITLE:=rclone helper} ${ICON=rclone-browser} +FIELDS_BEFORE=1 + +KDBX_MOUNTED="$PREFIX/FTP marduk.int kamen" +: ${KDBX_REMOTE_DIR:="Secret"} +: ${KDBX_LOCAL_DIR:='/mnt/Svalbard/Doc/Adulthood/Vault'} + +yad_ok() { + echo "$2" | yad --title="$TITLE" --window-icon="$ICON" --borders=10 --text-info \ + --text="$1" \ + --button="yad-ok:0" & + disown +} + +# Run window +if [ $# -eq 0 ] +then + eval "yad --title='$TITLE' --window-icon='$ICON' --borders=10 --fixed --no-buttons --form \ + --field='<span size=\"x-large\" weight=\"bold\">rclone mount</span>:LBL' '' \ + $(rclone listremotes | awk -v ORS=' ' ' + { + sub(/:$/,"");sub(/^[ \t\v]*/,"");sub(/[ \t\v]*$/,"") + print "--field=\"" $0 ":SW\" \"" (system("mount | grep \"" $0 "\" >/dev/null")==0?"TRUE":"FALSE") "\"" + }') \ + --changed-action='$0' \ + --field='<span size=\"x-large\" weight=\"bold\">KDBX sync</span>:LBL' '' \ + --field='Download KDBX:FBTN' '$0 kdbx download' \ + --field='Upload KDBX:FBTN' '$0 kdbx upload' \ + " +# KDBX sync +elif [ "$1" = 'kdbx' ] +then + if ! mount | grep "$KDBX_MOUNTED" >/dev/null + then + yad_ok "Directory not mounted!" "$KDBX_MOUNTED" + exit 1 + fi + + if [ "$2" = 'download' ] + then + if [ ! -f "$KDBX_MOUNTED/$KDBX_REMOTE_DIR/hash_md5.txt" ] + then + yad_ok "Missing file!" "$KDBX_MOUNTED/$KDBX_REMOTE_DIR/hash_md5.txt" + exit 2 + fi + + yad --title="$TITLE" --window-icon="$ICON" --borders=10 \ + --image=dialog-warning --text="Are you sure you want to <b>download</b> KDBX files?\nThis will overwrite <b>local</b> copies!" \ + --button="yad-yes:0" --button="yad-no:1" || exit 0 + + cd "$KDBX_MOUNTED/$KDBX_REMOTE_DIR" + + if ! md5sum -c ./hash_md5.txt >/dev/null 2>&1 + then + yad_ok "Checksum check failed!" "$(md5sum -c --quiet ./hash_md5.txt)" + exit 3 + fi + + while read -r kdbx + do + kdbx_hash="$(echo "$kdbx" | cut -c-32)" + kdbx_path="$(echo "$kdbx" | cut -c35-)" + + cp -f "$kdbx_path" "$KDBX_LOCAL_DIR/$kdbx_path" + done <"$KDBX_MOUNTED/$KDBX_REMOTE_DIR/hash_md5.txt" + else + yad --title="$TITLE" --window-icon="$ICON" --borders=10 \ + --image=dialog-question --text="Are you sure you want to <b>upload</b> KDBX files?\nThis will overwrite <b>remote</b> copies!" \ + --button="yad-yes:0" --button="yad-no:1" || exit 0 + + mkdir -p "$KDBX_MOUNTED/$KDBX_REMOTE_DIR" + cd "$KDBX_MOUNTED/$KDBX_REMOTE_DIR" + + cp -f "$KDBX_LOCAL_DIR"/*.kdbx . + md5sum *.kdbx >hash_md5.txt + fi +# Mount/unmount +else + remote_info="$(rclone listremotes --long | awk -v FIELD="$1" -v OFFSET="$FIELDS_BEFORE" 'BEGIN{row=FIELD-OFFSET}NR==row{gsub(/:/,"");print;exit}')" + + if [ -z "$remote_info" ] + then + yad_ok 'Invalid field data!' "$*" + exit 1 + fi + + remote="$(echo "$remote_info" | awk '{$NF="";sub(/^[ \t\v]*/,"");sub(/[ \t\v]$/,"");print}')" + remote_type="$(echo "$remote_info" | awk '{print toupper($NF)}')" + + dir="$PREFIX/$remote_type $remote" + mkdir -p "$dir" + + if [ 'FALSE' = "$2" ] + then + umount "$dir" >/dev/tty + elif mount | grep "$dir" >/dev/null + then + yad_ok 'Directory is already mounted!' "$dir" + else + rclone mount "$remote:/" "$dir" --daemon &>/dev/null + fi +fi |
