diff --git a/AbletonOSC/browser.py b/AbletonOSC/browser.py index 3bbf94b..b038ae0 100644 --- a/AbletonOSC/browser.py +++ b/AbletonOSC/browser.py @@ -42,6 +42,9 @@ class BrowserHandler(AbletonOSCHandler): self._add("/live/browser/get/hotswap_target", self._get_hotswap_target) self._add("/live/browser/begin_hotswap", self._begin_hotswap) + # Path exploration + self._add("/live/browser/list_children", self._list_children) + # ------------------------------------------------------------------ def _browser(self): @@ -118,6 +121,25 @@ class BrowserHandler(AbletonOSCHandler): logger.warning("stop_preview: %s", e) return None + def _list_children(self, params: tuple) -> Optional[tuple]: + """List children at a browser path. params: category [, path_part, ...]""" + if not params: + return None + browser = self._browser() + if browser is None: + return None + category = str(params[0]) + path = [str(p) for p in params[1:]] + try: + root = getattr(browser, category) + node = _iter_items(root, path) if path else root + if node is None: + return None + return tuple(child.name for child in node.children) + except Exception as e: + logger.warning("list_children %s/%s: %s", category, path, e) + return None + def _get_hotswap_target(self, params: tuple) -> Optional[tuple]: browser = self._browser() if browser: