diff --git a/linux-game-manager.sh b/linux-game-manager.sh index 92c4857..3bbd9b9 100755 --- a/linux-game-manager.sh +++ b/linux-game-manager.sh @@ -192,45 +192,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 --output "${cache}/${dest}" "${i}" ; then - echo "Could not download \"$i\"..." - exit 1 - fi; } | dialog --backtitle "Linux Game Manager" \ - --progressbox "Downloading \"$dest\" from \"$i\"" -1 -1 - local downloadError=1 - case "${dest##*.}" in - "pk3"|"zip") - unzip -tq "${cache}/${dest}" | dialog --backtitle "Linux Game Manager" \ - --progressbox "Validating ${dest##*.} file" -1 -1 --stdout - downloadError= $? - ;; - "wad") - if [[ "$(file -b --mime-type "${cache}/${dest}")" != "application/octet-stream" ]]; then - downloadError=0 - fi - ;; - esac - if [[ $downloadError -eq 0 ]]; then - rm -fv "${cache}/${dest}" - dialog --backtitle "Linux Game Manager" \ - --infobox "Error downloading \"${dest}\". Installation cannot continue." -1 -1 --stdout - alert - 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. + 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 + echo "Could not download \"$i\"..." + exit 1 + fi; } | dialog --backtitle "Linux Game Manager" \ + --progressbox "Downloading \"$dest\" from \"$i\"" -1 -1 + local downloadError=1 + case "${dest##*.}" in + "pk3"|"zip") + unzip -tq "${cache}/${dest}" | dialog --backtitle "Linux Game Manager" \ + --progressbox "Validating ${dest##*.} file" -1 -1 --stdout + downloadError=$? + ;; + "7z") + 7z t "${cache}/${dest}" | dialog --backtitle "Linux 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 "Linux Game Manager" \ + --infobox "Error downloading \"${dest}\". Installation cannot continue." -1 -1 --stdout + alert + exit 1 + fi + done } download_named() {