From d4b737a31676724003100b7f49ab7763e9130ed3 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 16 Mar 2015 14:00:37 +0530 Subject: [PATCH] When refreshing rows in the book list emit fewer signals --- src/calibre/gui2/library/models.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/calibre/gui2/library/models.py b/src/calibre/gui2/library/models.py index 808c5974fd..184a5628f7 100644 --- a/src/calibre/gui2/library/models.py +++ b/src/calibre/gui2/library/models.py @@ -7,6 +7,7 @@ __docformat__ = 'restructuredtext en' import functools, re, os, traceback, errno, time from collections import defaultdict, namedtuple +from itertools import groupby from PyQt5.Qt import (QAbstractTableModel, Qt, pyqtSignal, QIcon, QImage, QModelIndex, QDateTime, QColor, QPixmap, QPainter) @@ -48,6 +49,14 @@ def default_image(): _default_image = QImage(I('default_cover.png')) return _default_image +def group_numbers(numbers): + for k, g in groupby(enumerate(sorted(numbers)), lambda (i, x):i - x): + first = None + for last in g: + if first is None: + first = last[1] + yield first, last[1] + class ColumnColor(object): # {{{ def __init__(self, formatter): @@ -302,12 +311,11 @@ class BooksModel(QAbstractTableModel): # {{{ def refresh_rows(self, rows, current_row=-1): self._clear_caches() - for row in rows: - if row == current_row: - self.new_bookdisplay_data.emit( - self.get_book_display_info(row)) - self.dataChanged.emit(self.index(row, 0), self.index(row, - self.columnCount(QModelIndex())-1)) + cc = self.columnCount(QModelIndex()) - 1 + for first_row, last_row in group_numbers(rows): + self.dataChanged.emit(self.index(first_row, 0), self.index(last_row, cc)) + if current_row >= 0 and first_row <= current_row <= last_row: + self.new_bookdisplay_data.emit(self.get_book_display_info(current_row)) def close(self): self.db.close()