diff --git a/gertty/app.py b/gertty/app.py index d5f66bd..29abf32 100644 --- a/gertty/app.py +++ b/gertty/app.py @@ -212,7 +212,7 @@ class App(object): if hasattr(widget, 'title'): self.status.update(title=widget.title) self.loop.widget = widget - self.refresh() + self.refresh(force=True) def findChangeList(self): for widget in reversed(self.screens): @@ -226,17 +226,21 @@ class App(object): widget = self.screens.pop() self.loop.widget = widget - def refresh(self, data=None): + def refresh(self, data=None, force=False): self.status.refresh() widget = self.loop.widget while isinstance(widget, urwid.Overlay): widget = widget.contents[0][0] + interested = force try: while True: event = self.sync.result_queue.get(0) - widget.refresh(event) + if widget.interested(event): + interested = True except Queue.Empty: pass + if interested: + widget.refresh() def popup(self, widget, relative_width=50, relative_height=25, diff --git a/gertty/view/change.py b/gertty/view/change.py index b107452..39359dd 100644 --- a/gertty/view/change.py +++ b/gertty/view/change.py @@ -502,15 +502,18 @@ class ChangeView(urwid.WidgetWrap): if not succeeded: raise gertty.view.DisplayError("Git commits not present in local repository") - def refresh(self, event=None): - if event and not ((isinstance(event, sync.ChangeAddedEvent) and - self.change_key in event.related_change_keys) - or - (isinstance(event, sync.ChangeUpdatedEvent) and - self.change_key in event.related_change_keys)): + def interested(self, event): + if not ((isinstance(event, sync.ChangeAddedEvent) and + self.change_key in event.related_change_keys) + or + (isinstance(event, sync.ChangeUpdatedEvent) and + self.change_key in event.related_change_keys)): self.log.debug("Ignoring refresh change due to event %s" % (event,)) - return + return False self.log.debug("Refreshing change due to event %s" % (event,)) + return True + + def refresh(self): change_info = [] with self.app.db.getSession() as session: change = session.getChange(self.change_key) diff --git a/gertty/view/change_list.py b/gertty/view/change_list.py index 7870ed6..7f5d74c 100644 --- a/gertty/view/change_list.py +++ b/gertty/view/change_list.py @@ -142,20 +142,22 @@ class ChangeListView(urwid.WidgetWrap): self._w.contents.append((self.listbox, ('weight', 1))) self._w.set_focus(3) - def refresh(self, event=None): - if event and not ((self.project_key is not None and - isinstance(event, sync.ChangeAddedEvent) and - self.project_key == event.project_key) - or - (self.project_key is None and - isinstance(event, sync.ChangeAddedEvent)) - or - (isinstance(event, sync.ChangeUpdatedEvent) and - event.change_key in self.change_rows.keys())): + def interested(self, event): + if not ((self.project_key is not None and + isinstance(event, sync.ChangeAddedEvent) and + self.project_key == event.project_key) + or + (self.project_key is None and + isinstance(event, sync.ChangeAddedEvent)) + or + (isinstance(event, sync.ChangeUpdatedEvent) and + event.change_key in self.change_rows.keys())): self.log.debug("Ignoring refresh change list due to event %s" % (event,)) - return + return False self.log.debug("Refreshing change list due to event %s" % (event,)) + return True + def refresh(self): unseen_keys = set(self.change_rows.keys()) with self.app.db.getSession() as session: lst = session.getChanges(self.query, self.unreviewed, diff --git a/gertty/view/diff.py b/gertty/view/diff.py index 9630a7d..f4ee7b7 100644 --- a/gertty/view/diff.py +++ b/gertty/view/diff.py @@ -341,17 +341,20 @@ class BaseDiffView(urwid.WidgetWrap): def makeFileHeader(self, diff, comment_lists): raise NotImplementedError - def refresh(self, event=None): - if event and not ((isinstance(event, sync.ChangeAddedEvent) and - self.change_key in event.related_change_keys) - or - (isinstance(event, sync.ChangeUpdatedEvent) and - self.change_key in event.related_change_keys)): + def interested(self, event): + if not ((isinstance(event, sync.ChangeAddedEvent) and + self.change_key in event.related_change_keys) + or + (isinstance(event, sync.ChangeUpdatedEvent) and + self.change_key in event.related_change_keys)): #self.log.debug("Ignoring refresh diff due to event %s" % (event,)) - return + return False #self.log.debug("Refreshing diff due to event %s" % (event,)) + return True + + def refresh(self, event=None): #TODO - return + pass def keypress(self, size, key): old_focus = self.listbox.focus diff --git a/gertty/view/project_list.py b/gertty/view/project_list.py index 5fa1eab..8be0601 100644 --- a/gertty/view/project_list.py +++ b/gertty/view/project_list.py @@ -97,17 +97,19 @@ class ProjectListView(urwid.WidgetWrap): self._w.contents.append((self.listbox, ('weight', 1))) self._w.set_focus(3) - def refresh(self, event=None): - if event and not (isinstance(event, sync.ProjectAddedEvent) - or - isinstance(event, sync.ChangeAddedEvent) - or - (isinstance(event, sync.ChangeUpdatedEvent) and - (event.status_changed or event.review_flag_changed))): + def interested(self, event): + if not (isinstance(event, sync.ProjectAddedEvent) + or + isinstance(event, sync.ChangeAddedEvent) + or + (isinstance(event, sync.ChangeUpdatedEvent) and + (event.status_changed or event.review_flag_changed))): self.log.debug("Ignoring refresh project list due to event %s" % (event,)) - return + return False self.log.debug("Refreshing project list due to event %s" % (event,)) + return True + def refresh(self): if self.subscribed: self.title = u'Subscribed projects' if self.unreviewed: