spotify_cli/cli/args/media.rs
1//! Media command definitions (shows, episodes, audiobooks, chapters, albums).
2
3use clap::Subcommand;
4
5use crate::constants::{DEFAULT_LIMIT, DEFAULT_OFFSET};
6
7#[derive(Subcommand)]
8pub enum ShowCommand {
9 /// Get show (podcast) details
10 Get {
11 /// Show ID or URL
12 id: String,
13 },
14 /// List show episodes
15 Episodes {
16 /// Show ID or URL
17 id: String,
18 /// Number of episodes to return (default 20, max 50)
19 #[arg(long, short = 'l', default_value_t = DEFAULT_LIMIT)]
20 limit: u8,
21 /// Offset for pagination
22 #[arg(long, short = 'o', default_value_t = DEFAULT_OFFSET)]
23 offset: u32,
24 },
25 /// List saved shows
26 List {
27 /// Number of shows to return (default 20, max 50)
28 #[arg(long, short = 'l', default_value_t = DEFAULT_LIMIT)]
29 limit: u8,
30 /// Offset for pagination
31 #[arg(long, short = 'o', default_value_t = DEFAULT_OFFSET)]
32 offset: u32,
33 },
34 /// Save shows to library
35 Save {
36 /// Show IDs to save
37 #[arg(required = true)]
38 ids: Vec<String>,
39 },
40 /// Remove shows from library
41 Remove {
42 /// Show IDs to remove
43 #[arg(required = true)]
44 ids: Vec<String>,
45 },
46 /// Check if shows are in library
47 Check {
48 /// Show IDs to check
49 #[arg(required = true)]
50 ids: Vec<String>,
51 },
52}
53
54#[derive(Subcommand)]
55pub enum EpisodeCommand {
56 /// Get episode details
57 Get {
58 /// Episode ID or URL
59 id: String,
60 },
61 /// List saved episodes
62 List {
63 /// Number of episodes to return (default 20, max 50)
64 #[arg(long, short = 'l', default_value_t = DEFAULT_LIMIT)]
65 limit: u8,
66 /// Offset for pagination
67 #[arg(long, short = 'o', default_value_t = DEFAULT_OFFSET)]
68 offset: u32,
69 },
70 /// Save episodes to library
71 Save {
72 /// Episode IDs to save
73 #[arg(required = true)]
74 ids: Vec<String>,
75 },
76 /// Remove episodes from library
77 Remove {
78 /// Episode IDs to remove
79 #[arg(required = true)]
80 ids: Vec<String>,
81 },
82 /// Check if episodes are in library
83 Check {
84 /// Episode IDs to check
85 #[arg(required = true)]
86 ids: Vec<String>,
87 },
88}
89
90#[derive(Subcommand)]
91pub enum AudiobookCommand {
92 /// Get audiobook details
93 Get {
94 /// Audiobook ID or URL
95 id: String,
96 },
97 /// List audiobook chapters
98 Chapters {
99 /// Audiobook ID or URL
100 id: String,
101 /// Number of chapters to return (default 20, max 50)
102 #[arg(long, short = 'l', default_value_t = DEFAULT_LIMIT)]
103 limit: u8,
104 /// Offset for pagination
105 #[arg(long, short = 'o', default_value_t = DEFAULT_OFFSET)]
106 offset: u32,
107 },
108 /// List saved audiobooks
109 List {
110 /// Number of audiobooks to return (default 20, max 50)
111 #[arg(long, short = 'l', default_value_t = DEFAULT_LIMIT)]
112 limit: u8,
113 /// Offset for pagination
114 #[arg(long, short = 'o', default_value_t = DEFAULT_OFFSET)]
115 offset: u32,
116 },
117 /// Save audiobooks to library
118 Save {
119 /// Audiobook IDs to save
120 #[arg(required = true)]
121 ids: Vec<String>,
122 },
123 /// Remove audiobooks from library
124 Remove {
125 /// Audiobook IDs to remove
126 #[arg(required = true)]
127 ids: Vec<String>,
128 },
129 /// Check if audiobooks are in library
130 Check {
131 /// Audiobook IDs to check
132 #[arg(required = true)]
133 ids: Vec<String>,
134 },
135}
136
137#[derive(Subcommand)]
138pub enum ChapterCommand {
139 /// Get chapter details
140 Get {
141 /// Chapter ID or URL
142 id: String,
143 },
144}
145
146#[derive(Subcommand)]
147pub enum AlbumCommand {
148 /// List saved albums
149 List {
150 /// Number of albums to return (default 20, max 50)
151 #[arg(long, short = 'l', default_value_t = DEFAULT_LIMIT)]
152 limit: u8,
153 /// Offset for pagination
154 #[arg(long, short = 'o', default_value_t = DEFAULT_OFFSET)]
155 offset: u32,
156 },
157 /// Get album tracks
158 Tracks {
159 /// Album ID or URL
160 id: String,
161 /// Number of tracks to return (default 20, max 50)
162 #[arg(long, short = 'l', default_value_t = DEFAULT_LIMIT)]
163 limit: u8,
164 /// Offset for pagination
165 #[arg(long, short = 'o', default_value_t = DEFAULT_OFFSET)]
166 offset: u32,
167 },
168 /// Save albums to library
169 Save {
170 /// Album IDs to save
171 #[arg(required = true)]
172 ids: Vec<String>,
173 },
174 /// Remove albums from library
175 Remove {
176 /// Album IDs to remove
177 #[arg(required = true)]
178 ids: Vec<String>,
179 },
180 /// Check if albums are in library
181 Check {
182 /// Album IDs to check
183 #[arg(required = true)]
184 ids: Vec<String>,
185 },
186 /// Browse new album releases
187 NewReleases {
188 /// Number of albums to return (default 20, max 50)
189 #[arg(long, short = 'l', default_value_t = DEFAULT_LIMIT)]
190 limit: u8,
191 /// Offset for pagination
192 #[arg(long, short = 'o', default_value_t = DEFAULT_OFFSET)]
193 offset: u32,
194 },
195}