Some optimizations to the torrentview updating

This commit is contained in:
Andrew Resch 2008-10-21 10:52:37 +00:00
parent 058c66bfa8
commit fbe62805c3
1 changed files with 17 additions and 6 deletions

View File

@ -128,6 +128,9 @@ class TorrentView(listview.ListView, component.Component):
# This is where status updates are put # This is where status updates are put
self.status = {} self.status = {}
# We keep a copy of the previous status to compare for changes
self.prev_status = {}
# Register the columns menu with the listview so it gets updated # Register the columns menu with the listview so it gets updated
# accordingly. # accordingly.
self.register_checklist_menu( self.register_checklist_menu(
@ -280,28 +283,36 @@ class TorrentView(listview.ListView, component.Component):
if not torrent_id in status.keys(): if not torrent_id in status.keys():
row[filter_column] = False row[filter_column] = False
else: else:
if torrent_id in self.prev_status and status[torrent_id] == self.prev_status[torrent_id]:
# The status dict is the same, so do not update
continue
row[filter_column] = True row[filter_column] = True
# Set values for each column in the row # Set values for each column in the row
for column in self.columns_to_update: for column in self.columns_to_update:
column_index = self.get_column_index(column) column_index = self.get_column_index(column)
for index in column_index: for i, status_field in enumerate(self.columns[column].status_field):
# Only update the column if the status field exists
try: try:
# Only update if different # Only update if different
row_value = status[torrent_id][self.columns[column].status_field[column_index.index(index)]] row_value = status[torrent_id][status_field]
if row[index] != row_value: if row[column_index[i]] != row_value:
row[index] = row_value row[column_index[i]] = row_value
except Exception, e: except Exception, e:
log.debug("%s", e) log.debug("%s", e)
# Update the toolbar buttons just in case some state has changed # Update the toolbar buttons just in case some state has changed
component.get("ToolBar").update_buttons() component.get("ToolBar").update_buttons()
component.get("MenuBar").update_menu() component.get("MenuBar").update_menu()
self.prev_status = status
def _on_get_torrents_status(self, status): def _on_get_torrents_status(self, status):
"""Callback function for get_torrents_status(). 'status' should be a """Callback function for get_torrents_status(). 'status' should be a
dictionary of {torrent_id: {key, value}}.""" dictionary of {torrent_id: {key, value}}."""
self.status = status self.status = status
if self.status == self.prev_status and self.prev_status:
# We do not bother updating since the status hasn't changed
self.prev_status = self.status
return
gobject.idle_add(self.update_view) gobject.idle_add(self.update_view)
def add_row(self, torrent_id, update=True): def add_row(self, torrent_id, update=True):