RetroArch/dist-scripts/wiiu-rpx-upload.sh
2024-10-01 17:36:33 -07:00

105 lines
2.6 KiB
Bash
Executable File

#!/bin/bash
#
# This script will upload the packaged RetroArch cores to a WiiU running
# FTPiiU or FTPiiU Anywhere
#
# IMPORTANT: This script assumes the following structure
#
# WARNING: I experienced corrupt uploads when using Dimok's FTPiiU. You
# probably want to use FIX94's FTPiiU Anywhere.
#
# After uploading everything, the script will re-download the RPX files and
# compare their hash and print an error if the file was corrupted.
#
# The WiiU's IP address can be specified by either setting the WIIU_IP_ADDRESS
# environment variable, or by configuring the wiiu-devel.properties file
# (see the file wiiu-devel.properties.template for instructions).
#
# The path to the parent directory of your retroarch/ and wiiu/ folders, as
# visible in FTPiiU.
RETRO_ROOT=sd
here=$(pwd)
cd $(dirname $(readlink -f $0))
if [ -e ../wiiu-devel.properties ]; then
. ../wiiu-devel.properties
fi
if [ -z "$WIIU_IP_ADDRESS" ]; then
echo "WIIU_IP_ADDRESS not set. Set up ../wiiu-devel.properties or set the"
echo "environment variable."
cd $here
exit 1
fi
filesToUpload()
{
find . -type f \( -name "*.rpx" -o -name "*.xml" -o -name "*.png" -o -name "*.info" \)
}
cd ../pkg/wiiu/rpx
# First, delete any previous *.remote files from previous uploads.
find . -name '*.remote' | xargs rm -f {}
# Now generate the FTP command list
rm -f .ftpcommands
# Now create the directory structure
for dir in $(find . -type "d"); do
if [ "$dir" == "." ]; then
continue
fi
echo "mkdir $dir" >> .ftpcommands
done
# Delete and re-upload the files we just built
for cmd in rm put; do
filesToUpload | xargs -L 1 echo "$cmd" >> .ftpcommands
done
# Lastly, download the RPX files as *.rpx.remote files
for rpx in $(find . -name "*.rpx"); do
echo "get $rpx ${rpx}.remote" >> .ftpcommands
done
# The command list is done. Time to execute it.
ftp -n $WIIU_IP_ADDRESS <<END_SCRIPT
quote USER wiiu
quote PASS wiiu
passive
bin
cd $RETRO_ROOT
$(cat .ftpcommands)
END_SCRIPT
rm -f .ftpcommands
errors=0
# Now, we compare the hashes of the original file and the file we got back,
# and print an error if the hashes don't match.
for remote in $(find . -name "*.remote"); do
originalFile=$(echo $remote |sed 's/\.remote//')
originalHash=$(md5sum -b $originalFile |awk '{print $1}')
remoteHash=$(md5sum -b $remote |awk '{print $1}')
if [ "$originalHash" != "$remoteHash" ]; then
echo "ERROR: $remote was corrupted during upload."
errors=$((errors+1))
fi
done
cd $here
if [ $errors -ne 0 ]; then
echo "Upload failed. $errors files failed to upload correctly."
exit 1
fi
echo "RetroArch build uploaded and validated successfully."
exit 0