2 #**********************************************************************
3 # Copyright (C) 2023 - The Geeqie Team
7 # This program is free software; you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 2 of the License, or
10 # (at your option) any later version.
12 # This program is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
17 # You should have received a copy of the GNU General Public License along
18 # with this program; if not, write to the Free Software Foundation, Inc.,
19 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20 #**********************************************************************
23 ## @brief Download full and minimal AppImages from the Continuous build release on GitHub.
24 ## Optionally extract the full size AppImage.
26 ## Downloads are made to $HOME/bin.
27 ## It is expected that $HOME/bin exists and that it is in $PATH.
29 ## Downloads will not be made unless the server version is newer than the local file.
37 printf "Download the latest Geeqie AppImages from the
38 Continuous Build release on GitHub.
40 -b --backups <n> Set number of backups (default is 3)
41 -d --desktop Install desktop icon and menu item
42 -e --extract Extract AppImage
43 -h --help Display this message
44 -m --minimal Download minimal version of AppImage
45 -r --revert <n> Revert to downloaded AppImage backup. For the latest version set <n> to 0
46 -v --version Display version of this file
48 The Continuous Build release is updated each
49 time the source code is updated.
51 The default action is to download an AppImage to
52 \$HOME/bin. A symbolic link will be set so that
53 \"geeqie\" points to the executable
55 No downloads will be made unless the file on the
56 server at GitHub is newer than the local file.
58 The full size AppImage is about 120MB and the
59 minimal AppImage is about 10MB. Therefore the full
60 size version will load much slower and will have
61 a slightly slower run speed.
63 However the minimal version has limited capabilities
64 compared to the full size version.
66 The minimal option (-m or --minimal) will download
69 The extract option (-e or --extract) will extract
70 The contents of the AppImage into a sub-directory
71 of \$HOME/bin, and then set the symbolic link to the
74 This will take up some disk space, but the
75 extracted executable will run as fast as a
78 If the extract option is selected, a symbolic link from
79 \$HOME/.local/share/bash-completion/completions/geeqie
80 to the extracted executable will be set to enable command line completion.
86 printf "Version: %s\n" "$version"
92 character_count=$((${#message} + 4))
97 while kill -0 "$pid" 2> /dev/null
100 printf "$message [%c]" "$spinstr"
101 spinstr=$temp${spinstr%"$temp"}
103 printf "%$character_count""s" | tr " " "\b"
139 printf '"--backups" requires a non-empty option argument.\n' >&2
151 printf '"--revert" requires a non-empty option argument.\n' >&2
162 --) # End of all options.
167 printf 'Unknown option %s\n' "$1" >&2
179 if [ ! -d "$HOME/bin" ]
181 printf "\$HOME/bin does not exist.
182 It is required for this script to run.
183 Also, \$HOME/bin should be in \$PATH.\n"
188 if [ "$backups_option" -eq 1 ] && {
189 [ "$minimal" = "-minimal" ] || [ "$extract" -eq 1 ] || [ "$revert_option" -eq 1 ]
192 printf "backups must be the only option\n"
197 if [ "$desktop" -eq 1 ] && {
198 [ "$minimal" = "-minimal" ] || [ "$extract" -eq 1 ]
201 printf "desktop must be the only option\n"
206 if [ "$backups_option" -eq 1 ]
208 if ! [ "$backups" -gt 0 ] 2> /dev/null
210 printf "%s is not an integer\n" "$backups"
214 tmp_file=$(mktemp "${TMPDIR:-/tmp}/geeqie.XXXXXXXXXX")
216 sed --in-place "s/^backups=.*/backups=$backups/" "$tmp_file"
224 if [ "$desktop" -eq 1 ]
226 if [ -f "$HOME/Desktop/org.geeqie.Geeqie.desktop" ]
228 printf "Desktop file already exists\n"
233 file_count=$(find "$HOME/bin/" -name "Geeqie*latest*\.AppImage" -print | wc -l)
234 if [ "$file_count" -eq 0 ]
236 printf "No AppImages have been downloaded\n"
241 tmp_dir=$(mktemp --directory "${TMPDIR:-/tmp}/geeqie.XXXXXXXXXX")
242 cd "$tmp_dir" || exit 1
244 app=$(find "$HOME/bin/" -name "Geeqie*latest*\.AppImage" -print | sort --reverse | head -1)
245 $app --appimage-extract "usr/local/share/applications/org.geeqie.Geeqie.desktop" > /dev/null
246 $app --appimage-extract "usr/local/share/pixmaps/geeqie.png" > /dev/null
247 xdg-desktop-icon install --novendor "squashfs-root/usr/local/share/applications/org.geeqie.Geeqie.desktop"
248 xdg-icon-resource install --novendor --size 48 "squashfs-root/usr/local/share/pixmaps/geeqie.png"
249 xdg-desktop-menu install --novendor "squashfs-root/usr/local/share/applications/org.geeqie.Geeqie.desktop"
250 rm --recursive --force "$tmp_dir"
255 # The cd needs to be here because the --backups option needs PWD
256 cd "$HOME/bin/" || exit 1
258 if [ "$revert_option" -eq 1 ]
260 if ! [ "$revert" -ge 0 ] 2> /dev/null
262 printf "%s is not an integer\n" "$revert"
266 if [ "$revert" -eq 0 ]
274 if ! [ -f "$HOME/bin/Geeqie$minimal-latest-$architecture.AppImage$revert" ]
276 printf "Backup $HOME/bin/Geeqie%s-latest-$architecture.AppImage%s does not exist\n" "$minimal" "$revert"
281 if [ "$extract" -eq 1 ]
283 rm --recursive --force "Geeqie$minimal-latest-$architecture-AppImage"
284 mkdir "Geeqie$minimal-latest-$architecture-AppImage"
285 cd "Geeqie$minimal-latest-$architecture-AppImage" || exit 1
287 (../Geeqie-latest-x86_64.AppImage --appimage-extract > /dev/null) & spinner "Extracting Geeqie AppImage..."
289 printf "\nExtraction complete\n"
292 ln --symbolic --force "./Geeqie$minimal-latest-$architecture-AppImage/squashfs-root/AppRun" geeqie
294 ln --symbolic --force "$HOME/bin/Geeqie$minimal-latest-$architecture.AppImage$revert" geeqie
300 log_file=$(mktemp "${TMPDIR:-/tmp}/geeqie.XXXXXXXXXX")
302 wget --no-verbose --show-progress --backups="$backups" --output-file="$log_file" --timestamping "https://github.com/BestImageViewer/geeqie/releases/download/continuous/Geeqie$minimal-latest-$architecture.AppImage"
304 download_size=$(stat --printf "%s" "$log_file")
307 # If a new file was downloaded, check if extraction is required
308 if [ "$download_size" -gt 0 ]
310 chmod +x "Geeqie$minimal-latest-$architecture.AppImage"
312 if [ "$extract" -eq 1 ]
314 rm --recursive --force "Geeqie$minimal-latest-$architecture-AppImage"
315 mkdir "Geeqie$minimal-latest-$architecture-AppImage"
316 cd "Geeqie$minimal-latest-$architecture-AppImage" || exit 1
318 (../Geeqie-latest-x86_64.AppImage --appimage-extract > /dev/null) & spinner "Extracting Geeqie AppImage..."
320 printf "\nExtraction complete\n"
322 if [ ! -f "$HOME/.local/share/bash-completion/completions/geeqie" ]
324 mkdir --parents "$HOME/.local/share/bash-completion/completions/"
325 ln --symbolic "$HOME/bin/Geeqie-latest-x86_64-AppImage/squashfs-root/usr/local/share/bash-completion/completions/geeqie" "$HOME/.local/share/bash-completion/completions/geeqie"
329 ln --symbolic --force "./Geeqie$minimal-latest-$architecture-AppImage/squashfs-root/AppRun" geeqie
331 ln --symbolic --force "Geeqie$minimal-latest-$architecture.AppImage" geeqie