diff --git a/src/bilibili/credential.rs b/src/bilibili/credential.rs index 18a137d..e86f958 100644 --- a/src/bilibili/credential.rs +++ b/src/bilibili/credential.rs @@ -45,7 +45,7 @@ impl Credential { .error_for_status()? .json::() .await?; - let (code, msg) = match (res["code"].as_u64(), res["message"].as_str()) { + let (code, msg) = match (res["code"].as_i64(), res["message"].as_str()) { (Some(code), Some(msg)) => (code, msg), _ => bail!("no code or message found"), }; @@ -117,7 +117,7 @@ JNrRuoEUXpabUzGB8QIDAQAB // 必须在 .json 前取出 headers,否则 res 会被消耗 let headers = std::mem::take(res.headers_mut()); let res = res.json::().await?; - let (code, msg) = match (res["code"].as_u64(), res["message"].as_str()) { + let (code, msg) = match (res["code"].as_i64(), res["message"].as_str()) { (Some(code), Some(msg)) => (code, msg), _ => bail!("no code or message found"), }; @@ -171,7 +171,7 @@ JNrRuoEUXpabUzGB8QIDAQAB .error_for_status()? .json::() .await?; - let (code, msg) = match (res["code"].as_u64(), res["message"].as_str()) { + let (code, msg) = match (res["code"].as_i64(), res["message"].as_str()) { (Some(code), Some(msg)) => (code, msg), _ => bail!("no code or message found"), }; diff --git a/src/bilibili/error.rs b/src/bilibili/error.rs index c34e7d8..24fed5c 100644 --- a/src/bilibili/error.rs +++ b/src/bilibili/error.rs @@ -5,5 +5,5 @@ pub enum BiliError { #[error("risk control occurred")] RiskControlOccurred, #[error("request failed, status code: {0}, message: {1}")] - RequestFailed(u64, String), + RequestFailed(i64, String), } diff --git a/src/bilibili/favorite_list.rs b/src/bilibili/favorite_list.rs index 4ffc07a..12e840a 100644 --- a/src/bilibili/favorite_list.rs +++ b/src/bilibili/favorite_list.rs @@ -58,7 +58,7 @@ impl<'a> FavoriteList<'a> { .error_for_status()? .json::() .await?; - let (code, msg) = match (res["code"].as_u64(), res["message"].as_str()) { + let (code, msg) = match (res["code"].as_i64(), res["message"].as_str()) { (Some(code), Some(msg)) => (code, msg), _ => bail!("no code or message found"), }; @@ -85,7 +85,7 @@ impl<'a> FavoriteList<'a> { .error_for_status()? .json::() .await?; - let (code, msg) = match (res["code"].as_u64(), res["message"].as_str()) { + let (code, msg) = match (res["code"].as_i64(), res["message"].as_str()) { (Some(code), Some(msg)) => (code, msg), _ => bail!("no code or message found"), }; diff --git a/src/bilibili/mod.rs b/src/bilibili/mod.rs index dd18206..7700cfe 100644 --- a/src/bilibili/mod.rs +++ b/src/bilibili/mod.rs @@ -1,6 +1,7 @@ pub use analyzer::{AudioQuality, BestStream, FilterOption, PageAnalyzer, VideoCodecs, VideoQuality}; pub use client::{BiliClient, Client}; pub use credential::Credential; +pub use error::BiliError; pub use favorite_list::{FavoriteList, FavoriteListInfo, VideoInfo}; pub use video::{PageInfo, Video}; diff --git a/src/bilibili/video.rs b/src/bilibili/video.rs index 76b93da..307ee89 100644 --- a/src/bilibili/video.rs +++ b/src/bilibili/video.rs @@ -59,7 +59,7 @@ impl<'a> Video<'a> { .error_for_status()? .json::() .await?; - let (code, msg) = match (res["code"].as_u64(), res["message"].as_str()) { + let (code, msg) = match (res["code"].as_i64(), res["message"].as_str()) { (Some(code), Some(msg)) => (code, msg), _ => bail!("no code or message found"), }; @@ -79,7 +79,7 @@ impl<'a> Video<'a> { .error_for_status()? .json::() .await?; - let (code, msg) = match (res["code"].as_u64(), res["message"].as_str()) { + let (code, msg) = match (res["code"].as_i64(), res["message"].as_str()) { (Some(code), Some(msg)) => (code, msg), _ => bail!("no code or message found"), }; @@ -106,7 +106,7 @@ impl<'a> Video<'a> { .error_for_status()? .json::() .await?; - let (code, msg) = match (res["code"].as_u64(), res["message"].as_str()) { + let (code, msg) = match (res["code"].as_i64(), res["message"].as_str()) { (Some(code), Some(msg)) => (code, msg), _ => bail!("no code or message found"), }; diff --git a/src/error.rs b/src/error.rs new file mode 100644 index 0000000..04f46ed --- /dev/null +++ b/src/error.rs @@ -0,0 +1,5 @@ +use thiserror::Error; + +#[derive(Error, Debug)] +#[error("Bilibili api request too frequently, abort all tasks and try again later")] +pub struct DownloadAbortError(); diff --git a/src/lib.rs b/src/lib.rs index 5169314..594d15a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -3,3 +3,4 @@ pub mod config; pub mod core; pub mod database; pub mod downloader; +pub mod error; diff --git a/src/main.rs b/src/main.rs index ea9bfa4..eeecdb2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,5 @@ use bili_sync::bilibili::BiliClient; -use bili_sync::core::command::process_favorite; +use bili_sync::core::command::process_favorite_list; use bili_sync::database::{database_connection, migrate_database}; use log::error; @@ -24,7 +24,7 @@ async fn main() -> ! { anchor = chrono::Local::now().date_naive(); } for (fid, path) in &favorites { - let res = process_favorite(&bili_client, fid, path, &connection).await; + let res = process_favorite_list(&bili_client, fid, path, &connection).await; if let Err(e) = res { error!("Error: {e}"); }