When refreshing rows in the book list emit fewer signals

This commit is contained in:
Kovid Goyal 2015-03-16 14:00:37 +05:30
parent d1651232a4
commit d4b737a316

View File

@ -7,6 +7,7 @@ __docformat__ = 'restructuredtext en'
import functools, re, os, traceback, errno, time import functools, re, os, traceback, errno, time
from collections import defaultdict, namedtuple from collections import defaultdict, namedtuple
from itertools import groupby
from PyQt5.Qt import (QAbstractTableModel, Qt, pyqtSignal, QIcon, QImage, from PyQt5.Qt import (QAbstractTableModel, Qt, pyqtSignal, QIcon, QImage,
QModelIndex, QDateTime, QColor, QPixmap, QPainter) QModelIndex, QDateTime, QColor, QPixmap, QPainter)
@ -48,6 +49,14 @@ def default_image():
_default_image = QImage(I('default_cover.png')) _default_image = QImage(I('default_cover.png'))
return _default_image 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): # {{{ class ColumnColor(object): # {{{
def __init__(self, formatter): def __init__(self, formatter):
@ -302,12 +311,11 @@ class BooksModel(QAbstractTableModel): # {{{
def refresh_rows(self, rows, current_row=-1): def refresh_rows(self, rows, current_row=-1):
self._clear_caches() self._clear_caches()
for row in rows: cc = self.columnCount(QModelIndex()) - 1
if row == current_row: for first_row, last_row in group_numbers(rows):
self.new_bookdisplay_data.emit( self.dataChanged.emit(self.index(first_row, 0), self.index(last_row, cc))
self.get_book_display_info(row)) if current_row >= 0 and first_row <= current_row <= last_row:
self.dataChanged.emit(self.index(row, 0), self.index(row, self.new_bookdisplay_data.emit(self.get_book_display_info(current_row))
self.columnCount(QModelIndex())-1))
def close(self): def close(self):
self.db.close() self.db.close()