[Rhythmbox-devel] exporting a python object through dbus



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]