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 []
|
||||
|
||||
|
||||
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:
|
||||
result = run_command(
|
||||
[
|
||||
@@ -181,7 +202,7 @@ def collect_status(runner: Runner = subprocess.run) -> dict[str, object]:
|
||||
try:
|
||||
device = normalize_device_line(
|
||||
line,
|
||||
loaded_plugins(device_id, runner),
|
||||
device_plugins(device_id, runner),
|
||||
reported_type(device_id, runner),
|
||||
)
|
||||
except ValueError:
|
||||
|
||||
@@ -6,6 +6,7 @@ import importlib.machinery
|
||||
import importlib.util
|
||||
import json
|
||||
import pathlib
|
||||
import subprocess
|
||||
import tempfile
|
||||
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__":
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user