Module Update
All checks were successful
Update Dispatches / refresh-news (push) Successful in 1s

- Add Transfer capabillity (copy or move)
- Add Options to 'Exit' or 'Quit'
- Have Module list directories (Local & Remote)
- Add " " Quotes to file/filenames with spaces
- rclone runs with - P flag to show progress
- End of transfer Return to Wizard screen
- Logs Logged to /.dynr/log/rclone-wizard
This commit is contained in:
2026-02-11 21:09:42 -05:00
parent 7ab37d67c3
commit 9bc9bde9bd

View File

@@ -1,9 +1,11 @@
#!/bin/bash
# DYNR Module: Rclone Wizard v2.3.6
# DYNR Module: Rclone Wizard v2.3.7pre
run_rclone_wizard() {
BLUE='\033[38;5;45m'; PURPLE='\033[38;5;127m'; GOLD='\033[38;5;178m'; RED='\033[38;5;196m'; NC='\033[0m'
LOG_DIR="/root/.dynr/logs/rclone-wizard"
mkdir -p "$LOG_DIR"
# --- Dynamic Dependency Check ---
MISSING=()
command -v rclone &> /dev/null || MISSING+=("rclone")
@@ -12,33 +14,75 @@ run_rclone_wizard() {
if [ ${#MISSING[@]} -gt 0 ]; then
echo -e "${RED}⚠️ Required tools missing: ${MISSING[*]}${NC}"
read -p "Manifest these scrolls now? (y/n): " choice
if [[ "$choice" == "y" ]]; then
sudo apt update -qq && sudo apt install -y -qq "${MISSING[@]}"
else
echo -e "${RED}Wizard dismissed.${NC}"
dynr; return
fi
[[ "$choice" == "y" ]] && sudo apt update -qq && sudo apt install -y -qq "${MISSING[@]}" || { dynr; return; }
fi
# --- Deep Navigation Engine (Stderr redirected to protect variables) ---
navigate_path() {
local type=$1; local base=$2; local current_dir="/"
while true; do
echo -e "${PURPLE}Navigation: ${GOLD}$type${NC} | ${BLUE}Path: ${GOLD}${base}${current_dir}${NC}" >&2
if [[ "$type" == "LOCAL" ]]; then
local options=$(find "$current_dir" -maxdepth 1 -type d -not -path "$current_dir" -printf "%f\n" 2>/dev/null)
else
local options=$(rclone lsd "${base}${current_dir}" 2>/dev/null | awk '{print substr($0, index($0, $5))}' | awk '{$1=$1;print}')
fi
local choice=$(printf "✅ SELECT THIS FOLDER\n..\nQUIT\n%s" "$options" | fzf --height 15 --reverse --header "Targeting Folder...")
case "$choice" in
"✅ SELECT THIS FOLDER") echo "${current_dir}"; return ;;
"..") current_dir=$(dirname "$current_dir"); [[ "$current_dir" != "/" ]] && current_dir="${current_dir}/"; clear >&2 ;;
"QUIT"|"") echo "CANCEL"; return ;;
*) current_dir="${current_dir%/}/${choice}/"; current_dir=$(echo "$current_dir" | sed 's|//|/|g'); clear >&2 ;;
esac
done
}
clear
echo -e "${PURPLE}=================================================${NC}"
echo -e "${BLUE} 🐉 DYNASTY REVOLUTION: RCLONE WIZARD 🐉 ${NC}"
echo -e "${BLUE} 🐉 DYNASTY REVOLUTION: RCLONE WIZARD 🐉 ${NC}"
echo -e "${PURPLE}=================================================${NC}"
# Basic Menu Example
echo -e "${GOLD}Select a path:${NC}"
OPTIONS=("Configure New Remote" "List Existing Remotes" "Exit Wizard")
# Use fzf for the selection
OPTIONS=("Safe Transfer (Copy Only)" "List Existing Remotes" "Configure New Remote" "Exit Wizard")
CHOICE=$(printf "%s\n" "${OPTIONS[@]}" | fzf --height 40% --reverse --prompt="Select Stance > ")
case "$CHOICE" in
"Configure New Remote") rclone config ;;
"Safe Transfer (Copy Only)")
REMOTES=$(rclone listremotes)
# Source Select
S_BASE=$(printf "QUIT\nLOCAL_FILESYSTEM\n%s" "$REMOTES" | fzf --prompt="Select Source > ")
[[ "$S_BASE" == "QUIT" || -z "$S_BASE" ]] && { run_rclone_wizard; return; }
[[ "$S_BASE" != "LOCAL_FILESYSTEM" && "$S_BASE" != *":" ]] && S_BASE="${S_BASE}:"
S_SUB=$(navigate_path "$([[ "$S_BASE" == "LOCAL_FILESYSTEM" ]] && echo "LOCAL" || echo "REMOTE")" "$([[ "$S_BASE" == "LOCAL_FILESYSTEM" ]] && echo "" || echo "$S_BASE")")
[[ "$S_SUB" == "CANCEL" ]] && { run_rclone_wizard; return; }
F_SRC="$([[ "$S_BASE" == "LOCAL_FILESYSTEM" ]] && echo "$S_SUB" || echo "${S_BASE}${S_SUB}")"
# Destination Select
D_BASE=$(printf "QUIT\nLOCAL_FILESYSTEM\n%s" "$REMOTES" | fzf --prompt="Select Destination > ")
[[ "$D_BASE" == "QUIT" || -z "$D_BASE" ]] && { run_rclone_wizard; return; }
[[ "$D_BASE" != "LOCAL_FILESYSTEM" && "$D_BASE" != *":" ]] && D_BASE="${D_BASE}:"
D_SUB=$(navigate_path "$([[ "$D_BASE" == "LOCAL_FILESYSTEM" ]] && echo "LOCAL" || echo "REMOTE")" "$([[ "$D_BASE" == "LOCAL_FILESYSTEM" ]] && echo "" || echo "$D_BASE")")
[[ "$D_SUB" == "CANCEL" ]] && { run_rclone_wizard; return; }
F_DEST="$([[ "$D_BASE" == "LOCAL_FILESYSTEM" ]] && echo "$D_SUB" || echo "${D_BASE}${D_SUB}")"
clear
echo -e "${RED}🛡️ DYNASTY DATA SAFETY LOCK${NC}"
echo -e "${BLUE}FROM: ${GOLD}\"$F_SRC\"${NC}\n${BLUE}TO: ${GOLD}\"$F_DEST\"${NC}"
echo -e "-------------------------------------------------\n${GOLD}Mode: Additive Copy (No Deletions)${NC}"
read -p "Type 'SAFE' to manifest: " VAL
if [[ "$VAL" == "SAFE" ]]; then
TS=$(date +"%Y%m%d_%H%M%S"); LOG="$LOG_DIR/copy_$TS.log"
rclone copy -vP "$F_SRC" "$F_DEST" 2>&1 | tee "$LOG"
read -p "Transfer Complete. Enter to return..."
else
echo -e "${RED}Aborted.${NC}"; sleep 1
fi
;;
"List Existing Remotes") rclone listremotes | sed 's/^/ ☁️ /' ;;
*) echo "Returning...";;
"Configure New Remote") rclone config ;;
*) dynr; return ;;
esac
echo -e "${PURPLE}=================================================${NC}"
read -p "Press Enter to return..." < /dev/tty
dynr
run_rclone_wizard
}