Adding books: When duplicates are found, show the list of possible duplicates in calibre with title and author.

This commit is contained in:
Kovid Goyal 2012-10-12 10:15:47 +05:30
commit e577d39347

View File

@ -11,7 +11,7 @@ from calibre.gui2.dialogs.progress import ProgressDialog
from calibre.gui2 import (question_dialog, error_dialog, info_dialog, gprefs, from calibre.gui2 import (question_dialog, error_dialog, info_dialog, gprefs,
warning_dialog, available_width) warning_dialog, available_width)
from calibre.ebooks.metadata.opf2 import OPF from calibre.ebooks.metadata.opf2 import OPF
from calibre.ebooks.metadata import MetaInformation from calibre.ebooks.metadata import MetaInformation, authors_to_string
from calibre.constants import preferred_encoding, filesystem_encoding, DEBUG from calibre.constants import preferred_encoding, filesystem_encoding, DEBUG
from calibre.utils.config import prefs from calibre.utils.config import prefs
from calibre import prints, force_unicode, as_unicode from calibre import prints, force_unicode, as_unicode
@ -382,12 +382,25 @@ class Adder(QObject): # {{{
if not duplicates: if not duplicates:
return self.duplicates_processed() return self.duplicates_processed()
self.pd.hide() self.pd.hide()
files = [_('%(title)s by %(author)s')%dict(title=x[0].title, duplicate_message = []
author=x[0].format_field('authors')[1]) for x in duplicates] for x in duplicates:
duplicate_message.append(_('Already in calibre:'))
matching_books = self.db.books_with_same_title(x[0])
for book_id in matching_books:
aut = [a.replace('|', ',') for a in (self.db.authors(book_id,
index_is_id=True) or '').split(',')]
duplicate_message.append('\t'+ _('%(title)s by %(author)s')%
dict(title=self.db.title(book_id, index_is_id=True),
author=authors_to_string(aut)))
duplicate_message.append(_('You are trying to add:'))
duplicate_message.append('\t'+_('%(title)s by %(author)s')%
dict(title=x[0].title,
author=x[0].format_field('authors')[1]))
duplicate_message.append('')
if question_dialog(self._parent, _('Duplicates found!'), if question_dialog(self._parent, _('Duplicates found!'),
_('Books with the same title as the following already ' _('Books with the same title as the following already '
'exist in the database. Add them anyway?'), 'exist in calibre. Add them anyway?'),
'\n'.join(files)): '\n'.join(duplicate_message)):
pd = QProgressDialog(_('Adding duplicates...'), '', 0, len(duplicates), pd = QProgressDialog(_('Adding duplicates...'), '', 0, len(duplicates),
self._parent) self._parent)
pd.setCancelButton(None) pd.setCancelButton(None)