diff --git a/src/ipc_manager.py b/src/ipc_manager.py index 51237a5cb..3a5e9fb9f 100644 --- a/src/ipc_manager.py +++ b/src/ipc_manager.py @@ -18,28 +18,43 @@ # 51 Franklin Street, Fifth Floor # Boston, MA 02110-1301, USA. -import dbus, dbus.service -dbus_version = getattr(dbus, 'version', (0,0,0)) -if dbus_version >= (0,41,0) and dbus_version < (0,80,0): - dbus.SessionBus() - import dbus.glib -elif dbus_version >= (0,80,0): - from dbus.mainloop.glib import DBusGMainLoop - DBusGMainLoop(set_as_default=True) - dbus.SessionBus() + +# Code for dbus_importing borrowed from Listen (http://listen-project.org) +# I couldn't figure out how to use dbus without breaking on versions past +# 0.80.0. I finally found a solution by reading the source code from the +# Listen project. +try: + import dbus, dbus.service + dbus_version = getattr(dbus, 'version', (0,0,0)) + if dbus_version >= (0,41,0) and dbus_version < (0,80,0): + dbus.SessionBus() + import dbus.glib + elif dbus_version >= (0,80,0): + from dbus.mainloop.glib import DBusGMainLoop + DBusGMainLoop(set_as_default=True) + dbus.SessionBus() + else: + pass +except: dbus_imported = False +else: dbus_imported = True + +if dbus_imported: + class Manager(dbus.service.Object): + def __init__(self, interface, object_path='/org/deluge_torrent/DelugeObject'): + self.interface = interface + self.bus = dbus.SessionBus() + bus_name = dbus.service.BusName("org.deluge_torrent.Deluge", bus=self.bus) + dbus.service.Object.__init__(self, bus_name, object_path) + + ## external_add_torrent should only be called from outside the class + @dbus.service.method('org.deluge_torrent.Deluge') + def external_add_torrent(self, torrent_file): + self.interface.external_add_torrent(torrent_file) else: - pass - -class Manager(dbus.service.Object): - def __init__(self, interface, object_path='/org/deluge_torrent/DelugeObject'): - self.interface = interface - self.bus = dbus.SessionBus() - bus_name = dbus.service.BusName("org.deluge_torrent.Deluge", bus=self.bus) - dbus.service.Object.__init__(self, bus_name, object_path) - - ## external_add_torrent should only be called from outside the class - @dbus.service.method('org.deluge_torrent.Deluge') - def external_add_torrent(self, torrent_file): - self.interface.external_add_torrent(torrent_file) - - + # This is a fallback class in case dbus is not available + class Manager: + def __init__(self, interface, object_path=None): + self.interface = interface + + def external_add_torrent(self, torrent_file): + print "I can't do anything with this."