diff --git a/src/calibre/gui2/__init__.py b/src/calibre/gui2/__init__.py index a393843156..3799e1d1de 100644 --- a/src/calibre/gui2/__init__.py +++ b/src/calibre/gui2/__init__.py @@ -14,6 +14,7 @@ from calibre import __author__, islinux, iswindows, isosx from calibre.startup import get_lang from calibre.utils.config import Config, ConfigProxy, dynamic import calibre.resources as resources +from calibre.ebooks.html import gui_main as html2oeb NONE = QVariant() #: Null value to return from the data function of item models @@ -388,6 +389,14 @@ def pixmap_to_data(pixmap, format='JPEG'): pixmap.save(buf, format) return str(ba.data()) +html_pat = re.compile(r'\.x{0,1}htm(l{0,1})\s*$', re.IGNORECASE) +def import_format(path): + if html_pat.search(path) is not None: + try: + return html2oeb(path), 'zip' + except: + traceback.print_exc() + return None, None try: from calibre.utils.single_qt_application import SingleApplication diff --git a/src/calibre/gui2/dialogs/metadata_single.py b/src/calibre/gui2/dialogs/metadata_single.py index 3489a50812..832d47238f 100644 --- a/src/calibre/gui2/dialogs/metadata_single.py +++ b/src/calibre/gui2/dialogs/metadata_single.py @@ -11,7 +11,7 @@ from PyQt4.QtGui import QPixmap, QListWidgetItem, QErrorMessage, QDialog from calibre.gui2 import qstring_to_unicode, error_dialog, file_icon_provider, \ - choose_files, pixmap_to_data, choose_images + choose_files, pixmap_to_data, choose_images, import_format from calibre.gui2.dialogs.metadata_single_ui import Ui_MetadataSingleDialog from calibre.gui2.dialogs.fetch_metadata import FetchMetadata from calibre.gui2.dialogs.tag_editor import TagEditor @@ -84,6 +84,9 @@ class MetadataSingleDialog(QDialog, Ui_MetadataSingleDialog): QErrorMessage(self.window).showMessage("You do not have "+\ "permission to read the file: " + _file) continue + nf = import_format(_file)[0] + if nf is not None: + _file = nf size = os.stat(_file).st_size ext = os.path.splitext(_file)[1].lower() if '.' in ext: diff --git a/src/calibre/gui2/main.py b/src/calibre/gui2/main.py index cd8a74989b..e7948c2cf3 100644 --- a/src/calibre/gui2/main.py +++ b/src/calibre/gui2/main.py @@ -1,6 +1,6 @@ __license__ = 'GPL v3' __copyright__ = '2008, Kovid Goyal ' -import os, sys, textwrap, collections, traceback, time, re +import os, sys, textwrap, collections, traceback, time from xml.parsers.expat import ExpatError from functools import partial from PyQt4.QtCore import Qt, SIGNAL, QObject, QCoreApplication, QUrl, QTimer @@ -21,7 +21,7 @@ from calibre.gui2 import APP_UID, warning_dialog, choose_files, error_dialog, \ pixmap_to_data, choose_dir, ORG_NAME, \ set_sidebar_directories, Dispatcher, \ SingleApplication, Application, available_height, \ - max_available_height, config, info_dialog + max_available_height, config, info_dialog, import_format from calibre.gui2.cover_flow import CoverFlow, DatabaseImages, pictureflowerror from calibre.library.database import LibraryDatabase from calibre.gui2.dialogs.scheduler import Scheduler @@ -43,7 +43,6 @@ from calibre.gui2.dialogs.choose_format import ChooseFormatDialog from calibre.gui2.dialogs.book_info import BookInfo from calibre.ebooks.metadata.meta import set_metadata from calibre.ebooks.metadata import MetaInformation -from calibre.ebooks.html import gui_main as html2oeb from calibre.ebooks import BOOK_EXTENSIONS from calibre.library.database2 import LibraryDatabase2, CoverCache from calibre.parallel import JobKilled @@ -571,19 +570,13 @@ class Main(MainWindow, Ui_MainWindow): if not to_device: model = self.library_view.model() - html_pat = re.compile(r'\.x{0,1}htm(l{0,1})\s*$', re.IGNORECASE) + paths = list(paths) for i, path in enumerate(paths): - if html_pat.search(path) is not None: - try: - paths[i] = html2oeb(path) - except: - traceback.print_exc() - continue - if paths[i] is None: - paths[i] = path - else: - formats[i] = 'zip' + npath, fmt = import_format(path) + if npath is not None: + paths[i] = npath + formats[i] = fmt duplicates, number_added = model.add_books(paths, formats, metadata) if duplicates: files = _('

Books with the same title as the following already exist in the database. Add them anyway?