diff --git a/python_payload/st3m/run.py b/python_payload/st3m/run.py index 74b11170f5c066675df898d58be944605e84f1dc..dc319b71716d850938cbaa657b09a8435c2baaa2 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))