mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Fix regression taht caused original files to be deleted when adding books recursively. Also Fix #7342 (Version 0.7.25 not get metadata from file name)
This commit is contained in:
parent
9138e0bae5
commit
e9b419521e
@ -282,15 +282,22 @@ class HTMLInput(InputFormatPlugin):
|
|||||||
basedir = os.getcwd()
|
basedir = os.getcwd()
|
||||||
self.opts = opts
|
self.opts = opts
|
||||||
|
|
||||||
|
fname = None
|
||||||
if hasattr(stream, 'name'):
|
if hasattr(stream, 'name'):
|
||||||
basedir = os.path.dirname(stream.name)
|
basedir = os.path.dirname(stream.name)
|
||||||
|
fname = os.path.basename(stream.name)
|
||||||
|
|
||||||
if file_ext != 'opf':
|
if file_ext != 'opf':
|
||||||
if opts.dont_package:
|
if opts.dont_package:
|
||||||
raise ValueError('The --dont-package option is not supported for an HTML input file')
|
raise ValueError('The --dont-package option is not supported for an HTML input file')
|
||||||
from calibre.ebooks.metadata.html import get_metadata
|
from calibre.ebooks.metadata.html import get_metadata
|
||||||
oeb = self.create_oebbook(stream.name, basedir, opts, log,
|
mi = get_metadata(stream)
|
||||||
get_metadata(stream))
|
if fname:
|
||||||
|
from calibre.ebooks.metadata.meta import metadata_from_filename
|
||||||
|
fmi = metadata_from_filename(fname)
|
||||||
|
fmi.smart_update(mi)
|
||||||
|
mi = fmi
|
||||||
|
oeb = self.create_oebbook(stream.name, basedir, opts, log, mi)
|
||||||
return oeb
|
return oeb
|
||||||
|
|
||||||
from calibre.ebooks.conversion.plumber import create_oebbook
|
from calibre.ebooks.conversion.plumber import create_oebbook
|
||||||
|
@ -12,7 +12,7 @@ import os, time, sys, shutil
|
|||||||
|
|
||||||
from calibre.utils.ipc.job import ParallelJob
|
from calibre.utils.ipc.job import ParallelJob
|
||||||
from calibre.utils.ipc.server import Server
|
from calibre.utils.ipc.server import Server
|
||||||
from calibre.ptempfile import PersistentTemporaryDirectory
|
from calibre.ptempfile import PersistentTemporaryDirectory, TemporaryDirectory
|
||||||
from calibre import prints
|
from calibre import prints
|
||||||
from calibre.constants import filesystem_encoding
|
from calibre.constants import filesystem_encoding
|
||||||
|
|
||||||
@ -39,6 +39,10 @@ def serialize_metadata_for(formats, tdir, id_):
|
|||||||
f.write(cdata)
|
f.write(cdata)
|
||||||
|
|
||||||
def read_metadata_(task, tdir, notification=lambda x,y:x):
|
def read_metadata_(task, tdir, notification=lambda x,y:x):
|
||||||
|
with TemporaryDirectory() as mdir:
|
||||||
|
do_read_metadata(task, tdir, mdir, notification)
|
||||||
|
|
||||||
|
def do_read_metadata(task, tdir, mdir, notification):
|
||||||
from calibre.customize.ui import run_plugins_on_import
|
from calibre.customize.ui import run_plugins_on_import
|
||||||
for x in task:
|
for x in task:
|
||||||
try:
|
try:
|
||||||
@ -48,17 +52,28 @@ def read_metadata_(task, tdir, notification=lambda x,y:x):
|
|||||||
try:
|
try:
|
||||||
if isinstance(formats, basestring): formats = [formats]
|
if isinstance(formats, basestring): formats = [formats]
|
||||||
import_map = {}
|
import_map = {}
|
||||||
fmts = []
|
fmts, metadata_fmts = [], []
|
||||||
for format in formats:
|
for format in formats:
|
||||||
|
mfmt = format
|
||||||
|
name, ext = os.path.splitext(os.path.basename(format))
|
||||||
nfp = run_plugins_on_import(format)
|
nfp = run_plugins_on_import(format)
|
||||||
if not nfp or not os.access(nfp, os.R_OK):
|
if not nfp or nfp == format or not os.access(nfp, os.R_OK):
|
||||||
nfp = format
|
nfp = None
|
||||||
|
else:
|
||||||
|
# Ensure that the filename is preserved so that
|
||||||
|
# reading metadata from filename is not broken
|
||||||
nfp = os.path.abspath(nfp)
|
nfp = os.path.abspath(nfp)
|
||||||
|
nfext = os.path.splitext(nfp)[1]
|
||||||
|
mfmt = os.path.join(mdir, name + nfext)
|
||||||
|
shutil.copyfile(nfp, mfmt)
|
||||||
|
metadata_fmts.append(mfmt)
|
||||||
fmts.append(nfp)
|
fmts.append(nfp)
|
||||||
|
|
||||||
serialize_metadata_for(fmts, tdir, id_)
|
serialize_metadata_for(metadata_fmts, tdir, id_)
|
||||||
|
|
||||||
for format, nfp in zip(formats, fmts):
|
for format, nfp in zip(formats, fmts):
|
||||||
|
if not nfp:
|
||||||
|
continue
|
||||||
if isinstance(nfp, unicode):
|
if isinstance(nfp, unicode):
|
||||||
nfp.encode(filesystem_encoding)
|
nfp.encode(filesystem_encoding)
|
||||||
x = lambda j : os.path.abspath(os.path.normpath(os.path.normcase(j)))
|
x = lambda j : os.path.abspath(os.path.normpath(os.path.normcase(j)))
|
||||||
@ -68,7 +83,6 @@ def read_metadata_(task, tdir, notification=lambda x,y:x):
|
|||||||
dest = os.path.join(tdir, '%s.%s'%(id_, nfmt))
|
dest = os.path.join(tdir, '%s.%s'%(id_, nfmt))
|
||||||
shutil.copyfile(nfp, dest)
|
shutil.copyfile(nfp, dest)
|
||||||
import_map[fmt] = dest
|
import_map[fmt] = dest
|
||||||
os.remove(nfp)
|
|
||||||
if import_map:
|
if import_map:
|
||||||
with open(os.path.join(tdir, str(id_)+'.import'), 'wb') as f:
|
with open(os.path.join(tdir, str(id_)+'.import'), 'wb') as f:
|
||||||
for fmt, nfp in import_map.items():
|
for fmt, nfp in import_map.items():
|
||||||
|
Loading…
x
Reference in New Issue
Block a user