#!/bin/bash

# Script to run Windows executable with warning about possible security risk
# Copyright (c) 2020 Andrey Cherepanov <cas@altlinux.org>

program="$1"

. gettext.sh

xmessage_prg="/usr/bin/xmessage"
zenity_prg="/usr/bin/zenity"
kdialog_prg="/usr/lib/kf5/bin/kdialog"
wine_prg="/usr/bin/wine"

export TEXTDOMAIN=wineexec
export TEXTDOMAINDIR="/usr/share/locale"

title_open_msg="$(gettext "Choose file .exe")"
title_dialog_msg="$(gettext "Attention")"
text_dialog_msg="$(gettext "Running Windows executable from untrusted source\nmay cause security risk or virus infection.\n\nRun \"")"
text_dialog_end="$(gettext "\" anyway?\n")"
filter_msg="$(gettext "Windows program|*.exe")"
wine_msg="$(gettext "wine executable is not found")"

# Choose dialog program and check if it exists
if [ "$XDG_SESSION_DESKTOP" = "plasma" -o "$XDG_SESSION_DESKTOP" = "KDE" ]; then
    prg="$kdialog_prg"
else
    prg="$zenity_prg"
fi

# Check main program
if [ ! -x "$prg" ]; then
    prg="$xmessage_prg"
fi

# Override dialog program
test -n "$WINEEXEC_PRG" && prg="$WINEEXEC_PRG"
    
if [ ! -x "$prg" ]; then
    echo "Unable to find kdialog, zenity or xmessage executable" >&2
    exit 1
fi

# Check if wine is installed
if [ ! -x "$wine_prg" ]; then
    if [ "$prg" = "$zenity_prg" ]; then
	program="$($zenity_prg --icon-name=attention --error --title="$"$title_open_msg --text "$wine_msg")"
    elif [ "$prg" = "$kdialog_prg" ]; then
	program="$($kdialog_prg --title="$title_open_msg" --error "$wine_msg")"
    else
	$xmessage_prg -buttons "Close" -center "wine executable is not found"
    fi
    exit 1
fi

# Choose file manually
if [ -z "$program" ]; then
    if [ "$prg" = "$zenity_prg" ]; then
	program="$($zenity_prg --icon-name=attention --title="$title_open_msg" --file-selection --file-filter="$filter_msg")"
    elif [ "$prg" = "$kdialog_prg" ]; then
	program="$($kdialog_prg --title="$title_open_msg" --getopenfilename "" 'application/x-ms-dos-executable')"
    else
	$xmessage_prg -buttons "Close" -center "File .exe was not specified. Exiting."
	exit 1
    fi
fi

# Process Cancel in file chooser
test -z "$program" && exit 0

# Show dialog with warning
if [ "$prg" = "$zenity_prg" ]; then
    $zenity_prg --icon-name=attention --title="$title_dialog_msg" --question --text="$text_dialog_msg$program$text_dialog_end" --ellipsize --ok-label="$(gettext "Yes")" --cancel-label="$(gettext "No")"
elif [ "$prg" = "$kdialog_prg" ]; then
    $kdialog_prg  --title="$title_dialog_msg" --warningyesno "$text_dialog_msg$program$text_dialog_end"
else
    $xmessage_prg -buttons "Yes:0,No:1" -center "$text_dialog_msg$program$text_dialog_end"
fi

if [ $? -eq 0 ]; then
    $wine_prg "$program"
fi
