def books(self, oncard=None, end_session=True): debug_print('PRS505: starting fetching books for card', oncard) bl = USBMS.books(self, oncard=oncard, end_session=end_session) c = self.initialize_XML_cache() c.update_booklist(bl, {'carda':1, 'cardb':2}.get(oncard, 0)) debug_print('PRS505: finished fetching books for card', oncard) return bl
def books(self, oncard=None, end_session=True): debug_print('PRS505: starting fetching books for card', oncard) bl = USBMS.books(self, oncard=oncard, end_session=end_session) c = self.initialize_XML_cache() c.update_booklist(bl, {'carda': 1, 'cardb': 2}.get(oncard, 0)) debug_print('PRS505: finished fetching books for card', oncard) return bl
def books(self, oncard=None, end_session=True): bl = USBMS.books(self, oncard=oncard, end_session=end_session) # Read collections information collections = os.path.join(self._main_prefix, 'system', 'collections.json') if os.access(collections, os.R_OK): try: self.kindle_update_booklist(bl, collections) except: import traceback traceback.print_exc() return bl
def books(self, oncard=None, end_session=True): import sqlite3 as sqlite dummy_bl = BookList(None, None, None) if ( (oncard == 'carda' and not self._card_a_prefix) or (oncard and oncard != 'carda') ): self.report_progress(1.0, _('Getting list of books on device...')) return dummy_bl prefix = self._card_a_prefix if oncard == 'carda' else self._main_prefix # Let parent driver get the books self.booklist_class.rebuild_collections = self.rebuild_collections bl = USBMS.books(self, oncard=oncard, end_session=end_session) dbpath = self.normalize_path(prefix + DBPATH) debug_print("SQLite DB Path: " + dbpath) with closing(sqlite.connect(dbpath)) as connection: # Replace undecodable characters in the db instead of erroring out connection.text_factory = lambda x: unicode(x, "utf-8", "replace") cursor = connection.cursor() # Query collections query = ''' SELECT books._id, collection.title FROM collections LEFT OUTER JOIN books LEFT OUTER JOIN collection WHERE collections.content_id = books._id AND collections.collection_id = collection._id ''' cursor.execute(query) bl_collections = {} for i, row in enumerate(cursor): bl_collections.setdefault(row[0], []) bl_collections[row[0]].append(row[1]) # collect information on offsets, but assume any # offset we already calculated is correct if self.device_offset is None: query = 'SELECT file_path, modified_date FROM books' cursor.execute(query) time_offsets = {} for i, row in enumerate(cursor): try: comp_date = int(os.path.getmtime(self.normalize_path(prefix + row[0])) * 1000) except (OSError, IOError, TypeError): # In case the db has incorrect path info continue device_date = int(row[1]) offset = device_date - comp_date time_offsets.setdefault(offset, 0) time_offsets[offset] = time_offsets[offset] + 1 try: device_offset = max(time_offsets, key=lambda a: time_offsets.get(a)) debug_print("Device Offset: %d ms"%device_offset) self.device_offset = device_offset except ValueError: debug_print("No Books To Detect Device Offset.") for idx, book in enumerate(bl): query = 'SELECT _id, thumbnail FROM books WHERE file_path = ?' t = (book.lpath,) cursor.execute(query, t) for i, row in enumerate(cursor): book.device_collections = bl_collections.get(row[0], None) thumbnail = row[1] if thumbnail is not None: thumbnail = self.normalize_path(prefix + thumbnail) book.thumbnail = ImageWrapper(thumbnail) cursor.close() return bl
def books(self, oncard=None, end_session=True): import sqlite3 as sqlite dummy_bl = BookList(None, None, None) if ( (oncard == 'carda' and not self._card_a_prefix) or (oncard and oncard != 'carda') ): self.report_progress(1.0, _('Getting list of books on device...')) return dummy_bl prefix = self._card_a_prefix if oncard == 'carda' else self._main_prefix # Let parent driver get the books self.booklist_class.rebuild_collections = self.rebuild_collections bl = USBMS.books(self, oncard=oncard, end_session=end_session) dbpath = self.normalize_path(prefix + DBPATH) debug_print("SQLite DB Path: " + dbpath) with closing(sqlite.connect(dbpath)) as connection: # Replace undecodable characters in the db instead of erroring out connection.text_factory = lambda x: unicode(x, "utf-8", "replace") cursor = connection.cursor() # Query collections query = ''' SELECT books._id, collection.title FROM collections LEFT OUTER JOIN books LEFT OUTER JOIN collection WHERE collections.content_id = books._id AND collections.collection_id = collection._id ''' cursor.execute(query) bl_collections = {} for i, row in enumerate(cursor): bl_collections.setdefault(row[0], []) bl_collections[row[0]].append(row[1]) # collect information on offsets, but assume any # offset we already calculated is correct if self.device_offset is None: query = 'SELECT file_path, modified_date FROM books' cursor.execute(query) time_offsets = {} for i, row in enumerate(cursor): try: comp_date = int(os.path.getmtime(self.normalize_path(prefix + row[0])) * 1000); except (OSError, IOError, TypeError): # In case the db has incorrect path info continue device_date = int(row[1]); offset = device_date - comp_date time_offsets.setdefault(offset, 0) time_offsets[offset] = time_offsets[offset] + 1 try: device_offset = max(time_offsets,key = lambda a: time_offsets.get(a)) debug_print("Device Offset: %d ms"%device_offset) self.device_offset = device_offset except ValueError: debug_print("No Books To Detect Device Offset.") for idx, book in enumerate(bl): query = 'SELECT _id, thumbnail FROM books WHERE file_path = ?' t = (book.lpath,) cursor.execute (query, t) for i, row in enumerate(cursor): book.device_collections = bl_collections.get(row[0], None) thumbnail = row[1] if thumbnail is not None: thumbnail = self.normalize_path(prefix + thumbnail) book.thumbnail = ImageWrapper(thumbnail) cursor.close() return bl