feat: add helper for userallmusicdetail
This commit is contained in:
45
sdgb-api/src/title/helper/mod.rs
Normal file
45
sdgb-api/src/title/helper/mod.rs
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
use nyquest::AsyncClient;
|
||||||
|
|
||||||
|
use crate::{
|
||||||
|
ApiError,
|
||||||
|
title::{
|
||||||
|
MaiVersionExt as _, Sdgb1_50,
|
||||||
|
methods::APIMethod,
|
||||||
|
model::{GetUserMusicApi, GetUserMusicApiResp, UserMusicDetail},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
pub async fn get_user_all_music(
|
||||||
|
client: &AsyncClient,
|
||||||
|
user_id: u32,
|
||||||
|
) -> Result<Vec<UserMusicDetail>, ApiError> {
|
||||||
|
let mut music_detail = Vec::new();
|
||||||
|
let mut index = None;
|
||||||
|
|
||||||
|
loop {
|
||||||
|
let GetUserMusicApiResp {
|
||||||
|
next_index,
|
||||||
|
mut user_music_list,
|
||||||
|
..
|
||||||
|
} = Sdgb1_50::request::<_, GetUserMusicApiResp>(
|
||||||
|
&client,
|
||||||
|
APIMethod::GetUserMusicApi,
|
||||||
|
user_id,
|
||||||
|
GetUserMusicApi {
|
||||||
|
user_id,
|
||||||
|
next_index: index.unwrap_or_default(),
|
||||||
|
max_count: 50,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
for list in &mut user_music_list {
|
||||||
|
music_detail.append(&mut list.user_music_detail_list);
|
||||||
|
}
|
||||||
|
|
||||||
|
if next_index == 0 || user_music_list.is_empty() {
|
||||||
|
break Ok(music_detail);
|
||||||
|
}
|
||||||
|
index = Some(next_index);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,6 +6,8 @@ pub mod encryption;
|
|||||||
pub mod methods;
|
pub mod methods;
|
||||||
pub mod model;
|
pub mod model;
|
||||||
|
|
||||||
|
pub mod helper;
|
||||||
|
|
||||||
use super::ApiError;
|
use super::ApiError;
|
||||||
|
|
||||||
use nyquest::{
|
use nyquest::{
|
||||||
|
|||||||
@@ -23,8 +23,7 @@ pub use get_user_rating_api::{
|
|||||||
};
|
};
|
||||||
|
|
||||||
mod get_user_music_api;
|
mod get_user_music_api;
|
||||||
pub use get_user_music_api::{GetUserMusicApi, GetUserMusicApiResp, UserMusic};
|
pub use get_user_music_api::{GetUserMusicApi, GetUserMusicApiResp, UserMusic, UserMusicDetail};
|
||||||
|
|
||||||
|
|
||||||
mod dxrating;
|
mod dxrating;
|
||||||
pub use dxrating::{
|
pub use dxrating::{
|
||||||
|
|||||||
@@ -15,12 +15,12 @@ use sdgb_api::{
|
|||||||
auth_lite::{SDGB, SDHJ, delivery_raw},
|
auth_lite::{SDGB, SDHJ, delivery_raw},
|
||||||
title::{
|
title::{
|
||||||
MaiVersionExt, Sdgb1_50,
|
MaiVersionExt, Sdgb1_50,
|
||||||
|
helper::get_user_all_music,
|
||||||
methods::APIMethod,
|
methods::APIMethod,
|
||||||
model::{
|
model::{
|
||||||
DataVersion, DxCalculatedEntries, DxMusicRecord, DxRatingNet, GetUserDataApi,
|
DataVersion, DxCalculatedEntries, DxMusicRecord, DxRatingNet, GetUserDataApi,
|
||||||
GetUserDataApiResp, GetUserMusicApi, GetUserMusicApiResp, GetUserPreviewApi,
|
GetUserDataApiResp, GetUserPreviewApi, GetUserPreviewApiResp, GetUserRatingApi,
|
||||||
GetUserPreviewApiResp, GetUserRatingApi, GetUserRatingApiResp, Ping, PingResp,
|
GetUserRatingApiResp, Ping, PingResp, UserLogoutApi, UserLogoutApiResp,
|
||||||
UserLogoutApi, UserLogoutApiResp,
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@@ -79,35 +79,7 @@ async fn main() -> Result<(), Box<dyn snafu::Error>> {
|
|||||||
// TODO: refactor via enum_dispatch
|
// TODO: refactor via enum_dispatch
|
||||||
match command {
|
match command {
|
||||||
Commands::MusicDetail { user_id, format } => {
|
Commands::MusicDetail { user_id, format } => {
|
||||||
let mut music_detail = Vec::new();
|
let music_detail = get_user_all_music(&client, user_id).await?;
|
||||||
let mut index = None;
|
|
||||||
|
|
||||||
loop {
|
|
||||||
let GetUserMusicApiResp {
|
|
||||||
next_index,
|
|
||||||
mut user_music_list,
|
|
||||||
..
|
|
||||||
} = Sdgb1_50::request::<_, GetUserMusicApiResp>(
|
|
||||||
&client,
|
|
||||||
APIMethod::GetUserMusicApi,
|
|
||||||
user_id,
|
|
||||||
GetUserMusicApi {
|
|
||||||
user_id,
|
|
||||||
next_index: index.unwrap_or_default(),
|
|
||||||
max_count: 50,
|
|
||||||
},
|
|
||||||
)
|
|
||||||
.await?;
|
|
||||||
|
|
||||||
for list in &mut user_music_list {
|
|
||||||
music_detail.append(&mut list.user_music_detail_list);
|
|
||||||
}
|
|
||||||
|
|
||||||
if next_index == 0 || user_music_list.is_empty() {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
index = Some(next_index);
|
|
||||||
}
|
|
||||||
|
|
||||||
match (human_readable, format) {
|
match (human_readable, format) {
|
||||||
(true, _) => {
|
(true, _) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user