#!/usr/bin/env python
#                                          von Mirko Doelle <mid@ct.heise.de>
#                           frei nach einer Vorlage des dbus-Python-Tutorials
#                                           Dies ist freie Software nach GPL.
#
# dbus-signal: Loest ein Signal auf dem Session-DBus mit der als Parameter
#              angegebenen Nachricht aus. Dies erlaubt, aus Skripten heraus
#              Anwendungen DBus-Signale zu senden.
#              Benoetigt folgenden Eintrag in der DBus-Konfigurationsdatei
#              /etc/dbus*/system.conf, im Abschnitt <policy context=default>:
#                <allow own="de.heise.ct.Signal"/>

import sys
import dbus
import dbus.service
if not ((dbus.version[0] == 0) & (dbus.version[1] < 80)):
  from dbus.mainloop.glib import DBusGMainLoop

class Signal(dbus.service.Object):
  def __init__(self, bus_name, dbus_path='/de/heise/ct/Signal'):
    dbus.service.Object.__init__(self, bus_name, dbus_path)

  @dbus.service.signal('de.heise.ct.Signal')
  def Signal(self, message):
    pass

  @dbus.service.method('de.heise.ct.Signal')
  def emitSignal(self, message):
    self.Signal(message)

if len(sys.argv) > 1:
  if (dbus.version[0] == 0) & (dbus.version[1] < 80):
    bus=dbus.SystemBus()
  else:
    dbus_loop = DBusGMainLoop(set_as_default=True)
    bus=dbus.SystemBus(mainloop=dbus_loop)
  s = Signal(dbus.service.BusName('de.heise.ct.Signal', bus))
  s.emitSignal(sys.argv[1])
else:
  print 'Aufruf: ' + sys.argv[0] + ' [Nachricht]'
