mirror of
https://github.com/amtoaer/bili-sync.git
synced 2026-09-05 15:39:07 +08:00
fix: 修复配置初始化的检测 (#284)
This commit is contained in:
@@ -71,7 +71,7 @@ pub trait VideoSource {
|
|||||||
fn log_download_video_end(&self);
|
fn log_download_video_end(&self);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Copy)]
|
#[derive(Clone, Copy, Debug)]
|
||||||
pub enum Args<'a> {
|
pub enum Args<'a> {
|
||||||
Favorite { fid: &'a str },
|
Favorite { fid: &'a str },
|
||||||
Collection { collection_item: &'a CollectionItem },
|
Collection { collection_item: &'a CollectionItem },
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ mod clap;
|
|||||||
mod global;
|
mod global;
|
||||||
mod item;
|
mod item;
|
||||||
|
|
||||||
|
use crate::adapter::Args;
|
||||||
use crate::bilibili::{CollectionItem, Credential, DanmakuOption, FilterOption};
|
use crate::bilibili::{CollectionItem, Credential, DanmakuOption, FilterOption};
|
||||||
pub use crate::config::global::{ARGS, CONFIG, CONFIG_DIR, TEMPLATE};
|
pub use crate::config::global::{ARGS, CONFIG, CONFIG_DIR, TEMPLATE};
|
||||||
use crate::config::item::{ConcurrentLimit, deserialize_collection_list, serialize_collection_list};
|
use crate::config::item::{ConcurrentLimit, deserialize_collection_list, serialize_collection_list};
|
||||||
@@ -107,23 +108,35 @@ impl Config {
|
|||||||
Ok(toml::from_str(&config_content)?)
|
Ok(toml::from_str(&config_content)?)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn as_video_sources(&self) -> Vec<(Args<'_>, &PathBuf)> {
|
||||||
|
let mut params = Vec::new();
|
||||||
|
self.favorite_list
|
||||||
|
.iter()
|
||||||
|
.for_each(|(fid, path)| params.push((Args::Favorite { fid }, path)));
|
||||||
|
self.collection_list
|
||||||
|
.iter()
|
||||||
|
.for_each(|(collection_item, path)| params.push((Args::Collection { collection_item }, path)));
|
||||||
|
if self.watch_later.enabled {
|
||||||
|
params.push((Args::WatchLater, &self.watch_later.path));
|
||||||
|
}
|
||||||
|
self.submission_list
|
||||||
|
.iter()
|
||||||
|
.for_each(|(upper_id, path)| params.push((Args::Submission { upper_id }, path)));
|
||||||
|
params
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(not(test))]
|
#[cfg(not(test))]
|
||||||
pub fn check(&self) {
|
pub fn check(&self) {
|
||||||
let mut ok = true;
|
let mut ok = true;
|
||||||
if self.favorite_list.is_empty() && self.collection_list.is_empty() && !self.watch_later.enabled {
|
let video_sources = self.as_video_sources();
|
||||||
|
if video_sources.is_empty() {
|
||||||
ok = false;
|
ok = false;
|
||||||
error!("没有配置任何需要扫描的内容,程序空转没有意义");
|
error!("没有配置任何需要扫描的内容,程序空转没有意义");
|
||||||
}
|
}
|
||||||
if self.watch_later.enabled && !self.watch_later.path.is_absolute() {
|
for (args, path) in video_sources {
|
||||||
error!(
|
|
||||||
"稍后再看保存的路径应为绝对路径,检测到:{}",
|
|
||||||
self.watch_later.path.display()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
for path in self.favorite_list.values() {
|
|
||||||
if !path.is_absolute() {
|
if !path.is_absolute() {
|
||||||
ok = false;
|
ok = false;
|
||||||
error!("收藏夹保存的路径应为绝对路径,检测到: {}", path.display());
|
error!("{:?} 保存的路径应为绝对路径,检测到: {}", args, path.display());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if !self.upper_path.is_absolute() {
|
if !self.upper_path.is_absolute() {
|
||||||
|
|||||||
@@ -1,10 +1,8 @@
|
|||||||
use std::path::PathBuf;
|
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
use sea_orm::DatabaseConnection;
|
use sea_orm::DatabaseConnection;
|
||||||
use tokio::time;
|
use tokio::time;
|
||||||
|
|
||||||
use crate::adapter::Args;
|
|
||||||
use crate::bilibili::{self, BiliClient};
|
use crate::bilibili::{self, BiliClient};
|
||||||
use crate::config::CONFIG;
|
use crate::config::CONFIG;
|
||||||
use crate::workflow::process_video_source;
|
use crate::workflow::process_video_source;
|
||||||
@@ -13,7 +11,7 @@ use crate::workflow::process_video_source;
|
|||||||
pub async fn video_downloader(connection: Arc<DatabaseConnection>) {
|
pub async fn video_downloader(connection: Arc<DatabaseConnection>) {
|
||||||
let mut anchor = chrono::Local::now().date_naive();
|
let mut anchor = chrono::Local::now().date_naive();
|
||||||
let bili_client = BiliClient::new();
|
let bili_client = BiliClient::new();
|
||||||
let params = collect_task_params();
|
let video_sources = CONFIG.as_video_sources();
|
||||||
loop {
|
loop {
|
||||||
'inner: {
|
'inner: {
|
||||||
match bili_client.wbi_img().await.map(|wbi_img| wbi_img.into()) {
|
match bili_client.wbi_img().await.map(|wbi_img| wbi_img.into()) {
|
||||||
@@ -34,7 +32,7 @@ pub async fn video_downloader(connection: Arc<DatabaseConnection>) {
|
|||||||
}
|
}
|
||||||
anchor = chrono::Local::now().date_naive();
|
anchor = chrono::Local::now().date_naive();
|
||||||
}
|
}
|
||||||
for (args, path) in ¶ms {
|
for (args, path) in &video_sources {
|
||||||
if let Err(e) = process_video_source(*args, &bili_client, path, &connection).await {
|
if let Err(e) = process_video_source(*args, &bili_client, path, &connection).await {
|
||||||
error!("处理过程遇到错误:{:#}", e);
|
error!("处理过程遇到错误:{:#}", e);
|
||||||
}
|
}
|
||||||
@@ -44,24 +42,3 @@ pub async fn video_downloader(connection: Arc<DatabaseConnection>) {
|
|||||||
time::sleep(time::Duration::from_secs(CONFIG.interval)).await;
|
time::sleep(time::Duration::from_secs(CONFIG.interval)).await;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// 构造下载视频任务执行所需的参数(下载类型和保存路径)
|
|
||||||
fn collect_task_params() -> Vec<(Args<'static>, &'static PathBuf)> {
|
|
||||||
let mut params = Vec::new();
|
|
||||||
CONFIG
|
|
||||||
.favorite_list
|
|
||||||
.iter()
|
|
||||||
.for_each(|(fid, path)| params.push((Args::Favorite { fid }, path)));
|
|
||||||
CONFIG
|
|
||||||
.collection_list
|
|
||||||
.iter()
|
|
||||||
.for_each(|(collection_item, path)| params.push((Args::Collection { collection_item }, path)));
|
|
||||||
if CONFIG.watch_later.enabled {
|
|
||||||
params.push((Args::WatchLater, &CONFIG.watch_later.path));
|
|
||||||
}
|
|
||||||
CONFIG
|
|
||||||
.submission_list
|
|
||||||
.iter()
|
|
||||||
.for_each(|(upper_id, path)| params.push((Args::Submission { upper_id }, path)));
|
|
||||||
params
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user