Beispiel #1
0
 def get_pdf_cover(self):
     pdfpath = self.formats_manager.get_format_path(self.db, self.book_id,
                                                    'pdf')
     from calibre.gui2.metadata.pdf_covers import PDFCovers
     d = PDFCovers(pdfpath, parent=self)
     if d.exec_() == d.Accepted:
         cpath = d.cover_path
         if cpath:
             with open(cpath, 'rb') as f:
                 self.update_cover(f.read(), 'PDF')
     d.cleanup()
Beispiel #2
0
 def set_cover_from_format(self, book_id, fmt):
     from calibre.utils.config import prefs
     from calibre.ebooks.metadata.meta import get_metadata
     fmt = fmt.lower()
     cdata = None
     db = self.gui.current_db.new_api
     if fmt == 'pdf':
         pdfpath = db.format_abspath(book_id, fmt)
         if pdfpath is None:
             return error_dialog(self.gui, _('Format file missing'), _(
                 'Cannot read cover as the %s file is missing from this book') % 'PDF', show=True)
         from calibre.gui2.metadata.pdf_covers import PDFCovers
         d = PDFCovers(pdfpath, parent=self.gui)
         ret = d.exec_()
         if ret == d.Accepted:
             cpath = d.cover_path
             if cpath:
                 with open(cpath, 'rb') as f:
                     cdata = f.read()
         d.cleanup()
         if ret != d.Accepted:
             return
     else:
         stream = BytesIO()
         try:
             db.copy_format_to(book_id, fmt, stream)
         except NoSuchFormat:
             return error_dialog(self.gui, _('Format file missing'), _(
                 'Cannot read cover as the %s file is missing from this book') % fmt.upper(), show=True)
         old = prefs['read_file_metadata']
         if not old:
             prefs['read_file_metadata'] = True
         try:
             stream.seek(0)
             mi = get_metadata(stream, fmt)
         except Exception:
             import traceback
             return error_dialog(self.gui, _('Could not read metadata'),
                         _('Could not read metadata from %s format')%fmt.upper(),
                          det_msg=traceback.format_exc(), show=True)
         finally:
             if old != prefs['read_file_metadata']:
                 prefs['read_file_metadata'] = old
         if mi.cover and os.access(mi.cover, os.R_OK):
             cdata = open(mi.cover).read()
         elif mi.cover_data[1] is not None:
             cdata = mi.cover_data[1]
         if cdata is None:
             return error_dialog(self.gui, _('Could not read cover'),
                         _('Could not read cover from %s format')%fmt.upper(), show=True)
     db.set_cover({book_id:cdata})
     current_idx = self.gui.library_view.currentIndex()
     self.gui.library_view.model().current_changed(current_idx, current_idx)
     self.gui.refresh_cover_browser()
Beispiel #3
0
 def set_cover_from_format(self, book_id, fmt):
     from calibre.ebooks.metadata.meta import get_metadata
     from calibre.utils.config import prefs
     fmt = fmt.lower()
     cdata = None
     db = self.gui.current_db.new_api
     if fmt == 'pdf':
         pdfpath = db.format_abspath(book_id, fmt)
         if pdfpath is None:
             return error_dialog(
                 self.gui,
                 _('Format file missing'),
                 _('Cannot read cover as the %s file is missing from this book'
                   ) % 'PDF',
                 show=True)
         from calibre.gui2.metadata.pdf_covers import PDFCovers
         d = PDFCovers(pdfpath, parent=self.gui)
         ret = d.exec_()
         if ret == QDialog.DialogCode.Accepted:
             cpath = d.cover_path
             if cpath:
                 with open(cpath, 'rb') as f:
                     cdata = f.read()
         d.cleanup()
         if ret != QDialog.DialogCode.Accepted:
             return
     else:
         stream = BytesIO()
         try:
             db.copy_format_to(book_id, fmt, stream)
         except NoSuchFormat:
             return error_dialog(
                 self.gui,
                 _('Format file missing'),
                 _('Cannot read cover as the %s file is missing from this book'
                   ) % fmt.upper(),
                 show=True)
         old = prefs['read_file_metadata']
         if not old:
             prefs['read_file_metadata'] = True
         try:
             stream.seek(0)
             mi = get_metadata(stream, fmt)
         except Exception:
             import traceback
             return error_dialog(
                 self.gui,
                 _('Could not read metadata'),
                 _('Could not read metadata from %s format') % fmt.upper(),
                 det_msg=traceback.format_exc(),
                 show=True)
         finally:
             if old != prefs['read_file_metadata']:
                 prefs['read_file_metadata'] = old
         if mi.cover and os.access(mi.cover, os.R_OK):
             with open(mi.cover, 'rb') as f:
                 cdata = f.read()
         elif mi.cover_data[1] is not None:
             cdata = mi.cover_data[1]
         if cdata is None:
             return error_dialog(self.gui,
                                 _('Could not read cover'),
                                 _('Could not read cover from %s format') %
                                 fmt.upper(),
                                 show=True)
     db.set_cover({book_id: cdata})
     current_idx = self.gui.library_view.currentIndex()
     self.gui.library_view.model().current_changed(current_idx, current_idx)
     self.gui.refresh_cover_browser()