Files
rclone_script/rclone_script-menu.sh
Jandalf81 3adff1c9fe added check for available connection
rclone_script-install.sh
* added new configuration setting for needed connection
* changed the way commands are added to other files (from ECHO to PRINTF)

rclone_script.sh
* added new function getAvailableConnection
* changed both downloadSaves and uploadSaves so they react on that new function (check if the available connection is greater than the needed connection, else error)

rclone_script-menu.sh
* added new menu item to re-set the needed connection
2018-08-25 14:51:43 +02:00

212 lines
4.6 KiB
Bash

#!/bin/bash
NORMAL="\Zn"
BLACK="\Z0"
RED="\Z1"
GREEN="\Z2"
YELLOW="\Z3\Zb"
BLUE="\Z4"
MAGENTA="\Z5"
CYAN="\Z6"
WHITE="\Z7"
BOLD="\Zb"
REVERSE="\Zr"
UNDERLINE="\Zu"
# include settings file
config=~/scripts/rclone_script/rclone_script.ini
source ${config}
backtitle="RCLONE_SCRIPT menu (https://github.com/Jandalf81/rclone_script)"
####################
# HELPER FUNCTIONS #
####################
function log ()
{
severity=$1
message=$2
printf "$(date +%FT%T%:z):\t${severity}:\t${message}\n" >> ${logfile}
}
function getTypeOfRemote ()
{
# list all remotes and their type
remotes=$(rclone listremotes -l)
# get line wiht RETROPIE remote
retval=$(grep -i "^retropie:" <<< ${remotes})
remoteType="${retval#*:}"
remoteType=$(echo ${remoteType} | xargs)
}
function getStatusOfParameters ()
{
if [ "${syncOnStartStop}" == "TRUE" ]
then
statusSyncOnStartStop="${GREEN}ENABLED${NORMAL}"
else
statusSyncOnStartStop="${RED}DISABLED${NORMAL}"
fi
if [ "${showNotifications}" == "TRUE" ]
then
statusShowNotifications="${GREEN}ENABLED${NORMAL}"
else
statusShowNotifications="${RED}DISABLED${NORMAL}"
fi
case ${neededConnection} in
0) statusNeededConnection="Internet access" ;;
1) statusNeededConnection="LAN / WLAN" ;;
esac
}
function saveConfig ()
{
echo "remotebasedir=${remotebasedir}" > ${config}
echo "showNotifications=${showNotifications}" >> ${config}
echo "syncOnStartStop=${syncOnStartStop}" >> ${config}
echo "logfile=~/scripts/rclone_script/rclone_script.log" >> ${config}
echo "neededConnection=${neededConnection}" >> ${config}
echo "debug=0" >> ${config}
}
##################
# MENU FUNCTIONS #
##################
# Show the main menu. Return here anytime another dialog is closed
function main_menu ()
{
local choice="1"
while true
do
getStatusOfParameters
choice=$(dialog \
--stdout \
--colors \
--backtitle "${backtitle}" \
--title "main menu" \
--default-item "${choice}" \
--menu "\nWhat do you want to do?" 25 75 20 \
1 "Full synchronization of all savefiles and statefiles" \
2 "Toggle \"Synchronize saves on start / stop\" (currently ${statusSyncOnStartStop})" \
3 "Toggle \"Show notifications on sync\" (currently ${statusShowNotifications})" \
4 "Set needed Connection (currently \"${statusNeededConnection}\")" \
"" ""\
9 "uninstall RCLONE_SCRIPT"
)
case "$choice" in
1) doFullSync ;;
2) toggleSyncOnStartStop ;;
3) toggleShowNotifications ;;
4) setNeededConnection ;;
9) ~/scripts/rclone_script/rclone_script-uninstall.sh ;;
*) break ;;
esac
done
}
# Syncs all files in both directions, only transferring newer files
function doFullSync ()
{
local tmpfile=~/scripts/rclone_script/tmp-sync.txt
getTypeOfRemote
printf "\nStarted full sync...\n\n" > ${tmpfile}
log "INFO" "Started full sync..."
# start sync process in background
{
# Download newer files from remote to local
printf "Downloading newer files from retropie:${remotebasedir} (${remoteType}) to ~/RetroPie/saves/...\n"
rclone copy retropie:${remotebasedir}/ ~/RetroPie/saves/ --update --skip-links --exclude "readme.txt" --verbose 2>&1
# Upload newer files from local to remote
printf "Uploading newer files from ~/RetroPie/saves/ to retropie:${remotebasedir} (${remoteType})...\n"
rclone copy ~/RetroPie/saves/ retropie:${remotebasedir}/ --update --skip-links --exclude "readme.txt" --verbose 2>&1
printf "Done\n"
} >> ${tmpfile} & # capture output of background process
dialog \
--backtitle "${backtitle}" \
--title "Doing full sync..." \
--colors \
--no-collapse \
--cr-wrap \
--tailbox ${tmpfile} 40 120
wait
cat ${tmpfile} >> ${logfile}
rm ${tmpfile}
log "INFO" "Finished full sync..."
}
function toggleSyncOnStartStop ()
{
if [ "${syncOnStartStop}" == "TRUE" ]
then
syncOnStartStop="FALSE"
else
syncOnStartStop="TRUE"
fi
saveConfig
}
function toggleShowNotifications ()
{
if [ "${showNotifications}" == "TRUE" ]
then
showNotifications="FALSE"
else
showNotifications="TRUE"
fi
saveConfig
}
function setNeededConnection ()
{
choice=$(dialog \
--stdout \
--colors \
--no-collapse \
--cr-wrap \
--backtitle "${backtitle}" \
--title "Needed connection" \
--default-item "${neededConnection}" \
--ok-label "Select" \
--menu "\nPlease select which type of connection will be needed for your configured remote" 20 50 5 \
0 "Internet access" \
1 "LAN / WLAN connection only"
)
case ${choice} in
0) neededConnection=0 ;;
1) neededConnection=1 ;;
*) return ;;
esac
saveConfig
}
########
# MAIN #
########
main_menu