1
0
forked from finn/tinyboard

syncthing.sh: auto-unshare folder from all devices before removal if shared

This commit is contained in:
Justin Oros
2026-04-18 21:21:24 -07:00
parent 0c784a672c
commit 1d4e25b6a5

View File

@@ -268,8 +268,35 @@ for i, f in enumerate(json.load(sys.stdin), 1):
folder_id=$(echo "$folders" | python3 -c "import sys,json; f=json.load(sys.stdin)[$((CHOICE-1))]; print(f['id'])") folder_id=$(echo "$folders" | python3 -c "import sys,json; f=json.load(sys.stdin)[$((CHOICE-1))]; print(f['id'])")
folder_label=$(echo "$folders" | python3 -c "import sys,json; f=json.load(sys.stdin)[$((CHOICE-1))]; print(f['label'] or f['id'])") folder_label=$(echo "$folders" | python3 -c "import sys,json; f=json.load(sys.stdin)[$((CHOICE-1))]; print(f['label'] or f['id'])")
read -rp "Remove folder '${folder_label}'? [y/N]: " CONFIRM local folder_config shared_devices
[[ "${CONFIRM,,}" == "y" ]] || { info "Aborted."; return; } folder_config=$(st_get "/rest/config/folders/${folder_id}")
shared_devices=$(echo "$folder_config" | python3 -c "import sys,json; [print(d['deviceID']) for d in json.load(sys.stdin).get('devices',[])]")
if [ -n "$shared_devices" ]; then
local devices
devices=$(st_get /rest/config/devices)
warn "Folder '${folder_label}' is currently shared with:"
while IFS= read -r did; do
local dname
dname=$(echo "$devices" | python3 -c "import sys,json; devs=json.load(sys.stdin); match=[d['name'] for d in devs if d['deviceID']==sys.argv[1]]; print(match[0] if match else sys.argv[1])" "$did")
echo " - $dname"
done <<< "$shared_devices"
warn "It will be unshared from all devices before removal."
read -rp "Proceed? [y/N]: " CONFIRM
[[ "${CONFIRM,,}" == "y" ]] || { info "Aborted."; return; }
local updated
updated=$(echo "$folder_config" | python3 -c "
import sys, json
f = json.load(sys.stdin)
f['devices'] = []
print(json.dumps(f))
")
st_put "/rest/config/folders/${folder_id}" "$updated" >/dev/null
info "Folder '${folder_label}' unshared from all devices."
else
read -rp "Remove folder '${folder_label}'? [y/N]: " CONFIRM
[[ "${CONFIRM,,}" == "y" ]] || { info "Aborted."; return; }
fi
st_delete "/rest/config/folders/${folder_id}" >/dev/null st_delete "/rest/config/folders/${folder_id}" >/dev/null
info "Folder '${folder_label}' removed." info "Folder '${folder_label}' removed."