textual-paint/localization/grab-files-from-vm.sh

201 lines
6.7 KiB
Bash
Raw Normal View History

lang=$1
img_dir=/home/io/Downloads/Windowses/vdi-to-img
img_file=$img_dir/Win98-$lang.vdi.img
output_dir=/home/io/Downloads/Windowses/resources/$lang
if [ ! "$1" ]; then
echo "One argument required: a target language code (e.g. en)"
exit 1
fi
if [ ! "$2" ]; then
vdi_file="/home/io/VirtualBox VMs/Win98-$lang/Win98-$lang.vdi"
elif [ -d "$2" ]; then
mount_dir=$2
elif [ -f "$2" ]; then
vdi_file=$2
else
echo "No file or directory at \"$2\"!"
exit 1
fi
if [ ! "$mount_dir" ]; then
if [ ! -d "$img_dir" ]; then
mkdir -p "$img_dir"
fi
if [ ! -f "$img_file" ]; then
echo "File \"$img_file\" does not exist yet..."
# To avoid "VBoxManage: error: Cannot register the hard disk ... because a hard disk ... already exists",
# copy the .vdi file and randomize the UUID.
vdi_copy="$vdi_file-copy.vdi"
echo "Copy .vdi file"
cp "$vdi_file" "$vdi_copy"
echo "Regenerate copied .vdi file's UUID"
VBoxManage internalcommands sethduuid "$vdi_copy"
echo "Convert .vdi to RAW .img"
VBoxManage clonemedium disk "$vdi_copy" "$img_file" --format RAW
rm "$vdi_copy"
if [ ! -f "$img_file" ]; then
echo "Failed to create \"$img_file\"!"
exit 1
fi
echo "Created \"$img_file\""
fi
echo "Time to do some desktop automation!"
sleep 3
echo "Show .img file in folder"
nautilus --browser "$img_file"
echo "Waiting for window \"vdi-to-img\""
xdotool search --sync --name "vdi-to-img" windowactivate --sync
echo "Found window \"vdi-to-img\""
sleep 5
xdotool key --clearmodifiers Return
sleep 1
echo "Click on notification to go to mounted folder"
echo "If the wrong notification is selected, quick, use the arrow keys!"
xdotool key --clearmodifiers Super_L+v
sleep 15 # time to select appropriate notification
xdotool key --clearmodifiers Return
sleep 0.5
xdotool key --clearmodifiers Escape
sleep 8
# It's just called e.g. 341 MB Volume
# echo "Waiting for window \"Win98-$lang.vdi\""
# xdotool search --sync --name "Win98-$lang.vdi" windowactivate --sync
# echo "Found window \"Win98-$lang.vdi\""
# sleep 1
echo "Copy path of mounted folder"
xdotool key --clearmodifiers ctrl+l
sleep 1
old_clipboard=`xclip -selection clipboard -o`
xdotool key --clearmodifiers ctrl+c
sleep 0.5
mount_dir=`xclip -selection clipboard -o`
cat "$old_clipboard" | xclip -selection clipboard
echo "(Restored clipboard text)"
echo "Close mounted folder window"
xdotool key --clearmodifiers alt+F4
echo "Close vdi-to-img folder window"
wmctrl -c "vdi-to-img"
if [ ! -d "$mount_dir" ]; then
echo "Failed to get path of mounted directory, or failed to mount. \"$mount_dir\" is not a directory."
exit 1
fi
fi
if [ ! -d "$output_dir" ]; then
mkdir -p "$output_dir"
fi
echo "Using mount dir: \"$mount_dir\""
grab() {
file_path=`find "$mount_dir" -iname "$1" | head -n 1`
if [ -f "$file_path" ]; then
printf "Copy \"$file_path\" -> \"$output_dir\" "
cp "$file_path" "$output_dir"
if [ $? = 0 ]; then
printf " ✅\n"
else
printf " ❌\n"
fi
else
printf "No file found for \"$1\" ❌\n"
fi
}
grab_folder() {
folder_path=`find "$mount_dir" -type d -iname "$1" | head -n 1`
if [ -d "$folder_path" ]; then
printf "Copy folder \"$folder_path\" -> \"$output_dir\" "
cp -r "$folder_path" "$output_dir"
if [ $? = 0 ]; then
printf " ✅\n"
else
printf " ❌\n"
fi
else
printf "No folder found for \"$1\" ❌\n"
fi
}
grab_folder "Help" # "C:\\Windows\\Help"
grab "Notepad.exe" # "C:\\Windows\\Notepad.exe"
grab "Sndrec32.exe" # "C:\\Windows\\Sndrec32.exe"
grab "WinHelp.exe" # "C:\\Windows\\WinHelp.exe"
grab "WinHlp32.exe" # "C:\\Windows\\WinHlp32.exe"
grab "Explorer.exe" # "C:\\Windows\\Explorer.exe"
grab "Offline.htm" # "C:\\Windows\\Web\\Offline.htm"
# grab "iexplore.exe" # "C:\\Program Files\\Internet Explorer\\iexplore.exe" # contains no interesting strings
# grab "browseui.dll" # "C:\\Program Files\\Internet Explorer\\iexplore.exe" # contains no strings
grab "mspaint.exe" # "C:\\Program Files\\Accessories\\mspaint.exe"
grab "wordpad.exe" # "C:\\Program Files\\Accessories\\wordpad.exe"
grab "Write.exe" # "C:\\Windows\\Write.exe"
echo "Grabbed files, now copy them to the Windows 10 VM shared folder"
rsync -av --exclude='HELP/' "/home/io/Downloads/Windowses/resources" "/home/io/VirtualBox VMs/Win10 Share"
echo "Go to Windows 10 VM"
VBoxManage controlvm "Windows 10" resume
xdotool search --sync --name "Windows 10 (\(.*\) )?\[Running\]" windowactivate --sync
sleep 1
echo "Open Run dialog"
xdotool key --clearmodifiers --delay 20 Super_L+r
sleep 1
echo "Open Resource Tuner for the localized mspaint.exe"
xdotool type --delay 20 "C:\\Program Files (x86)\\Resource Tuner\\restuner.exe Z:\\resources\\$lang\\mspaint.exe"
sleep 0.3
xdotool key --clearmodifiers Return
sleep 10
echo "Open \"Save Multiple Resources At Once\" batch export dialog"
xdotool key --clearmodifiers --delay 20 ctrl+shift+m
sleep 2
echo "Settings should be already selected; Next"
xdotool key --clearmodifiers --delay 20 alt+n
sleep 2
echo "Enter output folder"
xdotool key --clearmodifiers --delay 20 Tab
sleep 0.2
xdotool key --clearmodifiers --delay 20 Tab
sleep 0.2
xdotool key --clearmodifiers --delay 20 Tab
sleep 0.2
# It will create these folders automatically :)
xdotool type "Z:\\extracted-resources\\$lang\\mspaint"
sleep 0.2
echo "Finish"
xdotool key --clearmodifiers Return
sleep 1
echo "Close Resource Tuner"
xdotool key --clearmodifiers alt+F4
sleep 1
echo "Pause the VM"
VBoxManage controlvm "Windows 10" pause
echo "Copy extracted strings out of the VM shared folder"
mkdir -p "/home/io/Projects/jspaint/localization/$lang"
cp -r "/home/io/VirtualBox VMs/Win10 Share/extracted-resources/$lang/mspaint/Dialog" "/home/io/Projects/jspaint/localization/$lang"
cp -r "/home/io/VirtualBox VMs/Win10 Share/extracted-resources/$lang/mspaint/Menu" "/home/io/Projects/jspaint/localization/$lang"
cp -r "/home/io/VirtualBox VMs/Win10 Share/extracted-resources/$lang/mspaint/String Table" "/home/io/Projects/jspaint/localization/$lang"
echo "Rebuild localization files in jspaint"
cd "/home/io/Projects/jspaint"
npm run update-localization
echo "DONE! Now just test the new language in jspaint and commit!"
# TODO: find where strings are stored for:
# - The Edit Colors dialog text
# - The Help viewer text
# - Minesweeper - is Games not part of Typical/Recommended installation?
# Script to open Paint and the Edit Colors dialog in a VM:
# echo "Alt-tab to and click on VM window to select it"
# xdotool selectwindow windowactivate --sync
# sleep 1
# xdotool key --clearmodifiers --delay 20 Super_L+r
# sleep 1
# xdotool type --delay 20 "C:\\Program Files\\Accessories\\Mspaint.exe"
# xdotool key --clearmodifiers Return
# sleep 1
# xdotool key --clearmodifiers --delay 20 alt+c
# xdotool key --clearmodifiers --delay 20 Return
# xdotool key --clearmodifiers --delay 20 alt+d