Petter Reinholdtsen: Latest Jami back in Debian Testing, and scriptable using dbus
After a lot of hard work by its maintainer Alexandre Viau and
others, the decentralized communication platform
Jami
(earlier known as Ring), managed to get
its latest version
into Debian Testing. Several of its dependencies has caused build and
propagation problems, which all seem to be solved now.
In addition to the fact that Jami is decentralized, similar to how
bittorrent is decentralized, I first of all like how it is not
connected to external IDs like phone numbers. This allow me to set up
computers to send me notifications using Jami without having to find
get a phone number for each computer. Automatic notification via Jami
is also made trivial thanks to the provided client side API (as a DBus
service). Here is my bourne shell script demonstrating how to let any
system send a message to any Jami address. It will create a new
identity before sending the message, if no Jami identity exist
already:
#!/bin/sh
#
# Usage: $0
#
# Send to , create local jami account if
# missing.
#
# License: GPL v2 or later at your choice
# Author: Petter Reinholdtsen
if [ -z "$HOME" ] ; then
echo "error: missing \$HOME, required for dbus to work"
exit 1
fi
# First, get dbus running if not already running
DBUSLAUNCH=/usr/bin/dbus-launch
PIDFILE=/run/asterisk/dbus-session.pid
if [ -e $PIDFILE ] ; then
. $PIDFILE
if ! kill -0 $DBUS_SESSION_BUS_PID 2>/dev/null ; then
unset DBUS_SESSION_BUS_ADDRESS
fi
fi
if [ -z "$DBUS_SESSION_BUS_ADDRESS" ] && [ -x "$DBUSLAUNCH" ]; then
DBUS_SESSION_BUS_ADDRESS="unix:path=$HOME/.dbus"
dbus-daemon --session --address="$DBUS_SESSION_BUS_ADDRESS" --nofork --nopidfile --syslog-only < /dev/null > /dev/null 2>&1 3>&1 &
DBUS_SESSION_BUS_PID=$!
(
echo DBUS_SESSION_BUS_PID=$DBUS_SESSION_BUS_PID
echo DBUS_SESSION_BUS_ADDRESS=\""$DBUS_SESSION_BUS_ADDRESS"\"
echo export DBUS_SESSION_BUS_ADDRESS
) > $PIDFILE
. $PIDFILE
fi &
dringop()
part="$1"; shift
op="$1"; shift
dbus-send --session \
--dest="cx.ring.Ring" /cx/ring/Ring/$part cx.ring.Ring.$part.$op $*
dringopreply()
part="$1"; shift
op="$1"; shift
dbus-send --session --print-reply \
--dest="cx.ring.Ring" /cx/ring/Ring/$part cx.ring.Ring.$part.$op $*
firstaccount()
dringopreply ConfigurationManager getAccountList \
grep string awk -F'"' ' print $2 ' head -n 1
account=$(firstaccount)
if [ -z "$account" ] ; then
echo "Missing local account, trying to create it"
dringop ConfigurationManager addAccount \
dict:string:string:"Account.type","RING","Account.videoEnabled","false"
account=$(firstaccount)
if [ -z "$account" ] ; then
echo "unable to create local account"
exit 1
fi
fi
# Not using dringopreply to ensure $2 can contain spaces
dbus-send --print-reply --session \
--dest=cx.ring.Ring \
/cx/ring/Ring/ConfigurationManager \
cx.ring.Ring.ConfigurationManager.sendTextMessage \
string:"$account" string:"$1" \
dict:string:string:"text/plain","$2"
If you want to check it out yourself, visit the
the Jami system project page to learn
more, and install the latest Jami client from Debian Unstable or
Testing.
As usual, if you use Bitcoin and want to show your support of my
activities, please send Bitcoin donations to my address
15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b.

