Edit book: Reports tool: Fix a regression that broke sorting. Fixes #1898167 [Sorting does not work](https://bugs.launchpad.net/calibre/+bug/1898167)

In Python 3 we apparently cannot return bytes types from models
This commit is contained in:
Kovid Goyal 2020-10-02 23:26:54 +05:30
parent 3e272bd3bc
commit 6608e3e365
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -42,6 +42,10 @@ from polyglot.builtins import filter, iteritems, map, range, unicode_type, as_by
ROOT = QModelIndex() ROOT = QModelIndex()
def psk(x):
return QByteArray(numeric_sort_key(x))
def read_state(name, default=None): def read_state(name, default=None):
data = tprefs.get('reports-ui-state') data = tprefs.get('reports-ui-state')
if data is None: if data is None:
@ -243,7 +247,6 @@ class FilesModel(FileCollection):
self.total_size = sum(map(itemgetter(3), self.files)) self.total_size = sum(map(itemgetter(3), self.files))
self.images_size = sum(map(itemgetter(3), (f for f in self.files if f.category == 'image'))) self.images_size = sum(map(itemgetter(3), (f for f in self.files if f.category == 'image')))
self.fonts_size = sum(map(itemgetter(3), (f for f in self.files if f.category == 'font'))) self.fonts_size = sum(map(itemgetter(3), (f for f in self.files if f.category == 'font')))
psk = numeric_sort_key
self.sort_keys = tuple((psk(entry.dir), psk(entry.basename), entry.size, psk(self.CATEGORY_NAMES.get(entry.category, ''))) self.sort_keys = tuple((psk(entry.dir), psk(entry.basename), entry.size, psk(self.CATEGORY_NAMES.get(entry.category, '')))
for entry in self.files) for entry in self.files)
self.endResetModel() self.endResetModel()
@ -427,7 +430,6 @@ class ImagesModel(FileCollection):
self.beginResetModel() self.beginResetModel()
self.files = data['images'] self.files = data['images']
self.total_size = sum(map(itemgetter(3), self.files)) self.total_size = sum(map(itemgetter(3), self.files))
psk = numeric_sort_key
self.sort_keys = tuple((psk(entry.basename), entry.size, len(entry.usage), (entry.width, entry.height)) self.sort_keys = tuple((psk(entry.basename), entry.size, len(entry.usage), (entry.width, entry.height))
for entry in self.files) for entry in self.files)
self.endResetModel() self.endResetModel()
@ -525,7 +527,6 @@ class LinksModel(FileCollection):
self.links = self.files = data['links'] self.links = self.files = data['links']
self.total_size = len(self.links) self.total_size = len(self.links)
self.num_bad = sum(1 for link in self.links if link.ok is False) self.num_bad = sum(1 for link in self.links if link.ok is False)
psk = numeric_sort_key
self.sort_keys = tuple(( self.sort_keys = tuple((
link.ok, psk(link.location.name), psk(link.text or ''), psk(link.href or ''), psk(link.anchor.id or ''), psk(link.anchor.text or '')) link.ok, psk(link.location.name), psk(link.text or ''), psk(link.href or ''), psk(link.anchor.id or ''), psk(link.anchor.text or ''))
for link in self.links) for link in self.links)
@ -686,7 +687,6 @@ class WordsModel(FileCollection):
self.beginResetModel() self.beginResetModel()
self.total_words, self.files = data['words'] self.total_words, self.files = data['words']
self.total_size = len({entry.locale for entry in self.files}) self.total_size = len({entry.locale for entry in self.files})
psk = numeric_sort_key
lsk_cache = {} lsk_cache = {}
def locale_sort_key(loc): def locale_sort_key(loc):
@ -783,7 +783,6 @@ class CharsModel(FileCollection):
self.beginResetModel() self.beginResetModel()
self.files = data['chars'] self.files = data['chars']
self.all_chars = tuple(entry.char for entry in self.files) self.all_chars = tuple(entry.char for entry in self.files)
psk = numeric_sort_key
self.sort_keys = tuple((psk(entry.char), None, entry.codepoint, entry.count) for entry in self.files) self.sort_keys = tuple((psk(entry.char), None, entry.codepoint, entry.count) for entry in self.files)
self.endResetModel() self.endResetModel()