mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Implement import_book()
This commit is contained in:
parent
1ac522d94e
commit
213a2136cf
@ -1117,7 +1117,7 @@ class Cache(object):
|
||||
return book_id
|
||||
|
||||
@write_api
|
||||
def add_books(self, books, add_duplicates=True, apply_import_tags=True, preserve_uuid=False, dbapi=None):
|
||||
def add_books(self, books, add_duplicates=True, apply_import_tags=True, preserve_uuid=False, run_hooks=True, dbapi=None):
|
||||
duplicates, ids = [], []
|
||||
for mi, format_map in books:
|
||||
book_id = self._create_book_entry(mi, add_duplicates=add_duplicates, apply_import_tags=apply_import_tags, preserve_uuid=preserve_uuid)
|
||||
@ -1126,7 +1126,7 @@ class Cache(object):
|
||||
else:
|
||||
ids.append(book_id)
|
||||
for fmt, stream_or_path in format_map.iteritems():
|
||||
self._add_format(book_id, fmt, stream_or_path, dbapi=dbapi)
|
||||
self._add_format(book_id, fmt, stream_or_path, dbapi=dbapi, run_hooks=run_hooks)
|
||||
return ids, duplicates
|
||||
|
||||
@write_api
|
||||
|
@ -37,7 +37,7 @@ class LibraryDatabase(object):
|
||||
progress_callback=lambda x, y:True, restore_all_prefs=False):
|
||||
|
||||
self.is_second_db = is_second_db # TODO: Use is_second_db
|
||||
self.listeners = set([])
|
||||
self.listeners = set()
|
||||
|
||||
backend = self.backend = DB(library_path, default_prefs=default_prefs,
|
||||
read_only=read_only, restore_all_prefs=restore_all_prefs,
|
||||
@ -177,6 +177,19 @@ class LibraryDatabase(object):
|
||||
ids = book_ids if return_ids else len(book_ids)
|
||||
return duplicates or None, ids
|
||||
|
||||
def import_book(self, mi, formats, notify=True, import_hooks=True, apply_import_tags=True, preserve_uuid=False):
|
||||
format_map = {}
|
||||
for path in formats:
|
||||
ext = os.path.splitext(path)[1][1:].upper()
|
||||
if ext == 'OPF':
|
||||
continue
|
||||
format_map[ext] = path
|
||||
book_ids, duplicates = self.new_api.add_books(
|
||||
[(mi, format_map)], add_duplicates=True, apply_import_tags=apply_import_tags, preserve_uuid=preserve_uuid, dbapi=self, run_hooks=import_hooks)
|
||||
if notify:
|
||||
self.notify('add', book_ids)
|
||||
return book_ids[0]
|
||||
|
||||
# Private interface {{{
|
||||
|
||||
def __iter__(self):
|
||||
|
@ -149,14 +149,29 @@ class LegacyTest(BaseTest):
|
||||
'Test various adding books methods'
|
||||
from calibre.ebooks.metadata.book.base import Metadata
|
||||
legacy, old = self.init_legacy(self.cloned_library), self.init_old(self.cloned_library)
|
||||
mi = Metadata('Added Book', authors=('Added Author',))
|
||||
mi = Metadata('Added Book0', authors=('Added Author',))
|
||||
with NamedTemporaryFile(suffix='.aff') as f:
|
||||
f.write(b'xxx')
|
||||
f.flush()
|
||||
T = partial(ET, 'add_books', ([f.name], ['AFF'], [mi]), old=old, legacy=legacy)
|
||||
T()(self)
|
||||
T(kwargs={'return_ids':True})(self)
|
||||
book_id = T(kwargs={'return_ids':True})(self)[1][0]
|
||||
self.assertEqual(legacy.new_api.formats(book_id), ('AFF',))
|
||||
T(kwargs={'add_duplicates':False})(self)
|
||||
mi.title = 'Added Book1'
|
||||
mi.uuid = 'uuu'
|
||||
T = partial(ET, 'import_book', (mi,[f.name]), old=old, legacy=legacy)
|
||||
book_id = T()(self)
|
||||
self.assertNotEqual(legacy.uuid(book_id, index_is_id=True), old.uuid(book_id, index_is_id=True))
|
||||
book_id = T(kwargs={'preserve_uuid':True})(self)
|
||||
self.assertEqual(legacy.uuid(book_id, index_is_id=True), old.uuid(book_id, index_is_id=True))
|
||||
self.assertEqual(legacy.new_api.formats(book_id), ('AFF',))
|
||||
with NamedTemporaryFile(suffix='.opf') as f:
|
||||
f.write(b'zzzz')
|
||||
f.flush()
|
||||
T = partial(ET, 'import_book', (mi,[f.name]), old=old, legacy=legacy)
|
||||
book_id = T()(self)
|
||||
self.assertFalse(legacy.new_api.formats(book_id))
|
||||
|
||||
mi.title = 'Added Book2'
|
||||
T = partial(ET, 'create_book_entry', (mi,), old=old, legacy=legacy)
|
||||
|
Loading…
x
Reference in New Issue
Block a user