Fix #1014303 ([Enhancement] Have calibredb add command display the assigned calibre id)

This commit is contained in:
Kovid Goyal 2012-06-18 10:56:33 +05:30
parent 574840f884
commit 5ab875378a
2 changed files with 29 additions and 16 deletions

View File

@ -243,20 +243,22 @@ def do_add(db, paths, one_book_per_directory, recurse, add_duplicates, otitle,
metadata.append(mi) metadata.append(mi)
file_duplicates = [] file_duplicates = []
added_ids = set()
if files: if files:
file_duplicates = db.add_books(files, formats, metadata, file_duplicates, ids = db.add_books(files, formats, metadata,
add_duplicates=add_duplicates) add_duplicates=add_duplicates,
if file_duplicates: return_ids=True)
file_duplicates = file_duplicates[0] added_ids |= set(ids)
dir_dups = [] dir_dups = []
for dir in dirs: for dir in dirs:
if recurse: 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: else:
func = db.import_book_directory if one_book_per_directory else db.import_book_directory_multiple 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: if not dups:
dups = [] dups = []
dir_dups.extend(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: if add_duplicates:
for mi, formats in dir_dups: for mi, formats in dir_dups:
db.import_book(mi, formats) book_id = db.import_book(mi, formats)
added_ids.add(book_id)
else: else:
if dir_dups or file_duplicates: if dir_dups or file_duplicates:
print >>sys.stderr, _('The following books were not added as ' 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 print >>sys.stderr, '\t\t ', path
write_dirtied(db) write_dirtied(db)
if added_ids:
prints(_('Added book ids: %s')%(', '.join(map(type(u''),
added_ids))))
send_message() send_message()
finally: finally:
sys.stdout = orig sys.stdout = orig

View File

@ -3566,7 +3566,8 @@ books_series_link feeds
for formats in books.values(): for formats in books.values():
yield formats 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 from calibre.ebooks.metadata.meta import metadata_from_formats
duplicates = [] duplicates = []
@ -3577,13 +3578,15 @@ books_series_link feeds
if self.has_book(mi): if self.has_book(mi):
duplicates.append((mi, formats)) duplicates.append((mi, formats))
continue 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 callable(callback):
if callback(mi.title): if callback(mi.title):
break break
return duplicates 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 from calibre.ebooks.metadata.meta import metadata_from_formats
dirpath = os.path.abspath(dirpath) dirpath = os.path.abspath(dirpath)
formats = self.find_books_in_directory(dirpath, True) formats = self.find_books_in_directory(dirpath, True)
@ -3595,17 +3598,21 @@ books_series_link feeds
return return
if self.has_book(mi): if self.has_book(mi):
return [(mi, formats)] 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): if callable(callback):
callback(mi.title) 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) root = os.path.abspath(root)
duplicates = [] duplicates = []
for dirpath in os.walk(root): for dirpath in os.walk(root):
res = self.import_book_directory(dirpath[0], callback=callback) if \ res = (self.import_book_directory(dirpath[0], callback=callback,
single_book_per_directory else \ added_ids=added_ids) if single_book_per_directory else
self.import_book_directory_multiple(dirpath[0], callback=callback) self.import_book_directory_multiple(dirpath[0],
callback=callback, added_ids=added_ids))
if res is not None: if res is not None:
duplicates.extend(res) duplicates.extend(res)
if callable(callback): if callable(callback):