gajim-plural/src/dbus_support.py

99 lines
2.7 KiB
Python
Raw Normal View History

## dbus_support.py
##
## Copyright (C) 2005 Yann Le Boulanger <asterix@lagaule.org>
## Copyright (C) 2005 Nikos Kouremenos <kourem@gmail.com>
## Copyright (C) 2005 Dimitur Kirov <dkirov@gmail.com>
## Copyright (C) 2005 Andrew Sayman <lorien420@myrealbox.com>
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published
## by the Free Software Foundation; version 2 only.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
##
import os
import sys
2005-12-26 15:59:36 +01:00
from common import gajim
from common import exceptions
try:
import dbus
import dbus.service
# cause dbus 0.35+ doesn't return signal replies without it
import dbus.glib
2005-12-12 15:05:01 +01:00
supported = True
except ImportError:
supported = False
2005-12-12 15:05:01 +01:00
if not os.name == 'nt': # only say that to non Windows users
print _('D-Bus python bindings are missing in this computer')
print _('D-Bus capabilities of Gajim cannot be used')
class SessionBus:
'''A Singleton for the DBus SessionBus'''
def __init__(self):
self.session_bus = None
def SessionBus(self):
if not supported:
raise exceptions.DbusNotSupported
if not self.present():
raise exceptions.SessionBusNotPresent
return self.session_bus
def bus(self):
return self.SessionBus()
def present(self):
if not supported:
return False
if self.session_bus is None:
try:
self.session_bus = dbus.SessionBus()
2005-12-11 17:58:20 +01:00
except dbus.dbus_bindings.DBusException:
self.session_bus = None
return False
if self.session_bus is None:
return False
return True
session_bus = SessionBus()
def get_interface(interface, path):
'''Returns an interface on the current SessionBus. If the interface isn't
running, it tries to start it first.'''
if not supported:
return None
if session_bus.present():
bus = session_bus.SessionBus()
else:
return None
try:
obj = bus.get_object('org.freedesktop.DBus', '/org/freedesktop/DBus')
dbus_iface = dbus.Interface(obj, 'org.freedesktop.DBus')
running_services = dbus_iface.ListNames()
started = True
if interface not in running_services:
# try to start the service
if dbus_iface.StartServiceByName(interface, dbus.UInt32(0)) == 1:
started = True
else:
started = False
if not started:
return None
obj = bus.get_object(interface, path)
return dbus.Interface(obj, interface)
except Exception, e:
2005-12-26 15:00:06 +01:00
gajim.log.debug(str(e))
return None
def get_notifications_interface():
'''Returns the notifications interface.'''
return get_interface('org.freedesktop.Notifications','/org/freedesktop/Notifications')