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}