This repository was archived by the owner on Aug 1, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathludusavi-launcher.sh
executable file
·143 lines (122 loc) · 3.26 KB
/
ludusavi-launcher.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#!/bin/bash
# -- ABOUT --
#
# Wrapper script to use ludusavi for savegame backup/restoration.
#
# Assumes that $5 is the directory with the game install which contains the file
# `gameinfo`.
#
# This file comes without warranty, use at your own risk!
#
# License: MIT License
# Author: Sascha Lüdecke <[email protected]>
# -- BUGS/TODO --
#
# - does not work if mangohud and/or gamemode is used
# - error checking if backup/restore or game fails
# -- HISTORY --
#
# Version: 0.3 - 2023-06-17
#
# - search for gogdl in parameter list to handle calls with mangohud and alike
# - adapted to gogdl parameter list
#
# Version: 0.2 - 2022-09-29
#
# . use zenity to tell user that we back up / restore
#
# Version: 0.1 - 2022-09-27
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
LOGFILE=$SCRIPT_DIR/ludusavi-launcher.log
# Standard paths
## LUDUSAVI=/usr/bin/ludusavi
LUDUSAVI=$HOME/Projekte/contributing/ludusavi/target/debug/ludusavi
ZENITY=/usr/bin/zenity
TEE=/usr/bin/tee
JQ=/usr/bin/jq
HEAD=/usr/bin/head
DATE=/usr/bin/date
ECHO=/usr/bin/echo
# Path on steam deck if installed via flatpack
if [ $USER == deck ]
then
LUDUSAVI=/home/.steamos/offload/var/lib/flatpak/exports/bin/com.github.mtkennerly.ludusavi
fi
{
$ECHO ==================================================
$ECHO
#
# determine game name and id from positional parameters
#
found=0
pos=0
for x
do
pos=$(( $pos+1 ))
$ECHO x: $pos - $x
if [ "`basename -- \"$x\"`" == "gogdl" ]
then
$ECHO gogdl found at position $pos
found=1
break
fi
done
$ECHO pos is: $pos, found: $found
GAME_DIR=""
GAME_ID=""
if [ $found == 1 ]
then
X=("$@")
GAME_DIR="${X[ $(( $pos+3 ))]}"
GAME_ID=${X[ $(( $pos+4 ))]}
$ECHO GAME_DIR: $GAME_DIR
$ECHO GAME_ID: $GAME_ID
else
$ECHO No gogdl found, doing nothing.
exit 1
fi
#
# Restoring, launching, backup
#
GAMENAME=""
if [ -r "$GAME_DIR/gameinfo" ]
then
GAMENAME=`$HEAD -1 "$GAME_DIR/gameinfo"`
else
GAMENAME=`$JQ -r .name "$GAME_DIR/goggame-$GAME_ID.info"`
fi
$ECHO -----------------------------------------------------------
$ECHO
$ECHO Gamename is: $GAMENAME
$ECHO Start time: `$DATE`
$ECHO Parameters: $@
# restore savegame
$ECHO $LUDUSAVI restore --force "$GAMENAME"
(
$ECHO "# Restoring savegame for $GAMENAME"
# bypass STDOUT
$LUDUSAVI restore --force "$GAMENAME" 1>&2
) | $ZENITY --progress \
--title="Savegame restore" \
--no-cancel \
--auto-close \
--pulsate
# run game
$ECHO Game run command:
$ECHO $@
"$@"
# backup savegame
$ECHO $LUDUSAVI backup --force "$GAMENAME"
(
$ECHO "# Backing up savegames for $GAMENAME"
# bypass STDOUT
$LUDUSAVI backup --force "$GAMENAME" 1>&2
) | $ZENITY --progress \
--title="Savegame backup" \
--no-cancel \
--auto-close \
--pulsate
$ECHO End time: `$DATE`
$ECHO
$ECHO ==================================================
} 2>&1 | $TEE -a $LOGFILE