Skip to content

Commit 127dfdc

Browse files
mvdweteringCopilot
andcommitted
Add SEARCHMODE support for SIRIUS subunit
Add SiriusSearchMode enum with All Ch, Category, and Preset values and wire it up as a searchmode attribute on the Sirius class. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent c55a4d3 commit 127dfdc

5 files changed

Lines changed: 56 additions & 1 deletion

File tree

src/ynca/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
PwrB,
3131
Repeat,
3232
Shuffle,
33+
SiriusSearchMode,
3334
Sleep,
3435
SoundPrg,
3536
SpeakerA,
@@ -116,6 +117,7 @@
116117
"Shuffle",
117118
"Sirius",
118119
"SiriusIr",
120+
"SiriusSearchMode",
119121
"SiriusXm",
120122
"Sleep",
121123
"SoundPrg",

src/ynca/enums.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -427,6 +427,21 @@ def _missing_(cls, value: object) -> Self:
427427
"""Unknown values in the enum are mapped to UNKNOWN"""
428428

429429

430+
@unique
431+
class SiriusSearchMode(StrEnum):
432+
ALL_CH = "All Ch"
433+
CATEGORY = "Category"
434+
PRESET = "Preset"
435+
436+
@classmethod
437+
def _missing_(cls, value: object) -> Self:
438+
logger.warning("Unknown value '%s' in %s", value, cls.__name__)
439+
return cls(cls.UNKNOWN)
440+
441+
UNKNOWN = UNKNOWN_STRING
442+
"""Unknown values in the enum are mapped to UNKNOWN"""
443+
444+
430445
@unique
431446
class Sleep(StrEnum):
432447
OFF = "Off"

src/ynca/subunits/sirius.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
from __future__ import annotations
22

33
from ..constants import Subunit
4+
from ..enums import SiriusSearchMode
5+
from ..function import EnumFunctionMixin
46
from ..subunit import SubunitBase
57
from . import (
68
ArtistFunctionMixin,
@@ -25,6 +27,8 @@ class Sirius(
2527
):
2628
id = Subunit.SIRIUS
2729

30+
searchmode = EnumFunctionMixin[SiriusSearchMode](SiriusSearchMode)
31+
2832

2933
class SiriusIr(
3034
ArtistFunctionMixin,

tests/test_enums.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
PwrB,
2828
Repeat,
2929
Shuffle,
30+
SiriusSearchMode,
3031
Sleep,
3132
SoundPrg,
3233
SpeakerA,
@@ -69,6 +70,7 @@ def test_invalid_values_on_enums() -> None:
6970
assert PwrB("x") is PwrB.UNKNOWN
7071
assert Repeat("x") is Repeat.UNKNOWN
7172
assert Shuffle("x") is Shuffle.UNKNOWN
73+
assert SiriusSearchMode("x") is SiriusSearchMode.UNKNOWN
7274
assert Sleep("x") is Sleep.UNKNOWN
7375
assert SoundPrg("x") is SoundPrg.UNKNOWN
7476
assert SpeakerA("x") is SpeakerA.UNKNOWN

tests/test_sirius.py

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from typing import Any
33

44
from tests.mock_yncaconnection import YncaConnectionMock
5-
from ynca import Sirius
5+
from ynca import Sirius, SiriusSearchMode
66

77
SYS = "SYS"
88
SUBUNIT = "SIRIUS"
@@ -25,6 +25,12 @@
2525
(SUBUNIT, "AVAIL", "Ready"),
2626
],
2727
),
28+
(
29+
(SUBUNIT, "SEARCHMODE"),
30+
[
31+
(SUBUNIT, "SEARCHMODE", "Preset"),
32+
],
33+
),
2834
(
2935
(SYS, "VERSION"),
3036
[
@@ -47,3 +53,29 @@ def test_initialize(
4753
assert sirius.artist == "Artist"
4854
assert sirius.song == "Song"
4955
assert sirius.chname == "ChName"
56+
assert sirius.searchmode == SiriusSearchMode.PRESET
57+
58+
59+
def test_searchmode(
60+
connection: YncaConnectionMock, update_callback: Callable[[str, Any], None]
61+
) -> None:
62+
connection.get_response_list = INITIALIZE_FULL_RESPONSES
63+
sirius = Sirius(connection)
64+
sirius.initialize()
65+
66+
# Updates from device
67+
connection.send_protocol_message(SUBUNIT, "SEARCHMODE", "All Ch")
68+
assert sirius.searchmode == SiriusSearchMode.ALL_CH
69+
70+
connection.send_protocol_message(SUBUNIT, "SEARCHMODE", "Category")
71+
assert sirius.searchmode == SiriusSearchMode.CATEGORY
72+
73+
connection.send_protocol_message(SUBUNIT, "SEARCHMODE", "Preset")
74+
assert sirius.searchmode == SiriusSearchMode.PRESET
75+
76+
# Set
77+
sirius.searchmode = SiriusSearchMode.ALL_CH
78+
connection.put.assert_called_with(SUBUNIT, "SEARCHMODE", "All Ch")
79+
80+
sirius.searchmode = SiriusSearchMode.CATEGORY
81+
connection.put.assert_called_with(SUBUNIT, "SEARCHMODE", "Category")

0 commit comments

Comments
 (0)