예제 #1
0
    def __init__(self, service_name, obj_path):
        self.bus = dbus.SessionBus()
        self._signals = SignalTracker()

        service = self.bus.get_object("org.openobex", obj_path)
        GObject.GObject.__init__(self)
        dbus.proxies.Interface.__init__(self, service, service_name)
예제 #2
0
파일: NetUsage.py 프로젝트: vis-ram/blueman
    def on_load(self, applet):
        GObject.GObject.__init__(self)
        self.monitors = []
        self.devices = weakref.WeakValueDictionary()
        self.signals = SignalTracker()

        bus = self.bus = dbus.SystemBus()
        self.signals.Handle('bluez',
                            Network(),
                            self.on_network_property_changed,
                            'PropertyChanged',
                            path_keyword="path")

        item = create_menuitem(_("Network _Usage"),
                               get_icon("network-wireless", 16))
        item.props.tooltip_text = _("Shows network traffic usage")
        self.signals.Handle(item, "activate", self.activate_ui)
        self.Applet.Plugins.Menu.Register(self, item, 84, True)

        self.signals.Handle("dbus",
                            bus,
                            self.on_nm_ppp_stats,
                            "PppStats",
                            "org.freedesktop.NetworkManager.Device.Serial",
                            path_keyword="path")
        self.nm_paths = {}
예제 #3
0
class OdsBase(dbus.proxies.Interface, GObject.GObject):
    # def OdsMethod(fn):
    #		def new(self, *args, **kwargs):

    #			fn(self, *args, **kwargs)
    #			getattr(super(OdsBase,self), fn.__name__)(*args, **kwargs)
    #		return new

    def __init__(self, service_name, obj_path):
        self.bus = dbus.SessionBus()
        self._signals = SignalTracker()

        service = self.bus.get_object("org.openobex", obj_path)
        GObject.GObject.__init__(self)
        dbus.proxies.Interface.__init__(self, service, service_name)

    def DisconnectAll(self):
        self._signals.DisconnectAll()

    def Handle(self, signame, handler):
        self._signals.Handle("dbus", self.bus, handler, signame,
                             self.dbus_interface, None, self.object_path)

    def GHandle(self, *args):
        self._signals.Handle("gobject", self, *args)
예제 #4
0
    def on_load(self, applet):
        self.num_connections = 0
        self.active = False
        self.initialized = False

        self.signals = SignalTracker()
        self.signals.Handle('bluez', bluez.Device(), self.on_device_property_changed, 'PropertyChanged')
예제 #5
0
    def on_load(self, applet):
        self.bus = dbus.SystemBus()
        self.nma = None
        self.nm = None
        self.nm_signals = SignalTracker()
        self.nma_signals = SignalTracker()

        self.watches = [
            self.bus.watch_name_owner("org.freedesktop.NetworkManager",
                                      self.on_nm_owner_changed)
        ]

        self.legacy = self.bus.name_has_owner(
            'org.freedesktop.NetworkManagerUserSettings')

        if self.legacy:
            self.watches.append(
                self.bus.watch_name_owner(
                    "org.freedesktop.NetworkManagerUserSettings",
                    self.on_nma_owner_changed))
            self.settings_bus = 'org.freedesktop.NetworkManagerUserSettings'
            self.settings_interface = 'org.freedesktop.NetworkManagerSettings'
            self.connection_settings_interface = 'org.freedesktop.NetworkManagerSettings.Connection'
            self.settings_path = "/org/freedesktop/NetworkManagerSettings"
            NewConnectionBuilder.DEVICE_STATE_DISCONNECTED = 3
            NewConnectionBuilder.DEVICE_STATE_ACTIVATED = 8
            NewConnectionBuilder.DEVICE_STATE_FAILED = 9
        else:
            self.settings_bus = 'org.freedesktop.NetworkManager'
            self.settings_interface = 'org.freedesktop.NetworkManager.Settings'
            self.connection_settings_interface = 'org.freedesktop.NetworkManager.Settings.Connection'
            self.settings_path = "/org/freedesktop/NetworkManager/Settings"
예제 #6
0
    def on_load(self, applet):
        AppletPlugin.add_method(self.on_power_state_query)
        AppletPlugin.add_method(self.on_power_state_change_requested)
        AppletPlugin.add_method(self.on_power_state_changed)

        self.Applet = applet

        self.item = create_menuitem("Should be overwritten", get_icon("blueman-disabled", 16))
        self.item.get_child().get_children()[1].set_markup_with_mnemonic(_("<b>Bluetooth _Off</b>"))

        self.item.props.tooltip_text = _("Turn off all adapters")

        self.signals = SignalTracker()
        self.signals.Handle('bluez', Bluez.Adapter(), self.adapter_property_changed, "PropertyChanged",
                            path_keyword="path")

        self.signals.Handle(self.item, "activate", lambda x: self.on_bluetooth_toggled())

        self.Applet.Plugins.Menu.Register(self, self.item, 0)

        self.adapter_state = True
        self.current_state = True

        self.request_in_progress = False

        self.STATE_ON = 2
        self.STATE_OFF = 1
        self.STATE_OFF_FORCED = 0
예제 #7
0
    def __init__(self, parent, params, ok_cb, err_cb):
        self.parent = parent
        self.params = params
        self.ok_cb = ok_cb
        self.err_cb = err_cb

        self.signals = SignalTracker()

        self.device = None
        self.connection = None

        self.signals.Handle("dbus", parent.bus, self.on_nm_device_added,
                            "DeviceAdded", "org.freedesktop.NetworkManager")
        self.signals.Handle("dbus", parent.bus, self.on_nma_new_connection,
                            "NewConnection",
                            "org.freedesktop.NetworkManagerSettings")

        self.device = self.parent.find_device(params["bluetooth"]["bdaddr"])

        self.connection = self.parent.find_connection(
            params["bluetooth"]["bdaddr"], "panu")
        if not self.connection:
            parent.add_connection(params)
            GObject.timeout_add(1000, self.signal_wait_timeout)
        else:
            self.init_connection()
예제 #8
0
    def on_load(self, applet):
        self.Signals = SignalTracker()

        self.Signals.Handle('bluez',
                            Network(),
                            self.on_network_prop_changed,
                            'PropertyChanged',
                            path_keyword='path')
예제 #9
0
    def __init__(self):
        SignalTracker.__init__(self)
        self.bus = dbus.SessionBus()

        service = self.bus.get_object("org.blueman.Applet",
                                      "/",
                                      follow_name_owner_changes=True)
        dbus.proxies.Interface.__init__(self, service, "org.blueman.Applet")
예제 #10
0
    def on_load(self, applet):
        self.num_connections = 0
        self.active = False
        self.initialized = False

        self.signals = SignalTracker()
        self.signals.Handle("dbus", dbus.SystemBus(),
                            self.on_device_property_changed, "PropertyChanged",
                            "org.bluez.Device")
예제 #11
0
    def on_load(self, applet):
        self.Applet = applet
        self.Signals = SignalTracker()

        self.Config = Config("org.blueman.network")
        self.Signals.Handle("gobject", self.Config, "changed",
                            self.on_config_changed)

        self.load_nap_settings()
예제 #12
0
    def on_load(self, applet):
        self.signals = SignalTracker()
        self.signals.Handle('bluez',
                            Bluez.Device(),
                            self.on_device_property_changed,
                            'PropertyChanged',
                            path_keyword="path")

        self.scripts = {}
예제 #13
0
    def on_load(self, applet):
        self.signals = SignalTracker()
        self.signals.Handle("dbus",
                            dbus.SystemBus(),
                            self.on_device_property_changed,
                            "PropertyChanged",
                            "org.bluez.Device",
                            path_keyword="path")

        self.scripts = {}
예제 #14
0
class GameControllerWakelock(AppletPlugin):
    __description__ = _("Temporarily suspends the screensaver when a bluetooth game controller is connected.")
    __author__ = "bwRavencl"
    __icon__ = "input-gaming"

    def on_load(self, applet):
        self.wake_lock = 0
        self.root_window_id = "0x%x" % Gdk.Screen.get_default().get_root_window().get_xid()

        self.signals = SignalTracker()
        self.signals.Handle("bluez", bluez.Device(), self.on_device_property_changed, "PropertyChanged", path_keyword="path")

    def on_unload(self):
        if self.wake_lock:
            self.wake_lock = 1
            self.suspend_screensaver("resume")
        self.signals.DisconnectAll()

    def on_device_property_changed(self, key, value, path):
        if key == "Connected":
            klass = Device(path).get_properties()["Class"] & 0x1fff

            if klass == 0x504 or klass == 0x508:
                if value:
                    self.xdg_screensaver("suspend")
                else:
                    self.xdg_screensaver("resume")

    def xdg_screensaver(self, action):
        if action == "resume":
            if self.wake_lock == 0:
                pass
            elif self.wake_lock > 1:
                self.wake_lock -= 1
                pass
        elif action == "suspend" and self.wake_lock >= 1:
             self.wake_lock += 1
             pass

        command = ["xdg-screensaver", action, self.root_window_id]

        try:
            process = subprocess.Popen(command, stderr=subprocess.PIPE)
            _, stderr = process.communicate()

            if process.returncode != 0:
                dprint(" ".join(command) + " failed with: " + stderr)
                pass

            if action == "suspend":
                self.wake_lock += 1
            elif action == "resume":
                self.wake_lock = 0
        except:
            dprint(traceback.format_exc())
예제 #15
0
    def on_load(self, applet):
        self.wake_lock = 0
        self.root_window_id = "0x%x" % Gdk.Screen.get_default(
        ).get_root_window().get_xid()

        self.signals = SignalTracker()
        self.signals.Handle("bluez",
                            bluez.Device(),
                            self.on_device_property_changed,
                            "PropertyChanged",
                            path_keyword="path")
예제 #16
0
	def on_load(self, applet):
		self.bus = dbus.SystemBus()
		self.nma = None
		self.nm = None
		self.nm_signals = SignalTracker()
		self.nma_signals = SignalTracker()
		
		self.watch1 = self.bus.watch_name_owner("org.freedesktop.NetworkManagerUserSettings", self.on_nma_owner_changed)
		self.watch2 = self.bus.watch_name_owner("org.freedesktop.NetworkManager", self.on_nm_owner_changed)
		
		self.client = gconf.client_get_default ()
예제 #17
0
    def __init__(self, blueman, cancellable=True, text=_("Connecting")):
        def on_enter(evbox, event):
            c = Gdk.Cursor.new(Gdk.CursorType.HAND2)
            self.window.get_window().set_cursor(c)

        def on_leave(evbox, event):
            self.window.get_window().set_cursor(None)

        def on_clicked(evbox, event):
            self.eventbox.props.sensitive = False
            self.emit("cancelled")

        GObject.GObject.__init__(self)
        self.Blueman = blueman

        self.cancellable = cancellable

        self.hbox = hbox = blueman.Builder.get_object("statusbar1")

        self.progressbar = Gtk.ProgressBar()

        self.signals = SignalTracker()

        self.button = Gtk.Image.new_from_pixbuf(get_icon("process-stop", 16))

        self.eventbox = eventbox = Gtk.EventBox()
        eventbox.add(self.button)
        eventbox.props.tooltip_text = _("Cancel Operation")
        self.signals.Handle(eventbox, "enter-notify-event", on_enter)
        self.signals.Handle(eventbox, "leave-notify-event", on_leave)
        self.signals.Handle(eventbox, "button-press-event", on_clicked)

        self.progressbar.set_size_request(100, 15)
        self.progressbar.set_ellipsize(Pango.EllipsizeMode.END)
        self.progressbar.set_text(text)
        self.progressbar.set_pulse_step(0.05)

        self.window = blueman.Builder.get_object("window")

        hbox.pack_end(eventbox, True, False, 0)
        hbox.pack_end(self.progressbar, False, False, 0)

        if ManagerProgressbar.__instances__ != []:
            dprint("hiding", ManagerProgressbar.__instances__[-1])
            ManagerProgressbar.__instances__[-1].hide()

        self.show()
        if not self.cancellable:
            self.eventbox.props.sensitive = False

        self.gsource = None
        self.finalized = False

        ManagerProgressbar.__instances__.append(self)
예제 #18
0
    def __init__(self, plugin):
        Monitor.__id__ += 1
        self.inst_id = "/inst%d" % Monitor.__id__

        self.plugin = plugin
        self.sigs = SignalTracker()
        self.bus = dbus.SessionBus()

        dbus.service.Object.__init__(self)
        self.add_to_connection(self.bus, self.inst_id)

        self.sigs.Handle("dbus", self.bus, self.on_value_changed, "ValueChanged", "org.blueman.Config")
예제 #19
0
    def __init__(self, device, nm_dev_path):
        MonitorBase.__init__(self, device, "NM")
        dprint("created nm monitor for path", nm_dev_path)
        self.signals = SignalTracker()
        self.signals.Handle("dbus",
                            dbus.SystemBus(),
                            self.on_ppp_stats,
                            "PppStats",
                            "org.freedesktop.NetworkManager.Device.Serial",
                            path=nm_dev_path)

        self.signals.Handle(device, "property-changed", self.on_device_property_changed)
예제 #20
0
    def on_load(self, applet):
        self.Signals = SignalTracker()

        self.add_dbus_method(self.DhcpClient, in_signature="s")

        self.Signals.Handle('bluez',
                            Network(),
                            self.on_network_prop_changed,
                            'PropertyChanged',
                            path_keyword="path")

        self.quering = []
예제 #21
0
    def on_load(self, applet):
        self.Signals = SignalTracker()

        self.add_dbus_method(self.DhcpClient, in_signature="s")

        self.Signals.Handle("dbus",
                            dbus.SystemBus(),
                            self.on_network_prop_changed,
                            "PropertyChanged",
                            "org.bluez.Network",
                            path_keyword="path")

        self.quering = []
예제 #22
0
class Monitor(dbus.service.Object):
    __id__ = 0

    def __init__(self, plugin):
        Monitor.__id__ += 1
        self.inst_id = "/inst%d" % Monitor.__id__

        self.plugin = plugin
        self.sigs = SignalTracker()
        self.bus = dbus.SessionBus()

        dbus.service.Object.__init__(self)
        self.add_to_connection(self.bus, self.inst_id)

        self.sigs.Handle("dbus", self.bus, self.on_value_changed,
                         "ValueChanged", "org.blueman.Config")

    def on_value_changed(self, section, data):
        s = "".join(chr(b) for b in data)

        (key, value) = pickle.loads(s)

        key = str(key)

        if self.plugin().section == section:
            self.plugin().set(key, value, True)
        else:
            if not section in File.__db__:
                File.__db__[section] = {}

            File.__db__[section][key] = value

    @dbus.service.signal(dbus_interface="org.blueman.Config", signature='say')
    def ValueChanged(self, section, data):
        pass
예제 #23
0
    def on_load(self, applet):
        self.Signals = SignalTracker()

        self.item = create_menuitem(_("_Make Discoverable"),
                                    get_icon("gtk-find", 16))
        applet.Plugins.Menu.Register(self, self.item, 20, False)

        self.Applet = applet
        self.adapter = None
        self.time_left = -1

        self.Signals.Handle(self.item, "activate", self.on_set_discoverable)
        self.item.props.tooltip_text = _(
            "Make the default adapter temporarily visible")

        self.timeout = None
예제 #24
0
    def on_load(self, applet):
        self.signals = SignalTracker()
        if not self.get_option("checked"):
            self.set_option("checked", True)
            if not have("pactl"):
                applet.Plugins.SetConfig("PulseAudio", False)
                return

        self.bus = dbus.SystemBus()

        self.connected_sources = []
        self.connected_sinks = []
        self.connected_hs = []

        self.loaded_modules = {}

        self.pulse_utils = PulseAudioUtils()
        version = self.pulse_utils.GetVersion()
        dprint("PulseAudio version:", version)

        if version[0] == 0:
            if tuple(version) < (0, 9, 15):
                raise Exception(
                    "PulseAudio too old, required 0.9.15 or higher")

        self.signals.Handle("dbus",
                            self.bus,
                            self.on_sink_prop_change,
                            "PropertyChanged",
                            "org.bluez.AudioSink",
                            path_keyword="device")

        self.signals.Handle("dbus",
                            self.bus,
                            self.on_source_prop_change,
                            "PropertyChanged",
                            "org.bluez.AudioSource",
                            path_keyword="device")

        self.signals.Handle("dbus",
                            self.bus,
                            self.on_hsp_prop_change,
                            "PropertyChanged",
                            "org.bluez.Headset",
                            path_keyword="device")

        self.signals.Handle(self.pulse_utils, "event", self.on_pulse_event)
예제 #25
0
    def on_load(self, applet):
        AppletPlugin.add_method(self.on_power_state_query)
        AppletPlugin.add_method(self.on_power_state_change_requested)
        AppletPlugin.add_method(self.on_power_state_changed)

        self.add_dbus_method(self.SetBluetoothStatus,
                             in_signature="b",
                             out_signature="")

        self.add_dbus_method(self.GetBluetoothStatus,
                             in_signature="",
                             out_signature="b")

        self.BluetoothStatusChanged = self.add_dbus_signal(
            "BluetoothStatusChanged", signature="b")

        self.Applet = applet

        self.item = create_menuitem(_("<b>Bluetooth Off</b>"),
                                    get_icon("gtk-stop", 16))
        self.item.get_child().set_markup(_("<b>Turn Bluetooth Off</b>"))

        self.item.props.tooltip_text = _("Turn off all adapters")

        self.signals = SignalTracker()
        self.signals.Handle("dbus",
                            dbus.SystemBus(),
                            self.adapter_property_changed,
                            "PropertyChanged",
                            "org.bluez.Adapter",
                            "org.bluez",
                            path_keyword="path")

        self.signals.Handle(self.item, "activate",
                            lambda x: self.on_bluetooth_toggled())

        self.Applet.Plugins.Menu.Register(self, self.item, 0)

        self.adapter_state = True
        self.current_state = True
        self.power_changeable = True

        self.request_in_progress = False

        self.STATE_ON = 2
        self.STATE_OFF = 1
        self.STATE_OFF_FORCED = 0
예제 #26
0
    def __init__(self, blueman):
        GObject.GObject.__init__(self)
        self.Blueman = blueman
        self.SelectedDevice = None

        self.is_popup = False

        #object, args,
        self.Signals = SignalTracker()
        self.MainSignals = SignalTracker()

        self.MainSignals.Handle("gobject", self.Blueman.List, "device-property-changed",
                                self.on_device_property_changed)

        ManagerDeviceMenu.__instances__.append(self)

        self.Generate()
예제 #27
0
 def Handle(self, signame, handler):
     SignalTracker.Handle(self,
                          "dbus",
                          self.bus,
                          handler,
                          signame,
                          self.dbus_interface,
                          path=self.object_path)
예제 #28
0
    def __init__(self, parent, service, ok_cb, err_cb):
        self.parent = parent
        self.ok_cb = ok_cb
        self.err_cb = err_cb

        self.signals = SignalTracker()

        self.device = None
        self.connection = None

        self.signals.Handle("dbus", parent.bus, self.on_nm_device_added,
                            "DeviceAdded", "org.freedesktop.NetworkManager")
        self.signals.Handle("dbus", parent.bus, self.on_nma_new_connection,
                            "NewConnection", self.parent.settings_interface)

        self.device = self.parent.find_device(service.device.Address)

        self.connection = self.parent.find_connection(service.device.Address,
                                                      "panu")
        if not self.connection:
            # This is for compatibility with network-manager < 0.9.8.6. Newer versions that support BlueZ 5 add a
            # default connection automatically
            addr_bytes = bytearray.fromhex(
                str.replace(str(service.device.Address), ':', ' '))
            parent.nma.AddConnection({
                'connection': {
                    'id': '%s on %s' % (service.name, service.device.Alias),
                    'uuid': str(uuid1()),
                    'autoconnect': False,
                    'type': 'bluetooth'
                },
                'bluetooth': {
                    'bdaddr': dbus.ByteArray(addr_bytes),
                    'type': 'panu'
                },
                'ipv4': {
                    'method': 'auto'
                },
                'ipv6': {
                    'method': 'auto'
                }
            })
            GObject.timeout_add(1000, self.signal_wait_timeout)
        else:
            self.init_connection()
예제 #29
0
파일: Device.py 프로젝트: posophe/blueman
    def __init__(self, instance):
        GObject.GObject.__init__(self)

        self.Properties = {}
        self.Fake = True
        self.Temp = False

        if isinstance(instance, str) or isinstance(instance, unicode):
            self.Device = BluezDevice(instance)
        else:
            self.Device = instance

        #set fallback icon, fixes lp:#327718
        self.Device.Icon = "blueman"
        self.Device.Class = "unknown"

        self.__services = {}

        self.Valid = True

        self.Signals = SignalTracker()

        dprint("caching initial properties")
        self.Properties = self.Device.get_properties()

        if not "Fake" in self.Properties:
            self.Fake = False

        w = weakref.ref(self)
        if not self.Fake:
            self._obj_path = self.Device.get_object_path()
            self.Signals.Handle(
                "bluez", self.Device,
                lambda key, value: w() and w().property_changed(key, value),
                "PropertyChanged")
            object_path = self.Device.get_object_path()
            adapter = Adapter(
                object_path.replace("/" + os.path.basename(object_path), ""))
            self.Signals.Handle(
                "bluez", adapter,
                lambda path: w() and w().on_device_removed(path),
                "DeviceRemoved")
예제 #30
0
    def __init__(self, parent, device, uuid, reply, err):
        self.parent = parent
        self.device = device
        self.uuid = uuid
        self.reply = reply
        self.err = err
        self.rfcomm_dev = None
        self.timeout = None

        self.signals = SignalTracker()
        self.signals.Handle("dbus", self.parent.bus, self.on_mm_device_added,
                            "DeviceAdded", "org.freedesktop.ModemManager")

        #for some reason these handlers take a reference and don't give it back
        #so i have to workaround :(
        w = weakref.ref(self)
        device.Services["serial"].Connect(
            uuid,
            reply_handler=lambda *args: w() and w().on_connect_reply(*args),
            error_handler=lambda *args: w() and w().on_connect_error(*args))
예제 #31
0
	def __init__(self):
		SignalTracker.__init__(self)
		self.bus = dbus.SessionBus()
		
		service = self.bus.get_object("org.blueman.Applet", "/", follow_name_owner_changes=True)
		dbus.proxies.Interface.__init__(self, service, "org.blueman.Applet")