From 4f30c177d65f763494ac0f57d3e2d46bd4f59e9b Mon Sep 17 00:00:00 2001 From: Ivan Habunek Date: Tue, 27 Aug 2019 12:57:18 +0200 Subject: [PATCH] Ditch status index list for now Simplifies things, makes update_status slightly slower, but no biggie. --- toot/tui/app.py | 2 +- toot/tui/timeline.py | 30 ++++++++++++------------------ 2 files changed, 13 insertions(+), 19 deletions(-) diff --git a/toot/tui/app.py b/toot/tui/app.py index 0397151..d3d1024 100644 --- a/toot/tui/app.py +++ b/toot/tui/app.py @@ -191,7 +191,7 @@ class TUI(urwid.Frame): def _done_next(statuses): """Process sequential batch of statuses, adds statuses to the existing timeline.""" - self.timeline.add_statuses(statuses) + self.timeline.append_statuses(statuses) self.run_in_thread(_load_statuses, done_callback=_done_initial if is_initial else _done_next) diff --git a/toot/tui/timeline.py b/toot/tui/timeline.py index cd7a948..85e6d87 100644 --- a/toot/tui/timeline.py +++ b/toot/tui/timeline.py @@ -27,11 +27,6 @@ class Timeline(urwid.Columns): self.status_list = self.build_status_list(statuses) self.status_details = StatusDetails(statuses[0]) - # Maps status ID to its index in the list - self.status_index_map = { - status.id: n for n, status in enumerate(statuses) - } - super().__init__([ ("weight", 40, self.status_list), ("weight", 60, self.status_details), @@ -110,30 +105,29 @@ class Timeline(urwid.Columns): return super().keypress(size, key) - def add_status(self, status): + def append_status(self, status): self.statuses.append(status) - self.status_index_map[status.id] = len(self.statuses) - 1 self.status_list.body.append(self.build_list_item(status)) def prepend_status(self, status): self.statuses.insert(0, status) - # Need to rebuild the map, there has to be a better way - self.status_index_map = { - status.id: n for n, status in enumerate(self.statuses) - } self.status_list.body.insert(0, self.build_list_item(status)) - if self.status_list.body.focus == 0: - self.draw_status_details(status) - - def add_statuses(self, statuses): + def append_statuses(self, statuses): for status in statuses: - self.add_status(status) + self.append_status(status) + + def get_status_index(self, id): + # TODO: This is suboptimal, consider a better way + for n, status in enumerate(self.statuses): + if status.id == id: + return n + raise ValueError("Status with ID {} not found".format(id)) def update_status(self, status): """Overwrite status in list with the new instance and redraw.""" - index = self.status_index_map[status.id] - assert self.statuses[index].id == status.id + index = self.get_status_index(status.id) + assert self.statuses[index].id == status.id # Sanity check # Update internal status list self.statuses[index] = status