Use the cache for the rest of the calls to get_metadata.

This commit is contained in:
Charles Haley 2011-05-30 19:47:30 +01:00
parent cfae562f75
commit 1237db4c87

View File

@ -173,10 +173,12 @@ class BooksModel(QAbstractTableModel): # {{{
def refresh_ids(self, ids, current_row=-1): def refresh_ids(self, ids, current_row=-1):
self.mi_cache = {}
rows = self.db.refresh_ids(ids) rows = self.db.refresh_ids(ids)
if rows: if rows:
self.refresh_rows(rows, current_row=current_row) self.refresh_rows(rows, current_row=current_row)
else:
self.mi_cache = {}
def refresh_rows(self, rows, current_row=-1): def refresh_rows(self, rows, current_row=-1):
self.mi_cache = {} self.mi_cache = {}
@ -367,8 +369,20 @@ class BooksModel(QAbstractTableModel): # {{{
def count(self): def count(self):
return self.rowCount(None) return self.rowCount(None)
def get_and_cache_metadata(self, idx, index_is_id = False, get_cover=False,
get_user_categories=True):
if not index_is_id:
idx = self.db.id(idx)
if idx in self.mi_cache:
mi = self.mi_cache[idx]
else:
mi = self.db.get_metadata(idx, index_is_id=True, get_cover=get_cover,
get_user_categories=get_user_categories)
self.mi_cache[idx] = mi
return mi
def get_book_display_info(self, idx): def get_book_display_info(self, idx):
mi = self.db.get_metadata(idx) mi = self.get_and_cache_metadata(idx)
mi.size = mi.book_size mi.size = mi.book_size
mi.cover_data = ('jpg', self.cover(idx)) mi.cover_data = ('jpg', self.cover(idx))
mi.id = self.db.id(idx) mi.id = self.db.id(idx)
@ -395,7 +409,7 @@ class BooksModel(QAbstractTableModel): # {{{
def metadata_for(self, ids): def metadata_for(self, ids):
ans = [] ans = []
for id in ids: for id in ids:
mi = self.db.get_metadata(id, index_is_id=True, get_cover=True) mi = self.get_and_cache_metadata(id, index_is_id=True, get_cover=True)
ans.append(mi) ans.append(mi)
return ans return ans
@ -404,7 +418,7 @@ class BooksModel(QAbstractTableModel): # {{{
if not rows_are_ids: if not rows_are_ids:
rows = [self.db.id(row.row()) for row in rows] rows = [self.db.id(row.row()) for row in rows]
for id in rows: for id in rows:
mi = self.db.get_metadata(id, index_is_id=True) mi = self.get_and_cache_metadata(id, index_is_id=True)
_full_metadata.append(mi) _full_metadata.append(mi)
au = authors_to_string(mi.authors if mi.authors else [_('Unknown')]) au = authors_to_string(mi.authors if mi.authors else [_('Unknown')])
tags = mi.tags if mi.tags else [] tags = mi.tags if mi.tags else []
@ -460,7 +474,8 @@ class BooksModel(QAbstractTableModel): # {{{
pt.seek(0) pt.seek(0)
if set_metadata: if set_metadata:
try: try:
_set_metadata(pt, self.db.get_metadata(id, get_cover=True, index_is_id=True), _set_metadata(pt, self.get_and_cache_metadata(id,
get_cover=True, index_is_id=True),
format) format)
except: except:
traceback.print_exc() traceback.print_exc()
@ -505,7 +520,7 @@ class BooksModel(QAbstractTableModel): # {{{
pt.flush() pt.flush()
pt.seek(0) pt.seek(0)
if set_metadata: if set_metadata:
_set_metadata(pt, self.db.get_metadata(row, get_cover=True), _set_metadata(pt, self.get_and_cache_metadata(row, get_cover=True),
format) format)
pt.close() if paths else pt.seek(0) pt.close() if paths else pt.seek(0)
ans.append(pt) ans.append(pt)
@ -726,12 +741,8 @@ class BooksModel(QAbstractTableModel): # {{{
elif role == Qt.ForegroundRole: elif role == Qt.ForegroundRole:
key = self.column_map[col] key = self.column_map[col]
if key in self.column_color_map: if key in self.column_color_map:
id_ = self.id(index) mi = self.get_and_cache_metadata(index.row(),
if id_ in self.mi_cache: get_user_categories=False)
mi = self.mi_cache[id_]
else:
mi = self.db.get_metadata(self.id(index), index_is_id=True)
self.mi_cache[id_] = mi
fmt = self.column_color_map[key] fmt = self.column_color_map[key]
try: try:
color = composite_formatter.safe_format(fmt, mi, '', mi) color = composite_formatter.safe_format(fmt, mi, '', mi)