def __init__(self):
        self.paths = path()
        bus_name = dbus.service.BusName("custom.LBRC", bus=dbus.SessionBus())
        dbus.service.Object.__init__(self, bus_name, "/custom/LBRC")
        self.btserver = BTServer()

        self.config = config()

        self.event_listener = []

        for i in (UinputDispatcher, CommandExecutor, DBUSCaller, ProfileSwitcher, MPlayer):
            self._register_listener(i)

        # load of config data
        self.cur_profile = None
        self.reload_config()

        self.btserver.connect("keycode", self.handler)
        self.btserver.connect(
            "connect", lambda btserver, btadress, port: self.connect_cb(bluetooth.lookup_name(btadress), btadress, port)
        )
        self.btserver.connect(
            "disconnect",
            lambda btserver, btadress, port: self.disconnect_cb(bluetooth.lookup_name(btadress), btadress, port),
        )
        # load the default profile
        self._load_default_profile()
    def __init__(self, **kwds):
        self.logger = logging.getLogger('LBRC')
        self.shutdown_commands = []
        bus_name = dbus.service.BusName(DBUSNAME, bus=dbus.SessionBus())
        dbus.service.Object.__init__(self, bus_name, "/core")
        
        self.loghandler = DBUSLogHandler(bus_name, "/log")
        logging.getLogger().addHandler(self.loghandler)
        if 'debug' in kwds:
            self.loghandler.setLevel(kwds['debug'])
            
        self.paths = path()
        self.btserver = BTServer()
        self.config = config()
        
        self.profile_control = ProfileControl(self.config)
        self.dbus_profile_control = DBUSProfileControl(bus_name,
                                                       "/profile",
                                                       self.profile_control)
        self.connection_control = ConnectionControl(bus_name, 
                                                    "/connection", 
                                                    self.btserver)
        
        self.event_listener = []
        
        for i in (UinputDispatcher, CommandExecutor, DBUSCaller, 
                  ProfileSwitcher, MPlayer, PresentationCompanion,
                  VolumeControl, XInput):
            self._register_listener(i)

        self.logger.debug("Register done")
        self.profile_control.connect("profile_changed", self._profile_change_cb)
        self.logger.debug("Initial Profile set")
        self.btserver.connect('keycode', self._dispatch)
        self.logger.debug("Init dispatcher")

        self.btserver.connect("connect", self._connection_established_cb)
        self.btserver.connect("disconnect", self._connection_closed_cb)

        #load of config data 
        self.reload_config()
        self.logger.debug("Reload config")
class LBRCdbus(dbus.service.Object):
    def __init__(self):
        self.paths = path()
        bus_name = dbus.service.BusName("custom.LBRC", bus=dbus.SessionBus())
        dbus.service.Object.__init__(self, bus_name, "/custom/LBRC")
        self.btserver = BTServer()

        self.config = config()

        self.event_listener = []

        for i in (UinputDispatcher, CommandExecutor, DBUSCaller, ProfileSwitcher, MPlayer):
            self._register_listener(i)

        # load of config data
        self.cur_profile = None
        self.reload_config()

        self.btserver.connect("keycode", self.handler)
        self.btserver.connect(
            "connect", lambda btserver, btadress, port: self.connect_cb(bluetooth.lookup_name(btadress), btadress, port)
        )
        self.btserver.connect(
            "disconnect",
            lambda btserver, btadress, port: self.disconnect_cb(bluetooth.lookup_name(btadress), btadress, port),
        )
        # load the default profile
        self._load_default_profile()

    def _register_listener(self, constructor):
        # TODO: at some point we have to do conflict resolving (when we define what is a conflict ...)
        try:
            listener = constructor(self.config)
            try:
                listener.set_bluetooth_connector(self.btserver)
            except AttributeError:
                pass
            try:
                listener.set_core(self)
            except AttributeError:
                pass
            self.event_listener.append(listener)
        except Exception, e:
            logging.warn("Failed to initalize " + str(constructor) + "\n" + str(e))
            return
class Core(dbus.service.Object):
    def __init__(self, **kwds):
        self.logger = logging.getLogger('LBRC')
        self.shutdown_commands = []
        bus_name = dbus.service.BusName(DBUSNAME, bus=dbus.SessionBus())
        dbus.service.Object.__init__(self, bus_name, "/core")
        
        self.loghandler = DBUSLogHandler(bus_name, "/log")
        logging.getLogger().addHandler(self.loghandler)
        if 'debug' in kwds:
            self.loghandler.setLevel(kwds['debug'])
            
        self.paths = path()
        self.btserver = BTServer()
        self.config = config()
        
        self.profile_control = ProfileControl(self.config)
        self.dbus_profile_control = DBUSProfileControl(bus_name,
                                                       "/profile",
                                                       self.profile_control)
        self.connection_control = ConnectionControl(bus_name, 
                                                    "/connection", 
                                                    self.btserver)
        
        self.event_listener = []
        
        for i in (UinputDispatcher, CommandExecutor, DBUSCaller, 
                  ProfileSwitcher, MPlayer, PresentationCompanion,
                  VolumeControl, XInput):
            self._register_listener(i)

        self.logger.debug("Register done")
        self.profile_control.connect("profile_changed", self._profile_change_cb)
        self.logger.debug("Initial Profile set")
        self.btserver.connect('keycode', self._dispatch)
        self.logger.debug("Init dispatcher")

        self.btserver.connect("connect", self._connection_established_cb)
        self.btserver.connect("disconnect", self._connection_closed_cb)

        #load of config data 
        self.reload_config()
        self.logger.debug("Reload config")

    def _connection_closed_cb(self, server, bluetoothaddress, port):
        self.logger.debug("_connection_closed_cb called")
        for listener in self.event_listener:
            if callable(listener.__getattribute__("connection_closed")):
                listener.connection_closed()
        return False
            
    def _connection_established_cb(self, server, bluetoothaddress, port):
        self.logger.debug("_connection_established_cb called")
        for listener in self.event_listener:
            if callable(listener.__getattribute__("connection_established")):
                listener.connection_established()
        return False

    def _profile_change_cb(self, profile_control, config_file, profile):
        self.logger.debug("Recieved signal to switch to %s profile %s"%(config_file, profile))
        for listener in self.event_listener:
            listener.set_profile(config_file, profile)

    def _register_listener(self, constructor):
        try: 
            listener = constructor(self.config)
            if callable(listener.__getattribute__('set_bluetooth_connector')):
                listener.set_bluetooth_connector(self.btserver)
            if callable(listener.__getattribute__('set_core')):
                listener.set_core(self)
            self.event_listener.append(listener)
            self.logger.debug("Initialized Event Listener: %s" 
                                                     % str(constructor))
        except Exception, exception: 
            self.logger.warn("Failed to initalize %s\n%s" %(str(constructor),
                                                            str(exception)))
class Core(dbus.service.Object):
    def __init__(self, **kwds):
        self.shutdown_commands = []
        bus_name = dbus.service.BusName(DBUSNAME, bus=dbus.SessionBus())
        dbus.service.Object.__init__(self, bus_name, "/core")
        
        self.loghandler = DBUSLogHandler(bus_name, "/log")
        logging.getLogger().addHandler(self.loghandler)
        if 'debug' in kwds:
            self.loghandler.setLevel(kwds['debug'])
            
        self.paths = path()
        self.btserver = BTServer()
        self.config = config()
        
        self.profile_control = ProfileControl(self.config)
        self.dbus_profile_control = DBUSProfileControl(bus_name, "/profile", self.profile_control)
        self.connection_control = ConnectionControl(bus_name, "/connection", self.btserver)
        
        self.event_listener = []
        
        for i in (UinputDispatcher, CommandExecutor, DBUSCaller, ProfileSwitcher, 
                  MPlayer, PresentationCompanion, VolumeControl):
            self._register_listener(i)

        logging.debug("Register done")
        self.profile_control.connect("profile_changed", self._profile_change_cb)
        logging.debug("Initial Profile set")
        self.btserver.connect('keycode', self._dispatch)
        logging.debug("Init dispatcher")

        self.btserver.connect("connect", self._connection_established_cb)
        self.btserver.connect("disconnect", self._connection_closed_cb)

        #load of config data 
        self.reload_config()
        logging.debug("Reload config")

    def _connection_closed_cb(self, server, bluetoothaddress, port):
        logging.debug("_connection_closed_cb called")
        for listener in self.event_listener:
            try:
                listener.connection_closed()
            except AttributeError:
                pass
        return False
            
    def _connection_established_cb(self, server, bluetoothaddress, port):
        logging.debug("_connection_established_cb called")
        for listener in self.event_listener:
            try:
                listener.connection_established()
            except AttributeError:
                pass
        return False

    def _profile_change_cb(self, profile_control, config, profile):
        for listener in self.event_listener:
            listener.set_profile(config, profile)

    def _register_listener(self, constructor):
        # TODO: at some point we have to do conflict resolving (when we define what is a conflict ...)
        try: 
            listener = constructor(self.config)
            try: listener.set_bluetooth_connector(self.btserver)
            except AttributeError: pass
            try: listener.set_core(self)
            except AttributeError: pass
            self.event_listener.append(listener)
            logging.debug("Initiablized Event Listener: " + str(constructor))
        except Exception, e: 
            logging.warn("Failed to initalize " + str(constructor) + "\n" + str(e))
            return