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