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)
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

View File

@ -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):