コード例 #1
0
ファイル: Applet.py プロジェクト: srpatcha/blueman
    def __init__(self):
        setup_icon_path()

        check_single_instance("blueman-applet")

        self.plugin_run_state_changed = False

        self.Manager = Bluez.Manager()
        self.Manager.connect_signal('adapter-added', self.on_adapter_added)
        self.Manager.connect_signal('adapter-removed', self.on_adapter_removed)
        self.Manager.connect_signal('device-created', self.on_device_created)
        self.Manager.connect_signal('device-removed', self.on_device_removed)

        self.DbusSvc = DbusService("org.blueman.Applet", "/")

        self.Plugins = PersistentPluginManager(AppletPlugin, blueman.plugins.applet, self)
        self.Plugins.Load()

        self.Plugins.Run("on_plugins_loaded")

        self.Manager.watch_name_owner(self._on_dbus_name_appeared, self._on_dbus_name_vanished)

        self._any_adapter = Bluez.AnyAdapter()
        self._any_adapter.connect_signal('property-changed', self._on_adapter_property_changed)

        self._any_device = Bluez.AnyDevice()
        self._any_device.connect_signal('property-changed', self._on_device_property_changed)

        Gtk.main()
コード例 #2
0
ファイル: Adapter.py プロジェクト: srpatcha/blueman
    def __init__(self, selected_hci_dev, socket_id):
        super(BluemanAdapters, self).__init__(title=_("Bluetooth Adapters"))
        # Setup dialog
        self.set_border_width(5)
        self.set_resizable(False)
        self.props.icon_name = "blueman-device"
        self.props.window_position = Gtk.WindowPosition.CENTER
        self.set_name("BluemanAdapters")
        self.connect("response", self.on_dialog_response)

        close_button = self.add_button("_Close", Gtk.ResponseType.CLOSE)
        close_button.props.receives_default = True
        close_button.props.use_underline = True

        self.notebook = Gtk.Notebook()
        if socket_id:
            plug = Gtk.Plug.new(socket_id)
            plug.connect('delete-event', lambda _plug, _event: Gtk.main_quit())
            plug.add(self.notebook)
            plug.show()
        else:
            self.get_content_area().add(self.notebook)
            self.show()
        self.tabs = {}
        self._adapters = {}

        setup_icon_path()
        Bluez.Manager.watch_name_owner(self._on_dbus_name_appeared,
                                       self._on_dbus_name_vanished)

        check_single_instance("blueman-adapters",
                              lambda time: self.present_with_time(time))

        check_bluetooth_status(
            _("Bluetooth needs to be turned on for the adapter manager to work"
              ), lambda: exit())

        try:
            self.manager = Bluez.Manager()
        except Exception as e:
            logging.exception(e)
            self.manager = None
        #fixme: show error dialog and exit

        self.manager.connect_signal('adapter-added', self.on_adapter_added)
        self.manager.connect_signal('adapter-removed', self.on_adapter_removed)
        for adapter in self.manager.get_adapters():
            path = adapter.get_object_path()
            hci_dev = os.path.basename(path)
            self._adapters[hci_dev] = adapter
            self.on_adapter_added(self.manager, path)

        #activate a particular tab according to command line option
        if selected_hci_dev is not None:
            if selected_hci_dev in self.tabs:
                hci_dev_num = int(selected_hci_dev[3:])
                self.notebook.set_current_page(hci_dev_num)
            else:
                logging.error('Error: the selected adapter does not exist')
        self.notebook.show_all()
コード例 #3
0
ファイル: DeviceList.py プロジェクト: ninetyfivenorth/blueman
    def __init__(self, adapter_name=None, tabledata=None, **kwargs):
        if not tabledata:
            tabledata = []

        def on_adapter_removed(_manager, path):
            self.emit("adapter-removed", path)
            if path == self.__adapter_path:
                self.clear()
                self.Adapter = None
                self.set_adapter()

        def on_adapter_added(_manager, path):
            if self.Adapter is None:
                self.set_adapter(path)

            self.emit("adapter-added", path)

        # cache for fast lookup in the list
        self.path_to_row = {}

        self.monitored_devices = []

        self.manager = bluez.Manager()
        self.manager.connect_signal('adapter-removed', on_adapter_removed)
        self.manager.connect_signal('adapter-added', on_adapter_added)

        any_device = bluez.AnyDevice()
        any_device.connect_signal("property-changed",
                                  self._on_device_property_changed)

        self.__discovery_time = 0
        self.__adapter_path = None
        self.Adapter = None
        self.discovering = False

        data = tabledata + [{
            "id": "device",
            "type": object
        }, {
            "id": "dbus_path",
            "type": str
        }, {
            "id": "timestamp",
            "type": float
        }]

        super(DeviceList, self).__init__(data, **kwargs)
        self.set_name("DeviceList")

        self.set_adapter(adapter_name)
        self._any_adapter = bluez.AnyAdapter()
        self._any_adapter.connect_signal("property-changed",
                                         self._on_property_changed)

        self.selection.connect('changed', self.on_selection_changed)

        self.icon_theme = Gtk.IconTheme.get_default()
        self.icon_theme.prepend_search_path(ICON_PATH)
        # handle icon theme changes
        self.icon_theme.connect("changed", self.on_icon_theme_changed)
コード例 #4
0
ファイル: DeviceList.py プロジェクト: pombreda/OnionScraper
    def __init__(self, adapter=None, tabledata=None):
        if not tabledata:
            tabledata = []

        def on_adapter_removed(path):
            self.emit("adapter-removed", path)
            if path == self.__adapter_path:
                self.clear()
                self.Adapter = None
                self.SetAdapter()

        def on_adapter_added(path):
            def on_activate():
                dprint("adapter powered", path)

                if self.Adapter is None:
                    self.SetAdapter(path)

                self.emit("adapter-added", path)

            a = Bluez.Adapter(path)
            wait_for_adapter(a, on_activate)

        #cache for fast lookup in the list
        self.address_to_row = {}
        self.path_to_row = {}

        self.monitored_devices = []
        self.discovered_devices = []

        self.signals = SignalTracker()

        try:
            self.Manager = Bluez.Manager("gobject")
            self.signals.Handle(self.Manager, on_adapter_removed, "AdapterRemoved")
            self.signals.Handle(self.Manager, on_adapter_added, "AdapterAdded")
        except:
            self.Manager = None

        self.__discovery_time = 0
        self.__adapter_path = None
        self.Adapter = None
        self.discovering = False

        data = []
        data = data + tabledata

        data = data + [
            ["device", object],
            ["dbus_path", str]
        ]

        GenericList.__init__(self, data)
        self.adapter_signals = SignalTracker()
        self.device_signals = SignalTracker()

        self.SetAdapter(adapter)

        self.signals.Handle(self.selection, "changed", self.on_selection_changed)
コード例 #5
0
ファイル: Adapter.py プロジェクト: rtstxtrdnr/blueman
    def __init__(self, selected_hci_dev, socket_id):
        super().__init__(title=_("Bluetooth Adapters"),
                         border_width=5,
                         resizable=False,
                         icon_name="blueman-device",
                         name="BluemanAdapters")
        self.connect("delete-event", self._on_close)

        self.notebook = Gtk.Notebook(visible=True)

        if socket_id:
            plug = Gtk.Plug.new(socket_id)
            plug.show()
            plug.connect('delete-event', self._on_close)
            plug.add(self.notebook)
        else:
            self.add(self.notebook)
            self.connect("delete-event", self._on_close)
            self.show()

        self.tabs = {}
        self._adapters = {}

        setup_icon_path()
        bluez.Manager.watch_name_owner(self._on_dbus_name_appeared,
                                       self._on_dbus_name_vanished)

        check_single_instance("blueman-adapters",
                              lambda time: self.present_with_time(time))

        check_bluetooth_status(
            _("Bluetooth needs to be turned on for the adapter manager to work"
              ), lambda: exit())

        try:
            self.manager = bluez.Manager()
        except Exception as e:
            logging.exception(e)
            self.manager = None
        # fixme: show error dialog and exit

        self.manager.connect_signal('adapter-added', self.on_adapter_added)
        self.manager.connect_signal('adapter-removed', self.on_adapter_removed)
        for adapter in self.manager.get_adapters():
            path = adapter.get_object_path()
            hci_dev = os.path.basename(path)
            self._adapters[hci_dev] = adapter
            self.on_adapter_added(self.manager, path)

        # activate a particular tab according to command line option
        if selected_hci_dev is not None:
            if selected_hci_dev in self.tabs:
                hci_dev_num = int(selected_hci_dev[3:])
                self.notebook.set_current_page(hci_dev_num)
            else:
                logging.error('Error: the selected adapter does not exist')
        self.notebook.show_all()
コード例 #6
0
ファイル: Manager.py プロジェクト: D474designs/blueman
        def on_dbus_name_appeared(_connection, name, owner):
            logging.info("%s %s" % (name, owner))
            setup_icon_path()

            try:
                self.Applet = AppletService()
            except DBusProxyFailed:
                print("Blueman applet needs to be running")
                exit()

            check_bluetooth_status(_("Bluetooth needs to be turned on for the device manager to function"),
                                   lambda: Gtk.main_quit())

            try:
                bluez.Manager().get_adapter(self.Config['last-adapter'])
            except bluez.errors.DBusNoSuchAdapterError:
                logging.error('No bluetooth adapter(s) found.')
                exit(1)

            self._applet_sig = self.Applet.connect('g-signal', on_applet_signal)

            self.connect("delete-event", on_window_delete)
            self.props.icon_name = "blueman"

            w, h, x, y = self.Config["window-properties"]
            if w and h:
                self.resize(w, h)
            if x and y:
                self.move(x, y)

            sw = self.Builder.get_object("scrollview")
            # Disable overlay scrolling
            if Gtk.get_minor_version() >= 16:
                sw.props.overlay_scrolling = False

            self.List = ManagerDeviceList(adapter=self.Config["last-adapter"], inst=self)

            self.List.show()
            sw.add(self.List)

            self.Toolbar = ManagerToolbar(self)
            self.Menu = ManagerMenu(self)
            self.Stats = ManagerStats(self)

            if self.List.is_valid_adapter():
                self.List.display_known_devices(autoselect=True)

            self.List.connect("adapter-changed", self.on_adapter_changed)

            toolbar = self.Builder.get_object("toolbar")
            statusbar = self.Builder.get_object("statusbar")

            self.Config.bind_to_widget("show-toolbar", toolbar, "visible")
            self.Config.bind_to_widget("show-statusbar", statusbar, "visible")

            self.show()
コード例 #7
0
    def __init__(self, adapter_name=None, tabledata=None, **kwargs):
        if not tabledata:
            tabledata = []

        # cache for fast lookup in the list
        self.path_to_row: Dict[str, Gtk.TreeRowReference] = {}

        self.monitored_devices: List[str] = []

        self.manager = bluez.Manager()
        self.manager.connect_signal('adapter-removed',
                                    self.__on_manager_signal,
                                    'adapter-removed')
        self.manager.connect_signal('adapter-added', self.__on_manager_signal,
                                    'adapter-added')
        self.manager.connect_signal('device-created', self.__on_manager_signal,
                                    'device-created')
        self.manager.connect_signal('device-removed', self.__on_manager_signal,
                                    'device-removed')

        self.any_device = bluez.AnyDevice()
        self.any_device.connect_signal("property-changed",
                                       self._on_device_property_changed)

        self.__discovery_time = 0
        self.__adapter_path = None
        self.Adapter = None
        self.discovering = False

        data = tabledata + [{
            "id": "device",
            "type": object
        }, {
            "id": "dbus_path",
            "type": str
        }, {
            "id": "timestamp",
            "type": float
        }]

        super().__init__(data, **kwargs)
        self.set_name("DeviceList")

        self.set_adapter(adapter_name)
        self._any_adapter = bluez.AnyAdapter()
        self._any_adapter.connect_signal("property-changed",
                                         self._on_property_changed)

        self.selection.connect('changed', self.on_selection_changed)

        self.icon_theme = Gtk.IconTheme.get_default()
        self.icon_theme.prepend_search_path(ICON_PATH)
        # handle icon theme changes
        self.icon_theme.connect("changed", self.on_icon_theme_changed)
コード例 #8
0
ファイル: DeviceList.py プロジェクト: srpatcha/blueman
    def __init__(self, adapter=None, tabledata=None):
        if not tabledata:
            tabledata = []

        def on_adapter_removed(_manager, path):
            self.emit("adapter-removed", path)
            if path == self.__adapter_path:
                self.clear()
                self.Adapter = None
                self.SetAdapter()

        def on_adapter_added(_manager, path):
            def on_activate():
                logging.info("adapter powered %s" % path)

                if self.Adapter is None:
                    self.SetAdapter(path)

                self.emit("adapter-added", path)

            a = Bluez.Adapter(path)
            wait_for_adapter(a, on_activate)

        #cache for fast lookup in the list
        self.path_to_row = {}

        self.monitored_devices = []

        self.manager = Bluez.Manager()
        self.manager.connect_signal('adapter-removed', on_adapter_removed)
        self.manager.connect_signal('adapter-added', on_adapter_added)

        self.__discovery_time = 0
        self.__adapter_path = None
        self.__signals = {}
        self.Adapter = None
        self.discovering = False

        data = []
        data = data + tabledata

        data = data + [
            ["device", object],
            ["dbus_path", str],
            ["timestamp", float]
        ]

        super(DeviceList, self).__init__(data)
        self.set_name("DeviceList")

        self.SetAdapter(adapter)

        self.selection.connect('changed', self.on_selection_changed)
コード例 #9
0
ファイル: ManagerMenu.py プロジェクト: zjsxwc/blueman
    def __init__(self, blueman):
        self.blueman = blueman

        self.adapter_items = {}
        self._adapters_group = []
        self._insert_adapter_item_pos = 2
        self.Search = None

        self.item_adapter = self.blueman.Builder.get_object("item_adapter")
        self.item_device = self.blueman.Builder.get_object("item_device")

        self.item_view = self.blueman.Builder.get_object("item_view")
        self.item_help = self.blueman.Builder.get_object("item_help")

        help_menu = Gtk.Menu()

        self.item_help.set_submenu(help_menu)
        help_menu.show()

        report_item = create_menuitem(_("_Report a Problem"),
                                      get_icon("dialog-warning", 16))
        report_item.show()
        help_menu.append(report_item)
        report_item.connect(
            "activate",
            lambda x: launch("xdg-open %s/issues" % WEBSITE, None, True))

        sep = Gtk.SeparatorMenuItem()
        sep.show()
        help_menu.append(sep)

        help_item = create_menuitem("_Help", get_icon("help-about"))
        help_item.show()
        help_menu.append(help_item)
        help_item.connect(
            "activate",
            lambda x: show_about_dialog('Blueman ' + _('Device Manager')))

        view_menu = Gtk.Menu()
        self.item_view.set_submenu(view_menu)
        view_menu.show()

        item_toolbar = Gtk.CheckMenuItem.new_with_mnemonic(_("Show _Toolbar"))
        item_toolbar.show()
        view_menu.append(item_toolbar)
        self.blueman.Config.bind_to_widget("show-toolbar", item_toolbar,
                                           "active")

        item_statusbar = Gtk.CheckMenuItem.new_with_mnemonic(
            _("Show _Statusbar"))
        item_statusbar.show()
        view_menu.append(item_statusbar)
        self.blueman.Config.bind_to_widget("show-statusbar", item_statusbar,
                                           "active")

        item_services = Gtk.SeparatorMenuItem()
        view_menu.append(item_services)
        item_services.show()

        group = []

        itemf = Gtk.RadioMenuItem.new_with_mnemonic(group,
                                                    _("Latest Device _First"))
        itemf.show()
        group = itemf.get_group()
        view_menu.append(itemf)

        iteml = Gtk.RadioMenuItem.new_with_mnemonic(group,
                                                    _("Latest Device _Last"))
        iteml.show()
        group = iteml.get_group()
        view_menu.append(iteml)

        itemf.connect(
            "activate", lambda x: self.blueman.Config.set_boolean(
                "latest-last", not x.props.active))
        iteml.connect(
            "activate", lambda x: self.blueman.Config.set_boolean(
                "latest-last", x.props.active))

        sep = Gtk.SeparatorMenuItem()
        sep.show()
        view_menu.append(sep)

        item_plugins = create_menuitem(_("Plugins"),
                                       get_icon('blueman-plugin', 16))
        item_plugins.show()
        view_menu.append(item_plugins)
        item_plugins.connect(
            'activate', lambda *args: self.blueman.Applet.open_plugin_dialog(
                ignore_reply=True))

        item_services = create_menuitem(
            _("_Local Services") + "...", get_icon("preferences-desktop", 16))
        item_services.connect(
            'activate',
            lambda *args: launch("blueman-services", None, False, "blueman",
                                 _("Service Preferences")))
        view_menu.append(item_services)
        item_services.show()

        adapter_menu = Gtk.Menu()
        self.item_adapter.set_submenu(adapter_menu)
        self.item_adapter.props.sensitive = False

        search_item = create_menuitem(_("_Search"), get_icon("edit-find", 16))
        search_item.connect("activate", lambda x: self.blueman.inquiry())
        search_item.show()
        adapter_menu.prepend(search_item)
        self.Search = search_item

        sep = Gtk.SeparatorMenuItem()
        sep.show()
        adapter_menu.append(sep)

        sep = Gtk.SeparatorMenuItem()
        sep.show()
        adapter_menu.append(sep)

        adapter_settings = create_menuitem("_Preferences",
                                           get_icon("preferences-system", 16))
        adapter_settings.connect("activate",
                                 lambda x: self.blueman.adapter_properties())
        adapter_settings.show()
        adapter_menu.append(adapter_settings)

        sep = Gtk.SeparatorMenuItem()
        sep.show()
        adapter_menu.append(sep)

        exit_item = create_menuitem("_Exit", get_icon("application-exit", 16))
        exit_item.connect("activate", lambda x: Gtk.main_quit())
        exit_item.show()
        adapter_menu.append(exit_item)

        self.item_adapter.show()
        self.item_view.show()
        self.item_help.show()
        self.item_device.show()
        self.item_device.props.sensitive = False

        self._manager = bluez.Manager()
        self._manager.connect_signal("adapter-added", self.on_adapter_added)
        self._manager.connect_signal("adapter-removed",
                                     self.on_adapter_removed)

        blueman.List.connect("device-selected", self.on_device_selected)

        for adapter in self._manager.list_adapters():
            self.on_adapter_added(None, adapter.get_object_path())

        self.device_menu = None
コード例 #10
0
ファイル: ManagerMenu.py プロジェクト: WilliamMajanja/blueman
    def __init__(self, blueman):
        self.blueman = blueman
        self.Config = Config("org.blueman.general")

        self.adapter_items = {}
        self._adapters_group = []
        self._insert_adapter_item_pos = 2
        self.Search = None

        self.item_adapter = self.blueman.Builder.get_object("item_adapter")
        self.item_device = self.blueman.Builder.get_object("item_device")

        self.item_view = self.blueman.Builder.get_object("item_view")
        self.item_help = self.blueman.Builder.get_object("item_help")

        help_menu = Gtk.Menu()

        self.item_help.set_submenu(help_menu)
        help_menu.show()

        report_item = create_menuitem(_("_Report a Problem"), "dialog-warning")
        report_item.show()
        help_menu.append(report_item)
        report_item.connect("activate", lambda x: launch("xdg-open %s/issues" % WEBSITE, None, True))

        sep = Gtk.SeparatorMenuItem()
        sep.show()
        help_menu.append(sep)

        help_item = create_menuitem("_Help", "help-about")
        help_item.show()
        help_menu.append(help_item)
        help_item.connect("activate", lambda x: show_about_dialog('Blueman ' + _('Device Manager'),
                                                                  parent=self.blueman.get_toplevel()))

        view_menu = Gtk.Menu()
        self.item_view.set_submenu(view_menu)
        view_menu.show()

        item_toolbar = Gtk.CheckMenuItem.new_with_mnemonic(_("Show _Toolbar"))
        item_toolbar.show()
        view_menu.append(item_toolbar)
        self.blueman.Config.bind_to_widget("show-toolbar", item_toolbar, "active")

        item_statusbar = Gtk.CheckMenuItem.new_with_mnemonic(_("Show _Statusbar"))
        item_statusbar.show()
        view_menu.append(item_statusbar)
        self.blueman.Config.bind_to_widget("show-statusbar", item_statusbar, "active")

        item_services = Gtk.SeparatorMenuItem()
        view_menu.append(item_services)
        item_services.show()

        sorting_group = []
        item_sort = Gtk.MenuItem.new_with_mnemonic(_("S_ort By"))
        view_menu.append(item_sort)
        item_sort.show()

        sorting_menu = Gtk.Menu()
        item_sort.set_submenu(sorting_menu)

        self._sort_alias_item = Gtk.RadioMenuItem.new_with_mnemonic(sorting_group, _("_Name"))
        self._sort_alias_item.show()
        sorting_group = self._sort_alias_item.get_group()
        sorting_menu.append(self._sort_alias_item)

        self._sort_timestamp_item = Gtk.RadioMenuItem.new_with_mnemonic(sorting_group, _("_Added"))
        self._sort_timestamp_item.show()
        sorting_menu.append(self._sort_timestamp_item)

        sort_config = self.Config['sort-by']
        if sort_config == "alias":
            self._sort_alias_item.props.active = True
        else:
            self._sort_timestamp_item.props.active = True

        sort_sep = Gtk.SeparatorMenuItem()
        sort_sep.show()
        sorting_menu.append(sort_sep)

        self._sort_type_item = Gtk.CheckMenuItem.new_with_mnemonic(_("_Descending"))
        self._sort_type_item.show()
        sorting_menu.append(self._sort_type_item)

        if self.Config['sort-order'] == "ascending":
            self._sort_type_item.props.active = False
        else:
            self._sort_type_item.props.active = True

        sep = Gtk.SeparatorMenuItem()
        sep.show()
        view_menu.append(sep)

        item_plugins = create_menuitem(_("_Plugins"), 'blueman-plugin')
        item_plugins.show()
        view_menu.append(item_plugins)
        item_plugins.connect('activate', self._on_plugin_dialog_activate)

        item_services = create_menuitem(_("_Local Services") + "...", "preferences-desktop")
        item_services.connect('activate', lambda *args: launch("blueman-services", None, False, "blueman",
                                                               _("Service Preferences")))
        view_menu.append(item_services)
        item_services.show()

        adapter_menu = Gtk.Menu()
        self.item_adapter.set_submenu(adapter_menu)
        self.item_adapter.props.sensitive = False

        search_item = create_menuitem(_("_Search"), "edit-find")
        search_item.connect("activate", lambda x: self.blueman.inquiry())
        search_item.show()
        adapter_menu.prepend(search_item)
        self.Search = search_item

        sep = Gtk.SeparatorMenuItem()
        sep.show()
        adapter_menu.append(sep)

        sep = Gtk.SeparatorMenuItem()
        sep.show()
        adapter_menu.append(sep)

        adapter_settings = create_menuitem("_Preferences", "preferences-system")
        adapter_settings.connect("activate", lambda x: self.blueman.adapter_properties())
        adapter_settings.show()
        adapter_menu.append(adapter_settings)

        sep = Gtk.SeparatorMenuItem()
        sep.show()
        adapter_menu.append(sep)

        exit_item = create_menuitem("_Exit", "application-exit")
        exit_item.connect("activate", lambda x: Gtk.main_quit())
        exit_item.show()
        adapter_menu.append(exit_item)

        self.item_adapter.show()
        self.item_view.show()
        self.item_help.show()
        self.item_device.show()
        self.item_device.props.sensitive = False

        self._manager = bluez.Manager()
        self._manager.connect_signal("adapter-added", self.on_adapter_added)
        self._manager.connect_signal("adapter-removed", self.on_adapter_removed)

        blueman.List.connect("device-selected", self.on_device_selected)

        for adapter in self._manager.get_adapters():
            self.on_adapter_added(None, adapter.get_object_path())

        self.device_menu = None

        self.Config.connect("changed", self._on_settings_changed)
        self._sort_alias_item.connect("activate", self._on_sorting_changed, "alias")
        self._sort_timestamp_item.connect("activate", self._on_sorting_changed, "timestamp")
        self._sort_type_item.connect("activate", self._on_sorting_changed, "sort-type")