diff --git a/modules/firmware_apps/app_store.py b/modules/firmware_apps/app_store.py index 1cc7bad..6272f85 100644 --- a/modules/firmware_apps/app_store.py +++ b/modules/firmware_apps/app_store.py @@ -9,6 +9,8 @@ import app import wifi +import shutil +import machine from app_components import Menu, clear_background, fourteen_pt, sixteen_pt, ten_pt from events.input import BUTTON_TYPES, ButtonDownEvent from requests import get @@ -145,6 +147,7 @@ def exit_available_menu(): item_font_size=ten_pt, ) + def prepare_main_menu(self): def on_cancel(): self.minimise() @@ -182,9 +185,10 @@ def on_cancel(): self.cleanup_ui_widgets() self.update_state("main_menu") - def on_select(_, __): - # TODO maybe implement uninstalling apps - pass + def on_select(value, idx): + self.uninstall_app(value) + self.cleanup_ui_widgets() + self.update_state("main_menu") installed_apps = list_user_apps() @@ -197,6 +201,24 @@ def on_select(_, __): item_font_size=ten_pt, ) + def uninstall_app(self, app): + user_apps = list_user_apps() + selected_app = list(filter(lambda x: x['name'] == app, user_apps)) + if len(selected_app) == 0: + raise RuntimeError(f"app not found: {app}") + if len(selected_app) > 1: + raise RuntimeError(f"duplicate app found: {app}") + else: + selected_app = selected_app[0] + selected_app_module = selected_app['path'] + selected_app_fs_path = "/" + "/".join(selected_app_module.split(".")[0:-1]) + print(f"Selected app fs path: {selected_app_fs_path}") + shutil.rmtree(selected_app_fs_path) + eventbus.emit(InstallNotificationEvent()) + machine.reset() + + + def error_screen(self, ctx, message): ctx.save() ctx.text_align = ctx.CENTER diff --git a/modules/system/launcher/app.py b/modules/system/launcher/app.py index b03743f..4810c8e 100644 --- a/modules/system/launcher/app.py +++ b/modules/system/launcher/app.py @@ -154,7 +154,8 @@ def launch(self, item): try: module = __import__(module_name, None, None, (fn,)) app = getattr(module, fn)() - except Exception: + except Exception as e: + print(f"Error creating app: {e}") eventbus.emit( ShowNotificationEvent(message=f"{item["name"]} has crashed") ) diff --git a/tildagon/manifest.py b/tildagon/manifest.py index 02c77b4..e940c9d 100644 --- a/tildagon/manifest.py +++ b/tildagon/manifest.py @@ -37,6 +37,7 @@ def freeze_images(path, generated_dir): module("eeprom_i2c.py", base_path="$(MPY_DIR)/../modules/lib") freeze("$(MPY_DIR)/../modules/lib", "typing.py") freeze("$(MPY_DIR)/../modules/lib", "typing_extensions.py") +freeze("$(MPY_DIR)/../modules/lib", "shutil.py") #freeze("$(MPY_DIR)/../micropython-lib/python-ecosys/urequests", "urequests.py") #freeze("$(MPY_DIR)/../micropython-lib/micropython/upysh", "upysh.py") #freeze("$(MPY_DIR)/../micropython-lib/python-stdlib/functools", "functools.py")