From 6fa0e11927675ae470a1a8c91e4b2814957d8f98 Mon Sep 17 00:00:00 2001
From: zty199 <46324746+zty199@users.noreply.github.com>
Date: Mon, 17 Feb 2025 14:18:49 +0800
Subject: [PATCH] fix: wrong app name displayed when checking app upgrade

grep Name[$locale] from .desktop directly might return
from other sections like [Desktop Action xxx] instead of
[Desktop entry] section only

Log: modify awk params in ss-do-upgrade.sh and format the script
---
 tool/update-upgrade/ss-do-upgrade.sh | 112 +++++++++++++--------------
 1 file changed, 52 insertions(+), 60 deletions(-)

diff --git a/tool/update-upgrade/ss-do-upgrade.sh b/tool/update-upgrade/ss-do-upgrade.sh
index 80e6c90..dd78410 100755
--- a/tool/update-upgrade/ss-do-upgrade.sh
+++ b/tool/update-upgrade/ss-do-upgrade.sh
@@ -1,16 +1,16 @@
 #!/bin/bash
+
 if [ "$(id -u)" != "0" ] ; then
-    if [ "$IS_ACE_ENV" = "1" ];then
-        /opt/durapps/spark-store/bin/store-helper/pass-auth.sh "$0" "$@"
-    else
-       xhost +
-	   pkexec "$0" "$@"
-	   exit
-    fi
+	if [ "$IS_ACE_ENV" = "1" ] ; then
+		/opt/durapps/spark-store/bin/store-helper/pass-auth.sh "$0" "$@"
+	else
+		xhost +
+		pkexec "$0" "$@"
+		exit
+	fi
 fi
 
-
-trap "rm -f  /tmp/spark-store/upgradeStatus.txt" EXIT
+trap "rm -f /tmp/spark-store/upgradeStatus.txt" EXIT
 source /opt/durapps/spark-store/bin/bashimport/transhell.amber
 load_transhell_debug
 
@@ -20,40 +20,41 @@ function get_name_from_desktop_file() {
 	local name_i18n
 	local package_name
 	package_name=$1
-    for desktop_file_path in $(dpkg -L "$package_name" |grep /usr/share/applications/ | awk '/\.desktop$/ {print}'); do
-if [ "$(grep -m 1 '^NoDisplay=' "$desktop_file_path" | cut -d '=' -f 2)" = "true" ] ||  [ "$(grep -m 1 '^NoDisplay=' "$desktop_file_path" | cut -d '=' -f 2)" = "True" ];then
-	continue
-	else 
-	name_orig=$(grep -m 1 '^Name=' "$desktop_file_path" | cut -d '=' -f 2)
-    name_i18n=$(grep -m 1 "^Name\[${LANGUAGE}\]\=" "$desktop_file_path" | cut -d '=' -f 2)
-		if [ -z "$name_i18n" ] ;then
-		app_name_in_desktop=$name_orig
+	for desktop_file_path in $(dpkg -L "$package_name" |grep /usr/share/applications/ | awk '/\.desktop$/ {print}') ; do
+		if [ "$(grep -m 1 '^NoDisplay=' "$desktop_file_path" | cut -d '=' -f 2)" = "true" ] ||  [ "$(grep -m 1 '^NoDisplay=' "$desktop_file_path" | cut -d '=' -f 2)" = "True" ] ; then
+			continue
 		else
-		app_name_in_desktop=$name_i18n
+			name_orig=$(awk -F= '/^\[Desktop Entry\]$/ {found=1} found && /^Name=/ {print $2; exit} /^\[.*\]$/ && !/\[Desktop Entry\]/ {exit}' "$desktop_file_path")
+			name_i18n=$(awk -v lang="Name[$LANGUAGE]" -F= '/^\[Desktop Entry\]$/ {found=1} found && /^Name\[/ && $1 == lang {print $2; exit} /^\[.*\]$/ && !/\[Desktop Entry\]/ {exit}' "$desktop_file_path")
+			if [ -z "$name_i18n" ] ; then
+				app_name_in_desktop=$name_orig
+			else
+				app_name_in_desktop=$name_i18n
+			fi
 		fi
-	
-	fi
     done
-	for desktop_file_path in $(dpkg -L "$package_name" |grep /opt/apps/$package_name/entries/applications | awk '/\.desktop$/ {print}'); do
-	if [ "$(grep -m 1 '^NoDisplay=' "$desktop_file_path" | cut -d '=' -f 2)" = "true" ] ||  [ "$(grep -m 1 '^NoDisplay=' "$desktop_file_path" | cut -d '=' -f 2)" = "True" ];then
-	continue
-	else 
-	name_orig=$(grep -m 1 '^Name=' "$desktop_file_path" | cut -d '=' -f 2)
-    name_i18n=$(grep -m 1 "^Name\[${LANGUAGE}\]\=" "$desktop_file_path" | cut -d '=' -f 2)
-		if [ -z "$name_i18n" ] ;then
-		app_name_in_desktop=$name_orig
-		else
-		app_name_in_desktop=$name_i18n
-		fi
-	
-	fi
-    done
-if [ -z "$app_name_in_desktop" ] ;then
-app_name_in_desktop=${package_name}
-fi
-echo ${app_name_in_desktop}
 
+	for desktop_file_path in $(dpkg -L "$package_name" |grep /opt/apps/$package_name/entries/applications | awk '/\.desktop$/ {print}') ; do
+		if [ "$(grep -m 1 '^NoDisplay=' "$desktop_file_path" | cut -d '=' -f 2)" = "true" ] ||  [ "$(grep -m 1 '^NoDisplay=' "$desktop_file_path" | cut -d '=' -f 2)" = "True" ] ; then
+			continue
+		else
+			name_orig=$(awk -F= '/^\[Desktop Entry\]$/ {found=1} found && /^Name=/ {print $2; exit} /^\[.*\]$/ && !/\[Desktop Entry\]/ {exit}' "$desktop_file_path")
+			name_i18n=$(awk -v lang="Name[$LANGUAGE]" -F= '/^\[Desktop Entry\]$/ {found=1} found && /^Name\[/ && $1 == lang {print $2; exit} /^\[.*\]$/ && !/\[Desktop Entry\]/ {exit}' "$desktop_file_path")
+			if [ -z "$name_i18n" ] ; then
+				app_name_in_desktop=$name_orig
+			else
+				app_name_in_desktop=$name_i18n
+			fi
+		fi
+    done
+
+	if [ -z "$app_name_in_desktop" ] ; then
+		app_name_in_desktop=${package_name}
+	fi
+
+	echo ${app_name_in_desktop}
 }
+
 touch /tmp/spark-store/upgradeStatus.txt
 
 # 执行 apt update
@@ -118,32 +119,23 @@ done)
 		## 如果没有选择,则直接退出
 		if [ -z "$PKG_UPGRADE_LIST" ] ; then
 			zenity --info --text "${TRANSHELL_CONTENT_NO_APP_IS_CHOSEN}" --title "${TRANSHELL_CONTENT_SPARK_STORE_UPGRADE_MODEL}" --height 150 --width 300 --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg
-		else
-			### 更新用户选择的应用
-
-
-(for PKG_UPGRADE in $PKG_UPGRADE_LIST; do
-    APP_UPGRADE="$(get_name_from_desktop_file $PKG_UPGRADE)"
-    update_transhell
-
-    # 启动升级任务
-    (pkexec /opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh upgrade-app $PKG_UPGRADE -y 2>&1 > /dev/null ) &
-    cmd_pid=$!
-    # 动态修改zenity的文本
-    echo "# ${TRANSHELL_CONTENT_UPGRADING_PLEASE_WAIT}"
-    wait
-done) | zenity --progress --auto-close --no-cancel --pulsate --text="Preparing..." --height 70 --width 400 --title="${TRANSHELL_CONTENT_SPARK_STORE_UPGRADE_MODEL}" --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg
-
-
-
-	 
+		else ### 更新用户选择的应用
+			(for PKG_UPGRADE in $PKG_UPGRADE_LIST ; do
+				APP_UPGRADE="$(get_name_from_desktop_file $PKG_UPGRADE)"
+				update_transhell
 
+				# 启动升级任务
+				(pkexec /opt/durapps/spark-store/bin/update-upgrade/ss-do-upgrade-worker.sh upgrade-app $PKG_UPGRADE -y 2>&1 > /dev/null ) &
+				cmd_pid=$!
+				# 动态修改zenity的文本
+				echo "# ${TRANSHELL_CONTENT_UPGRADING_PLEASE_WAIT}"
+				wait
+			done) | zenity --progress --auto-close --no-cancel --pulsate --text="Preparing..." --height 70 --width 400 --title="${TRANSHELL_CONTENT_SPARK_STORE_UPGRADE_MODEL}" --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg
 
 			#### 更新成功
 			if [ -z "`cat /tmp/spark-store-app-upgrade-status.txt`" ] ; then
 				zenity --info --text "${TRANSHELL_CONTENT_CHOSEN_APP_UPGRADE_FINISHED}" --title "${TRANSHELL_CONTENT_SPARK_STORE_UPGRADE_MODEL}" --height 150 --width 300 --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg
-			else
-			#### 更新异常
+			else #### 更新异常
 				zenity --error --text "${TRANSHELL_CONTENT_APP_UGRADE_PROCESS_ERROR_PRESS_CONFIRM_TO_CHECK}" --title "${TRANSHELL_CONTENT_SPARK_STORE_UPGRADE_MODEL}" --height 200 --width 350 --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg
 				zenity --text-info --filename=/tmp/spark-store-app-upgrade-log.txt --checkbox="${TRANSHELL_CONTENT_I_ALREDY_COPIED_THE_LOG_HERE_AND_WILL_USE_IT_TO_FEEDBACK}" --title="${TRANSHELL_CONTENT_FEEDBACK_CAN_BE_FOUND_IN_THE_SETTINGS}" --window-icon=/usr/share/icons/hicolor/scalable/apps/spark-store.svg
 			fi
@@ -151,5 +143,5 @@ done) | zenity --progress --auto-close --no-cancel --pulsate --text="Preparing..
 	fi
 fi
 
-rm -f  /tmp/spark-store/upgradeStatus.txt
+rm -f /tmp/spark-store/upgradeStatus.txt
 # 从最开头