Notify vorlesen N900: Unterschied zwischen den Versionen

Aus Ethersex_Wiki
Wechseln zu: Navigation, Suche
(Die Seite wurde neu angelegt: „'''Desktop Notizen vorlesen lassen''' nachdem Stefan den Anfang mit "DBUS auf dem N900" nach dem Treffen [http://blogg.brokenpipe.de/2011/02/dbus-vs-schlange/ vo…“)
(kein Unterschied)

Version vom 20. Februar 2011, 21:06 Uhr

Desktop Notizen vorlesen lassen

nachdem Stefan den Anfang mit "DBUS auf dem N900" nach dem Treffen vollendet hat, hat es mich auch nicht mehr gehalten. DBUS ist zwar "fummelig" (wer braucht schon Fehlermeldungen ;-)), aber letztendlich funktioniert das Abgreifen der Desktopnachrichten und das Weiterleiten an espeak/mbrola nun. Ein Desktopwidget ist es (noch) nicht, aber zum Demonstrieren reichts allemal.


#!/usr/bin/python

import gobject
import gconf
import os
import dbus
from dbus.mainloop.glib import DBusGMainLoop

config = {}
config["tweakr_profile"] = "Home"
config["speakprogram"] = "/home/user/mbespeak"

lastname = ""
playqueue = ""
doplay = True
gc = None

def msg_filter(_bus, msg):
	global lastname,playqueue,doplay
	if msg.get_member() != "Notify": return
	args = msg.get_args_list()
	#print args
	if not doplay: return
	if len(args) >= 5: 
		if lastname != args[3]:
			print "get: %s schreibt %s" % (args[3], args[4])
			playqueue = "%s schreibt: %s" % (args[3], args[4])
			lastname = args[3]
		else:
			print "get: %s" % (args[4])
			playqueue = "%s" % (args[4])
	elif args[2] == "Stop" and playqueue != "":
		print "playing: %s" % (playqueue)
		os.spawnl(os.P_WAIT, config["speakprogram"], config["speakprogram"], playqueue)
		playqueue = ""

def systemmsg_filter(_bus, msg):
	global doplay,gc
	args = msg.get_args_list()
	#print args
	if msg.get_member() == "tklock_mode_ind" and len(args) == 1:
		gv =  gc.get("/system/tweakr/current-preset")
		if gv.get_string() == config["tweakr_profile"]:
			if args[0] == "locked":
				doplay = True
			if args[0] == "unlocked":
				doplay = False
	if msg.get_member() == "PropertyChanged" and len(args) >= 2:
		if args[1] == "connected":
			doplay = True
		if args[1] == "disconnected":
			doplay = False
 


if __name__ == '__main__':
	gc = gconf.client_get_default()
	DBusGMainLoop(set_as_default = True)
	bus = dbus.SessionBus()
	bus.add_match_string_non_blocking("type='method_call',interface='org.freedesktop.Notifications',member='Notify',path='/org/freedesktop/Notifications'")
	bus.add_match_string_non_blocking("type='signal',interface='org.freedesktop.DBus.Properties',member='Notify',path='/org/maemo/playback2'")
	bus.add_message_filter(msg_filter)
	sbus = dbus.SystemBus()
	sbus.add_match_string_non_blocking("type='signal',path='/com/nokia/mce/signal',interface='com.nokia.mce.signal',member='tklock_mode_ind'")
	sbus.add_match_string_non_blocking("type='signal',interface='org.bluez.Audio',member='PropertyChanged'")
	sbus.add_message_filter(systemmsg_filter)
	gobject.MainLoop().run()

oder Download unter [1] und das mbrola/espeak Skript samt Anleitung unter Mbrola_arm