From 17df10b5a25c6bdc241bffc37bf76b3bf393e988 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 14 Jan 2009 10:49:06 -0800 Subject: [PATCH] Only send news to device if the device supports the format the news has been downloaded in --- src/calibre/ebooks/pdf/pdftrim.py | 6 +++--- src/calibre/gui2/library.py | 24 +++++++++++++++++++++++- src/calibre/gui2/main.py | 5 +++-- 3 files changed, 29 insertions(+), 6 deletions(-) diff --git a/src/calibre/ebooks/pdf/pdftrim.py b/src/calibre/ebooks/pdf/pdftrim.py index 2054f22558..31f43803bf 100644 --- a/src/calibre/ebooks/pdf/pdftrim.py +++ b/src/calibre/ebooks/pdf/pdftrim.py @@ -49,13 +49,13 @@ def main(args=sys.argv): input_pdf = PdfFileReader(file(source, "rb")) except: print "Unable to read input" - return 2 + return 2 info = input_pdf.getDocumentInfo() title = 'Unknown' author = 'Unknown' if info.title: - title = info.title - author = info.author + title = info.title + author = info.author if opts.bounding != None: try: bounding = open( opts.bounding , 'r' ) diff --git a/src/calibre/gui2/library.py b/src/calibre/gui2/library.py index 3129fec47a..792d011883 100644 --- a/src/calibre/gui2/library.py +++ b/src/calibre/gui2/library.py @@ -385,13 +385,35 @@ class BooksModel(QAbstractTableModel): metadata.append(mi) return metadata + def get_preferred_formats_from_ids(self, ids, all_formats, mode='r+b'): + ans = [] + for id in ids: + format = None + fmts = self.db.formats(id, index_is_id=True) + if not fmts: + fmts = '' + available_formats = set(fmts.lower().split(',')) + for f in all_formats: + if f.lower() in available_formats: + format = f.lower() + break + if format is None: + ans.append(format) + else: + f = self.db.format(id, format, index_is_id=True, as_file=True, + mode=mode) + ans.append(f) + return ans + + + def get_preferred_formats(self, rows, formats, paths=False): ans = [] for row in (row.row() for row in rows): format = None fmts = self.db.formats(row) if not fmts: - return [] + fmts = '' db_formats = set(fmts.lower().split(',')) available_formats = set([f.lower() for f in formats]) u = available_formats.intersection(db_formats) diff --git a/src/calibre/gui2/main.py b/src/calibre/gui2/main.py index 5429fb15c1..fadfd33c17 100644 --- a/src/calibre/gui2/main.py +++ b/src/calibre/gui2/main.py @@ -887,7 +887,8 @@ class Main(MainWindow, Ui_MainWindow): if self.device_connected: ids = list(dynamic.get('news_to_be_synced', set([]))) ids = [id for id in ids if self.library_view.model().db.has_id(id)] - files = [self.library_view.model().db.format(id, prefs['output_format'], index_is_id=True, as_file=True) for id in ids] + files = self.library_view.model().get_preferred_formats_from_ids( + ids, self.device_manager.device_class.FORMATS) files = [f for f in files if f is not None] if not files: dynamic.set('news_to_be_synced', set([])) @@ -922,7 +923,7 @@ class Main(MainWindow, Ui_MainWindow): if cdata: mi['cover'] = self.cover_to_thumbnail(cdata) metadata = iter(metadata) - _files = self.library_view.model().get_preferred_formats(rows, + _files = self.library_view.model().get_preferred_formats(rows, self.device_manager.device_class.FORMATS, paths=True) files = [getattr(f, 'name', None) for f in _files] bad, good, gf, names = [], [], [], []