From efc5f20b5b43ffb2c13ce4367f9769213af5de84 Mon Sep 17 00:00:00 2001 From: Storm Dragon Date: Sat, 21 Feb 2026 16:31:06 -0500 Subject: [PATCH] Comment out games with #// instead of just # at top of file. --- README.md | 7 +++++ linux-game-manager.sh | 64 +++++++++++++++++++++++++++++++++++++------ 2 files changed, 62 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 1dc8450..3f43821 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,13 @@ Installer and launcher for accessible to the blind games that run natively in Li As the project grows, more dependencies will most likely be added. When LGM is launched, it will check to make sure it has the required dependencies for it to do the work of downloading and extracting the game. Note that because every distro has a different package manager, dependencies for games themselves will not be resolved. Please consult the game's documentation to find out what is needed for the game to run. +## Disabling game entries + +To disable a game entry without deleting its script, set the first line of the script to start with `#//`. + +- This applies to both `.install/*.sh` and `.launch/*.sh`. +- A normal comment like `# comment` on the first line does not disable an entry. + ## FAQ diff --git a/linux-game-manager.sh b/linux-game-manager.sh index 9d504e8..9e4b684 100755 --- a/linux-game-manager.sh +++ b/linux-game-manager.sh @@ -455,8 +455,54 @@ clear_cache() { ui_msgbox "Linux Game Manager" "Linux Game Manager" "Cache deleted." } +download_with_fallback() { + local outputPath="$1" + local sourceUrl="$2" + local firstExitCode=0 + local secondExitCode=0 + local thirdExitCode=0 + local errorFile="" + downloadCurlExitCodes="" + downloadErrorLog="" + + if ! errorFile="$(mktemp)"; then + return 1 + fi + + if curl -L4 -C - --retry 10 --output "${outputPath}" "${sourceUrl}" 2> "${errorFile}"; then + rm -f "${errorFile}" + return 0 + fi + firstExitCode=$? + + # Some hosts reject resume requests. Retry from scratch. + rm -f "${outputPath}" + if curl -L4 --retry 10 --output "${outputPath}" "${sourceUrl}" 2>> "${errorFile}"; then + rm -f "${errorFile}" + return 0 + fi + secondExitCode=$? + + # If IPv4-only fails, retry allowing either IP family. + rm -f "${outputPath}" + if curl -L --retry 10 --output "${outputPath}" "${sourceUrl}" 2>> "${errorFile}"; then + rm -f "${errorFile}" + return 0 + fi + thirdExitCode=$? + + downloadCurlExitCodes="${firstExitCode}, ${secondExitCode}, ${thirdExitCode}" + if cp -f "${errorFile}" "${cache}/curl-error.log" 2> /dev/null; then + downloadErrorLog="${cache}/curl-error.log" + rm -f "${errorFile}" + else + downloadErrorLog="${errorFile}" + fi + return 1 +} + download() { - local source=($@) + local source=("$@") for i in "${source[@]}" ; do local dest="${i##*/}" dest="${dest//%20/ }" @@ -469,8 +515,8 @@ download() { fi # Skip if the item is in cache. [[ -e "${cache}/${dest}" ]] && continue - { if ! curl -L4 -C - --retry 10 --output "${cache}/${dest}" "${i}" ; then - ui_msgbox "Linux Game Manager" "Linux Game Manager" "Could not download \"$i\"..." + { if ! download_with_fallback "${cache}/${dest}" "${i}" ; then + ui_msgbox "Linux Game Manager" "Linux Game Manager" "Could not download \"$i\"...\n\ncurl exit codes: ${downloadCurlExitCodes}\nError details: ${downloadErrorLog}" exit 1 fi; } | ui_progressbox "Linux Game Manager" "Downloading \"$dest\" from \"$i\"" local downloadError=1 @@ -526,8 +572,8 @@ download_named() { fi # Skip if the item is in cache. test -e "${cache}/${dest}" && return - if ! curl -L4 --output "${cache}/${dest}" "${2}" ; then - ui_msgbox "Linux Game Manager" "Linux Game Manager" "Could not download \"$dest\"..." + if ! download_with_fallback "${cache}/${dest}" "${2}" ; then + ui_msgbox "Linux Game Manager" "Linux Game Manager" "Could not download \"$dest\"...\n\ncurl exit codes: ${downloadCurlExitCodes}\nError details: ${downloadErrorLog}" exit 1 fi } @@ -597,10 +643,10 @@ help() { game_installer() { # Create the menu of available games by reading from .install directory declare -a menuList - # Get all .sh files from .install directory, excluding those starting with #, and sort them + # Get all .sh files from .install directory, excluding those starting with #//, and sort them mapfile -t sortedGames < <(for f in "${0%/*}/.install/"*.sh; do - # Skip if first line starts with # - [[ $(head -n1 "$f") == "#"* ]] && continue + # Skip if first line starts with #// + [[ $(head -n1 "$f") == "#//"* ]] && continue # Output filename without .sh extension echo "${f##*/}" done | sort) @@ -759,7 +805,7 @@ game_launcher() { if [[ -d ".launch" ]]; then find -L "${0%/*}/.launch" -maxdepth 1 -type f -iname "*.sh" -print0 | sort -z | xargs -0 bash -c ' for f; do - [[ $(head -n1 "$f") =~ ^#$ ]] && continue + [[ $(head -n1 "$f") == "#//"* ]] && continue name="${f##*/}" echo "$f" echo "${name%.sh}"