[Rhythmbox-devel] exporting a python object through dbus
- From: Patrick Nicolas <patricknicolas laposte net>
- To: rhythmbox-devel gnome org
- Subject: [Rhythmbox-devel] exporting a python object through dbus
- Date: Sat, 18 Jul 2009 22:05:44 +0200
Hello, I have written a plugin that exports searches on dbus (it just
does a PROP_SEARCH_MATCH query on a string and returns a list of title,
artist, album, location) but I don't know how to make it appear on the
"org.gnome.Rhythmbox" bus name.
On the C version I have no problem, it just works (except that
deactivation does not remove it, but it can be fixed).
In order to distribute it easily I want to do a python version, when I
use dbus.service.BusName, I can set any name that is not already
registered, but not org.gnome.Rhythmbox which would be more appropriate.
By the way, the plugin is meant to be used by deskbar, empathy/pidgin
without the need of parsing the xml database, is this approach
acceptable or is it a feature that should be first approved and
developed in-tree ? maybe in order to have a compatible interface with
amarok or other similar software.
Patrick Nicolas
PS : Here is the plugin if you have time to investigate
import rhythmdb, rb
import gobject, gtk
import dbus, dbus.service
from dbus.mainloop.glib import DBusGMainLoop
DBusGMainLoop(set_as_default=True)
class DbusService(dbus.service.Object):
def __init__(self, obj_path, db):
bus = dbus.SessionBus()
bus_name=dbus.service.BusName(name="org.gnome.Rhythmbox",bus=bus)
dbus.service.Object.__init__(self, bus, object_path=obj_path, bus_name=bus_name)
self.db = db
@dbus.service.method(dbus_interface='org.gnome.Rhythmbox.Query', in_signature='s', out_signature='a(ssss)', utf8_strings=True)
def search (self, text):
result_list=[]
query = self.db.query_new()
self.db.query_append(query,[rhythmdb.QUERY_PROP_LIKE, rhythmdb.PROP_SEARCH_MATCH, text.encode()])
qm = self.db.query_model_new(query)
self.db.do_full_query_parsed(qm,query)
def read_entry_data (model, path, iter):
id = model.get(iter, 0)[0]
entry = self.db.entry_lookup_by_id(self.db.entry_get (id, rhythmdb.PROP_ENTRY_ID))
result_list.append((self.db.entry_get(entry, rhythmdb.PROP_ARTIST),
self.db.entry_get(entry, rhythmdb.PROP_TITLE),
self.db.entry_get(entry, rhythmdb.PROP_ALBUM),
self.db.entry_get(entry, rhythmdb.PROP_LOCATION)))
qm.foreach(read_entry_data)
return result_list
class DbusQuery(rb.Plugin):
def __init__(self):
rb.Plugin.__init__(self)
def activate(self, shell):
db = shell.get_property("db")
self.service = DbusService("/org/gnome/Rhythmbox/Query", db)
def deactivate(self, shell):
self.service = None
print "dbus query plugin deactivated"
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]