Skip to content
Snippets Groups Projects
Commit 0ee33d5f authored by Xenhat Hex's avatar Xenhat Hex Committed by Rye Mutt
Browse files

!52 takeover: Fix shellcheck warnings.

Various fixes and edits. Spaces in SLURL are broken atm.

Revert quoting change in handler files

Additional protocol handler tweaks
This commit is mostly about refining the messages sent to the log.
No functional changes.
parent 3b18e297
No related branches found
No related tags found
No related merge requests found
......@@ -3,28 +3,24 @@
# Send a URL of the form secondlife://... to any running viewer, if not, launch Alchemy viewer.
#
URL="$1"
sl_url="$*"
if [ -z "$URL" ]; then
echo "Got SLURL: ${sl_url}"
if [ -z "${sl_url}" ]; then
echo "Usage: $0 secondlife:// ..."
exit
fi
RUN_PATH=$(dirname "$0" || echo .)
#ch "${RUN_PATH}"
run_path=$(dirname "$0" || echo .)
#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
service_name="com.secondlife.ViewerAppAPIService" #Name of Second Life DBus service. This should be the same across all viewers.
if dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.ListNames | grep -q "${service_name}"; 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"
exec dbus-send --type=method_call --dest="${service_name}" /com/secondlife/ViewerAppAPI com.secondlife.ViewerAppAPI.GoSLURL string:"${sl_url}"
else
echo "Second Life not running, launching new instance...";
cd "${RUN_PATH}"/..
cd "${run_path}"/.. || exit
#Go to .sh location (/etc), then up a directory to the viewer location
#exec ./alchemy -url \'"${URL}"\'
exec ./alchemy -url ${URL}
#Remove some of the wrapping around the URL, as this was breaking the handover upon startup
exec ./alchemy -url "${sl_url}"
fi
......@@ -4,33 +4,46 @@
# URLs of the form secondlife://...
#
HANDLER="$1"
desired_handler="$1"
RUN_PATH=$(dirname "$0" || echo .)
cd "${RUN_PATH}/.."
print() {
log_prefix="RegisterSLProtocol:"
echo -e "${log_prefix} $*"
}
run_path=$(dirname "$0" || echo .)
cd "${run_path}/.." || exit
if [ -z "$HANDLER" ]; then
#HANDLER="$RUN_PATH/etc/handle_secondlifeprotocol.sh"
HANDLER="$(pwd)/etc/handle_secondlifeprotocol.sh"
if [ -z "${desired_handler}" ]; then
#desired_handler="$run_path/etc/handle_secondlifeprotocol.sh"
desired_handler="$(pwd)/etc/handle_secondlifeprotocol.sh"
fi
# Register handler for GNOME-aware apps
LLGCONFTOOL=gconftool-2
if which ${LLGCONFTOOL} >/dev/null; then
(${LLGCONFTOOL} -s -t string /desktop/gnome/url-handlers/secondlife/command "${HANDLER} \"%s\"" && ${LLGCONFTOOL} -s -t bool /desktop/gnome/url-handlers/secondlife/enabled true) || echo Warning: Did not register secondlife:// handler with GNOME: ${LLGCONFTOOL} failed.
else
echo Warning: Did not register secondlife:// handler with GNOME: ${LLGCONFTOOL} not found.
print "Requested Handler: ${desired_handler}"
# Register handler for gconf-aware apps
# TODO: use dconf or another modern alternative
gconftool=$(command -v "${LLGCONFTOOL:=gconftool-2}")
if [[ -z "${gconftool}" ]]; then
print "gconf not found, skipped. (This is good)"
else
if "${gconftool}" -s -t string /desktop/gnome/url-handlers/secondlife/command "${desired_handler} \"%s\"" \
&& ${gconftool} -s -t bool /desktop/gnome/url-handlers/secondlife/enabled true; then
print "Registered secondlife:// handler with (deprecated) gconf."
else
print "Failed to register secondlife:// handler with (deprecated) gconf."
fi
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 [ -d "$LLKDEPROTODIR" ]; then
LLKDEPROTOFILE=${LLKDEPROTODIR}/secondlife.protocol
cat > ${LLKDEPROTOFILE} <<EOF || echo Warning: Did not register secondlife:// handler with KDE: Could not write ${LLKDEPROTOFILE}
for kdeconfig in ${LLKDECONFIG} kf5-config kde4-config kde-config; do
if command -v "${kdeconfig}" >/dev/null 2>&1; then
kde_protocols_folder=$("${kdeconfig}" --path services | cut -d ':' -f 1)
mkdir -p "${kde_protocols_folder}"
if [ -d "${kde_protocols_folder}" ]; then
kde_proto_file=${kde_protocols_folder}/secondlife.protocol
kde_handler_string="
[Protocol]
exec=${HANDLER} '%u'
exec=${desired_handler} %u
protocol=secondlife
input=none
output=none
......@@ -39,49 +52,67 @@ listing=
reading=false
writing=false
makedir=false
deleting=false
EOF
deleting=false"
if echo "${kde_handler_string}" > "${kde_proto_file}"; then
print "Registered secondlife:// handler with KDE"
success=1
else
print 'Warning: Did not register secondlife:// handler with KDE: Could not write '"${kde_proto_file}"
fi
else
echo Warning: Did not register secondlife:// handler with KDE: Directory $LLKDEPROTODIR does not exist.
print 'Warning: Did not register secondlife:// handler with KDE: Directory '"${kde_protocols_folder}"' does not exist.'
fi
fi
# else
# print "Warning: KDE-Config binary '${kdeconfig}' not found"
fi
done
#Check if xdg-mime is present, if so, use it to register new protocol.
if [[ -z "${success}" ]]; then
print "Warning: secondlife:// protocol not registered with KDE: could not find any configuration utility. You can still register the application manually by editing ${HOME}/.local/share/mimeapps.list"
fi
# if [[ -n "${FALLBACK}" ]]; then
#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
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
handlerpath="$localappdir/$newhandler"
print "New handler file: ${handlerpath}"
cat >"${handlerpath}" <<EOFnew || print Warning: Did not register secondlife:// handler with xdg-mime: Could not write $newhandler
[Desktop Entry]
Version=1.5
Name="Second Life URL handler"
Comment="secondlife:// URL handler"
Type=Application
Exec=$HANDLER %u
Exec=$desired_handler %u
Terminal=false
StartupNotify=false
NoDisplay=true
MimeType=x-scheme-handler/secondlife
EOFnew
if [ -z $urlhandler ]; then
echo No SLURL handler currently registered, creating new...
# TODO: use absolute path for the desktop file
# TODO: Ensure that multiple channels behave properly due to different desktop file names in /usr/share/applications/
# TODO: Better detection of what the handler actually is, as other viewer projects may use the same filename
if [ -z "$urlhandler" ]; then
print No SLURL handler currently registered, creating new...
else
echo Current SLURL Handler: $urlhandler - Setting new default...
#xdg-mime uninstall $localappdir/$urlhandler
#Clean up handlers from other viewers
if [ "$urlhandler" != "$newhandler" ]; then
mv $localappdir/$urlhandler $localappdir/$urlhandler.bak
print "Current SLURL Handler: ${urlhandler} - Setting ${newhandler} as the new default..."
mv "$localappdir"/"$urlhandler" "$localappdir"/"$urlhandler".bak
else
print "SLURL Handler has not changed, leaving as-is."
fi
fi
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)"
update-desktop-database "$localappdir"
print "Registered secondlife:// protocol with xdg-mime. New default: $(xdg-mime query default x-scheme-handler/secondlife)"
else
echo Warning: Cannot update desktop database, command missing - installation may be incomplete.
print "Warning: Cannot update desktop database, command missing - installation may be incomplete."
fi
else
echo Warning: Did not register secondlife:// handler with xdg-mime: Package not found.
print "Warning: Did not register secondlife:// handler with xdg-mime: Package not found."
fi
# fi
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment