diff --git a/spark-dwine-helper/build.sh b/spark-dwine-helper/build.sh index a440df9..61c8b9b 100755 --- a/spark-dwine-helper/build.sh +++ b/spark-dwine-helper/build.sh @@ -25,7 +25,7 @@ Version: $version Architecture: all Maintainer: shenmo Installed-Size: $SIZE -Depends: zenity, p7zip-legacy (>= 16.02+dfsg-8+Mejituu-2024022216) | p7zip-full (<< 16.02+transitional.1), fonts-noto-cjk, transhell, python3 +Depends: zenity, p7zip-legacy (>= 16.02+dfsg-8+Mejituu-2024022216) | p7zip-full (<< 16.02+transitional.1), fonts-noto-cjk, transhell, python3, wmctrl Section: utils Priority: extra Multi-Arch: foreign @@ -83,6 +83,7 @@ Architecture: all Maintainer: shenmo Installed-Size: $SIZE Depends: zenity, p7zip-legacy (>= 16.02+dfsg-8+Mejituu-2024022216) | p7zip-full (<< 16.02+transitional.1), fonts-noto-cjk, transhell, python3 +Recommends: wmctrl Section: utils Priority: extra Provides: spark-dwine-helper(=$version) diff --git a/spark-dwine-helper/s-wine-helper/opt/deepinwine/tools/spark-wine-banner b/spark-dwine-helper/s-wine-helper/opt/deepinwine/tools/spark-wine-banner new file mode 100755 index 0000000..d404967 --- /dev/null +++ b/spark-dwine-helper/s-wine-helper/opt/deepinwine/tools/spark-wine-banner @@ -0,0 +1,43 @@ +#!/bin/bash +if [ ! -z "$WAYLAND_DISPLAY" ]; then + echo "Wayland detected. Do not check wmclass" +zenity --progress --title="星火Windows应用兼容助手" --text="正在为您启动以下应用:$WINE_APP_NAME" --pulsate --width=400 --auto-close --no-cancel --timeout=3 + exit +fi + +if [ -z "$(which wmctrl)" ]; then + echo "No wmctrl installed. Do not check wmclass" +zenity --progress --title="星火Windows应用兼容助手" --text="正在为您启动以下应用:$WINE_APP_NAME" --pulsate --width=400 --auto-close --no-cancel --timeout=3 + exit +fi + +target_wmclass=$WINE_WMCLASS + + +function check_window() { + # 使用 wmctrl 命令列出所有窗口,并使用 grep 过滤出特定的 WMCLASS + windows=$(wmctrl -lx | grep "$target_wmclass") + + # 如果窗口存在,则关闭提示 + if [ -n "$windows" ]; then + # 提取窗口ID + window_id=$(echo "$windows" | awk '{print $1}') + + echo "Window with WMCLASS '$target_wmclass' found" + exit + else + echo "Window with WMCLASS '$target_wmclass' not found." + fi +} + +function check_wmclass(){ +# 递归检测窗口是否存在的函数 + +# 每隔一段时间检测一次窗口是否存在 +while true; do + check_window + # 等待一段时间后再次检测 + sleep 1 +done +} + check_wmclass | zenity --progress --title="星火Windows应用兼容助手" --text="正在为您启动以下应用:$WINE_APP_NAME" --pulsate --width=400 --auto-close --no-cancel diff --git a/spark-dwine-helper/s-wine-helper/opt/deepinwine/tools/spark_run_v4.sh b/spark-dwine-helper/s-wine-helper/opt/deepinwine/tools/spark_run_v4.sh index abffb6d..dd5ecd0 100755 --- a/spark-dwine-helper/s-wine-helper/opt/deepinwine/tools/spark_run_v4.sh +++ b/spark-dwine-helper/s-wine-helper/opt/deepinwine/tools/spark_run_v4.sh @@ -13,7 +13,21 @@ source /opt/durapps/transhell/transhell.sh load_transhell_debug source $(dirname $0)/log-function.bashimport - +#########Preload functions +function get_app_name() { + local app_name_orig=$(grep -m 1 '^Name=' "/usr/share/applications/$1.desktop" | cut -d '=' -f 2) + local app_name_i18n=$(grep -m 1 "^Name\[$LANGUAGE\]\=" "/usr/share/applications/$1.desktop" | cut -d '=' -f 2) + local app_name="" + + if [ -z "$app_name_i18n" ]; then + app_name="$app_name_orig" + else + app_name="$app_name_i18n" + fi + + echo "$app_name" +} +######### Vars BOTTLENAME="$1" WINEPREFIX="$HOME/.deepinwine/$1" APPDIR="/opt/apps/${DEB_PACKAGE_NAME}/files" @@ -24,6 +38,13 @@ WINE_CMD="deepin-wine" #这里会被后续覆盖 LOG_FILE=$0 PUBLIC_DIR="/var/public" +if [ -z "$WINE_WMCLASS" ]; then + export WINE_WMCLASS="$DEB_PACKAGE_NAME" +fi +export WINE_APP_NAME=$(get_app_name ${DEB_PACKAGE_NAME}) +if [ -z "$WINE_APP_NAME" ];then +export WINE_APP_NAME=$BOTTLENAME +fi @@ -44,7 +65,9 @@ fi if [ $APPRUN_CMD ]; then WINE_CMD=$APPRUN_CMD fi + ##################### + if [ "$WINE_CMD" = "deepin-wine8-stable" ] && [ "$(arch)" != "x86_64" ];then WINE_CMD="/opt/durapps/spark-dwine-helper/deepin-wine8-stable-wrapper/deepin-wine8-stable" @@ -57,7 +80,7 @@ if [ $SPECIFY_SHELL_DIR ]; then SHELL_DIR=$SPECIFY_SHELL_DIR fi - +##################### Functions progressbar() { WINDOWID="" zenity --progress --title="$1" --text="$2" --pulsate --width=400 --auto-close --no-cancel || @@ -296,6 +319,8 @@ fi } ExtractApp() { + + local tmp_log=$(mktemp) mkdir -p "$1" (${UNPACK_CMD} x "$APPDIR/$APPTAR" -o"$1" -bsp1 -bb1 -bse2 | grep --line-buffered -oP "(\d+(\.\d+)?(?=%))" > $tmp_log)& @@ -304,7 +329,7 @@ local tmp_log=$(mktemp) (while kill -0 $cmd_pid 2> /dev/null; do tail -n 1 "${tmp_log}" sleep 1 - done)| zenity --progress --title="${TRANSHELL_CONTENT_SPARK_WINDOWS_COMPATIBILITY_TOOL}" --text="${TRANSHELL_CONTENT_UNPACKING} $BOTTLENAME..." --width=600 --auto-close --no-cancel + done)| zenity --progress --title="${TRANSHELL_CONTENT_SPARK_WINDOWS_COMPATIBILITY_TOOL}" --text="${TRANSHELL_CONTENT_UNPACKING} $WINE_APP_NAME..." --width=600 --auto-close --no-cancel rm $tmp_log @@ -367,6 +392,8 @@ UpdateApp() } RunApp() { + $SHELL_DIR/spark-wine-banner + progpid=$(ps -ef | grep "zenity --progress --title=${BOTTLENAME}" | grep -v grep) debug_log "run ${BOTTLENAME} progress pid $progpid" if [ -n "$progpid" ]; then @@ -432,9 +459,6 @@ fi debug_log "Run $*" -if [ -z "$WINE_WMCLASS" ]; then - export WINE_WMCLASS="$DEB_PACKAGE_NAME" -fi #执行lnk文件通过判断第5个参数是否是“/Unix”来判断 if [ "$4" == "/Unix" ];then diff --git a/spark-dwine-helper/s-wine-helper/opt/deepinwine/tools/transhell/spark_run_v4.sh_zh_CN.transhell b/spark-dwine-helper/s-wine-helper/opt/deepinwine/tools/transhell/spark_run_v4.sh_zh_CN.transhell index 78ef2f8..4dba224 100644 --- a/spark-dwine-helper/s-wine-helper/opt/deepinwine/tools/transhell/spark_run_v4.sh_zh_CN.transhell +++ b/spark-dwine-helper/s-wine-helper/opt/deepinwine/tools/transhell/spark_run_v4.sh_zh_CN.transhell @@ -1,3 +1,4 @@ #!/bin/bash TRANSHELL_CONTENT_UNPACKING="正在为您准备以下应用:" TRANSHELL_CONTENT_SPARK_WINDOWS_COMPATIBILITY_TOOL="星火Windows应用兼容助手" +