Refactor adding API to accept add_duplicates and use new_api

This commit is contained in:
Kovid Goyal 2017-04-29 16:50:38 +05:30
parent 3a764a429d
commit f73a5f0d5a
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -127,8 +127,18 @@ def find_books_in_directory(dirpath, single_book_per_directory, compiled_rules=(
yield list(formats.itervalues())
def create_format_map(formats):
format_map = {}
for path in formats:
ext = os.path.splitext(path)[1][1:].upper()
if ext == 'OPF':
continue
format_map[ext] = path
return format_map
def import_book_directory_multiple(db, dirpath, callback=None,
added_ids=None, compiled_rules=()):
added_ids=None, compiled_rules=(), add_duplicates=False):
from calibre.ebooks.metadata.meta import metadata_from_formats
duplicates = []
@ -136,10 +146,11 @@ def import_book_directory_multiple(db, dirpath, callback=None,
mi = metadata_from_formats(formats)
if mi.title is None:
continue
if db.has_book(mi):
ids, dups = db.new_api.add_books([(mi, create_format_map(formats))], add_duplicates=add_duplicates)
if dups:
duplicates.append((mi, formats))
continue
book_id = db.import_book(mi, formats)
book_id = next(ids)
if added_ids is not None:
added_ids.add(book_id)
if callable(callback):
@ -148,7 +159,7 @@ def import_book_directory_multiple(db, dirpath, callback=None,
return duplicates
def import_book_directory(db, dirpath, callback=None, added_ids=None, compiled_rules=()):
def import_book_directory(db, dirpath, callback=None, added_ids=None, compiled_rules=(), add_duplicates=False):
from calibre.ebooks.metadata.meta import metadata_from_formats
dirpath = os.path.abspath(dirpath)
formats = None
@ -159,9 +170,10 @@ def import_book_directory(db, dirpath, callback=None, added_ids=None, compiled_r
mi = metadata_from_formats(formats)
if mi.title is None:
return
if db.has_book(mi):
ids, dups = db.new_api.add_books([(mi, create_format_map(formats))], add_duplicates=add_duplicates)
if dups:
return [(mi, formats)]
book_id = db.import_book(mi, formats)
book_id = next(ids)
if added_ids is not None:
added_ids.add(book_id)
if callable(callback):
@ -169,14 +181,13 @@ def import_book_directory(db, dirpath, callback=None, added_ids=None, compiled_r
def recursive_import(db, root, single_book_per_directory=True,
callback=None, added_ids=None, compiled_rules=()):
callback=None, added_ids=None, compiled_rules=(), add_duplicates=False):
root = os.path.abspath(root)
duplicates = []
for dirpath in os.walk(root):
res = (import_book_directory(db, dirpath[0], callback=callback,
added_ids=added_ids, compiled_rules=compiled_rules) if single_book_per_directory else
import_book_directory_multiple(db, dirpath[0],
callback=callback, added_ids=added_ids, compiled_rules=compiled_rules))
func = import_book_directory if single_book_per_directory else import_book_directory_multiple
res = func(db, dirpath[0], callback=callback,
added_ids=added_ids, compiled_rules=compiled_rules, add_duplicates=add_duplicates)
if res is not None:
duplicates.extend(res)
if callable(callback):