From 80e9a691bce8b6f7d4b6db1311e1d7d8664747c8 Mon Sep 17 00:00:00 2001 From: James Mackay Date: Fri, 9 Oct 2026 05:47:30 +0100 Subject: [PATCH] =?UTF-8?q?feat(ha=5Fadb=5Fcommon):=20application-label=20?= =?UTF-8?q?parser=20=E2=80=94=20default-locale=20from=20pm=20dump,=20local?= =?UTF-8?q?ized=20variants=20skipped,=20tolerant=20of=20empty/multi-label?= =?UTF-8?q?=20blocks=20(P5-1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nvidia_shield/ha_adb_common/__init__.py | 2 ++ .../nvidia_shield/ha_adb_common/app_label.py | 27 +++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 custom_components/nvidia_shield/ha_adb_common/app_label.py diff --git a/custom_components/nvidia_shield/ha_adb_common/__init__.py b/custom_components/nvidia_shield/ha_adb_common/__init__.py index 764829c..5bf9bf1 100644 --- a/custom_components/nvidia_shield/ha_adb_common/__init__.py +++ b/custom_components/nvidia_shield/ha_adb_common/__init__.py @@ -1,6 +1,7 @@ """Shared ADB utilities for Home Assistant custom integrations.""" from .adb_client import AdbClientBase, parse_wakefulness +from .app_label import parse_application_label from .const import ( ATTR_MEDIA_DAG_JELLYFIN_ENTITY, ATTR_MEDIA_DAG_NOW_PLAYING, @@ -32,6 +33,7 @@ __all__ = [ "PlaybackIntent", "ensure_adb_key", "parse_all_media_sessions", + "parse_application_label", "parse_audio_playback", "parse_foreground", "parse_wakefulness", diff --git a/custom_components/nvidia_shield/ha_adb_common/app_label.py b/custom_components/nvidia_shield/ha_adb_common/app_label.py new file mode 100644 index 0000000..f31a2f7 --- /dev/null +++ b/custom_components/nvidia_shield/ha_adb_common/app_label.py @@ -0,0 +1,27 @@ +"""App friendly-name resolution from the package manifest (P5-1). + +Parses `pm dump ` output for the ``application-label`` line — the +default-locale variant; localized suffixed variants +(``application-label-:``) are skipped, and multi-label blocks across +locales are tolerated (first default-locale label wins), mirroring the +tolerant pattern of the androidtv-adb core helper. +""" + +import re + +_APPLICATION_LABEL_RE = re.compile(r"application-label(?:-[A-Za-z_-]+)?:\s*'([^']*)'") + + +def parse_application_label(dump: str) -> str | None: + """The package's default-locale application label, or None. + + Returns None on empty/failed dumps too — callers fall through to the + next name tier. + """ + if not dump: + return None + for match in _APPLICATION_LABEL_RE.finditer(dump): + label = (match.group(1) or "").strip() + if label and label not in ("null", ""): + return label + return None