221 lines
5.4 KiB
Bash
Executable File
221 lines
5.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -eu
|
|
|
|
wine_window_stage1=""
|
|
wine_window_stage2=""
|
|
wine_window_stage3=""
|
|
wine_window_stage4=""
|
|
wine_window_stage5=""
|
|
wine_window_stage6=""
|
|
wine_window_stage7=""
|
|
installer_window=""
|
|
eula_window=""
|
|
cdkey_window=""
|
|
location_window=""
|
|
installation_window=""
|
|
shortcut_window=""
|
|
registration_window=""
|
|
|
|
XAUTHORITY=$(pwd)/xauth
|
|
DISPLAY=""
|
|
|
|
function list_wine_windows {
|
|
local array=""
|
|
set +eu
|
|
while [ "${array}" = "" ]; do
|
|
sleep 5
|
|
array=($(xdotool search --class wine))
|
|
done
|
|
set -eu
|
|
echo ${array[@]}
|
|
}
|
|
|
|
function last_wine_window {
|
|
local array=($@)
|
|
echo ${array[$((${#array[@]}-1))]}
|
|
}
|
|
|
|
function initialize_openbox {
|
|
xvfb-run -a -f ${XAUTHORITY} openbox --sync &
|
|
while [ "${DISPLAY}" = "" ]; do
|
|
DISPLAY=$(ps aux | awk '{if($1 == "'$(whoami)'") print $0}' | grep Xvfb\ :[0-9]* | grep -v grep | grep -o Xvfb\ :[0-9]* | awk '{print $2}')
|
|
done
|
|
}
|
|
|
|
function create_wine_prefix {
|
|
wine systeminfo
|
|
}
|
|
|
|
function start_roc_installer {
|
|
initialize_openbox
|
|
create_wine_prefix
|
|
pushd ${WAR3ROC_CDROM_ROOT}
|
|
wine install.exe &
|
|
popd
|
|
}
|
|
|
|
function start_tft_installer {
|
|
pushd ${WAR3TFT_CDROM_ROOT}
|
|
wine install.exe &
|
|
popd
|
|
}
|
|
|
|
function begin_install {
|
|
wine_window_stage1=($(list_wine_windows))
|
|
installer_window=$(last_wine_window ${wine_window_stage1[@]})
|
|
# Initiate installation
|
|
xdotool windowactivate --sync ${installer_window} key W
|
|
}
|
|
|
|
function accept_eula {
|
|
wine_window_stage2=($(list_wine_windows))
|
|
eula_window=$(last_wine_window ${wine_window_stage2[@]})
|
|
xdotool windowactivate --sync ${eula_window} key A
|
|
}
|
|
|
|
function pass_roc_cdkey_prompt {
|
|
wine_window_stage3=($(list_wine_windows))
|
|
cdkey_window=$(last_wine_window ${wine_window_stage3[@]})
|
|
# Input Gentoo as the owner
|
|
for i in G e n t o o; do
|
|
xdotool windowactivate --sync ${cdkey_window} key $i
|
|
done
|
|
xdotool windowactivate --sync ${cdkey_window} key Tab
|
|
# Input CDKEY
|
|
for (( i=0; i<${#WAR3ROC_CDKEY}; i++ )); do
|
|
if [ "${WAR3ROC_CDKEY:$i:1}" != "-" ]; then
|
|
xdotool windowactivate --sync ${cdkey_window} key ${WAR3ROC_CDKEY:$i:1}
|
|
fi
|
|
done
|
|
xdotool windowactivate --sync ${cdkey_window} key Tab
|
|
xdotool windowactivate --sync ${cdkey_window} key KP_Enter
|
|
}
|
|
|
|
function pass_tft_cdkey_prompt {
|
|
wine_window_stage3=($(list_wine_windows))
|
|
cdkey_window=$(last_wine_window ${wine_window_stage3[@]})
|
|
# Input CDKEY
|
|
for (( i=0; i<${#WAR3TFT_CDKEY}; i++ )); do
|
|
if [ "${WAR3TFT_CDKEY:$i:1}" != "-" ]; then
|
|
xdotool windowactivate --sync ${cdkey_window} key ${WAR3TFT_CDKEY:$i:1}
|
|
fi
|
|
done
|
|
xdotool windowactivate --sync ${cdkey_window} key Tab
|
|
xdotool windowactivate --sync ${cdkey_window} key KP_Enter
|
|
}
|
|
|
|
function input_location {
|
|
# Input location
|
|
wine_window_stage4=($(list_wine_windows))
|
|
location_window=$(last_wine_window ${wine_window_stage4[@]})
|
|
set +e
|
|
xdotool windowactivate --sync ${location_window} key KP_Enter
|
|
xdotool windowactivate --sync ${location_window} key KP_Enter
|
|
set -e
|
|
}
|
|
|
|
function wait_through_installation {
|
|
# Wait through installation
|
|
wine_window_stage5=($(list_wine_windows))
|
|
installation_window=$(last_wine_window ${wine_window_stage5[@]})
|
|
while [ $(list_wine_windows | grep -c ^${installation_window}$) -eq 1 ]; do
|
|
sleep 5
|
|
done
|
|
sleep 5
|
|
}
|
|
|
|
function pass_shortcut_phase {
|
|
# No shortcut please
|
|
wine_window_stage6=($(list_wine_windows))
|
|
shortcut_window=$(last_wine_window ${wine_window_stage6[@]})
|
|
xdotool windowactivate --sync ${shortcut_window} key Tab
|
|
xdotool windowactivate --sync ${shortcut_window} key KP_Enter
|
|
}
|
|
|
|
function pass_registration_phase {
|
|
# No registration please
|
|
wine_window_stage7=($(list_wine_windows))
|
|
registration_window=$(last_wine_window ${wine_window_stage7[@]})
|
|
xdotool windowactivate --sync ${registration_window} key Tab
|
|
xdotool windowactivate --sync ${registration_window} key KP_Enter
|
|
}
|
|
|
|
function exit_from_installer {
|
|
# Exit from installer
|
|
xdotool windowclose ${installer_window}
|
|
set +e
|
|
while [ $(ps aux | awk '{if($1 == "'$(whoami)'") print $0}' | grep \\.exe | grep -vc grep) -gt 0 ]; do
|
|
ps aux | awk '{if($1 == "'$(whoami)'") print $0}' | grep \\.exe | grep -v grep | awk '{print $2}' | xargs kill -15
|
|
sleep 15
|
|
done
|
|
set -e
|
|
# rm -f ${XAUTHORITY}
|
|
}
|
|
|
|
function start_patcher {
|
|
set -x
|
|
if [ ${TFT} -eq 1 ]; then
|
|
wine ${DISTDIR}/War3TFT_126a_English.exe &
|
|
else
|
|
wine ${DISTDIR}/War3ROC_126a_English.exe &
|
|
fi
|
|
}
|
|
|
|
function wait_for_patch_dialog {
|
|
local array=($(list_wine_windows))
|
|
local limit=3
|
|
if [ ${TFT} -eq 1 ]; then
|
|
limit=4
|
|
fi
|
|
while [ ${#array[@]} -ne ${limit} ]; do
|
|
sleep 1
|
|
array=($(list_wine_windows))
|
|
done
|
|
while [ $(ls ${WINEPREFIX}/drive_c/Program\ Files/Warcraft\ III | grep ^PTC.*\\.tmp$ -c) -ne 0 ]; do
|
|
sleep 1
|
|
done
|
|
}
|
|
|
|
function close_patcher {
|
|
local wine_windows=($(list_wine_windows))
|
|
local patcher_window=$(last_wine_window ${wine_windows[@]})
|
|
xdotool windowclose ${patcher_window}
|
|
}
|
|
|
|
function close_xvfb {
|
|
set +e
|
|
while [ $(ps aux | awk '{if($1 == "'$(whoami)'") print $0}' | grep openbox | grep -vc grep) -gt 0 ]; do
|
|
ps aux | awk '{if($1 == "'$(whoami)'") print $0}' | grep openbox | grep -v grep | awk '{print $2}' | xargs kill -15
|
|
sleep 15
|
|
done
|
|
set -e
|
|
}
|
|
|
|
function main {
|
|
start_roc_installer
|
|
begin_install
|
|
accept_eula
|
|
pass_roc_cdkey_prompt
|
|
input_location
|
|
wait_through_installation
|
|
pass_shortcut_phase
|
|
exit_from_installer
|
|
if [ ${TFT} -eq 1 ]; then
|
|
start_tft_installer
|
|
begin_install
|
|
accept_eula
|
|
pass_tft_cdkey_prompt
|
|
wait_through_installation
|
|
pass_shortcut_phase
|
|
exit_from_installer
|
|
fi
|
|
if [ ${PATCH} -eq 1 ]; then
|
|
start_patcher
|
|
wait_for_patch_dialog
|
|
close_patcher
|
|
fi
|
|
close_xvfb
|
|
}
|
|
|
|
main $@
|