Keep offline phone capabilities visible

This commit is contained in:
Gabriel Brown
2026-08-17 13:42:31 -04:00
parent 49ec4d8f6a
commit 190e3200e0
2 changed files with 49 additions and 1 deletions
@@ -142,6 +142,27 @@ def loaded_plugins(device_id: str, runner: Runner = subprocess.run) -> list[str]
return parse_loaded_plugins(result.stdout) if result.returncode == 0 else [] return parse_loaded_plugins(result.stdout) if result.returncode == 0 else []
def supported_plugins(device_id: str, runner: Runner = subprocess.run) -> list[str]:
result = run_command(
[
"busctl",
"--user",
"get-property",
"org.kde.kdeconnect",
device_object(device_id),
"org.kde.kdeconnect.device",
"supportedPlugins",
],
runner=runner,
)
return parse_loaded_plugins(result.stdout) if result.returncode == 0 else []
def device_plugins(device_id: str, runner: Runner = subprocess.run) -> list[str]:
active = loaded_plugins(device_id, runner)
return active if active else supported_plugins(device_id, runner)
def reported_type(device_id: str, runner: Runner = subprocess.run) -> str: def reported_type(device_id: str, runner: Runner = subprocess.run) -> str:
result = run_command( result = run_command(
[ [
@@ -181,7 +202,7 @@ def collect_status(runner: Runner = subprocess.run) -> dict[str, object]:
try: try:
device = normalize_device_line( device = normalize_device_line(
line, line,
loaded_plugins(device_id, runner), device_plugins(device_id, runner),
reported_type(device_id, runner), reported_type(device_id, runner),
) )
except ValueError: except ValueError:
@@ -6,6 +6,7 @@ import importlib.machinery
import importlib.util import importlib.util
import json import json
import pathlib import pathlib
import subprocess
import tempfile import tempfile
import unittest import unittest
@@ -103,6 +104,32 @@ class KdeConnectBridgeTest(unittest.TestCase):
], ],
) )
def test_offline_device_falls_back_to_supported_plugins(self) -> None:
def runner(command: list[str], **_kwargs: object) -> subprocess.CompletedProcess[str]:
member = command[-1]
if member == "loadedPlugins":
return subprocess.CompletedProcess(command, 0, "as 0\n", "")
if member == "supportedPlugins":
return subprocess.CompletedProcess(
command,
0,
'as 3 "kdeconnect_share" "kdeconnect_clipboard" "kdeconnect_findmyphone"\n',
"",
)
raise AssertionError(command)
self.assertEqual(
bridge.device_plugins(
"90B54E84548E4F109268EC2D0E7D6930",
runner,
),
[
"kdeconnect_share",
"kdeconnect_clipboard",
"kdeconnect_findmyphone",
],
)
if __name__ == "__main__": if __name__ == "__main__":
unittest.main() unittest.main()