#!/bin/bash if [ "x" = "x${DBUS_SESSION_BUS_ADDRESS}" ]; then DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$UID/bus" fi export DBUS_SESSION_BUS_ADDRESS pretty() { sed ' /^method return .*/d s/^Error org.freedesktop.DBus.Error.Failed: "\?\(.*\)"\?$/ERROR: \1/ s/^ string "\(.*\)"/\1/ s:[[{,]:&\n:g s: *[]}]:\n&:g ' | sed ' s:^ *:: s: *$:: /[]}],*$/ {x;s:...::;x} G /[[{]\n/ {x;s:$: :;x} s:^\(.*[^\n]\)\n\( *\)$:\2\1: ' } send() { dbus-send --session --print-reply \ --dest=org.AGL.afm.user \ /org/AGL/afm/user \ org.AGL.afm.user.$1 \ "string:$2" | pretty return ${PIPESTATUS[0]} } case "$1" in list|runnables) send runnables true ;; add|install) f=$(realpath $2) send install '{"wgt":"'"$f"'","force":true}' ;; remove|uninstall) i=$2 send uninstall "\"$i\"" ;; info|detail) i=$2 send detail "\"$i\"" ;; ps|runners) send runners true ;; run|start) i=$2 send start "\"$i\"" ;; run-remote|start-remote) i=$2 send start '{"id":"'"$i"'","mode":"remote"}' ;; once) i=$2 send once "\"$i\"" ;; terminate|kill) i=$2 send terminate "$i" ;; stop|pause) i=$2 send pause "$i" ;; resume|continue) i=$2 send resume "$i" ;; state|status) i=$2 send state "$i" ;; -h|--help|help) cat << EOC usage: $(basename $0) command [arg] The commands are: list runnables list the runnable widgets installed add wgt install wgt install the wgt file remove id uninstall id remove the installed widget of id info id detail id print detail about the installed widget of id ps runners list the running instance run id start id start an instance of the widget of id once id run once an instance of the widget of id kill rid terminate rid terminate the running instance rid stop rid pause rid pause the running instance rid resume rid continue rid continue the previously paused rid status rid state rid get status of the running instance rid EOC ;; *) echo "unknown command $1" >&2 exit 1 ;; esac