Keep offline phone capabilities visible
This commit is contained in:
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user