From a243eca44dd345c00a8afdd87d58da5f75397bfd Mon Sep 17 00:00:00 2001 From: Naomi Pentrel <5212232+npentrel@users.noreply.github.com> Date: Sat, 22 Jun 2024 17:48:09 +0100 Subject: [PATCH 1/3] Allow to install multiple apps --- modules/firmware_apps/app_store.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/modules/firmware_apps/app_store.py b/modules/firmware_apps/app_store.py index 70e083f..16581c7 100644 --- a/modules/firmware_apps/app_store.py +++ b/modules/firmware_apps/app_store.py @@ -106,7 +106,10 @@ def handle_index(self): def install_app(self, app): try: install_app(app) - self.update_state("main_menu") + if self.available_menu: + self.update_state("available_menu") + else: + self.update_state("main_menu") eventbus.emit(InstallNotificationEvent()) eventbus.emit(ShowNotificationEvent("Installed the app!")) except MemoryError: @@ -134,8 +137,6 @@ def prepare_available_menu(self): def on_select(_, i): self.to_install_app = self.app_store_index[i] self.update_state("installing_app") - if self.available_menu: - self.available_menu._cleanup() def exit_available_menu(): self.cleanup_ui_widgets() From 75135ebd31bc4055c7fea48b315c5fb91d6711a8 Mon Sep 17 00:00:00 2001 From: Naomi Pentrel <5212232+npentrel@users.noreply.github.com> Date: Sat, 22 Jun 2024 18:47:48 +0100 Subject: [PATCH 2/3] Draft --- modules/firmware_apps/app_store.py | 16 ++++++++++------ modules/system/eventbus.py | 6 ++++++ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/modules/firmware_apps/app_store.py b/modules/firmware_apps/app_store.py index 16581c7..ed2de10 100644 --- a/modules/firmware_apps/app_store.py +++ b/modules/firmware_apps/app_store.py @@ -69,7 +69,12 @@ def cleanup_ui_widgets(self): for widget in widgets: if widget: widget._cleanup() - widget = None + + self.menu = None + self.available_menu = None + self.installed_menu = None + self.update_menu = None + self.codeinstall = None def get_index(self): if not wifi.status(): @@ -106,10 +111,7 @@ def handle_index(self): def install_app(self, app): try: install_app(app) - if self.available_menu: - self.update_state("available_menu") - else: - self.update_state("main_menu") + self.update_state("main_menu") eventbus.emit(InstallNotificationEvent()) eventbus.emit(ShowNotificationEvent("Installed the app!")) except MemoryError: @@ -137,6 +139,7 @@ def prepare_available_menu(self): def on_select(_, i): self.to_install_app = self.app_store_index[i] self.update_state("installing_app") + self.cleanup_ui_widgets() def exit_available_menu(): self.cleanup_ui_widgets() @@ -153,11 +156,12 @@ def exit_available_menu(): def prepare_main_menu(self): def on_cancel(): + self.cleanup_ui_widgets() self.minimise() def on_select(value, idx): + self.cleanup_ui_widgets() if value == CODE_INSTALL: - self.cleanup_ui_widgets() self.codeinstall = CodeInstall( install_handler=lambda id: self.handle_code_input(id), app=self ) diff --git a/modules/system/eventbus.py b/modules/system/eventbus.py index 0d848be..f9a94e3 100644 --- a/modules/system/eventbus.py +++ b/modules/system/eventbus.py @@ -40,10 +40,16 @@ def remove(self, event_type, event_handler, app): if app in self.handlers: if event_type in self.handlers[app]: if event_handler in self.handlers[app][event_type]: + print( + f"Removed event handler for {event_type.__name__}: {app.__class__.__name__} - {event_handler.__name__}" + ) self.handlers[app][event_type].remove(event_handler) if app in self.async_handlers: if event_type in self.async_handlers[app]: if event_handler in self.async_handlers[app][event_type]: + print( + f"Removed event handler for {event_type.__name__}: {app.__class__.__name__} - {event_handler.__name__}" + ) self.async_handlers[app][event_type].remove(event_handler) def deregister(self, app): From def48d6da81d7aa42d35dd408ea0a3c866bb313f Mon Sep 17 00:00:00 2001 From: Naomi Pentrel <5212232+npentrel@users.noreply.github.com> Date: Sun, 23 Jun 2024 14:03:00 +0100 Subject: [PATCH 3/3] Ensure we draw the installing screen --- modules/firmware_apps/app_store.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/modules/firmware_apps/app_store.py b/modules/firmware_apps/app_store.py index ed2de10..54442cb 100644 --- a/modules/firmware_apps/app_store.py +++ b/modules/firmware_apps/app_store.py @@ -56,6 +56,7 @@ def __init__(self): self.app_store_index = [] self.to_install_app = None self.tarball = None + self.wait_one_cycle = False def cleanup_ui_widgets(self): widgets = [ @@ -91,8 +92,13 @@ def background_update(self, delta): return self.update_state("index_received") if self.to_install_app: - self.install_app(self.to_install_app) - self.to_install_app = None + # We wait one cycle after background_update is called to ensure the + # installation screen is drawn + if self.wait_one_cycle: + self.install_app(self.to_install_app) + self.to_install_app = None + self.wait_one_cycle = False + self.wait_one_cycle = True def handle_index(self): if not self.response: