diff --git a/audiogame-manager.sh b/audiogame-manager.sh index c724e31..61dd466 100755 --- a/audiogame-manager.sh +++ b/audiogame-manager.sh @@ -280,34 +280,63 @@ clear_cache() { } download() { - local source=($@) - for i in "${source[@]}" ; do - local dest="${i##*/}" - dest="${dest//%20/ }" - dest="${dest#*\?filename=}" - dest="${dest%\?*}" - # Remove the destination file if it is empty. - test -s "${cache}/${dest}" || rm -f "${cache}/${dest}" 2> /dev/null - if [[ "${redownload}" == "true" ]] && [[ -e "${cache}/${dest}" ]]; then - rm -v "${cache}/${dest}" - fi - # Skip if the item is in cache. - test -e "${cache}/${dest}" && continue - if ! curl -L4 -C - --retry 10 --output "${cache}/${dest}" "${i}" ; then - local exit_code="$?" - if [[ $exit_code -eq 22 ]]; then - echo "File not found: \"$i\" (HTTP 404)" - # Remove the empty file. - rm -f "${cache}/${dest}" - exit 1 - fi - fi - if file -b "${cache}/${dest}" | grep -q "HTML document" ; then - echo "File not found: \"$i\" (HTML document probably 404)" - rm -f "${cache}/${dest}" - exit 1 - fi - done + local source=($@) + for i in "${source[@]}" ; do + local dest="${i##*/}" + dest="${dest//%20/ }" + dest="${dest#*\?filename=}" + dest="${dest%\?*}" + # Remove the destination file if it is empty. + [[ -s "${cache}/${dest}" ]] || rm -f "${cache}/${dest}" 2> /dev/null + if [[ "${redownload}" == "true" ]] && [[ -e "${cache}/${dest}" ]]; then + rm -v "${cache}/${dest}" + fi + # Skip if the item is in cache. + [[ -e "${cache}/${dest}" ]] && continue + { if ! curl -L4 -C - --retry 10 --output "${cache}/${dest}" "${i}" ; then + echo "Could not download \"$i\"..." + exit 1 + fi; } | dialog --backtitle "Audio Game Manager" \ + --progressbox "Downloading \"$dest\" from \"$i\"" -1 -1 + local downloadError=1 + case "${dest##*.}" in + "pk3"|"zip") + unzip -tq "${cache}/${dest}" | dialog --backtitle "Audio Game Manager" \ + --progressbox "Validating ${dest##*.} file" -1 -1 --stdout + downloadError=$? + ;; + "7z") + 7z t "${cache}/${dest}" | dialog --backtitle "Audio Game Manager" \ + --progressbox "Validating 7z file" -1 -1 --stdout + downloadError=$? + ;; + "exe") + # Check if it's a valid Windows executable by looking at the MZ header + if ! hexdump -n 2 -v -e '/1 "%02X"' "${cache}/${dest}" | grep -q "4D5A"; then + downloadError=0 + fi + ;; + "wad") + if [[ "$(file -b --mime-type "${cache}/${dest}")" != "application/octet-stream" ]]; then + downloadError=0 + fi + ;; + *) + # Add HTML check for other file types + if file -b "${cache}/${dest}" | grep -q "HTML document" ; then + echo "File not found: \"$i\" (HTML document probably 404)" + downloadError=0 + fi + ;; + esac + if [[ $downloadError -eq 0 ]]; then + rm -fv "${cache}/${dest}" + dialog --backtitle "Audio Game Manager" \ + --infobox "Error downloading \"${dest}\". Installation cannot continue." -1 -1 --stdout + alert + exit 1 + fi + done } get_bottle() { @@ -489,7 +518,7 @@ help() { echo "${configFile%/*}/settings.conf" echo "The syntax is variable=\"value\"" echo - echo "ipfsGateway=\"https://gateway.pinata.cloud\" # Gateway to be used for ipfs downloads." + echo "ipfsGateway=\"https://ipfs.stormux.org\" # Gateway to be used for ipfs downloads." echo "noCache=\"true\" # Do not keep downloaded items in the cache." echo "noqjoypad=\"true\" # Do not launch qjoypad." echo "norh=\"true\" # Do not install RHVoice." @@ -1155,7 +1184,7 @@ unset noCache unset manualInstall unset version # ipfs gateway -export ipfsGateway="${ipfsGateway:-https://gateway.pinata.cloud}" +export ipfsGateway="${ipfsGateway:-https://ipfs.stormux.org}" export nvdaControllerClientDll="${ipfsGateway}/ipfs/QmWu7YdSbKMk1Qm5DKvEA5hk1YuAK8wVkwhDf2CsmPkmF1?filename=nvdaControllerClient32.dll"