From 89df074030c5e85c6f91babd9a4752fb79890fd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D0=BA=D1=82=D0=BE=D1=80?= <78488229+viktor138irk@users.noreply.github.com> Date: Tue, 12 May 2026 00:57:45 +0900 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20fa?= =?UTF-8?q?llback=20=D0=BC=D0=BE=D0=B4=D0=B5=D0=BB=D0=B5=D0=B9=20=D0=B8?= =?UTF-8?q?=D0=B7=20adb=20devices?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/android_tools.py | 37 +++++++++++++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/backend/android_tools.py b/backend/android_tools.py index c0a53bd..0d80c39 100644 --- a/backend/android_tools.py +++ b/backend/android_tools.py @@ -14,6 +14,22 @@ def list_devices() -> dict: return result +def _parse_adb_line_metadata(parts: list[str]) -> dict[str, str]: + metadata: dict[str, str] = {} + + for part in parts[2:]: + if ':' not in part: + continue + key, value = part.split(':', 1) + metadata[key.strip()] = value.strip() + + return metadata + + +def _pretty_token(value: str) -> str: + return value.replace('_', ' ').replace('-', ' ').strip() + + def parse_devices(stdout: str) -> list[dict]: devices: list[dict] = [] @@ -28,6 +44,7 @@ def parse_devices(stdout: str) -> list[dict]: serial = parts[0] state = parts[1] + adb_meta = _parse_adb_line_metadata(parts) if state != 'device': devices.append({ @@ -39,13 +56,22 @@ def parse_devices(stdout: str) -> list[dict]: continue props = get_device_props(serial) - brand = props.get('brand') or '' - model = props.get('model') or '' - device = props.get('device') or '' + brand = props.get('brand') or adb_meta.get('product') or '' + model = props.get('model') or adb_meta.get('model') or '' + device = props.get('device') or adb_meta.get('device') or '' android = props.get('android') or '' sdk = props.get('sdk') or '' - title = ' '.join(part for part in [brand, model] if part).strip() or serial + title_parts = [] + if brand: + title_parts.append(_pretty_token(brand).title()) + if model and model.lower() != brand.lower(): + title_parts.append(_pretty_token(model)) + if not title_parts and device: + title_parts.append(_pretty_token(device)) + + title = ' '.join(title_parts).strip() or serial + subtitle_parts = [] if android: subtitle_parts.append(f'Android {android}') @@ -53,6 +79,8 @@ def parse_devices(stdout: str) -> list[dict]: subtitle_parts.append(f'SDK {sdk}') if device: subtitle_parts.append(device) + if adb_meta.get('transport_id'): + subtitle_parts.append(f"transport {adb_meta['transport_id']}") subtitle_parts.append(serial) devices.append({ @@ -63,6 +91,7 @@ def parse_devices(stdout: str) -> list[dict]: 'device': device, 'android': android, 'sdk': sdk, + 'adb_meta': adb_meta, 'title': title, 'subtitle': ' ยท '.join(subtitle_parts), })