give contexts an id and have progressview track them by id not identity

This commit is contained in:
Michael Hudson-Doyle 2020-09-21 11:51:19 +12:00
parent 219360d12d
commit bc6c66efbb
3 changed files with 24 additions and 18 deletions

View File

@ -125,15 +125,19 @@ class InstallProgressController(SubiquityTuiController):
msg = context.full_name() msg = context.full_name()
if description: if description:
msg += ': ' + description msg += ': ' + description
self.progress_view.event_start(context, msg)
if context.get('is-install-context'): if context.get('is-install-context'):
self.progress_view.event_start(context, context.description) indent = context.full_name().count('/') - 2
if context.get('is-install-context'):
indent -= 1
msg = ' ' * indent + context.description
else:
return
if context.parent:
self.progress_view.event_finish(context.parent.id)
self.progress_view.event_start(context.id, msg)
def report_finish_event(self, context, description, status): def report_finish_event(self, context, description, status):
if self._push_to_progress(context): self.progress_view.event_finish(context.id)
self.progress_view.event_finish(context)
if context.get('is-install-context'):
self.progress_view.event_finish(context)
def tpath(self, *path): def tpath(self, *path):
return os.path.join(self.model.target, *path) return os.path.join(self.model.target, *path)

View File

@ -51,7 +51,7 @@ class ProgressView(BaseView):
def __init__(self, controller): def __init__(self, controller):
self.controller = controller self.controller = controller
self.ongoing = {} # context -> line containing a spinner self.ongoing = {} # context_id -> line containing a spinner
self.reboot_btn = Toggleable(ok_btn( self.reboot_btn = Toggleable(ok_btn(
_("Reboot Now"), on_press=self.reboot)) _("Reboot Now"), on_press=self.reboot))
@ -93,23 +93,19 @@ class ProgressView(BaseView):
lb.set_focus(len(walker) - 1) lb.set_focus(len(walker) - 1)
lb.set_focus_valign('bottom') lb.set_focus_valign('bottom')
def event_start(self, context, message): def event_start(self, context_id, message):
self.event_finish(context.parent)
walker = self.event_listbox.base_widget.body walker = self.event_listbox.base_widget.body
indent = context.full_name().count('/') - 2
if context.get('is-install-context'):
indent -= 1
spinner = Spinner(self.controller.app.aio_loop) spinner = Spinner(self.controller.app.aio_loop)
spinner.start() spinner.start()
new_line = Columns([ new_line = Columns([
('pack', Text(' ' * indent + message)), ('pack', Text(message)),
('pack', spinner), ('pack', spinner),
], dividechars=1) ], dividechars=1)
self.ongoing[context] = len(walker) self.ongoing[context_id] = len(walker)
self._add_line(self.event_listbox, new_line) self._add_line(self.event_listbox, new_line)
def event_finish(self, context): def event_finish(self, context_id):
index = self.ongoing.pop(context, None) index = self.ongoing.pop(context_id, None)
if index is None: if index is None:
return return
walker = self.event_listbox.base_widget.body walker = self.event_listbox.base_widget.body
@ -118,8 +114,8 @@ class ProgressView(BaseView):
walker[index] = walker[index][0] walker[index] = walker[index][0]
def finish_all(self): def finish_all(self):
for context in self.ongoing.copy(): for context_id in list(self.ongoing):
self.event_finish(context) self.event_finish(context_id)
def add_log_line(self, text): def add_log_line(self, text):
self._add_line(self.log_listbox, Text(text)) self._add_line(self.log_listbox, Text(text))

View File

@ -25,6 +25,9 @@ class Status(enum.Enum):
WARN = enum.auto() WARN = enum.auto()
context_id = 0
class Context: class Context:
"""Class to report when things start and finish. """Class to report when things start and finish.
@ -48,6 +51,9 @@ class Context:
""" """
def __init__(self, app, name, description, parent, level, childlevel=None): def __init__(self, app, name, description, parent, level, childlevel=None):
global context_id
self.id = context_id
context_id += 1
self.app = app self.app = app
self.name = name self.name = name
self.description = description self.description = description