From bcc9f16df2ed51097b52f7d1a3d137f160e49562 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 6 Nov 2019 07:10:46 +0530 Subject: [PATCH] Duplicates dialog: Sort sub-list of matching books already in calibre by author for easier inspection. Fixes #1851386 [[enhancement] sort authors per title in duplicated window after import](https://bugs.launchpad.net/calibre/+bug/1851386) --- src/calibre/gui2/dialogs/duplicates.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/calibre/gui2/dialogs/duplicates.py b/src/calibre/gui2/dialogs/duplicates.py index 24b853f84a..961d6977fc 100644 --- a/src/calibre/gui2/dialogs/duplicates.py +++ b/src/calibre/gui2/dialogs/duplicates.py @@ -14,6 +14,7 @@ from PyQt5.Qt import ( from calibre.gui2 import gprefs from calibre.ebooks.metadata import authors_to_string +from calibre.utils.icu import primary_sort_key from polyglot.builtins import unicode_type, range @@ -119,12 +120,18 @@ class DuplicatesQuestion(QDialog): add_child(_('Already in calibre:')).setData(0, Qt.FontRole, itf) + author_text = {} for book_id in matching_books: - aut = [a.replace('|', ',') for a in (db.authors(book_id, - index_is_id=True) or '').split(',')] + author_text[book_id] = authors_to_string([a.replace('|', ',') for a in (db.authors(book_id, + index_is_id=True) or '').split(',')]) + + def key(x): + return primary_sort_key(unicode_type(author_text[x])) + + for book_id in sorted(matching_books, key=key): add_child(ta%dict( title=db.title(book_id, index_is_id=True), - author=authors_to_string(aut), + author=author_text[book_id], formats=db.formats(book_id, index_is_id=True, verify_formats=False))) add_child('')