fix: 修复状态码类型,引入自定义错误
This commit is contained in:
@@ -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"),
|
||||
};
|
||||
|
||||
@@ -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),
|
||||
}
|
||||
|
||||
@@ -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"),
|
||||
};
|
||||
|
||||
@@ -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};
|
||||
|
||||
|
||||
@@ -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
5
src/error.rs
Normal 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();
|
||||
@@ -3,3 +3,4 @@ pub mod config;
|
||||
pub mod core;
|
||||
pub mod database;
|
||||
pub mod downloader;
|
||||
pub mod error;
|
||||
|
||||
@@ -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}");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user