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()) 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, 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 from calibre.ebooks.metadata.meta import metadata_from_formats
duplicates = [] duplicates = []
@ -136,10 +146,11 @@ def import_book_directory_multiple(db, dirpath, callback=None,
mi = metadata_from_formats(formats) mi = metadata_from_formats(formats)
if mi.title is None: if mi.title is None:
continue 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)) duplicates.append((mi, formats))
continue continue
book_id = db.import_book(mi, formats) book_id = next(ids)
if added_ids is not None: if added_ids is not None:
added_ids.add(book_id) added_ids.add(book_id)
if callable(callback): if callable(callback):
@ -148,7 +159,7 @@ def import_book_directory_multiple(db, dirpath, callback=None,
return duplicates 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 from calibre.ebooks.metadata.meta import metadata_from_formats
dirpath = os.path.abspath(dirpath) dirpath = os.path.abspath(dirpath)
formats = None formats = None
@ -159,9 +170,10 @@ def import_book_directory(db, dirpath, callback=None, added_ids=None, compiled_r
mi = metadata_from_formats(formats) mi = metadata_from_formats(formats)
if mi.title is None: if mi.title is None:
return 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)] return [(mi, formats)]
book_id = db.import_book(mi, formats) book_id = next(ids)
if added_ids is not None: if added_ids is not None:
added_ids.add(book_id) added_ids.add(book_id)
if callable(callback): 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, 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) root = os.path.abspath(root)
duplicates = [] duplicates = []
for dirpath in os.walk(root): for dirpath in os.walk(root):
res = (import_book_directory(db, dirpath[0], callback=callback, func = import_book_directory if single_book_per_directory else import_book_directory_multiple
added_ids=added_ids, compiled_rules=compiled_rules) if single_book_per_directory else res = func(db, dirpath[0], callback=callback,
import_book_directory_multiple(db, dirpath[0], added_ids=added_ids, compiled_rules=compiled_rules, add_duplicates=add_duplicates)
callback=callback, added_ids=added_ids, compiled_rules=compiled_rules))
if res is not None: if res is not None:
duplicates.extend(res) duplicates.extend(res)
if callable(callback): if callable(callback):