Add basic GUI based on Zenity

This commit is contained in:
Andrei Shevchuk 2019-05-29 16:57:33 +00:00 committed by GitHub
parent b0d00df519
commit 39bb5cfd09
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

119
windows2usb-gui Normal file
View File

@ -0,0 +1,119 @@
#!/usr/bin/env bash
trap clean EXIT
function clean() {
rm -f "$pid_pipe" "$zenity_pipe" "$zenity_status_pipe" "$windows2usb_status_pipe"
kill 0
}
log_file="/tmp/windows2usb.log"
pid_pipe="$(mktemp -u)"
zenity_pipe="$(mktemp -u)"
zenity_status_pipe="$(mktemp -u)"
windows2usb_status_pipe="$(mktemp -u)"
mkfifo "$pid_pipe"
mkfifo "$zenity_pipe"
mkfifo "$zenity_status_pipe"
mkfifo "$windows2usb_status_pipe"
devices_available="$(lsblk -dn -I 8 -o RM,NAME,SIZE,MODEL | awk '($1 == 1) { print "FALSE " substr($0, index($0, $2)) }')"
while [[ -z "$device" ]]
do
device="$(zenity --list --radiolist \
--title='Choose device' \
--column='' --column='ID' --column='Size' --column='Name' \
${devices_available})"
test $? -eq 1 && exit 1
done
while [[ -z "$image" ]]
do
image="$(zenity --file-selection --title='Select image')"
test $? -eq 1 && exit 1
done
while [[ -z "$mode" ]]
do
mode="$(zenity --list --radiolist \
--title='Select bootloader mode' \
--column='' --column='ID' --column='Mode' --hide-column=2 \
FALSE 'mbr' 'BIOS Boot' \
TRUE 'gpt' 'UEFI Boot' \
FALSE 'gptntfs' 'UEFI Boot with NTFS partition')"
test $? -eq 1 && exit 1
done
echo "-------------------" >> "$log_file" 2>&1
echo "$(date '+%Y-%m-%d %H:%M:%S')" >> "$log_file" 2>&1
echo "-------------------" >> "$log_file" 2>&1
(
zenity --progress --title='Writing' --pulsate --auto-close < <(tail -f "$zenity_pipe") &
zenity_pid="$!"
echo "$zenity_pid" > "$pid_pipe"
wait "$zenity_pid"
echo "$?" > "$zenity_status_pipe"
) &
read -st 3 zenity_pid <> "$pid_pipe"
(
windows2usb "/dev/${device}" "$image" "$mode" >> "$log_file" 2>&1 &
windows2usb_pid="$!"
echo "$windows2usb_pid" > "$pid_pipe"
wait "$windows2usb_pid"
echo "$?" > "$windows2usb_status_pipe"
) &
read -st 3 windows2usb_pid <> "$pid_pipe"
while sleep 1
do
if ! kill -0 "$zenity_pid" >/dev/null 2>&1 && [[ -p "$zenity_status_pipe" ]]
then
read -st 3 zenity_status <> "$zenity_status_pipe" || true
rm -f "$zenity_status_pipe"
if [[ -z "$zenity_status" ]] || [[ "$zenity_status" != 0 ]]
then
echo 'Cancel'
kill "$windows2usb_pid"
exit 1
else
exit 0
fi
fi
if ! kill -0 "$windows2usb_pid" >/dev/null 2>&1 && [[ -p "$windows2usb_status_pipe" ]]
then
read -st 3 windows2usb_status <> "$windows2usb_status_pipe" || true
rm -f "$windows2usb_status_pipe"
echo '100' > "$zenity_pipe"
if [[ -z "$windows2usb_status" ]] || [[ "$windows2usb_status" != 0 ]]
then
zenity --error --text="Error occured, see log at ${log_file}"
exit 1
else
zenity --info --text="Image has been successfully written!"
exit 0
fi
fi
done