def do_book(self): book_id = self.book_ids[self.i] self.i += 1 title = '' try: mi = self.db.get_metadata(book_id, index_is_id=True, get_user_categories=False) title, formats = mi.title, mi.formats if not formats: self.failed_ids.append((book_id, title)) self.no_format_ids.append((book_id, title)) else: # Sorted formats using the preferred input conversion list. sorted_formats = sort_formats_by_preference( formats, self.input_map) paths_for_formats = [] for f in sorted_formats: paths_for_formats.append( (f, self.db.format_abspath(book_id, f, index_is_id=True))) self.setLabelText(_('Queueing ') + title) self.books_to_scan.append((book_id, title, mi.last_modified, mi.isbn, paths_for_formats)) self.setValue(self.i) except: traceback.print_exc() self.failed_ids.append((book_id, title)) if self.i >= len(self.book_ids): return self.do_queue() else: QTimer.singleShot(0, self.do_book)
def setup_output_formats(self, db, preferred_output_format): if preferred_output_format: preferred_output_format = preferred_output_format.upper() output_formats = get_output_formats(preferred_output_format) preferred_output_format = preferred_output_format if \ preferred_output_format and preferred_output_format \ in output_formats else sort_formats_by_preference(output_formats, [prefs['output_format']])[0] self.output_formats.addItems(list(map(QString, [x.upper() for x in output_formats]))) self.output_formats.setCurrentIndex(output_formats.index(preferred_output_format))
def setup_output_formats(self, db, preferred_output_format): if preferred_output_format: preferred_output_format = preferred_output_format.upper() output_formats = get_output_formats(preferred_output_format) preferred_output_format = preferred_output_format if \ preferred_output_format and preferred_output_format \ in output_formats else sort_formats_by_preference(output_formats, [prefs['output_format']])[0] self.output_formats.addItems(list(map(unicode, [x.upper() for x in output_formats]))) self.output_formats.setCurrentIndex(output_formats.index(preferred_output_format))
def setup_output_formats(self, db, preferred_output_format): if preferred_output_format: preferred_output_format = preferred_output_format.lower() output_formats = sorted(available_output_formats(), key=lambda x:{'EPUB':'!A', 'MOBI':'!B'}.get(x.upper(), x)) output_formats.remove('oeb') preferred_output_format = preferred_output_format if \ preferred_output_format and preferred_output_format \ in output_formats else sort_formats_by_preference(output_formats, prefs['output_format'])[0] self.output_formats.addItems(list(map(QString, [x.upper() for x in output_formats]))) self.output_formats.setCurrentIndex(output_formats.index(preferred_output_format))
def extract_threaded(ids, db, log=None, abort=None, notifications=None): ''' In combination with start_extract_threaded this function performs the scan of the book(s) from a separate thread. ''' ids = list(ids) same_isbn_ids = [] input_map = prefs['input_format_order'] failed_ids = list() no_format_ids = list() extracted_ids = [] count = 0 for book_id in ids: if abort.is_set(): log.error('Aborting...') break mi = db.get_metadata(book_id, index_is_id=True, get_user_categories=False) title, formats = mi.title, mi.formats if not formats: log.error(' No formats available for', title) failed_ids.append((book_id, title)) no_format_ids.append((book_id, title)) else: # Sorted formats using the preferred input conversion list. sorted_formats = sort_formats_by_preference(formats, input_map) paths_for_formats = [] for f in sorted_formats: paths_for_formats.append((f, db.format_abspath(book_id, f, index_is_id=True))) isbn = None try: isbn = scan_for_isbn(log, Event(), title, paths_for_formats) except: pass if isbn: if mi.isbn == isbn: log.debug(' Identical ISBN extracted of: %s'%(isbn,)) same_isbn_ids.append((book_id, title)) else: log.warn(' New ISBN extracted of: %s'%(isbn,)) extracted_ids.append((book_id, title, mi.last_modified, isbn)) else: log.error(' Failed to extract ISBN') failed_ids.append((book_id, title)) log.info('===================================================') count += 1 notifications.put((count/len(ids), _('Scanned %d of %d')%(count, len(ids)))) log('Scan complete, with %d failures'%len(failed_ids)) return (extracted_ids, same_isbn_ids, failed_ids, no_format_ids)
def setup_output_formats(self, db, preferred_output_format): if preferred_output_format: preferred_output_format = preferred_output_format.lower() output_formats = sorted(available_output_formats(), key=lambda x: { 'EPUB': '!A', 'MOBI': '!B' }.get(x.upper(), x)) output_formats.remove('oeb') preferred_output_format = preferred_output_format if \ preferred_output_format and preferred_output_format \ in output_formats else sort_formats_by_preference(output_formats, prefs['output_format'])[0] self.output_formats.addItems( list(map(QString, [x.upper() for x in output_formats]))) self.output_formats.setCurrentIndex( output_formats.index(preferred_output_format))