use super::Query;
use crate::error::Result;
use crate::request::{ApiClient, ApiResponse, CryptoType};
use serde_json::json;
impl ApiClient {
pub async fn cloud_upload_token_check(&self, query: &Query) -> Result<ApiResponse> {
let bitrate = query.get_or("bitrate", "999000");
let data = json!({
"bitrate": &bitrate,
"ext": "",
"length": query.get_or("fileSize", "0").parse::<i64>().unwrap_or(0),
"md5": query.get_or("md5", ""),
"songId": "0",
"version": 1
});
self.request(
"/api/cloud/upload/check",
data,
query.to_option(CryptoType::default()),
)
.await
}
pub async fn cloud_upload_token_alloc(&self, query: &Query) -> Result<ApiResponse> {
let filename = query.get_or("filename", "");
let ext = if filename.contains('.') {
filename.rsplit('.').next().unwrap_or("mp3").to_string()
} else {
"mp3".to_string()
};
let clean_name = filename
.rsplit_once('.')
.map(|(name, _)| name)
.unwrap_or(&filename)
.replace(' ', "")
.replace('.', "_");
let data = json!({
"bucket": "jd-musicrep-privatecloud-audio-public",
"ext": ext,
"filename": clean_name,
"local": false,
"nos_product": 3,
"type": "audio",
"md5": query.get_or("md5", "")
});
self.request(
"/api/nos/token/alloc",
data,
query.to_option(CryptoType::Weapi),
)
.await
}
}