mirror of
https://github.com/amtoaer/bili-sync.git
synced 2026-09-08 00:47:22 +08:00
refactor: 调整视频列表/视频合集的扫描逻辑,优化性能 (#342)
This commit is contained in:
@@ -44,13 +44,27 @@ impl VideoSource for collection::Model {
|
|||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn should_filter(
|
||||||
|
&self,
|
||||||
|
video_info: Result<VideoInfo, anyhow::Error>,
|
||||||
|
latest_row_at: &chrono::DateTime<Utc>,
|
||||||
|
) -> Option<VideoInfo> {
|
||||||
|
// 由于 collection 的视频无固定时间顺序,should_take 无法提前中断拉取,因此 should_filter 环节需要进行额外过滤
|
||||||
|
if let Ok(video_info) = video_info {
|
||||||
|
if video_info.release_datetime() > latest_row_at {
|
||||||
|
return Some(video_info);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
None
|
||||||
|
}
|
||||||
|
|
||||||
fn log_refresh_video_start(&self) {
|
fn log_refresh_video_start(&self) {
|
||||||
info!("开始扫描{}「{}」..", CollectionType::from(self.r#type), self.name);
|
info!("开始扫描{}「{}」..", CollectionType::from(self.r#type), self.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn log_refresh_video_end(&self, count: usize) {
|
fn log_refresh_video_end(&self, count: usize) {
|
||||||
info!(
|
info!(
|
||||||
"扫描{}「{}」完成,已拉取 {} 条视频",
|
"扫描{}「{}」完成,获取到 {} 条新视频",
|
||||||
CollectionType::from(self.r#type),
|
CollectionType::from(self.r#type),
|
||||||
self.name,
|
self.name,
|
||||||
count,
|
count,
|
||||||
|
|||||||
@@ -58,6 +58,15 @@ pub trait VideoSource {
|
|||||||
release_datetime > latest_row_at
|
release_datetime > latest_row_at
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn should_filter(
|
||||||
|
&self,
|
||||||
|
video_info: Result<VideoInfo, anyhow::Error>,
|
||||||
|
_latest_row_at: &chrono::DateTime<Utc>,
|
||||||
|
) -> Option<VideoInfo> {
|
||||||
|
// 视频按照时间顺序拉取,should_take 已经获取了所有需要处理的视频,should_filter 无需额外处理
|
||||||
|
video_info.ok()
|
||||||
|
}
|
||||||
|
|
||||||
/// 开始刷新视频
|
/// 开始刷新视频
|
||||||
fn log_refresh_video_start(&self);
|
fn log_refresh_video_start(&self);
|
||||||
|
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ pub async fn refresh_video_source<'a>(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.filter_map(|res| futures::future::ready(res.ok()))
|
.filter_map(|res| futures::future::ready(video_source.should_filter(res, &latest_row_at)))
|
||||||
.chunks(10);
|
.chunks(10);
|
||||||
let mut count = 0;
|
let mut count = 0;
|
||||||
while let Some(videos_info) = video_streams.next().await {
|
while let Some(videos_info) = video_streams.next().await {
|
||||||
|
|||||||
Reference in New Issue
Block a user