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

View File

@@ -45,7 +45,7 @@ impl Credential {
.error_for_status()?
.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),
_ => 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::<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),
_ => bail!("no code or message found"),
};
@@ -171,7 +171,7 @@ JNrRuoEUXpabUzGB8QIDAQAB
.error_for_status()?
.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),
_ => bail!("no code or message found"),
};

View File

@@ -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),
}

View File

@@ -58,7 +58,7 @@ impl<'a> FavoriteList<'a> {
.error_for_status()?
.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),
_ => bail!("no code or message found"),
};
@@ -85,7 +85,7 @@ impl<'a> FavoriteList<'a> {
.error_for_status()?
.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),
_ => bail!("no code or message found"),
};

View File

@@ -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};

View File

@@ -59,7 +59,7 @@ impl<'a> Video<'a> {
.error_for_status()?
.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),
_ => bail!("no code or message found"),
};
@@ -79,7 +79,7 @@ impl<'a> Video<'a> {
.error_for_status()?
.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),
_ => bail!("no code or message found"),
};
@@ -106,7 +106,7 @@ impl<'a> Video<'a> {
.error_for_status()?
.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),
_ => bail!("no code or message found"),
};

5
src/error.rs Normal file
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();

View File

@@ -3,3 +3,4 @@ pub mod config;
pub mod core;
pub mod database;
pub mod downloader;
pub mod error;

View File

@@ -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}");
}