From 33eb36bca765470cec2790dac032a1797332fdc5 Mon Sep 17 00:00:00 2001 From: RandomNinjaAtk Date: Sun, 6 Aug 2023 20:22:38 -0400 Subject: [PATCH] Update Downloader.bash --- ra-rom-downloader/Downloader.bash | 221 +++++++++++++++++++++++++++++- 1 file changed, 219 insertions(+), 2 deletions(-) diff --git a/ra-rom-downloader/Downloader.bash b/ra-rom-downloader/Downloader.bash index 0b62a64..18e0e32 100644 --- a/ra-rom-downloader/Downloader.bash +++ b/ra-rom-downloader/Downloader.bash @@ -1,5 +1,218 @@ +#!/usr/bin/env bash # This script is for dev purposes +scriptVersion="1.0" +scriptName="RA-ROM-Downloader" + +#### Import Settings +source /config/extended.conf + + +#### Funcitons UrlDecode () { : "${*//+/ }"; echo -e "${_//%/\\x}"; } +CreatePlatformRomList () { + if [ -f /config/romlist ]; then + rm /config/romlist + fi + archiveUrl="$(wget -qO- "$1" | grep -io '> /config/romlist +} +DownloadFileVerification () { + echo "$processNumber/$platformToProcessNumber :: $platform :: $romProcessNumber/$romListCount :: Verifing Download..." + case "$1" in + *.zip|*.ZIP) + verify="$(unzip -t "$1" &>/dev/null; echo $?)" + ;; + *.rar|*.RAR) + verify="$(unrar t "$1" &>/dev/null; echo $?)" + ;; + *.7z|*.7Z) + verify="$(7z t "$1" &>/dev/null; echo $?)" + ;; + *.chd|*.CHD) + verify="$(chdman verify -i "$1" &>/dev/null; echo $?)" + ;; + *.iso|*.ISO|*.hex|*.HEX|*.wasm|*.WASM|*.sv|*.SV) + Log "No methdod to verify this type of file (iso,hex,wasm,sv)" + verify="0" + ;; + esac + + if [ "$verify" != "0" ]; then + echo "$processNumber/$platformToProcessNumber :: $platform :: $romProcessNumber/$romListCount :: ERROR :: Failed Verification!" + rm "$1" + else + echo "$processNumber/$platformToProcessNumber :: $platform :: $romProcessNumber/$romListCount :: Download Verified!" + fi +} + + +#### Platforms +PlatformSnes () { + platformName="Super Nintentdo" + platformArchiveContentsUrl="https://archive.org/download/retroachievements_collection_SNES/SNES/" + platformFolder="snes" + consoleRomFileExt=".smc, .fig, .sfc, .gd3, .gd7, .dx2, .bsx, .swc, .zip, .7z" + raConsoleId="3" + uncompressRom="false" + compressRom="false" +} + + +platformsToProcessNumber=0 +IFS=',' read -r -a filters <<< "$platforms" +for platform in "${filters[@]}" +do + platformToProcessNumber=$(( $platformToProcessNumber + 1 )) +done + +processNumber=0 +IFS=',' read -r -a filters <<< "$platforms" +for platform in "${filters[@]}" +do + processNumber=$(( $processNumber + 1 )) + echo "$processNumber/$platformToProcessNumber :: $platform" + if [ $platform == "snes" ]; then + PlatformSnes + fi + echo "$processNumber/$platformToProcessNumber :: $platform :: Finding ROMS..." + CreatePlatformRomList "$platformArchiveContentsUrl" + outputdir="$romPath/$platformFolder" + + romlist=$(cat /config/romlist) + romListCount=$(echo "$romlist" | wc -l) + echo "$processNumber/$platformToProcessNumber :: $platform :: $romListCount ROMS Found!" + romProcessNumber=0 + echo "$romlist" | while read -r rom; do + + romProcessNumber=$(( $romProcessNumber + 1 )) + archiveContentsUrl="$rom/" + archiveUrl="$(wget -qO- "$archiveContentsUrl" | grep -i ".zip" | grep -io '> /config/romfilelist + romfiles="$(cat /config/romfilelist | awk '{ print length, $0 }' | sort -n | cut -d" " -f2-)" + + # debugging + #echo "original list: " + #cat romfilelist + #echo "" + #echo "rom file list sorted by length: " + #echo "$romfiles" + #filteredUsaRoms="$(echo "$romfiles" | grep "%20%28U%29" | head -n 1)" + #echo "" + #echo "filtered:" + #echo "$filteredUsaRoms" + #if [ -f romfilelist ]; then + # rm romfilelist + #fi + #continue\ + + filteredUsaRoms="$(echo "$romfiles" | grep -i "%20%28U%29" | head -n 1)" + filteredUsaRomscount="$(echo "$romfiles" | grep -i "%20%28U%29" | head -n 1 | wc -l)" + filteredUsa2Roms="$(echo "$romfiles" | grep -i "%20%28USA%29" | head -n 1)" + filteredUsa2Romscount="$(echo "$romfiles" | grep -i "%20%28USA%29" | head -n 1 | wc -l)" + filteredEuropRoms="$(echo "$romfiles" | grep -i "%20%28E%29" | head -n 1)" + filteredEuropRomscount="$(echo "$romfiles" | grep -i "%20%28E%29" | head -n 1 | wc -l)" + filteredWorldRoms="$(echo "$romfiles" | grep -i "%20%28W%29" | head -n 1)" + filteredWorldRomscount="$(echo "$romfiles" | grep -i "%20%28W%29" | head -n 1 | wc -l)" + filteredJapanRoms="$(echo "$romfiles" | grep -i "%20%28J%29" | head -n 1)" + filteredJapanRomscount="$(echo "$romfiles" | grep -i "%20%28J%29" | head -n 1 | wc -l)" + filteredOtherRoms="$(echo "$romfiles" | head -n 1)" + filteredOtherRomscount="$(echo "$romfiles" | head -n 1 | wc -l)" + filteredOtherRomsDecoded="$(UrlDecode "$filteredOtherRoms")" + subFolder="$(dirname "$filteredOtherRomsDecoded")" + subFolder="$(basename "$subFolder")" + + if echo "$subFolder" | grep "~" | read; then + subFolder="/$(echo "$subFolder" | cut -d "~" -f 2)/" + else + subFolder="/" + fi + + if [ ! -d "${outputdir}${subFolder}" ]; then + echo "$processNumber/$platformToProcessNumber :: $platform :: $romProcessNumber/$romListCount :: Creating \"${subFolder}\" folder... " + mkdir -p "${outputdir}${subFolder}" + chmod 777 "${outputdir}${subFolder}" + fi + + echo "$processNumber/$platformToProcessNumber :: $platform :: $romProcessNumber/$romListCount :: Searching ROM Folder" + + if [ $filteredUsaRomscount -eq 1 ]; then + echo "$processNumber/$platformToProcessNumber :: $platform :: $romProcessNumber/$romListCount :: USA (U) ROM FOUND" + fileName="$(basename "$filteredUsaRoms")" + fileName="$(UrlDecode "$fileName")" + echo "$processNumber/$platformToProcessNumber :: $platform :: $romProcessNumber/$romListCount :: ${outputdir}${subFolder}${fileName}" + if [ ! -f "${outputdir}${subFolder}${fileName}" ]; then + echo "$processNumber/$platformToProcessNumber :: $platform :: $romProcessNumber/$romListCount :: Downloading \"${fileName}\" ROM..." + wget "$filteredUsaRoms" -O "${outputdir}${subFolder}${fileName}" + DownloadFileVerification "${outputdir}${subFolder}${fileName}" + fi + elif [ $filteredUsa2Romscount -eq 1 ]; then + echo "$processNumber/$platformToProcessNumber :: $platform :: $romProcessNumber/$romListCount :: USA (USA) ROM FOUND" + fileName="$(basename "$filteredUsa2Roms")" + fileName="$(UrlDecode "$fileName")" + echo "$processNumber/$platformToProcessNumber :: $platform :: $romProcessNumber/$romListCount :: ${outputdir}${subFolder}${fileName}" + if [ ! -f "${outputdir}${subFolder}${fileName}" ]; then + echo "$processNumber/$platformToProcessNumber :: $platform :: $romProcessNumber/$romListCount :: Downloading \"${fileName}\" ROM..." + wget "$filteredEuropRoms" -O "${outputdir}${subFolder}${fileName}" + DownloadFileVerification "${outputdir}${subFolder}${fileName}" + fi + elif [ $filteredEuropRomscount -eq 1 ]; then + echo "$processNumber/$platformToProcessNumber :: $platform :: $romProcessNumber/$romListCount :: EUROPE ROM FOUND" + fileName="$(basename "$filteredEuropRoms")" + fileName="$(UrlDecode "$fileName")" + echo "$processNumber/$platformToProcessNumber :: $platform :: $romProcessNumber/$romListCount :: ${outputdir}${subFolder}${fileName}" + if [ ! -f "${outputdir}${subFolder}${fileName}" ]; then + echo "$processNumber/$platformToProcessNumber :: $platform :: $romProcessNumber/$romListCount :: Downloading \"${fileName}\" ROM..." + wget "$filteredEuropRoms" -O "${outputdir}${subFolder}${fileName}" + DownloadFileVerification "${outputdir}${subFolder}${fileName}" + fi + elif [ $filteredWorldRomscount -eq 1 ]; then + echo "$processNumber/$platformToProcessNumber :: $platform :: $romProcessNumber/$romListCount :: WORLD ROM FOUND" + fileName="$(basename "$filteredWorldRoms")" + fileName="$(UrlDecode "$fileName")" + echo "$processNumber/$platformToProcessNumber :: $platform :: $romProcessNumber/$romListCount :: ${outputdir}${subFolder}${fileName}" + if [ ! -f "${outputdir}${subFolder}${fileName}" ]; then + echo "$processNumber/$platformToProcessNumber :: $platform :: $romProcessNumber/$romListCount :: Downloading \"${fileName}\" ROM..." + wget "$filteredWorldRoms" -O "${outputdir}${subFolder}${fileName}" + DownloadFileVerification "${outputdir}${subFolder}${fileName}" + fi + elif [ $filteredJapanRomscount -eq 1 ]; then + echo "$processNumber/$platformToProcessNumber :: $platform :: $romProcessNumber/$romListCount :: JAPAN ROM FOUND" + fileName="$(basename "$filteredJapanRoms")" + fileName="$(UrlDecode "$fileName")" + echo "$processNumber/$platformToProcessNumber :: $platform :: $romProcessNumber/$romListCount :: ${outputdir}${subFolder}${fileName}" + if [ ! -f "${outputdir}${subFolder}${fileName}" ]; then + echo "$processNumber/$platformToProcessNumber :: $platform :: $romProcessNumber/$romListCount :: Downloading \"${fileName}\" ROM..." + wget "$filteredJapanRoms" -O "${outputdir}${subFolder}${fileName}" + DownloadFileVerification "${outputdir}${subFolder}${fileName}" + fi + elif [ $filteredOtherRomscount -eq 1 ]; then + echo "$processNumber/$platformToProcessNumber :: $platform :: $romProcessNumber/$romListCount :: OTHER ROM FOUND" + fileName="$(basename "$filteredOtherRoms")" + fileName="$(UrlDecode "$fileName")" + echo "$processNumber/$platformToProcessNumber :: $platform :: $romProcessNumber/$romListCount :: ${outputdir}${subFolder}${fileName}" + if [ ! -f "${outputdir}${subFolder}${fileName}" ]; then + echo "$processNumber/$platformToProcessNumber :: $platform :: $romProcessNumber/$romListCount :: Downloading \"${fileName}\" ROM..." + wget "$filteredOtherRoms" -O "${outputdir}${subFolder}${fileName}" + DownloadFileVerification "${outputdir}${subFolder}${fileName}" + fi + else + echo "$processNumber/$platformToProcessNumber :: $platform :: $romProcessNumber/$romListCount :: ERROR :: No Filtered Roms Found..." + fi + + if [ -f "${outputdir}${subFolder}${fileName}" ]; then + echo "$processNumber/$platformToProcessNumber :: $platform :: $romProcessNumber/$romListCount :: Setting Permissions on: ${fileName}" + chmod 666 "${outputdir}${subFolder}${fileName}" + fi + + if [ -f /config/romfilelist ]; then + rm /config/romfilelist + fi + done +done + + + +exit url="https://archive.org/download/retroachievements_collection_v5/SNES/Super%20Mario%20Kart/Super%20Mario%20Kart%20%28U%29%20%5B%21%5D.zip" decodedUrl="$(UrlDecode "$url")" @@ -52,8 +265,6 @@ echo "$romlist" | while read -r rom; do #fi #continue\ - echo "==========================================================================" - filteredUsaRoms="$(echo "$romfiles" | grep -i "%20%28U%29" | head -n 1)" filteredUsaRomscount="$(echo "$romfiles" | grep -i "%20%28U%29" | head -n 1 | wc -l)" filteredUsa2Roms="$(echo "$romfiles" | grep -i "%20%28USA%29" | head -n 1)" @@ -89,6 +300,7 @@ echo "$romlist" | while read -r rom; do echo "${outputdir}${subFolder}${fileName}" if [ ! -f "${outputdir}${subFolder}${fileName}" ]; then wget "$filteredUsaRoms" -O "${outputdir}${subFolder}${fileName}" + DownloadFileVerification "${outputdir}${subFolder}${fileName}" fi elif [ $filteredUsa2Romscount -eq 1 ]; then echo "USA (USA) ROM FOUND" @@ -97,6 +309,7 @@ echo "$romlist" | while read -r rom; do echo "${outputdir}${subFolder}${fileName}" if [ ! -f "${outputdir}${subFolder}${fileName}" ]; then wget "$filteredEuropRoms" -O "${outputdir}${subFolder}${fileName}" + DownloadFileVerification "${outputdir}${subFolder}${fileName}" fi elif [ $filteredEuropRomscount -eq 1 ]; then echo "EUROPE ROM FOUND" @@ -105,6 +318,7 @@ echo "$romlist" | while read -r rom; do echo "${outputdir}${subFolder}${fileName}" if [ ! -f "${outputdir}${subFolder}${fileName}" ]; then wget "$filteredEuropRoms" -O "${outputdir}${subFolder}${fileName}" + DownloadFileVerification "${outputdir}${subFolder}${fileName}" fi elif [ $filteredWorldRomscount -eq 1 ]; then echo "WORLD ROM FOUND" @@ -113,6 +327,7 @@ echo "$romlist" | while read -r rom; do echo "${outputdir}${subFolder}${fileName}" if [ ! -f "${outputdir}${subFolder}${fileName}" ]; then wget "$filteredWorldRoms" -O "${outputdir}${subFolder}${fileName}" + DownloadFileVerification "${outputdir}${subFolder}${fileName}" fi elif [ $filteredJapanRomscount -eq 1 ]; then echo "JAPAN ROM FOUND" @@ -121,6 +336,7 @@ echo "$romlist" | while read -r rom; do echo "${outputdir}${subFolder}${fileName}" if [ ! -f "${outputdir}${subFolder}${fileName}" ]; then wget "$filteredJapanRoms" -O "${outputdir}${subFolder}${fileName}" + DownloadFileVerification "${outputdir}${subFolder}${fileName}" fi elif [ $filteredOtherRomscount -eq 1 ]; then echo "OTHER ROM FOUND" @@ -129,6 +345,7 @@ echo "$romlist" | while read -r rom; do echo "${outputdir}${subFolder}${fileName}" if [ ! -f "${outputdir}${subFolder}${fileName}" ]; then wget "$filteredOtherRoms" -O "${outputdir}${subFolder}${fileName}" + DownloadFileVerification "${outputdir}${subFolder}${fileName}" fi else echo "ERROR :: No Filtered Roms Found..."