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