diff --git a/src/calibre/devices/mtp/defaults.py b/src/calibre/devices/mtp/defaults.py index e2648b4bcb..251f95b066 100644 --- a/src/calibre/devices/mtp/defaults.py +++ b/src/calibre/devices/mtp/defaults.py @@ -22,6 +22,13 @@ class DeviceDefaults(object): 'send_to': ['documents', 'books', 'kindle'], } ), + # B&N devices + ({'vendor':0x2080}, { + 'format_map': ['epub', 'pdf'], + 'send_to': ['NOOK', 'Calibre_Companion', 'Books', + 'eBooks/import', 'eBooks', 'sdcard/ebooks'], + } + ), ) def __call__(self, device, driver): @@ -47,7 +54,10 @@ class DeviceDefaults(object): matches = False break if matches: - return rule[1] + ans = rule[1] + if vid == 0x2080 and pid == 0x000a: + ans['calibre_file_paths'] = {'metadata':'NOOK/metadata.calibre', 'driveinfo':'NOOK/driveinfo.calibre'} + return ans return {} diff --git a/src/calibre/devices/mtp/driver.py b/src/calibre/devices/mtp/driver.py index c7ca5a7b68..4b257d4255 100644 --- a/src/calibre/devices/mtp/driver.py +++ b/src/calibre/devices/mtp/driver.py @@ -51,6 +51,7 @@ class MTP_DEVICE(BASE): self._prefs = None self.device_defaults = DeviceDefaults() self.current_device_defaults = {} + self.calibre_file_paths = {'metadata':self.METADATA_CACHE, 'driveinfo':self.DRIVEINFO} self.highlight_ignored_folders = False @property @@ -128,6 +129,8 @@ class MTP_DEVICE(BASE): self.prefs['history'] = h self.current_device_defaults = self.device_defaults(device, self) + self.calibre_file_paths = self.current_device_defaults.get( + 'calibre_file_paths', {'metadata':self.METADATA_CACHE, 'driveinfo':self.DRIVEINFO}) def get_device_uid(self): return self.current_serial_num @@ -145,7 +148,7 @@ class MTP_DEVICE(BASE): from calibre.utils.date import isoformat, now from calibre.utils.config import from_json, to_json import uuid - f = storage.find_path((self.DRIVEINFO,)) + f = storage.find_path((self.calibre_file_paths['driveinfo'],)) dinfo = {} if f is not None: try: @@ -167,7 +170,7 @@ class MTP_DEVICE(BASE): dinfo['date_last_connected'] = isoformat(now()) dinfo['mtp_prefix'] = storage.storage_prefix raw = json.dumps(dinfo, default=to_json) - self.put_file(storage, self.DRIVEINFO, BytesIO(raw), len(raw)) + self.put_file(storage, self.calibre_file_paths['driveinfo'], BytesIO(raw), len(raw)) self.driveinfo[location_code] = dinfo def get_driveinfo(self): @@ -222,7 +225,7 @@ class MTP_DEVICE(BASE): self.report_progress(0, _('Reading ebook metadata')) # Read the cache if it exists storage = self.filesystem_cache.storage(sid) - cache = storage.find_path((self.METADATA_CACHE,)) + cache = storage.find_path((self.calibre_file_paths['metadata'],)) if cache is not None: json_codec = JSONCodec() try: @@ -298,7 +301,7 @@ class MTP_DEVICE(BASE): json_codec.encode_to_file(stream, bl) size = stream.tell() stream.seek(0) - self.put_file(storage, self.METADATA_CACHE, stream, size) + self.put_file(storage, self.calibre_file_paths['metadata'], stream, size) def sync_booklists(self, booklists, end_session=True): debug('sync_booklists() called')