From 377f3bb22aa1e616153f15c23daf00140c7c0ca7 Mon Sep 17 00:00:00 2001 From: amtoaer Date: Tue, 2 Apr 2024 23:13:52 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E7=A0=81=E7=B1=BB=E5=9E=8B=EF=BC=8C=E5=BC=95=E5=85=A5=E8=87=AA?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/bilibili/credential.rs | 6 +++--- src/bilibili/error.rs | 2 +- src/bilibili/favorite_list.rs | 4 ++-- src/bilibili/mod.rs | 1 + src/bilibili/video.rs | 6 +++--- src/error.rs | 5 +++++ src/lib.rs | 1 + src/main.rs | 4 ++-- 8 files changed, 18 insertions(+), 11 deletions(-) create mode 100644 src/error.rs 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}"); }