def open(self, connected_device, library_uuid): self.dev = self._filesystem_cache = None try: self.dev = self.create_device(connected_device) except Exception as e: self.blacklisted_devices.add(connected_device) raise OpenFailed('Failed to open %s: Error: %s'%( connected_device, as_unicode(e))) storage = sorted(self.dev.storage_info, key=operator.itemgetter('id')) storage = [x for x in storage if x.get('rw', False)] if not storage: self.blacklisted_devices.add(connected_device) raise OpenFailed('No storage found for device %s'%(connected_device,)) snum = self.dev.serial_number if snum in self.prefs.get('blacklist', []): self.blacklisted_devices.add(connected_device) self.dev = None raise BlacklistedDevice( 'The %s device has been blacklisted by the user'%(connected_device,)) self._main_id = storage[0]['id'] self._carda_id = self._cardb_id = None if len(storage) > 1: self._carda_id = storage[1]['id'] if len(storage) > 2: self._cardb_id = storage[2]['id'] self.current_friendly_name = self.dev.friendly_name if not self.current_friendly_name: self.current_friendly_name = self.dev.model_name or _('Unknown MTP device') self.current_serial_num = snum self.currently_connected_dev = connected_device
def open(self, connected_device, library_uuid): self.dev = self._filesystem_cache = None try: self.dev = self.create_device(connected_device) except Exception as e: self.blacklisted_devices.add(connected_device) raise OpenFailed('Failed to open %s: Error: %s'%( connected_device, as_unicode(e))) try: storage = sorted(self.dev.storage_info, key=operator.itemgetter('id')) except self.libmtp.MTPError as e: if "The device has no storage information." in str(e): # This happens on newer Android devices while waiting for # the user to allow access. Apparently what happens is # that when the user clicks allow, the device disconnects # and re-connects as a new device. name = self.dev.friendly_name or '' if not name: if connected_device.manufacturer: name = connected_device.manufacturer if connected_device.product: name = name and (name + ' ') name += connected_device.product name = name or _('Unnamed device') raise OpenActionNeeded(name, _( 'The device {0} is not allowing connections.' ' Unlock the screen on the {0}, tap "Allow" on any connection popup message you see,' ' then either wait a minute or restart calibre. You might' ' also have to change the mode of the USB connection on the {0}' ' to "Media Transfer mode (MTP)" or similar.' ).format(name), (name, self.dev.serial_number)) raise storage = [x for x in storage if x.get('rw', False)] if not storage: self.blacklisted_devices.add(connected_device) raise OpenFailed('No storage found for device %s'%(connected_device,)) snum = self.dev.serial_number if snum in self.prefs.get('blacklist', []): self.blacklisted_devices.add(connected_device) self.dev = None raise BlacklistedDevice( 'The %s device has been blacklisted by the user'%(connected_device,)) self._main_id = storage[0]['id'] self._carda_id = self._cardb_id = None if len(storage) > 1: self._carda_id = storage[1]['id'] if len(storage) > 2: self._cardb_id = storage[2]['id'] self.current_friendly_name = self.dev.friendly_name if not self.current_friendly_name: self.current_friendly_name = self.dev.model_name or _('Unknown MTP device') self.current_serial_num = snum self.currently_connected_dev = connected_device
def open(self, connected_device, library_uuid): self.dev = self._filesystem_cache = None try: self.dev = self.wpd.Device(connected_device) except self.wpd.WPDError: time.sleep(2) try: self.dev = self.wpd.Device(connected_device) except self.wpd.WPDError as e: self.blacklisted_devices.add(connected_device) raise OpenFailed('Failed to open %s with error: %s' % (connected_device, as_unicode(e))) devdata = self.dev.data storage = [s for s in devdata.get('storage', []) if s.get('rw', False)] if not storage: self.blacklisted_devices.add(connected_device) raise OpenFailed('No storage found for device %s' % (connected_device, )) snum = devdata.get('serial_number', None) if snum in self.prefs.get('blacklist', []): self.blacklisted_devices.add(connected_device) self.dev = None raise BlacklistedDevice( 'The %s device has been blacklisted by the user' % (connected_device, )) storage.sort(key=lambda x: x.get('id', 'zzzzz')) self._main_id = storage[0]['id'] if len(storage) > 1: self._carda_id = storage[1]['id'] if len(storage) > 2: self._cardb_id = storage[2]['id'] self.current_friendly_name = devdata.get('friendly_name', '') if not self.current_friendly_name: self.current_friendly_name = devdata.get('model_name', _('Unknown MTP device')) self.currently_connected_pnp_id = connected_device self.current_serial_num = snum self.current_device_data = devdata.copy()