示例#1
0
def check_bluetooth_status(message, exitfunc, *args, **kwargs):
    try:
        applet = AppletService()
    except:
        print("Blueman applet needs to be running")
        exitfunc()
    if "PowerManager" in applet.QueryPlugins():
        if not applet.GetBluetoothStatus():

            d = Gtk.MessageDialog(None, type=Gtk.MessageType.ERROR)
            d.props.icon_name = "blueman"
            d.props.text = _("Bluetooth Turned Off")
            d.props.secondary_text = message

            d.add_button("Exit", Gtk.ResponseType.NO)
            d.add_button(_("Enable Bluetooth"), Gtk.ResponseType.YES)
            resp = d.run()
            d.destroy()
            if resp != Gtk.ResponseType.YES:
                exitfunc()
            else:
                applet.SetBluetoothStatus('(b)', True, **kwargs)
                if not applet.GetBluetoothStatus():
                    print('Failed to enable bluetooth')
                    exitfunc()
示例#2
0
    def on_load(self, container):

        self.Builder = Gtk.Builder()
        self.Builder.set_translation_domain("blueman")
        self.Builder.add_from_file(UI_PATH + "/services-transfer.ui")
        self.widget = self.Builder.get_object("transfer")

        self.ignored_keys = []

        container.pack_start(self.widget, True, True, 0)
        a = AppletService()
        if "TransferService" in a.QueryPlugins():
            self._setup_transfer()
        else:
            self.widget.props.sensitive = False
            self.widget.props.tooltip_text = _("Applet's transfer service plugin is disabled")

        return True
示例#3
0
def check_bluetooth_status(message, exitfunc, *args, **kwargs):
    try:
        applet = AppletService()
    except:
        print "Blueman applet needs to be running"
        exitfunc()
    if "PowerManager" in applet.QueryPlugins():
        if not applet.GetBluetoothStatus():

            d = gtk.MessageDialog(None, type=gtk.MESSAGE_ERROR)
            d.props.icon_name = "blueman"
            d.props.text = _("Bluetooth Turned Off")
            d.props.secondary_text = message

            d.add_button(gtk.STOCK_QUIT, gtk.RESPONSE_NO)
            d.add_button(_("Enable Bluetooth"), gtk.RESPONSE_YES)
            resp = d.run()
            d.destroy()
            if resp != gtk.RESPONSE_YES:
                exitfunc()
            else:
                applet.SetBluetoothStatus(True, *args, **kwargs)
示例#4
0
文件: Services.py 项目: latot/blueman
    def on_request_menu_items(self, manager_menu, device):
        items = []
        appl = AppletService()

        self.has_dun = False
        serial_items = []

        def add_menu_item(manager_menu, service):
            if service.connected:
                item = create_menuitem(service.name, get_x_icon(service.icon, 16))
                item.connect("activate", manager_menu.on_disconnect, service)
                items.append((item, service.priority + 100))
            else:
                item = create_menuitem(service.name, get_icon(service.icon, 16))
                if service.description:
                    item.props.tooltip_text = service.description
                item.connect("activate", manager_menu.on_connect, service)
                if service.group == 'serial':
                    serial_items.append(item)
                    if isinstance(service, DialupNetwork):
                        self.has_dun = True
                else:
                    items.append((item, service.priority))
            item.show()

        for service in device.get_services():
            try:
                add_menu_item(manager_menu, service)
            except Exception as e:
                dprint("Failed to load service %s" % service.name)
                traceback.print_exc()
                continue

            if service.group == 'serial':
                for dev in rfcomm_list():
                    if dev["dst"] == device.Address and dev["state"] == "connected":
                        devname = _("Serial Port %s") % "rfcomm%d" % dev["id"]

                        item = create_menuitem(devname, get_x_icon("modem", 16))
                        item.connect("activate", manager_menu.on_disconnect, service, dev["id"])
                        items.append((item, 120))
                        item.show()

            if service.group == 'network' and service.connected:
                if "DhcpClient" in appl.QueryPlugins():
                    def renew(x):
                        appl.DhcpClient(Network(device.get_object_path()).get_properties()["Interface"])

                    item = create_menuitem(_("Renew IP Address"), get_icon("view-refresh", 16))
                    item.connect("activate", renew)
                    item.show()
                    items.append((item, 201))

        if self.has_dun and "PPPSupport" in appl.QueryPlugins():
            def open_settings(i, device):
                from blueman.gui.GsmSettings import GsmSettings

                d = GsmSettings(device.Address)
                d.run()
                d.destroy()

            item = Gtk.SeparatorMenuItem()
            item.show()
            serial_items.append(item)

            item = create_menuitem(_("Dialup Settings"), get_icon("gtk-preferences", 16))
            serial_items.append(item)
            item.show()
            item.connect("activate", open_settings, device)

        if len(serial_items) > 1:
            sub = Gtk.Menu()
            sub.show()

            item = create_menuitem(_("Serial Ports"), get_icon("modem", 16))
            item.set_submenu(sub)
            item.show()
            items.append((item, 90))

            for item in serial_items:
                sub.append(item)
        else:
            for item in serial_items:
                items.append((item, 80))

        return items
示例#5
0
    def setup_network(self):
        self.Config = Config("org.blueman.network")

        nap_enable = self.Builder.get_object("nap-enable")
        r_dnsmasq = self.Builder.get_object("r_dnsmasq")
        r_dhcpd = self.Builder.get_object("r_dhcpd")
        r_udhcpd = self.Builder.get_object("r_udhcpd")
        net_ip = self.Builder.get_object("net_ip")
        rb_nm = self.Builder.get_object("rb_nm")
        rb_blueman = self.Builder.get_object("rb_blueman")
        rb_dun_nm = self.Builder.get_object("rb_dun_nm")
        rb_dun_blueman = self.Builder.get_object("rb_dun_blueman")

        nap_frame = self.Builder.get_object("nap_frame")
        warning = self.Builder.get_object("warning")

        if not self.Config["nap-enable"]:
            nap_frame.props.sensitive = False

        nc = NetConf.get_default()
        if nc.ip4_address is not None:
            net_ip.props.text = inet_ntoa(nc.ip4_address)
            nap_enable.props.active = True
        else:
            net_ip.props.text = "10.%d.%d.1" % (randint(0, 255), randint(
                0, 255))

        if nc.get_dhcp_handler() is None:
            nap_frame.props.sensitive = False
            nap_enable.props.active = False
            r_dnsmasq.props.active = True
            self.Config["nap-enable"] = False

        have_dhcpd = have("dhcpd3") or have("dhcpd")
        have_dnsmasq = have("dnsmasq")
        have_udhcpd = have("udhcpd")

        if nc.get_dhcp_handler() == DnsMasqHandler and have_dnsmasq:
            r_dnsmasq.props.active = True
        elif nc.get_dhcp_handler() == DhcpdHandler and have_dhcpd:
            r_dhcpd.props.active = True
        elif nc.get_dhcp_handler() == UdhcpdHandler and have_udhcpd:
            r_udhcpd.props.active = True
        else:
            r_dnsmasq.props.active = True

        if not have_dnsmasq and not have_dhcpd and not have_udhcpd:
            nap_frame.props.sensitive = False
            warning.props.visible = True
            warning.props.sensitive = True
            nap_enable.props.sensitive = False
            self.Config["nap-enable"] = False

        if not have_dnsmasq:
            r_dnsmasq.props.sensitive = False
            r_dnsmasq.props.active = False

        if not have_dhcpd:
            r_dhcpd.props.sensitive = False
            r_dhcpd.props.active = False

        if not have_udhcpd:
            r_udhcpd.props.sensitive = False
            r_udhcpd.props.active = False

        r_dnsmasq.connect("toggled",
                          lambda x: self.option_changed_notify("dnsmasq"))
        r_dhcpd.connect("toggled",
                        lambda x: self.option_changed_notify("dhcpd"))
        r_udhcpd.connect("toggled",
                         lambda x: self.option_changed_notify("udhcpd"))

        net_ip.connect("changed",
                       lambda x: self.option_changed_notify("ip", False))
        nap_enable.connect("toggled",
                           lambda x: self.option_changed_notify("nap_enable"))

        self.Config.bind_to_widget("nap-enable", nap_enable, "active",
                                   Gio.SettingsBindFlags.GET)

        nap_enable.bind_property("active", nap_frame, "sensitive", 0)

        applet = AppletService()

        avail_plugins = applet.QueryAvailablePlugins()
        active_plugins = applet.QueryPlugins()

        def dun_support_toggled(rb, x):
            if rb.props.active and x == "nm":
                applet.SetPluginConfig('(sb)', "PPPSupport", False)
                applet.SetPluginConfig('(sb)', "NMDUNSupport", True)
            elif rb.props.active and x == "blueman":
                applet.SetPluginConfig('(sb)', "NMDUNSupport", False)
                applet.SetPluginConfig('(sb)', "PPPSupport", True)

        def pan_support_toggled(rb, x):
            if rb.props.active and x == "nm":
                applet.SetPluginConfig('(sb)', "DhcpClient", False)
                applet.SetPluginConfig('(sb)', "NMPANSupport", True)

            elif rb.props.active and x == "blueman":
                applet.SetPluginConfig('(sb)', "NMPANSupport", False)
                applet.SetPluginConfig('(sb)', "DhcpClient", True)

        if "PPPSupport" in active_plugins:
            rb_dun_blueman.props.active = True

        if "NMDUNSupport" in avail_plugins:
            rb_dun_nm.props.sensitive = True
        else:
            rb_dun_nm.props.sensitive = False
            rb_dun_nm.props.tooltip_text = _(
                "Not currently supported with this setup")

        if "DhcpClient" in active_plugins:
            rb_blueman.props.active = True

        if "NMPANSupport" in avail_plugins:
            rb_nm.props.sensitive = True
        else:
            rb_nm.props.sensitive = False
            rb_nm.props.tooltip_text = _(
                "Not currently supported with this setup")

        if "NMPANSupport" in active_plugins:
            rb_nm.props.active = True

        if "NMDUNSupport" in active_plugins:
            rb_dun_nm.props.active = True

        rb_nm.connect("toggled", pan_support_toggled, "nm")
        rb_blueman.connect("toggled", pan_support_toggled, "blueman")

        rb_dun_nm.connect("toggled", dun_support_toggled, "nm")
        rb_dun_blueman.connect("toggled", dun_support_toggled, "blueman")
示例#6
0
    def setup_network(self):
        self.Config = Config("org.blueman.network")

        gn_enable = self.Builder.get_object("gn-enable")
        # latest bluez does not support GN, apparently
        gn_enable.props.visible = False

        nap_enable = self.Builder.get_object("nap-enable")
        r_dnsmasq = self.Builder.get_object("r_dnsmasq")
        r_dhcpd = self.Builder.get_object("r_dhcpd")
        net_ip = self.Builder.get_object("net_ip")
        net_nat = self.Builder.get_object("net_nat")
        rb_nm = self.Builder.get_object("rb_nm")
        rb_blueman = self.Builder.get_object("rb_blueman")
        rb_dun_nm = self.Builder.get_object("rb_dun_nm")
        rb_dun_blueman = self.Builder.get_object("rb_dun_blueman")

        nap_frame = self.Builder.get_object("nap_frame")
        warning = self.Builder.get_object("warning")

        rb_blueman.props.active = self.Config["dhcp-client"]

        if not self.Config["nap-enable"]:
            nap_frame.props.sensitive = False

        nc = NetConf.get_default()
        if nc.ip4_address != None:
            net_ip.props.text = inet_ntoa(nc.ip4_address)
        else:
            net_ip.props.text = "10.%d.%d.1" % (randint(0, 255), randint(
                0, 255))

        #if ns["masq"] != 0:
        #	net_nat.props.active = ns["masq"]

        if nc.get_dhcp_handler() == None:
            nap_frame.props.sensitive = False
            nap_enable.props.active = False
        else:
            if nc.get_dhcp_handler() == DnsMasqHandler:
                r_dnsmasq.props.active = True
            else:
                r_dhcpd.props.active = True

        if not have("dnsmasq") and not have("dhcpd3") and not have("dhcpd"):
            nap_frame.props.sensitive = False
            warning.props.visible = True
            warning.props.sensitive = True
            nap_enable.props.sensitive = False

        if not have("dnsmasq"):
            r_dnsmasq.props.sensitive = False
            r_dnsmasq.props.active = False
            r_dhcpd.props.active = True

        if not have("dhcpd3") and not have("dhcpd"):
            r_dhcpd.props.sensitive = False
            r_dhcpd.props.active = False
            r_dnsmasq.props.active = True

        r_dnsmasq.connect("toggled",
                          lambda x: self.option_changed_notify("dnsmasq"))
        net_ip.connect("changed",
                       lambda x: self.option_changed_notify("ip", False))

        self.Config.bind_to_widget("nat", net_nat, "active")
        self.Config.bind_to_widget("gn-enable", gn_enable, "active")
        self.Config.bind_to_widget("nap-enable", nap_frame, "sensitive")
        self.Config.bind_to_widget("nap-enable", nap_enable, "active")

        applet = AppletService()

        avail_plugins = applet.QueryAvailablePlugins()
        active_plugins = applet.QueryPlugins()

        def dun_support_toggled(rb, x):
            if rb.props.active and x == "nm":
                applet.SetPluginConfig("PPPSupport", False)
                applet.SetPluginConfig("NMDUNSupport", True)
            elif rb.props.active and x == "blueman":
                applet.SetPluginConfig("NMDUNSupport", False)
                applet.SetPluginConfig("PPPSupport", True)

        def pan_support_toggled(rb, x):
            if rb.props.active and x == "nm":
                applet.SetPluginConfig("DhcpClient", False)
                applet.SetPluginConfig("NMPANSupport", True)

            elif rb.props.active and x == "blueman":
                applet.SetPluginConfig("NMPANSupport", False)
                applet.SetPluginConfig("DhcpClient", True)

        if "PPPSupport" in active_plugins:
            rb_dun_blueman.props.active = True

        if "NMDUNSupport" in avail_plugins:
            rb_dun_nm.props.sensitive = True
        else:
            rb_dun_nm.props.sensitive = False
            rb_dun_nm.props.tooltip_text = _(
                "Not currently supported with this setup")

        if "NMPANSupport" in avail_plugins:
            rb_nm.props.sensitive = True
        else:
            rb_nm.props.sensitive = False
            rb_nm.props.tooltip_text = _(
                "Not currently supported with this setup")

        if "NMPANSupport" in active_plugins:
            rb_nm.props.active = True

        if "NMDUNSupport" in active_plugins:
            rb_dun_nm.props.active = True

        rb_nm.connect("toggled", pan_support_toggled, "nm")
        rb_blueman.connect("toggled", pan_support_toggled, "blueman")

        rb_dun_nm.connect("toggled", dun_support_toggled, "nm")
        rb_dun_blueman.connect("toggled", dun_support_toggled, "blueman")
示例#7
0
    def on_request_menu_items(self, manager_menu, device):
        if BlueZInterface.get_interface_version()[0] < 5:
            return self.on_request_menu_items_bluez4(manager_menu, device)

        items = []
        uuids = device.UUIDs
        appl = AppletService()

        uuids16 = [uuid128_to_uuid16(uuid) for uuid in uuids]

        if set(uuids16) & set(self.connectable_uuids):
            # FIXME: This should only be done once!
            manager_menu.Signals.Handle("bluez", device,
                                        manager_menu.service_property_changed,
                                        "PropertyChanged")

            if device.get_properties()['Connected']:
                # FIXME: More generic icon
                item = create_menuitem(_("_Disconnect"),
                                       get_x_icon("mouse", 16))
                manager_menu.Signals.Handle("gobject", item, "activate",
                                            manager_menu.on_disconnect, device)
                items.append((item, 100))
            else:
                # FIXME: More generic icon
                item = create_menuitem(_("_Connect"), get_icon("mouse", 16))
                manager_menu.Signals.Handle("gobject", item, "activate",
                                            manager_menu.on_connect, device)
                items.append((item, 1))

            item.show()

        for name, service in device.Services.items():
            if name == "network":
                manager_menu.Signals.Handle(
                    "bluez", service, manager_menu.service_property_changed,
                    "PropertyChanged")
                sprops = service.get_properties()

                if not sprops["Connected"]:
                    for uuid in uuids:
                        uuid16 = uuid128_to_uuid16(uuid)
                        if uuid16 == NAP_SVCLASS_ID or uuid16 == GN_SVCLASS_ID:
                            label = _("Group Network"
                                      ) if uuid16 == GN_SVCLASS_ID else _(
                                          "Network Access _Point")
                            item = create_menuitem(
                                label, get_icon("network-wireless", 16))
                            manager_menu.Signals.Handle(
                                "gobject", item, "activate",
                                manager_menu.on_connect, device, name, uuid)
                            item.show()
                            items.append((item, 80))
                else:
                    item = create_menuitem(_("Network"),
                                           get_x_icon("network-wireless", 16))
                    manager_menu.Signals.Handle("gobject", item, "activate",
                                                manager_menu.on_disconnect,
                                                device, name)
                    item.show()
                    items.append((item, 101))

                    if "DhcpClient" in appl.QueryPlugins():

                        def renew(x):
                            appl.DhcpClient(sprops["Interface"])

                        item = create_menuitem(_("Renew IP Address"),
                                               get_icon("view-refresh", 16))
                        manager_menu.Signals.Handle("gobject", item,
                                                    "activate", renew)
                        item.show()
                        items.append((item, 201))

        return items
示例#8
0
    def on_request_menu_items_bluez4(self, manager_menu, device):
        # BlueZ 4 only

        items = []
        uuids = device.UUIDs
        appl = AppletService()

        for name, service in device.Services.items():
            if name == "serial":
                ports_list = rfcomm_list()

                def flt(dev):
                    if dev["dst"] == device.Address and dev[
                            "state"] == "connected":
                        return dev["channel"]

                active_ports = map(flt, ports_list)

                def get_port_id(channel):
                    for dev in ports_list:
                        if dev["dst"] == device.Address and dev[
                                "state"] == "connected" and dev[
                                    "channel"] == channel:
                            return dev["id"]

                serial_items = []

                num_ports = 0
                has_dun = False
                try:
                    for port_name, channel, uuid in sdp_get_cached_rfcomm(
                            device.Address):

                        if SERIAL_PORT_SVCLASS_ID in uuid:
                            if name is not None:
                                if channel in active_ports:
                                    item = create_menuitem(
                                        port_name,
                                        get_x_icon("blueman-serial", 16))
                                    manager_menu.Signals.Handle(
                                        "gobject", item, "activate",
                                        manager_menu.on_disconnect, device,
                                        name,
                                        "/dev/rfcomm%d" % get_port_id(channel))
                                    item.show()
                                    items.append((item, 150))
                                else:
                                    item = create_menuitem(
                                        port_name,
                                        get_icon("blueman-serial", 16))
                                    manager_menu.Signals.Handle(
                                        "gobject", item, "activate",
                                        manager_menu.on_connect, device, name,
                                        channel)
                                    item.show()
                                    serial_items.append(item)

                        elif DIALUP_NET_SVCLASS_ID in uuid:
                            if name is not None:
                                if channel in active_ports:
                                    item = create_menuitem(
                                        port_name, get_x_icon("modem", 16))
                                    manager_menu.Signals.Handle(
                                        "gobject", item, "activate",
                                        manager_menu.on_disconnect, device,
                                        name,
                                        "/dev/rfcomm%d" % get_port_id(channel))
                                    item.show()
                                    items.append((item, 150))
                                else:
                                    item = create_menuitem(
                                        port_name, get_icon("modem", 16))
                                    manager_menu.Signals.Handle(
                                        "gobject", item, "activate",
                                        manager_menu.on_connect, device, name,
                                        channel)
                                    item.show()
                                    serial_items.append(item)
                                    has_dun = True

                except KeyError:
                    for uuid in uuids:
                        uuid16 = uuid128_to_uuid16(uuid)
                        if uuid16 == DIALUP_NET_SVCLASS_ID:
                            item = create_menuitem(_("Dialup Service"),
                                                   get_icon("modem", 16))
                            manager_menu.Signals.Handle(
                                "gobject", item, "activate",
                                manager_menu.on_connect, device, name, uuid)
                            item.show()
                            serial_items.append(item)
                            has_dun = True

                        if uuid16 == SERIAL_PORT_SVCLASS_ID:
                            item = create_menuitem(
                                _("Serial Service"),
                                get_icon("blueman-serial", 16))
                            manager_menu.Signals.Handle(
                                "gobject", item, "activate",
                                manager_menu.on_connect, device, name, uuid)
                            item.show()
                            serial_items.append(item)

                    for dev in ports_list:
                        if dev["dst"] == device.Address:
                            if dev["state"] == "connected":
                                devname = _(
                                    "Serial Port %s") % "rfcomm%d" % dev["id"]

                                item = create_menuitem(devname,
                                                       get_x_icon("modem", 16))
                                manager_menu.Signals.Handle(
                                    "gobject", item, "activate",
                                    manager_menu.on_disconnect, device, name,
                                    "/dev/rfcomm%d" % dev["id"])
                                items.append((item, 120))
                                item.show()

                def open_settings(i, device):
                    from blueman.gui.GsmSettings import GsmSettings

                    d = GsmSettings(device.Address)
                    d.run()
                    d.destroy()

                if has_dun and "PPPSupport" in appl.QueryPlugins():
                    item = Gtk.SeparatorMenuItem()
                    item.show()
                    serial_items.append(item)

                    item = create_menuitem(_("Dialup Settings"),
                                           get_icon("preferences-desktop", 16))
                    serial_items.append(item)
                    item.show()
                    manager_menu.Signals.Handle("gobject", item, "activate",
                                                open_settings, device)

                if len(serial_items) > 1:
                    sub = Gtk.Menu()
                    sub.show()

                    item = create_menuitem(_("Serial Ports"),
                                           get_icon("modem", 16))
                    item.set_submenu(sub)
                    item.show()
                    items.append((item, 90))

                    for item in serial_items:
                        sub.append(item)

                else:
                    for item in serial_items:
                        items.append((item, 80))

            elif name == "network":
                manager_menu.Signals.Handle(
                    "bluez", service, manager_menu.service_property_changed,
                    "PropertyChanged")

                sprops = service.get_properties()

                if not sprops["Connected"]:

                    for uuid in uuids:
                        uuid16 = uuid128_to_uuid16(uuid)
                        if uuid16 == GN_SVCLASS_ID:
                            item = create_menuitem(
                                _("Group Network"),
                                get_icon("network-wireless", 16))
                            manager_menu.Signals.Handle(
                                "gobject", item, "activate",
                                manager_menu.on_connect, device, name, uuid)
                            item.show()
                            items.append((item, 80))

                        if uuid16 == NAP_SVCLASS_ID:
                            item = create_menuitem(
                                _("Network Access Point"),
                                get_icon("network-wireless", 16))
                            manager_menu.Signals.Handle(
                                "gobject", item, "activate",
                                manager_menu.on_connect, device, name, uuid)
                            item.show()
                            items.append((item, 81))

                else:
                    item = create_menuitem(_("Network"),
                                           get_x_icon("network-wireless", 16))
                    manager_menu.Signals.Handle("gobject", item, "activate",
                                                manager_menu.on_disconnect,
                                                device, name)
                    item.show()
                    items.append((item, 101))

                    if "DhcpClient" in appl.QueryPlugins():

                        def renew(x):
                            appl.DhcpClient(sprops["Interface"])

                        item = create_menuitem(_("Renew IP Address"),
                                               get_icon("view-refresh", 16))
                        manager_menu.Signals.Handle("gobject", item,
                                                    "activate", renew)
                        item.show()
                        items.append((item, 201))

            elif name == "input":
                manager_menu.Signals.Handle(
                    "bluez", service, manager_menu.service_property_changed,
                    "PropertyChanged")
                sprops = service.get_properties()
                if sprops["Connected"]:
                    item = create_menuitem(_("Input Service"),
                                           get_x_icon("mouse", 16))
                    manager_menu.Signals.Handle("gobject", item, "activate",
                                                manager_menu.on_disconnect,
                                                device, name)
                    items.append((item, 100))

                else:
                    item = create_menuitem(_("Input Service"),
                                           get_icon("mouse", 16))
                    manager_menu.Signals.Handle("gobject", item, "activate",
                                                manager_menu.on_connect,
                                                device, name)
                    items.append((item, 1))

                item.show()

            elif name == "headset":
                sprops = service.get_properties()

                if sprops["Connected"]:
                    item = create_menuitem(_("Headset Service"),
                                           get_icon("blueman-handsfree", 16))
                    manager_menu.Signals.Handle("gobject", item, "activate",
                                                manager_menu.on_disconnect,
                                                device, name)
                    items.append((item, 110))
                else:
                    item = create_menuitem(_("Headset Service"),
                                           get_icon("blueman-handsfree", 16))
                    manager_menu.Signals.Handle("gobject", item, "activate",
                                                manager_menu.on_connect,
                                                device, name)
                    items.append((item, 10))

                item.show()

            elif name == "audiosink":
                sprops = service.get_properties()

                if sprops["Connected"]:
                    item = create_menuitem(_("Audio Sink"),
                                           get_icon("blueman-headset", 16))
                    manager_menu.Signals.Handle("gobject", item, "activate",
                                                manager_menu.on_disconnect,
                                                device, name)
                    items.append((item, 120))
                else:
                    item = create_menuitem(_("Audio Sink"),
                                           get_icon("blueman-headset", 16))
                    item.props.tooltip_text = _(
                        "Allows to send audio to remote device")
                    manager_menu.Signals.Handle("gobject", item, "activate",
                                                manager_menu.on_connect,
                                                device, name)
                    items.append((item, 20))

                item.show()

            elif name == "audiosource":
                sprops = service.get_properties()

                if not sprops["State"] == "disconnected":
                    item = create_menuitem(_("Audio Source"),
                                           get_icon("blueman-headset", 16))
                    manager_menu.Signals.Handle("gobject", item, "activate",
                                                manager_menu.on_disconnect,
                                                device, name)
                    items.append((item, 121))
                else:
                    item = create_menuitem(_("Audio Source"),
                                           get_icon("blueman-headset", 16))
                    item.props.tooltip_text = _(
                        "Allows to receive audio from remote device")
                    manager_menu.Signals.Handle("gobject", item, "activate",
                                                manager_menu.on_connect,
                                                device, name)
                    items.append((item, 21))
                item.show()

        return items
from blueman.plugins.ManagerPlugin import ManagerPlugin
from blueman.main.PulseAudioUtils import PulseAudioUtils, EventType
from blueman.main.SignalTracker import SignalTracker
from blueman.gui.manager.ManagerDeviceMenu import ManagerDeviceMenu
from blueman.gui.MessageArea import MessageArea
from blueman.Functions import get_icon, create_menuitem
from blueman.main.AppletService import AppletService

import gtk

a = AppletService()
if not "PulseAudio" in a.QueryPlugins():
    raise ImportError("PulseAudio applet plugin not loaded, nothing to do here")


class PulseAudioProfile(ManagerPlugin):
    def on_load(self, user_data):
        self.devices = {}
        self.item = None

        self.deferred = []

        pa = PulseAudioUtils()
        pa.connect("event", self.on_pa_event)
        pa.connect("connected", self.on_pa_ready)

    def on_pa_ready(self, utils):
        dprint("connected")
        for dev in self.deferred:
            self.regenerate_with_device(dev.Address)