From 49d788dce4dced455ebe7d683ab80f431e30dd67 Mon Sep 17 00:00:00 2001 From: Ove Risberg Date: Tue, 22 Oct 2019 14:49:14 +0200 Subject: [PATCH 1/5] purple: add conference URL handler and .desktop file --- src/purple/sfb-handle-link.desktop | 8 +++ src/purple/sfb-open | 91 ++++++++++++++++++++++++++++++ 2 files changed, 99 insertions(+) create mode 100644 src/purple/sfb-handle-link.desktop create mode 100644 src/purple/sfb-open diff --git a/src/purple/sfb-handle-link.desktop b/src/purple/sfb-handle-link.desktop new file mode 100644 index 000000000..5cafe0a4a --- /dev/null +++ b/src/purple/sfb-handle-link.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Name=Handler for sfb: URIs +Comment=Start Skype for Bussiness meeting in Pidgin +Exec=/home/risbeove/bin/sfb-open %U +MimeType=x-scheme-handler/sfb; +NoDisplay=true +Type=Application + diff --git a/src/purple/sfb-open b/src/purple/sfb-open new file mode 100644 index 000000000..d16f60a90 --- /dev/null +++ b/src/purple/sfb-open @@ -0,0 +1,91 @@ +#!/bin/bash +# Debug message if /tmp/sfb-open.log exists +if [ -f /tmp/sfb-open.log ]; then + echo "$0 $@" >> /tmp/sfb-open.log +fi + +# Get meeting URL +MEETURL=$(echo $1 | sed -n 's/^sfb:.*meeturl=\([^&]*\).*/\1/p' | sed 's/_/=/g;s/!/=/g' | base64 -d) +if echo $MEETURL | grep origurl=; then + MEETURL=$(echo ${MEETURL#*origurl=} | sed 's/_/=/g;s/!/=/g' | base64 -d) +fi +if [ -f /tmp/sfb-open.log ]; then + echo "MEETURL = $MEETURL" >> /tmp/sfb-open.log +fi + +if [ -n "$MEETURL" ]; then + # Start Pidgin if it is not running + if [ -z "$(pgrep pidgin)" ]; then + pidgin & + # Wait up to 120 seconds for pidgin to start and present a valid ACCOUNT number + SECONDS=0 + while [ $SECONDS -lt 120 ]; do + ACCOUNT=$(purple-remote PurpleAccountsFindConnected?name=\&protocol=prpl-sipe) + if [ -n "$ACCOUNT" ] && [ $ACCOUNT -ne 0 ]; then + break + fi + sleep 1 + done + fi + + # Get SIPE Account number + ACCOUNT=$(purple-remote PurpleAccountsFindConnected?name=\&protocol=prpl-sipe) + if [ -f /tmp/sfb-open.log ]; then + echo ACCOUNT = $ACCOUNT >> /tmp/sfb-open.log + fi + if [ -z "$ACCOUNT" ] || [ $ACCOUNT -eq 0 ]; then + if [ -f /tmp/sfb-open.log ]; then + echo No Lync Account found >> /tmp/sfb-open.log + fi + exit 1 + fi + + # Join meeting + purple-remote SipeJoinConferenceWithUri?account=$ACCOUNT\&uri=$MEETURL +fi + +# Close SfB tab in browser +if hash xdotool 2>/dev/null; then + WID=$(xdotool search --name "Skype for Business Web App" | head -1) + if [ -n "$WID" ]; then + xdotool windowactivate --sync $WID + xdotool key --clearmodifiers ctrl+w + fi +fi + +# Make Pidgin chat window active (Skip "Buddy List") +if hash xdotool 2>/dev/null; then + for PIDGIN_PID in $(pgrep pidgin); do + for WID in $(xdotool search --onlyvisible --pid $PIDGIN_PID); do + if [ "$(xdotool getwindowname $WID)" != "Buddy List" ]; then + xdotool windowactivate --sync $WID + fi + done + done +fi + +# Auto join meeting +if hash xdotool 2>/dev/null; then + SECONDS=0 + while [ $SECONDS -lt 120 ]; do + WID=$(xdotool search --name "Office Communicator" | head -1) + if [ -n "$WID" ]; then + xdotool windowactivate --sync $WID + xdotool key --clearmodifiers Return + break + fi + done +fi + +# Auto join shared screen +if hash xdotool 2>/dev/null; then + SECONDS=0 + while [ $SECONDS -lt 30 ]; do + WID=$(xdotool search --name "Office Communicator" | head -1) + if [ -n "$WID" ]; then + xdotool windowactivate --sync $WID + xdotool key --clearmodifiers Return + break + fi + done +fi From 625230200c271aca5a2c7441a279421815b29536 Mon Sep 17 00:00:00 2001 From: Jakub Adam Date: Tue, 22 Oct 2019 14:51:12 +0200 Subject: [PATCH 2/5] purple: rename URL handler to sipe-url-handler --- src/purple/{sfb-open => sipe-url-handler} | 0 .../{sfb-handle-link.desktop => sipe-url-handler.desktop} | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename src/purple/{sfb-open => sipe-url-handler} (100%) rename src/purple/{sfb-handle-link.desktop => sipe-url-handler.desktop} (81%) diff --git a/src/purple/sfb-open b/src/purple/sipe-url-handler similarity index 100% rename from src/purple/sfb-open rename to src/purple/sipe-url-handler diff --git a/src/purple/sfb-handle-link.desktop b/src/purple/sipe-url-handler.desktop similarity index 81% rename from src/purple/sfb-handle-link.desktop rename to src/purple/sipe-url-handler.desktop index 5cafe0a4a..7ed1e0a98 100644 --- a/src/purple/sfb-handle-link.desktop +++ b/src/purple/sipe-url-handler.desktop @@ -1,7 +1,7 @@ [Desktop Entry] Name=Handler for sfb: URIs Comment=Start Skype for Bussiness meeting in Pidgin -Exec=/home/risbeove/bin/sfb-open %U +Exec=/usr/bin/sipe-url-handler %U MimeType=x-scheme-handler/sfb; NoDisplay=true Type=Application From 0523f16d418d5cbd8c9e67bc42e46a47ad3086c6 Mon Sep 17 00:00:00 2001 From: Jakub Adam Date: Tue, 22 Oct 2019 14:54:14 +0200 Subject: [PATCH 3/5] purple: Update sipe-url-handler.desktop Name --- src/purple/sipe-url-handler.desktop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/purple/sipe-url-handler.desktop b/src/purple/sipe-url-handler.desktop index 7ed1e0a98..6d01fd623 100644 --- a/src/purple/sipe-url-handler.desktop +++ b/src/purple/sipe-url-handler.desktop @@ -1,5 +1,5 @@ [Desktop Entry] -Name=Handler for sfb: URIs +Name=Skype for Business conference URL handler Comment=Start Skype for Bussiness meeting in Pidgin Exec=/usr/bin/sipe-url-handler %U MimeType=x-scheme-handler/sfb; From 60c89582501037b6061cf8b30597384eca0b771c Mon Sep 17 00:00:00 2001 From: Jakub Adam Date: Tue, 22 Oct 2019 15:01:51 +0200 Subject: [PATCH 4/5] purple: install the URL handler --- src/purple/Makefile.am | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/purple/Makefile.am b/src/purple/Makefile.am index 608a8978f..807191355 100644 --- a/src/purple/Makefile.am +++ b/src/purple/Makefile.am @@ -152,6 +152,11 @@ TESTS = $(check_PROGRAMS) install-exec-local: rm -f $(DESTDIR)$(libdir)/pidgin/libsipe.so +desktopdir = $(datadir)/applications +desktop_DATA = sipe-url-handler.desktop + +bin_SCRIPTS = sipe-url-handler + if SIPE_WITH_APPSTREAM pidginmetainfofiledir = $(datadir)/metainfo pidginmetainfofile_DATA = pidgin-sipe.metainfo.xml From 9607d70af51c07b2de1d683cf8eb8fd4a85c95ab Mon Sep 17 00:00:00 2001 From: Jakub Adam Date: Tue, 22 Oct 2019 15:15:30 +0200 Subject: [PATCH 5/5] purple: improve logging in sipe-url-handler --- src/purple/sipe-url-handler | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/purple/sipe-url-handler b/src/purple/sipe-url-handler index d16f60a90..4d7519831 100644 --- a/src/purple/sipe-url-handler +++ b/src/purple/sipe-url-handler @@ -1,17 +1,22 @@ #!/bin/bash -# Debug message if /tmp/sfb-open.log exists -if [ -f /tmp/sfb-open.log ]; then - echo "$0 $@" >> /tmp/sfb-open.log -fi + +LOG_FILE=/tmp/sipe-uri-handler.log + +log() { + # Debug message if $LOG_FILE exists + if [ -f $LOG_FILE ]; then + echo "$@" >> $LOG_FILE + fi +} + +log "$0 $@" # Get meeting URL MEETURL=$(echo $1 | sed -n 's/^sfb:.*meeturl=\([^&]*\).*/\1/p' | sed 's/_/=/g;s/!/=/g' | base64 -d) if echo $MEETURL | grep origurl=; then MEETURL=$(echo ${MEETURL#*origurl=} | sed 's/_/=/g;s/!/=/g' | base64 -d) fi -if [ -f /tmp/sfb-open.log ]; then - echo "MEETURL = $MEETURL" >> /tmp/sfb-open.log -fi +log "MEETURL = $MEETURL" if [ -n "$MEETURL" ]; then # Start Pidgin if it is not running @@ -30,13 +35,9 @@ if [ -n "$MEETURL" ]; then # Get SIPE Account number ACCOUNT=$(purple-remote PurpleAccountsFindConnected?name=\&protocol=prpl-sipe) - if [ -f /tmp/sfb-open.log ]; then - echo ACCOUNT = $ACCOUNT >> /tmp/sfb-open.log - fi + log "ACCOUNT = $ACCOUNT" if [ -z "$ACCOUNT" ] || [ $ACCOUNT -eq 0 ]; then - if [ -f /tmp/sfb-open.log ]; then - echo No Lync Account found >> /tmp/sfb-open.log - fi + log "No SfB Account found" exit 1 fi