Skip to content
Snippets Groups Projects

Fix Linux SLURL protocol handling

Merged Ghost User requested to merge xenhat/slurl-handler into main
2 files
+ 20
28
Compare changes
  • Side-by-side
  • Inline
Files
2
  • 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
@@ -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
`
Loading