mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Refactor adding API to accept add_duplicates and use new_api
This commit is contained in:
parent
3a764a429d
commit
f73a5f0d5a
@ -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):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user