From 259008cea5ba0e9b68b41b2ed6653c0b569bd0bb Mon Sep 17 00:00:00 2001 From: Jay Pipes Date: Wed, 17 Dec 2014 17:12:35 -0500 Subject: [PATCH] Speed up the toggling of reviewed/hidden changes When in the list changes view, if you typed 'v' or 'k' to mark a change reviewed or hidden, a full refresh of the list view's contents, including querying the database for all new records, would occur. For the cases when we're in the Unreviewed changes list, toggling a change to reviewed should simply remove that change from the listbox, to avoid doing a full refresh. Same for the hidden toggle. Storyboard story: 2000085 Change-Id: I76bb439cd5ce386da7d160d3160f36c769a2a99f --- gertty/view/change_list.py | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/gertty/view/change_list.py b/gertty/view/change_list.py index 69c01d3..3e15964 100644 --- a/gertty/view/change_list.py +++ b/gertty/view/change_list.py @@ -338,6 +338,8 @@ class ChangeListView(urwid.WidgetWrap): change = session.getChange(change_key) change.reviewed = not change.reviewed ret = change.reviewed + reviewed_str = 'reviewed' if change.reviewed else 'unreviewed' + self.log.debug("Set change %s to %s", change_key, reviewed_str) return ret def toggleHidden(self, change_key): @@ -345,6 +347,8 @@ class ChangeListView(urwid.WidgetWrap): change = session.getChange(change_key) change.hidden = not change.hidden ret = change.hidden + hidden_str = 'hidden' if change.hidden else 'visible' + self.log.debug("Set change %s to %s", change_key, hidden_str) return ret def keypress(self, size, key): @@ -358,15 +362,37 @@ class ChangeListView(urwid.WidgetWrap): if not len(self.listbox.body): return None pos = self.listbox.focus_position - reviewed = self.toggleReviewed(self.listbox.body[pos].change_key) - self.refresh() + change_key = self.listbox.body[pos].change_key + reviewed = self.toggleReviewed(change_key) + if self.unreviewed and reviewed: + # Here we can avoid a full refresh by just removing the particular + # row from the change list if the view is for the unreviewed changes + # only. + row = self.change_rows[change_key] + self.listbox.body.remove(row) + del self.change_rows[change_key] + else: + # Just fall back on doing a full refresh if we're in a situation + # where we're not just popping a row from the list of unreviewed + # changes. + self.refresh() return None if keymap.TOGGLE_HIDDEN in commands: if not len(self.listbox.body): return None pos = self.listbox.focus_position - hidden = self.toggleHidden(self.listbox.body[pos].change_key) - self.refresh() + change_key = self.listbox.body[pos].change_key + hidden = self.toggleHidden(change_key) + if hidden: + # Here we can avoid a full refresh by just removing the particular + # row from the change list + row = self.change_rows[change_key] + self.listbox.body.remove(row) + del self.change_rows[change_key] + else: + # Just fall back on doing a full refresh if we're in a situation + # where we're not just popping a row from the list of changes. + self.refresh() return None if keymap.REFRESH in commands: self.app.sync.submitTask(