From a24ba1373a1bccb84b80af1fbd970ed8476283c1 Mon Sep 17 00:00:00 2001 From: Sebastian Krzyszkowiak <dos@dosowisko.net> Date: Fri, 20 Oct 2023 16:41:02 +0200 Subject: [PATCH] py,st3m: Support custom categories This allows us to gracefully handle new categories being introduced in the future. Categories are still being validated by the app store's backend. --- python_payload/st3m/run.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/python_payload/st3m/run.py b/python_payload/st3m/run.py index 74b11170f5..dc319b7171 100644 --- a/python_payload/st3m/run.py +++ b/python_payload/st3m/run.py @@ -1,5 +1,5 @@ from st3m.reactor import Reactor, Responder -from st3m.goose import List, Optional +from st3m.goose import List, Set, Optional from st3m.ui.menu import ( MenuItem, MenuItemBack, @@ -95,6 +95,13 @@ class ApplicationMenu(SimpleMenu): leds.update() +def _get_bundle_menu_kinds(mgr: BundleManager) -> Set[str]: + kinds: Set[str] = set() + for bundle in mgr.bundles.values(): + kinds.update(bundle.menu_kinds()) + return kinds + + def _get_bundle_menu_entries(mgr: BundleManager, kind: str) -> List[MenuItem]: entries: List[MenuItem] = [] ids = sorted(mgr.bundles.keys(), key=str.lower) @@ -244,9 +251,16 @@ def run_main() -> None: MenuItemAction("Reboot", machine.reset), ], ) + + app_kinds = _get_bundle_menu_kinds(bundles) + menu_categories = ["Badge", "Music", "Media", "Apps", "Games"] + for kind in app_kinds: + if kind not in ["Hidden", "System"] and kind not in menu_categories: + menu_categories.append(kind) + categories = [ MenuItemForeground(kind, ApplicationMenu([MenuItemBack()] + entries)) - for kind in ["Badge", "Music", "Media", "Apps", "Games"] + for kind in menu_categories if (entries := _get_bundle_menu_entries(bundles, kind)) ] categories.append(MenuItemForeground("System", menu_system)) -- GitLab