fix: 修复状态码类型,引入自定义错误

This commit is contained in:
amtoaer
2024-04-02 23:13:52 +08:00
parent beb3634e33
commit 377f3bb22a
8 changed files with 18 additions and 11 deletions
+3 -3
View File
@@ -45,7 +45,7 @@ impl Credential {
.error_for_status()? .error_for_status()?
.json::<serde_json::Value>() .json::<serde_json::Value>()
.await?; .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), (Some(code), Some(msg)) => (code, msg),
_ => bail!("no code or message found"), _ => bail!("no code or message found"),
}; };
@@ -117,7 +117,7 @@ JNrRuoEUXpabUzGB8QIDAQAB
// 必须在 .json 前取出 headers,否则 res 会被消耗 // 必须在 .json 前取出 headers,否则 res 会被消耗
let headers = std::mem::take(res.headers_mut()); let headers = std::mem::take(res.headers_mut());
let res = res.json::<serde_json::Value>().await?; let res = res.json::<serde_json::Value>().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), (Some(code), Some(msg)) => (code, msg),
_ => bail!("no code or message found"), _ => bail!("no code or message found"),
}; };
@@ -171,7 +171,7 @@ JNrRuoEUXpabUzGB8QIDAQAB
.error_for_status()? .error_for_status()?
.json::<serde_json::Value>() .json::<serde_json::Value>()
.await?; .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), (Some(code), Some(msg)) => (code, msg),
_ => bail!("no code or message found"), _ => bail!("no code or message found"),
}; };
+1 -1
View File
@@ -5,5 +5,5 @@ pub enum BiliError {
#[error("risk control occurred")] #[error("risk control occurred")]
RiskControlOccurred, RiskControlOccurred,
#[error("request failed, status code: {0}, message: {1}")] #[error("request failed, status code: {0}, message: {1}")]
RequestFailed(u64, String), RequestFailed(i64, String),
} }
+2 -2
View File
@@ -58,7 +58,7 @@ impl<'a> FavoriteList<'a> {
.error_for_status()? .error_for_status()?
.json::<serde_json::Value>() .json::<serde_json::Value>()
.await?; .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), (Some(code), Some(msg)) => (code, msg),
_ => bail!("no code or message found"), _ => bail!("no code or message found"),
}; };
@@ -85,7 +85,7 @@ impl<'a> FavoriteList<'a> {
.error_for_status()? .error_for_status()?
.json::<serde_json::Value>() .json::<serde_json::Value>()
.await?; .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), (Some(code), Some(msg)) => (code, msg),
_ => bail!("no code or message found"), _ => bail!("no code or message found"),
}; };
+1
View File
@@ -1,6 +1,7 @@
pub use analyzer::{AudioQuality, BestStream, FilterOption, PageAnalyzer, VideoCodecs, VideoQuality}; pub use analyzer::{AudioQuality, BestStream, FilterOption, PageAnalyzer, VideoCodecs, VideoQuality};
pub use client::{BiliClient, Client}; pub use client::{BiliClient, Client};
pub use credential::Credential; pub use credential::Credential;
pub use error::BiliError;
pub use favorite_list::{FavoriteList, FavoriteListInfo, VideoInfo}; pub use favorite_list::{FavoriteList, FavoriteListInfo, VideoInfo};
pub use video::{PageInfo, Video}; pub use video::{PageInfo, Video};
+3 -3
View File
@@ -59,7 +59,7 @@ impl<'a> Video<'a> {
.error_for_status()? .error_for_status()?
.json::<serde_json::Value>() .json::<serde_json::Value>()
.await?; .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), (Some(code), Some(msg)) => (code, msg),
_ => bail!("no code or message found"), _ => bail!("no code or message found"),
}; };
@@ -79,7 +79,7 @@ impl<'a> Video<'a> {
.error_for_status()? .error_for_status()?
.json::<serde_json::Value>() .json::<serde_json::Value>()
.await?; .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), (Some(code), Some(msg)) => (code, msg),
_ => bail!("no code or message found"), _ => bail!("no code or message found"),
}; };
@@ -106,7 +106,7 @@ impl<'a> Video<'a> {
.error_for_status()? .error_for_status()?
.json::<serde_json::Value>() .json::<serde_json::Value>()
.await?; .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), (Some(code), Some(msg)) => (code, msg),
_ => bail!("no code or message found"), _ => bail!("no code or message found"),
}; };
+5
View File
@@ -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();
+1
View File
@@ -3,3 +3,4 @@ pub mod config;
pub mod core; pub mod core;
pub mod database; pub mod database;
pub mod downloader; pub mod downloader;
pub mod error;
+2 -2
View File
@@ -1,5 +1,5 @@
use bili_sync::bilibili::BiliClient; 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 bili_sync::database::{database_connection, migrate_database};
use log::error; use log::error;
@@ -24,7 +24,7 @@ async fn main() -> ! {
anchor = chrono::Local::now().date_naive(); anchor = chrono::Local::now().date_naive();
} }
for (fid, path) in &favorites { 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 { if let Err(e) = res {
error!("Error: {e}"); error!("Error: {e}");
} }