sonos_cli/cli/commands.rs
1use clap::{Subcommand, ValueEnum};
2
3/// CLI subcommands — parsing only, no execution logic.
4#[derive(Debug, Subcommand)]
5pub enum Commands {
6 /// List all speakers
7 Speakers,
8 /// List all groups
9 Groups,
10 /// Show current playback status
11 Status,
12 /// Start playback
13 Play,
14 /// Pause playback
15 Pause,
16 /// Stop playback
17 Stop,
18 /// Skip to next track
19 Next,
20 /// Skip to previous track
21 #[command(name = "prev")]
22 Previous,
23 /// Set volume level (0-100)
24 Volume {
25 /// Volume level (0-100)
26 level: u8,
27 },
28 /// Mute playback
29 Mute,
30 /// Unmute playback
31 Unmute,
32 /// Seek to a position in the current track
33 Seek {
34 /// Target position in H:MM:SS format
35 position: String,
36 },
37 /// Set play mode
38 Mode {
39 /// Play mode
40 #[arg(value_enum)]
41 mode: PlayModeArg,
42 },
43 /// Set bass level (-10 to 10), speaker-only
44 Bass {
45 /// Bass level (-10 to 10)
46 level: i8,
47 },
48 /// Set treble level (-10 to 10), speaker-only
49 Treble {
50 /// Treble level (-10 to 10)
51 level: i8,
52 },
53 /// Set loudness compensation (on/off), speaker-only
54 Loudness {
55 /// on or off
56 #[arg(value_enum)]
57 state: OnOff,
58 },
59 /// Add a speaker to a group
60 Join,
61 /// Remove a speaker from its group
62 Leave,
63 /// Set or cancel a sleep timer
64 Sleep {
65 /// Duration (30m, 1h, 90m) or "cancel"
66 duration: String,
67 },
68 /// Manage the playback queue
69 Queue {
70 #[command(subcommand)]
71 action: Option<QueueAction>,
72 },
73}
74
75/// Queue sub-subcommands.
76#[derive(Debug, Subcommand)]
77pub enum QueueAction {
78 /// Add a URI to the queue
79 Add {
80 /// Sonos URI to add
81 uri: String,
82 },
83 /// Clear the entire queue
84 Clear,
85}
86
87#[derive(Debug, Clone, ValueEnum)]
88pub enum OnOff {
89 On,
90 Off,
91}
92
93#[derive(Debug, Clone, ValueEnum)]
94pub enum PlayModeArg {
95 Normal,
96 Repeat,
97 #[value(name = "repeat-one")]
98 RepeatOne,
99 Shuffle,
100 #[value(name = "shuffle-no-repeat")]
101 ShuffleNoRepeat,
102}
103
104impl PlayModeArg {
105 pub fn to_sdk(&self) -> sonos_sdk::PlayMode {
106 match self {
107 Self::Normal => sonos_sdk::PlayMode::Normal,
108 Self::Repeat => sonos_sdk::PlayMode::RepeatAll,
109 Self::RepeatOne => sonos_sdk::PlayMode::RepeatOne,
110 Self::Shuffle => sonos_sdk::PlayMode::Shuffle,
111 Self::ShuffleNoRepeat => sonos_sdk::PlayMode::ShuffleNoRepeat,
112 }
113 }
114}