mirror of
https://github.com/dragoonDorise/EmuDeck.git
synced 2025-05-05 16:02:48 +00:00
* new paths * / * EmuDeck/ * mv * no & * ESDE new location * ESDE new path * no symlink load * bigpemu new path * force move * global vars * oopsie * missing $emudeckBackend * better migration detection * Keep Appimages in Applications * Keep Appimages in Applications
381 lines
12 KiB
Bash
381 lines
12 KiB
Bash
#!/bin/bash
|
|
|
|
rclone_path="$toolsPath/rclone"
|
|
rclone_bin="$rclone_path/rclone"
|
|
rclone_config="$rclone_path/rclone.conf"
|
|
cloud_backup_jobScript="$toolsPath/rclone/run_cloud_backup_job.sh"
|
|
cloud_backup_restoreScript="$toolsPath/rclone/run_cloud_backup_restore.sh"
|
|
|
|
cloud_backup_install(){
|
|
setSetting cloud_sync_status "false" > /dev/null
|
|
|
|
if [ ! -f $rclone_bin ]; then
|
|
mkdir -p "$rclone_path"/tmp
|
|
curl -L "$(getReleaseURLGH "rclone/rclone" "linux-amd64.zip")" --output "$rclone_path/tmp/rclone.temp" && mv "$rclone_path/tmp/rclone.temp" "$rclone_path/tmp/rclone.zip"
|
|
unzip -o "$rclone_path/tmp/rclone.zip" -d "$rclone_path/tmp/" && rm "$rclone_path/tmp/rclone.zip"
|
|
mv "$rclone_path"/tmp/* "$rclone_path/tmp/rclone" #don't quote the *
|
|
mv "$rclone_path/tmp/rclone/rclone" "$rclone_bin"
|
|
rm -rf "$rclone_path/tmp"
|
|
chmod +x "$rclone_bin"
|
|
fi
|
|
cp "$emudeckBackend/configs/rclone/rclone.conf" "$rclone_config"
|
|
|
|
cloud_backup_createJob
|
|
}
|
|
|
|
cloud_backup_install_and_config(){
|
|
local rclone_provider=$1
|
|
setSetting rclone_provider "$rclone_provider"
|
|
setSetting cloud_sync_status "false" > /dev/null
|
|
rm -rf "$HOME/.config/systemd/user/emudeck_cloud_backup.service" > /dev/null
|
|
if [ ! -f $rclone_bin ]; then
|
|
mkdir -p "$rclone_path"/tmp
|
|
curl -L "$(getReleaseURLGH "rclone/rclone" "linux-amd64.zip")" --output "$rclone_path/tmp/rclone.temp" && mv "$rclone_path/tmp/rclone.temp" "$rclone_path/tmp/rclone.zip"
|
|
|
|
unzip -o "$rclone_path/tmp/rclone.zip" -d "$rclone_path/tmp/" && rm "$rclone_path/tmp/rclone.zip"
|
|
mv "$rclone_path"/tmp/* "$rclone_path/tmp/rclone" #don't quote the *
|
|
mv "$rclone_path/tmp/rclone/rclone" "$rclone_bin"
|
|
rm -rf "$rclone_path/tmp"
|
|
chmod +x "$rclone_bin"
|
|
fi
|
|
cp "$emudeckBackend/configs/rclone/rclone.conf" "$rclone_config"
|
|
|
|
cloud_backup_providersSetup
|
|
cloud_backup_stopService
|
|
}
|
|
|
|
cloud_backup_pickProvider(){
|
|
|
|
cloudProviders=()
|
|
cloudProviders+=(1 "Emudeck-GDrive")
|
|
cloudProviders+=(2 "Emudeck-DropBox")
|
|
cloudProviders+=(3 "Emudeck-OneDrive")
|
|
cloudProviders+=(4 "Emudeck-Box")
|
|
cloudProviders+=(5 "Emudeck-NextCloud")
|
|
|
|
rclone_provider=$(zenity --list \
|
|
--title="EmuDeck SaveSync Host" \
|
|
--height=500 \
|
|
--width=500 \
|
|
--ok-label="OK" \
|
|
--cancel-label="Exit" \
|
|
--text="Choose the service you would like to use to host your cloud saves.\n\nKeep in mind they can take a fair amount of space.\n\nThis will open a browser window for you to sign into your chosen cloud provider." \
|
|
--radiolist \
|
|
--column="Select" \
|
|
--column="Provider" \
|
|
"${cloudProviders[@]}" 2>/dev/null)
|
|
if [[ -n "$rclone_provider" ]]; then
|
|
setSetting rclone_provider "$rclone_provider"
|
|
return 0
|
|
else
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
|
|
cloud_backup_updateProvider(){
|
|
cloud_backup_providersSetup
|
|
}
|
|
|
|
cloud_backup_providersSetup(){
|
|
|
|
browser=$(xdg-settings get default-web-browser)
|
|
|
|
if [ $browser != 'com.google.Chrome.desktop' ];then
|
|
flatpak install flathub com.google.Chrome -y
|
|
xdg-settings set default-web-browser com.google.Chrome.desktop
|
|
fi
|
|
|
|
if [ $rclone_provider == "Emudeck-NextCloud" ]; then
|
|
|
|
local url
|
|
local username
|
|
local password
|
|
|
|
NCInput=$(zenity --forms \
|
|
--title="Nextcloud Sign in" \
|
|
--text="Please enter your Nextcloud information here. URL is your webdav url. Use HTTP:// or HTTPS:// please." \
|
|
--width=300 \
|
|
--add-entry="URL: " \
|
|
--add-entry="Username: " \
|
|
--add-password="Password: " \
|
|
--separator="," 2>/dev/null)
|
|
ans=$?
|
|
if [ $ans -eq 0 ]; then
|
|
echo "Nextcloud Login"
|
|
url="$(echo "$NCInput" | awk -F "," '{print $1}')"
|
|
username="$(echo "$NCInput" | awk -F "," '{print $2}')"
|
|
password="$(echo "$NCInput" | awk -F "," '{print $3}')"
|
|
|
|
$rclone_bin config update "$rclone_provider" vendor="nextcloud" url=$url user=$username pass="$($rclone_bin obscure $password)"
|
|
else
|
|
echo "Cancel Nextcloud Login"
|
|
fi
|
|
elif [ $rclone_provider == "Emudeck-SFTP" ]; then
|
|
|
|
NCInput=$(zenity --forms \
|
|
--title="SFTP Sign in" \
|
|
--text="Please enter your SFTP information here." \
|
|
--width=300 \
|
|
--add-entry="Host: " \
|
|
--add-entry="Username: " \
|
|
--add-password="Password: " \
|
|
--add-entry="Port: " \
|
|
--separator="," 2>/dev/null)
|
|
ans=$?
|
|
if [ $ans -eq 0 ]; then
|
|
echo "SFTP Login"
|
|
host="$(echo "$NCInput" | awk -F "," '{print $1}')"
|
|
username="$(echo "$NCInput" | awk -F "," '{print $2}')"
|
|
password="$(echo "$NCInput" | awk -F "," '{print $3}')"
|
|
port="$(echo "$NCInput" | awk -F "," '{print $4}')"
|
|
|
|
$rclone_bin config update "$rclone_provider" host=$host user=$username port=$port pass="$($rclone_bin obscure $password)"
|
|
else
|
|
echo "Cancel SFTP Login"
|
|
fi
|
|
|
|
elif [ $cloud_sync_provider == "Emudeck-SMB" ]; then
|
|
|
|
NCInput=$(zenity --forms \
|
|
--title="SMB Sign in" \
|
|
--text="Please enter your SMB information here." \
|
|
--width=300 \
|
|
--add-entry="Host: " \
|
|
--add-entry="Username: " \
|
|
--add-password="Password: " \
|
|
--separator="," 2>/dev/null)
|
|
ans=$?
|
|
if [ $ans -eq 0 ]; then
|
|
echo "SMB Login"
|
|
host="$(echo "$NCInput" | awk -F "," '{print $1}')"
|
|
username="$(echo "$NCInput" | awk -F "," '{print $2}')"
|
|
password="$(echo "$NCInput" | awk -F "," '{print $3}')"
|
|
|
|
$cloud_sync_bin config update "$cloud_sync_provider" host=$host user=$username pass="$($cloud_sync_bin obscure $password)"
|
|
else
|
|
echo "Cancel SMB Login"
|
|
fi
|
|
|
|
else
|
|
$rclone_bin config update "$rclone_provider" && echo "true"
|
|
fi
|
|
#We get the previous default browser back
|
|
if [ $browser != 'com.google.Chrome.desktop' ];then
|
|
xdg-settings set default-web-browser $browser
|
|
fi
|
|
}
|
|
|
|
cloud_backup_etup(){
|
|
|
|
while true; do
|
|
if [ ! -e "$rclone_bin" ] || [ ! -e "$rclone_jobScript" ]; then
|
|
ans=$(zenity --info --title 'cloud_backup' \
|
|
--text 'Click on Install to continue' \
|
|
--width=50 \
|
|
--ok-label Exit \
|
|
--extra-button "Install cloud_backup" 2>/dev/null )
|
|
elif [ -z "$rclone_provider" ]; then
|
|
ans=$(zenity --info --title 'cloud_backup' \
|
|
--text 'Cloud provider not found. Please click on "Pick Provider' \
|
|
--width=50 \
|
|
--ok-label Exit \
|
|
--extra-button "Reinstall cloud_backup" \
|
|
--extra-button "Pick Provider" 2>/dev/null )
|
|
else
|
|
ans=$(zenity --info --title 'cloud_backup' \
|
|
--text 'If this is your first setup click on "Login to your cloud provider" before clicking on "Create Backup"' \
|
|
--width=50 \
|
|
--extra-button "Reinstall cloud_backup" \
|
|
--extra-button "Login to your cloud provider" \
|
|
--extra-button "Create Backup" \
|
|
--ok-label Exit 2>/dev/null )
|
|
fi
|
|
rc=$?
|
|
if [ "$rc" == 0 ] || [ "$ans" == "" ]; then
|
|
break
|
|
elif [ "$ans" == "Install cloud_backup" ] || [ "$ans" == "Reinstall cloud_backup" ]; then
|
|
rclone_install
|
|
elif [ "$ans" == "Pick Provider" ]; then
|
|
rclone_pickProvider
|
|
elif [ "$ans" == "Login to your cloud provider" ]; then
|
|
rclone_updateProvider
|
|
elif [ "$ans" == "Create Backup" ]; then
|
|
rclone_createBackup
|
|
fi
|
|
done
|
|
|
|
}
|
|
|
|
cloud_backup_createJob(){
|
|
|
|
echo '#!/bin/bash'>"$rclone_jobScript"
|
|
echo "source \$emudeckFolder/settings.sh
|
|
PIDFILE=\"\$toolsPath/rclone/rclone.pid\"
|
|
|
|
function finish {
|
|
echo \"Script terminating. Exit code \$?\"
|
|
}
|
|
trap finish EXIT
|
|
|
|
if [ -z \"\$savesPath\" ] || [ -z \"\$rclone_provider\" ]; then
|
|
echo \"You need to setup your cloudprovider first.\"
|
|
exit
|
|
fi
|
|
|
|
if [ -f \"\$PIDFILE\" ]; then
|
|
PID=\$(cat \"\$PIDFILE\")
|
|
ps -p \"\$PID\" > /dev/null 2>&1
|
|
if [ \$? -eq 0 ]; then
|
|
echo \"Process already running\"
|
|
exit 1
|
|
else
|
|
## Process not found assume not running
|
|
echo \$\$ > \"\$PIDFILE\"
|
|
if [ \$? -ne 0 ]; then
|
|
echo \"Could not create PID file\"
|
|
exit 1
|
|
fi
|
|
fi
|
|
else
|
|
echo \$\$ > \"\$PIDFILE\"
|
|
if [ \$? -ne 0 ]; then
|
|
echo \"Could not create PID file\"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
\"\$toolsPath/rclone/rclone\" copy -L \"\$savesPath\" \"\$rclone_provider\":"$cs_user"Emudeck/saves -P > \"\$toolsPath/rclone/rclone_job.log\"
|
|
">>"$rclone_jobScript"
|
|
chmod +x "$rclone_jobScript"
|
|
|
|
echo '#!/bin/bash'>"$rclone_restoreScript"
|
|
echo "source \$emudeckFolder/settings.sh
|
|
PIDFILE=\"\$toolsPath/rclone/rclone.pid\"
|
|
|
|
function finish {
|
|
echo \"Script terminating. Exit code \$?\"
|
|
}
|
|
trap finish EXIT
|
|
|
|
if [ -z \"\$savesPath\" ] || [ -z \"\$rclone_provider\" ]; then
|
|
echo \"You need to setup your cloudprovider first.\"
|
|
exit
|
|
fi
|
|
|
|
if [ -f \"\$PIDFILE\" ]; then
|
|
PID=\$(cat \"\$PIDFILE\")
|
|
ps -p \"\$PID\" > /dev/null 2>&1
|
|
if [ \$? -eq 0 ]; then
|
|
echo \"Process already running\"
|
|
exit 1
|
|
else
|
|
## Process not found assume not running
|
|
echo \$\$ > \"\$PIDFILE\"
|
|
if [ \$? -ne 0 ]; then
|
|
echo \"Could not create PID file\"
|
|
exit 1
|
|
fi
|
|
fi
|
|
else
|
|
echo \$\$ > \"\$PIDFILE\"
|
|
if [ \$? -ne 0 ]; then
|
|
echo \"Could not create PID file\"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
\"\$toolsPath/rclone/rclone\" copy -L \"\$rclone_provider\":"$cs_user"Emudeck/saves \"\$savesPath\" -P > \"\$toolsPath/rclone/rclone_job.log\"
|
|
">>"$rclone_restoreScript"
|
|
chmod +x "$rclone_restoreScript"
|
|
}
|
|
|
|
cloud_backup_createService(){
|
|
echo "Creating cloud_backup service"
|
|
cloud_backup_stopService
|
|
|
|
mkdir -p "$HOME/.config/systemd/user"
|
|
echo \
|
|
"[Unit]
|
|
Description=EmuDeck cloud_backup service
|
|
|
|
[Service]
|
|
Type=simple
|
|
ExecStart=\"$rclone_jobScript\"
|
|
CPUWeight=20
|
|
CPUQuota=50%
|
|
IOWeight=20
|
|
|
|
[Install]
|
|
WantedBy=default.target" > "$HOME/.config/systemd/user/emudeck_cloud_backup.service"
|
|
#chmod +x "$HOME/.config/systemd/user/emudeck_cloud_backup.service"
|
|
|
|
#create timer
|
|
echo "[Unit]
|
|
Description=Runs EmuDeck cloud_backup Every 15 minutes
|
|
Requires=emudeck_cloud_backup.service
|
|
After=network-online.target
|
|
Wants=network-online.target
|
|
|
|
[Timer]
|
|
OnBootSec=5min
|
|
Unit=emudeck_cloud_backup.service
|
|
OnUnitActiveSec=15m
|
|
|
|
[Install]
|
|
WantedBy=timers.target"> "$HOME/.config/systemd/user/emudeck_cloud_backup.timer"
|
|
#chmod +x "$HOME/.config/systemd/user/emudeck_cloud_backup.timer"
|
|
#enabling services seems to want to symlink to a place it doesn't have access to, even with --user. Maybe needs sudo...
|
|
|
|
echo "Enabling cloud_backup"
|
|
systemctl --user enable emudeck_cloud_backup.service
|
|
|
|
echo "Enabling cloud_backup 15 minute timer service"
|
|
systemctl --user enable emudeck_cloud_backup.timer
|
|
|
|
echo "Enabling cloud_backup Timer."
|
|
cloud_backup_startService
|
|
}
|
|
|
|
cloud_backup_stopService(){
|
|
systemctl --user stop emudeck_cloud_backup.timer
|
|
systemctl --user stop emudeck_cloud_backup.service
|
|
}
|
|
|
|
cloud_backup_startService(){
|
|
systemctl --user start emudeck_cloud_backup.timer
|
|
}
|
|
|
|
cloud_backup_runJobOnce(){
|
|
"$cloud_backup_jobScript"
|
|
}
|
|
|
|
cloud_backup_downloadFiles(){
|
|
"$cloud_backup_restoreScript"
|
|
}
|
|
|
|
cloud_backup_createBackup(){
|
|
ans=$(zenity --info --title 'cloud_backup' \
|
|
--text 'Use Create Service to backup your saves directory every 15 minutes' \
|
|
--width=50 \
|
|
--extra-button "Create Service" \
|
|
--extra-button "Start Service" \
|
|
--extra-button "Stop Service" \
|
|
--extra-button "Restore Cloud Files" \
|
|
--extra-button "Run Backup Once" \
|
|
--ok-label Exit 2>/dev/null )
|
|
rc=$?
|
|
if [ "$rc" == 0 ] || [ "$ans" == "" ]; then
|
|
echo "nothing chosen"
|
|
elif [ "$ans" == "Create Service" ]; then
|
|
cloud_backup_createService
|
|
elif [ "$ans" == "Start Service" ]; then
|
|
cloud_backup_startService
|
|
elif [ "$ans" == "Stop Service" ]; then
|
|
cloud_backup_stopService
|
|
elif [ "$ans" == "Restore Cloud Files" ]; then
|
|
cloud_backup_downloadFiles
|
|
elif [ "$ans" == "Run Backup Once" ]; then
|
|
cloud_backup_runJobOnce
|
|
fi
|
|
} |