ytmapi_rs/query/
upload.rs1use std::borrow::Cow;
2
3use super::{get_sort_order_params, GetLibrarySortOrder, PostMethod, PostQuery, Query};
4use crate::{
5 auth::AuthToken,
6 common::{UploadAlbumID, UploadArtistID, UploadEntityID},
7 parse::{GetLibraryUploadAlbum, TableListUploadSong, UploadAlbum, UploadArtist},
8};
9use serde_json::json;
10
11#[derive(Default, Clone)]
12pub struct GetLibraryUploadSongsQuery {
13 sort_order: GetLibrarySortOrder,
14}
15#[derive(Default, Clone)]
16pub struct GetLibraryUploadArtistsQuery {
17 sort_order: GetLibrarySortOrder,
18}
19#[derive(Default, Clone)]
20pub struct GetLibraryUploadAlbumsQuery {
21 sort_order: GetLibrarySortOrder,
22}
23#[derive(Clone)]
24pub struct GetLibraryUploadArtistQuery<'a> {
25 upload_artist_id: UploadArtistID<'a>,
26}
27#[derive(Clone)]
28pub struct GetLibraryUploadAlbumQuery<'a> {
29 upload_album_id: UploadAlbumID<'a>,
30}
31#[derive(Clone)]
32pub struct DeleteUploadEntityQuery<'a> {
34 upload_entity_id: UploadEntityID<'a>,
35}
36impl GetLibraryUploadSongsQuery {
37 pub fn new(sort_order: GetLibrarySortOrder) -> Self {
38 Self { sort_order }
39 }
40}
41impl GetLibraryUploadArtistsQuery {
42 pub fn new(sort_order: GetLibrarySortOrder) -> Self {
43 Self { sort_order }
44 }
45}
46impl GetLibraryUploadAlbumsQuery {
47 pub fn new(sort_order: GetLibrarySortOrder) -> Self {
48 Self { sort_order }
49 }
50}
51impl<'a> GetLibraryUploadArtistQuery<'a> {
52 pub fn new(upload_artist_id: UploadArtistID<'a>) -> Self {
53 Self { upload_artist_id }
54 }
55}
56impl<'a> GetLibraryUploadAlbumQuery<'a> {
57 pub fn new(upload_album_id: UploadAlbumID<'a>) -> Self {
58 Self { upload_album_id }
59 }
60}
61impl<'a> DeleteUploadEntityQuery<'a> {
62 pub fn new(upload_entity_id: UploadEntityID<'a>) -> Self {
63 Self { upload_entity_id }
64 }
65}
66impl<A: AuthToken> Query<A> for GetLibraryUploadAlbumQuery<'_> {
68 type Output = GetLibraryUploadAlbum;
69 type Method = PostMethod;
70}
71impl PostQuery for GetLibraryUploadAlbumQuery<'_> {
72 fn header(&self) -> serde_json::Map<String, serde_json::Value> {
73 serde_json::Map::from_iter([("browseId".to_string(), json!(self.upload_album_id))])
74 }
75 fn params(&self) -> Vec<(&str, Cow<str>)> {
76 vec![]
77 }
78 fn path(&self) -> &str {
79 "browse"
80 }
81}
82impl<A: AuthToken> Query<A> for GetLibraryUploadArtistQuery<'_> {
84 type Output = Vec<TableListUploadSong>;
85 type Method = PostMethod;
86}
87impl PostQuery for GetLibraryUploadArtistQuery<'_> {
88 fn header(&self) -> serde_json::Map<String, serde_json::Value> {
89 serde_json::Map::from_iter([("browseId".to_string(), json!(self.upload_artist_id))])
90 }
91 fn params(&self) -> Vec<(&str, Cow<str>)> {
92 vec![]
93 }
94 fn path(&self) -> &str {
95 "browse"
96 }
97}
98impl<A: AuthToken> Query<A> for GetLibraryUploadSongsQuery {
100 type Output = Vec<TableListUploadSong>;
101 type Method = PostMethod;
102}
103impl PostQuery for GetLibraryUploadSongsQuery {
104 fn header(&self) -> serde_json::Map<String, serde_json::Value> {
105 let params = get_sort_order_params(&self.sort_order);
106 if let Some(params) = params {
107 serde_json::Map::from_iter([
108 (
109 "browseId".to_string(),
110 json!("FEmusic_library_privately_owned_tracks"),
111 ),
112 ("params".to_string(), json!(params)),
113 ])
114 } else {
115 serde_json::Map::from_iter([(
116 "browseId".to_string(),
117 json!("FEmusic_library_privately_owned_tracks"),
118 )])
119 }
120 }
121 fn params(&self) -> Vec<(&str, Cow<str>)> {
122 vec![]
123 }
124 fn path(&self) -> &str {
125 "browse"
126 }
127}
128impl<A: AuthToken> Query<A> for GetLibraryUploadAlbumsQuery {
130 type Output = Vec<UploadAlbum>;
131 type Method = PostMethod;
132}
133impl PostQuery for GetLibraryUploadAlbumsQuery {
134 fn header(&self) -> serde_json::Map<String, serde_json::Value> {
135 let params = get_sort_order_params(&self.sort_order);
136 if let Some(params) = params {
137 serde_json::Map::from_iter([
138 (
139 "browseId".to_string(),
140 json!("FEmusic_library_privately_owned_releases"),
141 ),
142 ("params".to_string(), json!(params)),
143 ])
144 } else {
145 serde_json::Map::from_iter([(
146 "browseId".to_string(),
147 json!("FEmusic_library_privately_owned_releases"),
148 )])
149 }
150 }
151 fn params(&self) -> Vec<(&str, Cow<str>)> {
152 vec![]
153 }
154 fn path(&self) -> &str {
155 "browse"
156 }
157}
158impl<A: AuthToken> Query<A> for GetLibraryUploadArtistsQuery {
160 type Output = Vec<UploadArtist>;
161 type Method = PostMethod;
162}
163impl PostQuery for GetLibraryUploadArtistsQuery {
164 fn header(&self) -> serde_json::Map<String, serde_json::Value> {
165 let params = get_sort_order_params(&self.sort_order);
166 if let Some(params) = params {
167 serde_json::Map::from_iter([
168 (
169 "browseId".to_string(),
170 json!("FEmusic_library_privately_owned_artists"),
171 ),
172 ("params".to_string(), json!(params)),
173 ])
174 } else {
175 serde_json::Map::from_iter([(
176 "browseId".to_string(),
177 json!("FEmusic_library_privately_owned_artists"),
178 )])
179 }
180 }
181 fn params(&self) -> Vec<(&str, Cow<str>)> {
182 vec![]
183 }
184 fn path(&self) -> &str {
185 "browse"
186 }
187}
188impl<A: AuthToken> Query<A> for DeleteUploadEntityQuery<'_> {
190 type Output = ();
191 type Method = PostMethod;
192}
193impl PostQuery for DeleteUploadEntityQuery<'_> {
194 fn header(&self) -> serde_json::Map<String, serde_json::Value> {
195 serde_json::Map::from_iter([("entityId".to_string(), json!(self.upload_entity_id))])
196 }
197 fn params(&self) -> Vec<(&str, Cow<str>)> {
198 vec![]
199 }
200 fn path(&self) -> &str {
201 "music/delete_privately_owned_entity"
202 }
203}