diff --git a/src/calibre/library/cli.py b/src/calibre/library/cli.py index b62b9e78ff..3a798a961b 100644 --- a/src/calibre/library/cli.py +++ b/src/calibre/library/cli.py @@ -243,20 +243,22 @@ def do_add(db, paths, one_book_per_directory, recurse, add_duplicates, otitle, metadata.append(mi) file_duplicates = [] + added_ids = set() if files: - file_duplicates = db.add_books(files, formats, metadata, - add_duplicates=add_duplicates) - if file_duplicates: - file_duplicates = file_duplicates[0] - + file_duplicates, ids = db.add_books(files, formats, metadata, + add_duplicates=add_duplicates, + return_ids=True) + added_ids |= set(ids) dir_dups = [] for dir in dirs: if recurse: - dir_dups.extend(db.recursive_import(dir, single_book_per_directory=one_book_per_directory)) + dir_dups.extend(db.recursive_import(dir, + single_book_per_directory=one_book_per_directory, + added_ids=added_ids)) else: func = db.import_book_directory if one_book_per_directory else db.import_book_directory_multiple - dups = func(dir) + dups = func(dir, added_ids=added_ids) if not dups: dups = [] dir_dups.extend(dups) @@ -265,7 +267,8 @@ def do_add(db, paths, one_book_per_directory, recurse, add_duplicates, otitle, if add_duplicates: for mi, formats in dir_dups: - db.import_book(mi, formats) + book_id = db.import_book(mi, formats) + added_ids.add(book_id) else: if dir_dups or file_duplicates: print >>sys.stderr, _('The following books were not added as ' @@ -287,6 +290,9 @@ def do_add(db, paths, one_book_per_directory, recurse, add_duplicates, otitle, print >>sys.stderr, '\t\t ', path write_dirtied(db) + if added_ids: + prints(_('Added book ids: %s')%(', '.join(map(type(u''), + added_ids)))) send_message() finally: sys.stdout = orig diff --git a/src/calibre/library/database2.py b/src/calibre/library/database2.py index e657def734..52e8088539 100644 --- a/src/calibre/library/database2.py +++ b/src/calibre/library/database2.py @@ -3566,7 +3566,8 @@ books_series_link feeds for formats in books.values(): yield formats - def import_book_directory_multiple(self, dirpath, callback=None): + def import_book_directory_multiple(self, dirpath, callback=None, + added_ids=None): from calibre.ebooks.metadata.meta import metadata_from_formats duplicates = [] @@ -3577,13 +3578,15 @@ books_series_link feeds if self.has_book(mi): duplicates.append((mi, formats)) continue - self.import_book(mi, formats) + book_id = self.import_book(mi, formats) + if added_ids is not None: + added_ids.add(book_id) if callable(callback): if callback(mi.title): break return duplicates - def import_book_directory(self, dirpath, callback=None): + def import_book_directory(self, dirpath, callback=None, added_ids=None): from calibre.ebooks.metadata.meta import metadata_from_formats dirpath = os.path.abspath(dirpath) formats = self.find_books_in_directory(dirpath, True) @@ -3595,17 +3598,21 @@ books_series_link feeds return if self.has_book(mi): return [(mi, formats)] - self.import_book(mi, formats) + book_id = self.import_book(mi, formats) + if added_ids is not None: + added_ids.add(book_id) if callable(callback): callback(mi.title) - def recursive_import(self, root, single_book_per_directory=True, callback=None): + def recursive_import(self, root, single_book_per_directory=True, + callback=None, added_ids=None): root = os.path.abspath(root) duplicates = [] for dirpath in os.walk(root): - res = self.import_book_directory(dirpath[0], callback=callback) if \ - single_book_per_directory else \ - self.import_book_directory_multiple(dirpath[0], callback=callback) + res = (self.import_book_directory(dirpath[0], callback=callback, + added_ids=added_ids) if single_book_per_directory else + self.import_book_directory_multiple(dirpath[0], + callback=callback, added_ids=added_ids)) if res is not None: duplicates.extend(res) if callable(callback):