def __init__(self, application, settings, btsupport): self.application = application self.settings = settings self.btsupport = btsupport self.is_refreshing = False self.loadUI() # Restore the saved size and position if self.settings.get_value(Preferences.RESTORE_SIZE): if self.settings.get_value(Preferences.WINWIDTH) and \ self.settings.get_value(Preferences.WINHEIGHT): self.winMain.set_default_size( self.settings.get_value(Preferences.WINWIDTH), self.settings.get_value(Preferences.WINHEIGHT)) if self.settings.get_value(Preferences.WINLEFT) and \ self.settings.get_value(Preferences.WINTOP): self.winMain.move(self.settings.get_value(Preferences.WINLEFT), self.settings.get_value(Preferences.WINTOP)) # Restore the devices list for device in self.settings.load_devices(): self.add_device(device['address'], device['name'], device['class'], device['lastseen'], False) # Load the others dialogs self.about = DialogAbout(self.winMain, False) # Set other properties self.btsupport.set_new_device_cb(self.on_new_device_cb) self.thread_scanner = None self.fake_devices = FakeDevices()
def do_scan(self): "Scan for bluetooth devices until cancelled" while True: # Cancel the running thread if self.thread_scanner.cancelled: break # Wait until an event awakes the thread again if self.thread_scanner.paused: self.thread_scanner.event.wait() self.thread_scanner.event.clear() # Only show local adapters when Preferences.SHOW_LOCAL preference is set if self.settings.get_value(Preferences.SHOW_LOCAL): # Add local adapters for devices_count in range(10): name, address = self.btsupport.get_localAdapter( devices_count) if name and address: # Adapter device found name = 'hci%d (%s)' % (devices_count, name) self.add_device(address, name, 1 << 2, get_current_time(), True) else: # No more devices found if devices_count == 0: self.settings.logText( 'No local devices found during detection', VERBOSE_LEVEL_NORMAL) self.set_status_bar_message( _('No local devices found during detection.')) break # Discover devices via bluetooth self.btsupport.discover( self.settings.get_value(Preferences.RETRIEVE_NAMES), 8, True) # What is this? useful for testing purposes, you can just ignore it if USE_FAKE_DEVICES: #self.on_new_device_cb(*self.fake_devices.pick_one()) self.fake_devices = FakeDevices() #self.on_new_device_cb(*self.fake_devices.fetch_one()) for fake_device in self.fake_devices.fetch_many(): #for fake_device in self.fake_devices.fetch_max(5): #for fake_device in self.fake_devices.fetch_all(): self.on_new_device_cb(*fake_device) sleep(2) # After exiting from the scanning process, change the UI self.thread_scanner = None self.set_status_bar_message(None) idle_add(self.spinnerScan.stop) idle_add(self.spinnerScan.set_visible, False) idle_add(self.toolbDetect.set_sensitive, True) return False