diff --git a/crates/bili_sync/src/config/current.rs b/crates/bili_sync/src/config/current.rs index 01ca01d..cf7b8f1 100644 --- a/crates/bili_sync/src/config/current.rs +++ b/crates/bili_sync/src/config/current.rs @@ -50,6 +50,8 @@ pub struct Config { pub concurrent_limit: ConcurrentLimit, pub time_format: String, pub cdn_sorting: bool, + #[serde(default)] + pub try_upower_anyway: bool, pub version: u64, } @@ -131,6 +133,7 @@ impl Default for Config { concurrent_limit: ConcurrentLimit::default(), time_format: default_time_format(), cdn_sorting: false, + try_upower_anyway: false, version: 0, } } diff --git a/crates/bili_sync/src/utils/convert.rs b/crates/bili_sync/src/utils/convert.rs index 47a64bc..1379c98 100644 --- a/crates/bili_sync/src/utils/convert.rs +++ b/crates/bili_sync/src/utils/convert.rs @@ -120,7 +120,12 @@ impl VideoInfo { /// 填充视频详情时调用,该方法会将视频详情附加到原有的 Model 上 /// 特殊地,如果在检测视频更新时记录了 favtime,那么 favtime 会维持原样,否则会使用 pubtime 填充 - pub fn into_detail_model(self, base_model: bili_sync_entity::video::Model) -> bili_sync_entity::video::ActiveModel { + /// 如果开启 try_upower_anyway,标记视频状态时不再检测是否充电,一律进入后面的下载环节 + pub fn into_detail_model( + self, + base_model: bili_sync_entity::video::Model, + try_upower_anyway: bool, + ) -> bili_sync_entity::video::ActiveModel { match self { VideoInfo::Detail { title, @@ -154,7 +159,9 @@ impl VideoInfo { // 2. 都为 false,表示视频是非充电视频 // redirect_url 仅在视频为番剧、影视、纪录片等特殊视频时才会有值,如果为空说明是普通视频 // 仅在三种条件都满足时,才认为视频是可下载的 - valid: Set(state == 0 && (is_upower_exclusive == is_upower_play) && redirect_url.is_none()), + valid: Set(state == 0 + && (try_upower_anyway || (is_upower_exclusive == is_upower_play)) + && redirect_url.is_none()), upper_id: Set(upper.mid), upper_name: Set(upper.name), upper_face: Set(upper.face), diff --git a/crates/bili_sync/src/workflow.rs b/crates/bili_sync/src/workflow.rs index 39fde5e..6fe8da8 100644 --- a/crates/bili_sync/src/workflow.rs +++ b/crates/bili_sync/src/workflow.rs @@ -150,7 +150,7 @@ pub async fn fetch_video_details( .map(|p| p.into_active_model(video_model.id)) .collect::>(); // 更新 video model 的各项有关属性 - let mut video_active_model = view_info.into_detail_model(video_model); + let mut video_active_model = view_info.into_detail_model(video_model, config.try_upower_anyway); video_source.set_relation_id(&mut video_active_model); video_active_model.single_page = Set(Some(pages.len() == 1)); video_active_model.tags = Set(Some(tags.into())); diff --git a/web/src/lib/types.ts b/web/src/lib/types.ts index cfd7917..c30aaad 100644 --- a/web/src/lib/types.ts +++ b/web/src/lib/types.ts @@ -322,6 +322,7 @@ export interface Config { concurrent_limit: ConcurrentLimit; time_format: string; cdn_sorting: boolean; + try_upower_anyway: boolean; version: number; } diff --git a/web/src/routes/settings/+page.svelte b/web/src/routes/settings/+page.svelte index 0ba34c7..9716a1c 100644 --- a/web/src/routes/settings/+page.svelte +++ b/web/src/routes/settings/+page.svelte @@ -359,6 +359,24 @@ +
+ +
+ + + + + + +

+ 当关闭该开关时,程序仅会下载已充电的视频,未充电的视频直接跳过;开启后不再检查充电状态,一律尝试下载。
+ 这可以帮助下载未充电视频的封面等元数据,也应该可以下载未充电视频的试看部分(如果存在的话)。 +

+
+
+
+