From 3efa18372462b9255b3874f34370567a53ba5169 Mon Sep 17 00:00:00 2001
From: JennaHuntsman <jenna.salem.sf@gmail.com>
Date: Fri, 15 Oct 2021 17:35:20 -0400
Subject: [PATCH] Fix issue wherein handler directory would be set incorrectly,
 thus breaking SLURL handling

Removes some URL wrapping to fix handover upon viewer startup

Fix dumb pasting error & remove depreciated strings from desktop entry

Remove URL escape & patch out irrelevant echo

Swap out use of backticks for parenthesis  in handle_secondlifeprotocol.sh

Swap out use of backticks for parenthesis in register_secondlifeprotocol.sh

Remove backtick originating from pasting error (oops!) in handle_secondlifeprotocol.sh

Unjanktified viewer detection - No longer depends on binary names and instead looks at the presence of standard protocols within DBus in handle_secondlifeprotocol.sh

Ugh, backticks again.

Clean up in aisle register_secondlifeprotocol.sh

Useful value substitution in handle_secondlifeprotocol.sh
---
 .../linux_tools/handle_secondlifeprotocol.sh  | 30 ++++++++-----------
 .../register_secondlifeprotocol.sh            | 18 +++++------
 2 files changed, 20 insertions(+), 28 deletions(-)

diff --git a/indra/newview/linux_tools/handle_secondlifeprotocol.sh b/indra/newview/linux_tools/handle_secondlifeprotocol.sh
index 5d63c4514e8..0bc966f6e53 100755
--- a/indra/newview/linux_tools/handle_secondlifeprotocol.sh
+++ b/indra/newview/linux_tools/handle_secondlifeprotocol.sh
@@ -3,32 +3,28 @@
 # Send a URL of the form secondlife://... to any running viewer, if not, launch Alchemy viewer.
 #
 
-#enable or disable debugging code
-debug=0
-
 URL="$1"
 
 if [ -z "$URL" ]; then
-    echo "Usage: $0 [ secondlife://  | hop:// ] ..."
+    echo "Usage: $0 secondlife:// ..."
     exit
 fi
 
-RUN_PATH=`dirname "$0" || echo .`
+RUN_PATH=$(dirname "$0" || echo .)
 #ch "${RUN_PATH}"
 
-# Use pgrep to return the NUMBER of matching processes, not their IDs. Stragely returning IDs via pidof will cause the script to fail at random, even when it shouldn't.
-# pgrep -c returns 0 to show if process (any matching viewer) is not running, 
-if [ `pgrep -c do-not-directly` != 0 ]; then
-	if [ $debug == 1 ]; then
-		zenity --info --text="pgrep passed\!" --title="secondlife_protocol"
-	fi
-	exec dbus-send --type=method_call --dest=com.secondlife.ViewerAppAPIService /com/secondlife/ViewerAppAPI com.secondlife.ViewerAppAPI.GoSLURL string:"$1"
+#Poll DBus to get a list of registered services, then look through the list for the Second Life API Service - if present, this means a viewer is running, if not, then no viewer is running and a new instance should be launched
+LIST=$(dbus-send --print-reply --dest=org.freedesktop.DBus  /org/freedesktop/DBus org.freedesktop.DBus.ListNames
+)
+SERVICE="com.secondlife.ViewerAppAPIService" #Name of Second Life DBus service. This should be the same across all viewers.
+if echo "$LIST" | grep -q "$SERVICE"; then
+	echo "Second Life running, sending to DBus...";
+	exec dbus-send --type=method_call --dest=$SERVICE /com/secondlife/ViewerAppAPI com.secondlife.ViewerAppAPI.GoSLURL string:"$1"
 else
-	if [ $debug == 1 ]; then
-		zenity --info --text="pgrep fail\!" --title="secondlife_protocol"
-	fi
+	echo "Second Life not running, launching new instance...";
 	cd "${RUN_PATH}"/..
 	#Go to .sh location (/etc), then up a directory to the viewer location
-	exec ./alchemy -url \'"${URL}"\'
+	#exec ./alchemy -url \'"${URL}"\'
+	exec ./alchemy -url ${URL}
+	#Remove some of the wrapping around the URL, as this was breaking the handover upon startup
 fi
-`
diff --git a/indra/newview/linux_tools/register_secondlifeprotocol.sh b/indra/newview/linux_tools/register_secondlifeprotocol.sh
index e7b052999e2..f6cbd97de6c 100755
--- a/indra/newview/linux_tools/register_secondlifeprotocol.sh
+++ b/indra/newview/linux_tools/register_secondlifeprotocol.sh
@@ -6,14 +6,12 @@
 
 HANDLER="$1"
 
-RUN_PATH=`dirname "$0" || echo .`
+RUN_PATH=$(dirname "$0" || echo .)
 cd "${RUN_PATH}/.."
 
 if [ -z "$HANDLER" ]; then
-    HANDLER="$RUN_PATH/etc/handle_secondlifeprotocol.sh"
-    #curdir=`pwd`
-    #echo $curdir
-    #HANDLER="$curdir/etc/handle_secondlifeprotocol.sh"
+    #HANDLER="$RUN_PATH/etc/handle_secondlifeprotocol.sh"
+    HANDLER="$(pwd)/etc/handle_secondlifeprotocol.sh"
 fi
 
 # Register handler for GNOME-aware apps
@@ -26,8 +24,8 @@ fi
 
 # Register handler for KDE-aware apps
 for LLKDECONFIG in kde-config kde4-config; do
-    if [ `which $LLKDECONFIG` ]; then
-        LLKDEPROTODIR=`$LLKDECONFIG --path services | cut -d ':' -f 1`
+    if [ $(which $LLKDECONFIG) ]; then
+        LLKDEPROTODIR=$($LLKDECONFIG --path services | cut -d ':' -f 1)
         if [ -d "$LLKDEPROTODIR" ]; then
             LLKDEPROTOFILE=${LLKDEPROTODIR}/secondlife.protocol
             cat > ${LLKDEPROTOFILE} <<EOF || echo Warning: Did not register secondlife:// handler with KDE: Could not write ${LLKDEPROTOFILE} 
@@ -51,13 +49,11 @@ done
 
 #Check if xdg-mime is present, if so, use it to register new protocol.
 if command -v xdg-mime query default x-scheme-handler/secondlife > /dev/null 2>&1; then
-	#zenity --info --text="xdg-mime present\!" --title="register_secondlife_protocol"
-	urlhandler=`xdg-mime query default x-scheme-handler/secondlife`
+	urlhandler=$(xdg-mime query default x-scheme-handler/secondlife)
 	localappdir="$HOME/.local/share/applications"
 	newhandler="handle_secondlifeprotocol.desktop"
 	cat >"$localappdir/$newhandler" <<EOFnew || echo Warning: Did not register secondlife:// handler with xdg-mime: Could not write $newhandler
 [Desktop Entry]
-Encoding=UTF-8
 Version=1.5
 Name="Second Life URL handler"
 Comment="secondlife:// URL handler"
@@ -82,7 +78,7 @@ EOFnew
 	xdg-mime default $newhandler x-scheme-handler/secondlife
 	if command -v update-desktop-database > /dev/null 2>&1; then
 		update-desktop-database $localappdir
-		echo -e "Registered secondlife:// protocol with xdg-mime\nNew default: `xdg-mime query default x-scheme-handler/secondlife`"
+		echo -e "Registered secondlife:// protocol with xdg-mime\nNew default: $(xdg-mime query default x-scheme-handler/secondlife)"
 	else
 		echo Warning: Cannot update desktop database, command missing - installation may be incomplete.
 	fi
-- 
GitLab