加上 timeout, 设置好 timeout, 加好 test
This commit is contained in:
parent
6365044cf9
commit
beeeb7b0d4
@ -68,12 +68,17 @@ impl Downloader {
|
||||
pub async fn try_download_as_any(&self, id: SaveId) -> Option<SaveFile> {
|
||||
// 先尝试用 ship 的 API 下载
|
||||
let ship_url = Self::as_ship_url(id);
|
||||
let ship_try = self.client.get(&ship_url).send().await;
|
||||
let ship_try = self
|
||||
.client
|
||||
.get(&ship_url)
|
||||
.timeout(self.timeout.clone())
|
||||
.send()
|
||||
.await;
|
||||
if let Ok(ship_try) = ship_try {
|
||||
if ship_try.status().is_success() {
|
||||
if let Ok(body) = ship_try.text().await {
|
||||
// 再判空
|
||||
if !body.is_empty() || body == "0" {
|
||||
if !(body.is_empty() || body == "0") {
|
||||
return Some(SaveFile::Ship(body));
|
||||
}
|
||||
}
|
||||
@ -81,12 +86,17 @@ impl Downloader {
|
||||
}
|
||||
// 否则尝试用 save 的 API 下载
|
||||
let save_url = Self::as_save_url(id);
|
||||
let save_try = self.client.get(&save_url).send().await;
|
||||
let save_try = self
|
||||
.client
|
||||
.get(&save_url)
|
||||
.timeout(self.timeout.clone())
|
||||
.send()
|
||||
.await;
|
||||
if let Ok(save_try) = save_try {
|
||||
if save_try.status().is_success() {
|
||||
if let Ok(body) = save_try.text().await {
|
||||
// 再判空
|
||||
if !body.is_empty() || body == "0" {
|
||||
if !(body.is_empty() || body == "0") {
|
||||
return Some(SaveFile::Save(body));
|
||||
}
|
||||
}
|
||||
@ -98,11 +108,16 @@ impl Downloader {
|
||||
/// 尝试用 ship 的 API 下载文件
|
||||
pub async fn download_as_ship(&self, id: SaveId) -> Option<String> {
|
||||
let url = Self::as_ship_url(id);
|
||||
let try_res = self.client.get(&url).send().await;
|
||||
let try_res = self
|
||||
.client
|
||||
.get(&url)
|
||||
.timeout(self.timeout.clone())
|
||||
.send()
|
||||
.await;
|
||||
if let Ok(try_res) = try_res {
|
||||
if try_res.status().is_success() {
|
||||
if let Ok(body) = try_res.text().await {
|
||||
if !body.is_empty() || body == "0" {
|
||||
if !(body.is_empty() || body == "0") {
|
||||
return Some(body);
|
||||
}
|
||||
}
|
||||
@ -114,11 +129,16 @@ impl Downloader {
|
||||
/// 尝试用 save 的 API 下载文件
|
||||
pub async fn download_as_save(&self, id: SaveId) -> Option<String> {
|
||||
let url = Self::as_save_url(id);
|
||||
let try_res = self.client.get(&url).send().await;
|
||||
let try_res = self
|
||||
.client
|
||||
.get(&url)
|
||||
.timeout(self.timeout.clone())
|
||||
.send()
|
||||
.await;
|
||||
if let Ok(try_res) = try_res {
|
||||
if try_res.status().is_success() {
|
||||
if let Ok(body) = try_res.text().await {
|
||||
if !body.is_empty() || body == "0" {
|
||||
if !(body.is_empty() || body == "0") {
|
||||
return Some(body);
|
||||
}
|
||||
}
|
||||
@ -126,6 +146,10 @@ impl Downloader {
|
||||
}
|
||||
None
|
||||
}
|
||||
|
||||
pub fn set_timeout(&mut self, timeout: Duration) {
|
||||
self.timeout = timeout;
|
||||
}
|
||||
}
|
||||
|
||||
impl Default for Downloader {
|
||||
@ -134,43 +158,6 @@ impl Default for Downloader {
|
||||
}
|
||||
}
|
||||
|
||||
// fn list_file_in_dir(dir: &str, file_vec: &mut Vec<u64>) -> Result<(), Box<dyn std::error::Error>> {
|
||||
// let save_paths = std::fs::read_dir(dir)?;
|
||||
// for save_path in save_paths {
|
||||
// if let Ok(save_path) = save_path {
|
||||
// let file_name = save_path.file_name();
|
||||
// let file_name = file_name.to_str().unwrap();
|
||||
// // 判断文件名是否以 .xml 结尾
|
||||
// if file_name.ends_with(".xml") {
|
||||
// let file_id = file_name.trim_end_matches(".xml");
|
||||
// let file_id = file_id.parse::<u64>()?;
|
||||
// file_vec.push(file_id);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// file_vec.sort();
|
||||
// Ok(())
|
||||
// }
|
||||
|
||||
// enum FileKind {
|
||||
// Ship,
|
||||
// Save,
|
||||
// }
|
||||
|
||||
// // 飞船 API http://jundroo.com/service/SimpleRockets/DownloadRocket?id=
|
||||
// // 存档 API http://jundroo.com/service/SimpleRockets/DownloadSandBox?id=
|
||||
// // curl http://jundroo.com/service/SimpleRockets/DownloadRocket?id=144444
|
||||
// // fn get_file_from_jundroo(id: u64) -> Result<FileKind, Box<dyn std::error::Error>> {
|
||||
// // let ship_try = reqwest::blocking::get(format!(
|
||||
// // "http://jundroo.com/service/SimpleRockets/DownloadRocket?id={}",
|
||||
// // id
|
||||
// // ))?;
|
||||
// // println!("ship_try: {:?}", ship_try);
|
||||
// // println!("body: {}", ship_try.text()?);
|
||||
|
||||
// // Ok(FileKind::Ship)
|
||||
// // }
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
@ -184,8 +171,10 @@ mod tests {
|
||||
</Ship>
|
||||
"#;
|
||||
|
||||
const SAVE_1294489: &str = include_str!("./save_1294489.xml");
|
||||
|
||||
#[tokio::test]
|
||||
async fn any_as_ship_download_test() {
|
||||
async fn ship_as_any_download_test() {
|
||||
let downloader = Downloader::default();
|
||||
let body = downloader.try_download_as_any(144444).await;
|
||||
assert!(body.is_some());
|
||||
@ -194,6 +183,16 @@ mod tests {
|
||||
assert_eq!(body.as_ship().unwrap(), SHIP_144444);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn save_as_any_download_test() {
|
||||
let downloader = Downloader::default();
|
||||
let body = downloader.try_download_as_any(1294489).await;
|
||||
assert!(body.is_some());
|
||||
let body = body.unwrap();
|
||||
assert!(body.is_save());
|
||||
assert_eq!(body.as_save().unwrap(), SAVE_1294489);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn ship_download_test() {
|
||||
let downloader = Downloader::default();
|
||||
@ -202,4 +201,27 @@ mod tests {
|
||||
let body = body.unwrap();
|
||||
assert_eq!(body, SHIP_144444);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn save_download_test() {
|
||||
let downloader = Downloader::default();
|
||||
let body = downloader.download_as_save(1294489).await;
|
||||
assert!(body.is_some());
|
||||
let body = body.unwrap();
|
||||
assert_eq!(body, SAVE_1294489);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn ship_faild_test() {
|
||||
let downloader = Downloader::default();
|
||||
let body = downloader.download_as_ship(0).await;
|
||||
assert!(body.is_none());
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn save_faild_test() {
|
||||
let downloader = Downloader::default();
|
||||
let body = downloader.download_as_save(0).await;
|
||||
assert!(body.is_none());
|
||||
}
|
||||
}
|
||||
|
1
sr_download/src/save_1294489.xml
Normal file
1
sr_download/src/save_1294489.xml
Normal file
@ -0,0 +1 @@
|
||||
<Runtime time="223.031591" firstStageActivated="1" solarSystem="SmolarSystem.xml" shipId="1" podId="1"><Nodes><PlanetNode name="Sun"/><PlanetNode name="Smercury" trueAnomaly="-2.464707"/><PlanetNode name="Smenus" trueAnomaly="0.822652"/><PlanetNode name="Smearth" trueAnomaly="-3.012992"/><PlanetNode name="Smoon" trueAnomaly="-2.128785"/><ShipNode id="1" planet="Smearth" planetRadius="637100.000000" x="64703.838847" y="694773.972317" vx="-368.673248" vy="233.651047"><Ship version="1" liftedOff="1" touchingGround="0"><Parts><Part partType="pod-1" id="1" x="64703.838847" y="694773.972317" angle="1.237786" angleV="0.000000" editorAngle="0"><Pod throttle="0.000000" name="Rocket 1"><Staging currentStage="2"><Step/><Step><Activate Id="1199385" moved="1"/><Activate Id="1199386" moved="1"/></Step><Step><Activate Id="1199368" moved="1"/></Step><Step><Activate Id="1199369" moved="1"/></Step><Step><Activate Id="1199370" moved="1"/></Step></Staging></Pod></Part><Part partType="detacher-1" id="1199368" x="64704.784158" y="694773.645162" angle="1.237795" angleV="0.000000" editorAngle="0" activated="0" exploded="0" flippedX="0" flippedY="0"/><Part partType="fueltank-2" id="1199384" x="64705.965796" y="694773.236459" angle="2.808591" angleV="0.000000" editorAngle="1"><Tank fuel="3000.000000"/></Part><Part partType="engine-1" id="1199385" x="64707.528282" y="694771.636837" angle="1.237795" angleV="0.000000" editorAngle="0" activated="1" exploded="0" flippedX="0" flippedY="0"><Engine fuel="0.000000"/></Part><Part partType="engine-1" id="1199386" x="64708.181643" y="694773.527592" angle="1.237873" angleV="0.000000" editorAngle="0" activated="1" exploded="0" flippedX="0" flippedY="0"><Engine fuel="0.000000"/></Part><Part partType="detacher-1" id="1199370" x="64702.893530" y="694774.298481" angle="1.237888" angleV="0.000000" editorAngle="0" activated="0" exploded="0" flippedX="0" flippedY="0"/><Part partType="parachute-1" id="1199369" x="64702.420875" y="694774.462055" angle="1.237888" angleV="0.000000" editorAngle="0" activated="0" exploded="0" flippedX="0" flippedY="0" chuteX="64702.420875" chuteY="694774.462055" chuteAngle="0.000000" chuteHeight="0.000000" inflation="0.100000" inflate="0" deployed="0" rope="0"/></Parts><Connections><Connection parentAttachPoint="2" childAttachPoint="1" parentPart="1" childPart="1199368"/><Connection parentAttachPoint="2" childAttachPoint="4" parentPart="1199368" childPart="1199384"/><Connection parentAttachPoint="3" childAttachPoint="1" parentPart="1199384" childPart="1199385"/><Connection parentAttachPoint="3" childAttachPoint="1" parentPart="1199384" childPart="1199386"/><Connection parentAttachPoint="1" childAttachPoint="2" parentPart="1" childPart="1199370"/><Connection parentAttachPoint="1" childAttachPoint="1" parentPart="1199370" childPart="1199369"/></Connections></Ship></ShipNode><PlanetNode name="Smalley's Comet" trueAnomaly="-2.843224"/><PlanetNode name="Smars" trueAnomaly="1.734080"/><PlanetNode name="Smupiter" trueAnomaly="1.324013"/><PlanetNode name="Ganymede Jr" trueAnomaly="0.507068"/><PlanetNode name="Europa Jr" trueAnomaly="1.514213"/><PlanetNode name="Io Jr" trueAnomaly="2.028418"/><PlanetNode name="Callisto Jr" trueAnomaly="2.502988"/><PlanetNode name="Smaturn" trueAnomaly="2.222005"/><PlanetNode name="Titan Jr" trueAnomaly="1.003340"/><PlanetNode name="Smuranus" trueAnomaly="-2.839184"/><PlanetNode name="Smeptune" trueAnomaly="-1.313184"/></Nodes></Runtime>
|
Loading…
Reference in New Issue
Block a user