~ubuntu-branches/ubuntu/vivid/blueman/vivid-proposed

« back to all changes in this revision

Viewing changes to blueman/bluez/PropertiesBlueZInterface.py

  • Committer: Package Import Robot
  • Author(s): Artur Rona
  • Date: 2014-12-24 18:33:36 UTC
  • mfrom: (2.3.8 sid)
  • Revision ID: package-import@ubuntu.com-20141224183336-cyb82ot0y8tz8flq
Tags: 1.99~alpha1-1ubuntu1
* Merge from Debian unstable.  Remaining changes:
  - debian/patches/01_dont_autostart_lxde.patch:
    + Don't autostart the applet in LXDE.
  - debian/patches/03_filemanager_fix.patch:
    + Add support for more filemanagers.
* debian/patches/02_dont_crash_on_non-bluetooth_card.patch:
  - Dropped, no longer applicable.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
from BlueZInterface import BlueZInterface
 
2
from errors import raise_dbus_error
 
3
import types
 
4
import dbus
 
5
 
 
6
 
 
7
class PropertiesBlueZInterface(BlueZInterface):
 
8
    def __init__(self, interface, obj_path):
 
9
        super(PropertiesBlueZInterface, self).__init__(interface, obj_path)
 
10
 
 
11
        self._handler_wrappers = {}
 
12
 
 
13
        if self.__class__.get_interface_version()[0] >= 5 and obj_path:
 
14
            self.__properties_interface = dbus.Interface(self.get_dbus_proxy(), 'org.freedesktop.DBus.Properties')
 
15
 
 
16
    @raise_dbus_error
 
17
    def set(self, name, value):
 
18
        if type(value) is types.IntType:
 
19
            value = dbus.UInt32(value)
 
20
        if self.__class__.get_interface_version()[0] < 5:
 
21
            self.get_interface().SetProperty(name, value)
 
22
        else:
 
23
            return self.__properties_interface.Set(self.get_interface_name(), name, value)
 
24
 
 
25
    @raise_dbus_error
 
26
    def get_properties(self):
 
27
        if self.__class__.get_interface_version()[0] < 5:
 
28
            return self.get_interface().GetProperties()
 
29
        else:
 
30
            return self.__properties_interface.GetAll(self.get_interface_name())
 
31
 
 
32
    def _handle_signal(self, handler, signal, interface, obj_path, **kwargs):
 
33
        self.get_bus().add_signal_receiver(handler, signal, interface, 'org.bluez', obj_path, **kwargs)
 
34
 
 
35
    def _unhandle_signal(self, handler, signal, interface, obj_path, **kwargs):
 
36
        self.get_bus().remove_signal_receiver(
 
37
            handler, signal, self.get_interface_name(), 'org.bluez',
 
38
            self.get_object_path(), **kwargs
 
39
        )
 
40
 
 
41
    def handle_signal(self, handler, signal, **kwargs):
 
42
        if signal == 'PropertyChanged':
 
43
            if self.__class__.get_interface_version()[0] < 5:
 
44
                self._handle_signal(
 
45
                    handler, 'PropertyChanged', self.get_interface_name(), self.get_object_path(), **kwargs
 
46
                )
 
47
            else:
 
48
                def wrapper(interface_name, changed_properties, invalidated_properties, **kwargs):
 
49
                    if interface_name == self.get_interface_name():
 
50
                        for name, value in changed_properties.items():
 
51
                            handler(name, value, **kwargs)
 
52
 
 
53
                self._handler_wrappers[handler] = wrapper
 
54
 
 
55
                interface = 'org.freedesktop.DBus.Properties'
 
56
 
 
57
                self._handle_signal(wrapper, 'PropertiesChanged', interface, self.get_object_path(), **kwargs)
 
58
        else:
 
59
            raise Exception('Unknown signal: %s' % signal)
 
60
 
 
61
    def unhandle_signal(self, handler, signal, **kwargs):
 
62
        if signal == 'PropertyChanged':
 
63
            if self.__class__.get_interface_version()[0] < 5:
 
64
                self._unhandle_signal(handler, signal, self.get_interface_name(), self.get_object_path(), **kwargs)
 
65
            else:
 
66
                self._unhandle_signal(self._handler_wrappers[handler], 'PropertiesChanged',
 
67
                                      'org.freedesktop.DBus.Properties', self.get_object_path(), **kwargs)
 
68
        else:
 
69
            raise Exception('Unknown signal: %s' % signal)