xivvoices_updater/get_latest.sh
2024-03-13 12:33:09 +10:00

70 lines
2 KiB
Bash

#!/bin/bash
usage() { echo "Usage: $0 [-J <parallel processes (default 5)>] [-L <download rate of each process (default 2M)>]" 1>&2; }
J=5
L="2M"
while getopts ":J:L:" o; do
case "${o}" in
J)
J=${OPTARG}
;;
L)
L=${OPTARG}
;;
h)
usage; exit 0
;;
*)
usage; exit 1
;;
esac
done
shift $((OPTIND-1))
export base="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
cd $base
echo "Checking for program update..."
server_version="$(curl https://arcsidian.com/xivv/version.json 2>/dev/null)"
[ "$(cat version.json)" = "$server_version" ] && echo "Up to date: $server_version" || (
echo "Downloading $server_version..."
curl -O https://arcsidian.com/xivv/XivVoices_Setup.exe
WINEPREFIX=$base/pfx wine XivVoices_Setup.exe /VERYSILENT /SP-
rm XivVoices_Setup.exe
tee version.json <<<"$server_version"
echo "Updated to $server_version"
) 2>/dev/null
# Cleaning and preparing directory
rm $base/share $base/pfx/drive_c/Xiv_Voices/Data -f
ln -s $base/pfx/drive_c/Xiv_Voices $base/share
mkdir -p Data tmp tmp/bak
ln -s $base/Data $base/pfx/drive_c/Xiv_Voices/Data
rm -f share/{nameless,npcData,voiceNames,ignored,data}.json
echo "Updating metadata..."
wget -P share -c https://arcsidian.com/xivv/{nameless,npcData,voiceNames,ignored,data}.json 2>/dev/null
echo "Checking for updated voice lines..."
pids=""
while read url fn; do
[[ -z "$url" || -z "$fn" ]] && break
echo " - Downloading $fn..."
(
key=$(<<<$url sed 's/.zip$//' | awk -F/ '{print $(NF-1) "/" $NF}')
keysize=$(<<<$fn sed 's/.zip$//' | awk -F. '{print $NF}')
mv "share/Data/$key" "tmp/bak/${key//\//_}" 2>/dev/null
curl --limit-rate $L -o "tmp/$fn" "$url" 2>/dev/null && unzip -d share/Data -P "$keysize#Arc" "tmp/$fn" 2>&1 >/dev/null && rm "tmp/$fn" && echo " - Downloaded $fn"
) &
pids="$pids $!"
if [[ $(jobs -r -p | wc -l) -ge $J ]]; then
wait -n
fi
#done <<< $(echo "https://xivvoices.com/npcs/Alphinaud/Alphinauds_Voice.zip Alphinauds_Voice.1534982.zip")
done <<< $(python3 get_latest_voices.py)
echo "Waiting for downloads to complete..."
wait $pids
echo "Update complete!"