diff --git a/src/calibre/db/cache.py b/src/calibre/db/cache.py index b94258b1ef..b8b9ad7436 100644 --- a/src/calibre/db/cache.py +++ b/src/calibre/db/cache.py @@ -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 diff --git a/src/calibre/db/legacy.py b/src/calibre/db/legacy.py index 809ec816a8..39d15f604e 100644 --- a/src/calibre/db/legacy.py +++ b/src/calibre/db/legacy.py @@ -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): diff --git a/src/calibre/db/tests/legacy.py b/src/calibre/db/tests/legacy.py index ddf6833bee..cf3bd93d9d 100644 --- a/src/calibre/db/tests/legacy.py +++ b/src/calibre/db/tests/legacy.py @@ -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)