Fix #1334 (Adding Books via Add button in meta-data dialog)

This commit is contained in:
Kovid Goyal 2008-12-01 15:08:16 -08:00
parent 26a1562d48
commit 9902b76b68
3 changed files with 20 additions and 15 deletions

View File

@ -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

View File

@ -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:

View File

@ -1,6 +1,6 @@
__license__ = 'GPL v3'
__copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>'
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 = _('<p>Books with the same title as the following already exist in the database. Add them anyway?<ul>')