fix: 视频合集/视频列表改为全量拉取,确保正确更新 (#290)

This commit is contained in:
ᴀᴍᴛᴏᴀᴇʀ
2025-02-25 20:55:50 +08:00
committed by GitHub
parent a6d0d6b777
commit 33a61ec08d
3 changed files with 15 additions and 2 deletions

View File

@@ -3,6 +3,7 @@ use std::pin::Pin;
use anyhow::{Context, Result};
use bili_sync_entity::*;
use chrono::Utc;
use futures::Stream;
use sea_orm::ActiveValue::Set;
use sea_orm::entity::prelude::*;
@@ -37,13 +38,19 @@ impl VideoSource for collection::Model {
})
}
fn should_take(&self, _release_datetime: &chrono::DateTime<Utc>, _latest_row_at: &chrono::DateTime<Utc>) -> bool {
// collection视频合集/视频列表)返回的内容似乎并非严格按照时间排序,并且不同 collection 的排序方式也不同
// 为了保证程序正确性collection 不根据时间提前 break而是每次都全量拉取
true
}
fn log_refresh_video_start(&self) {
info!("开始扫描{}「{}」..", CollectionType::from(self.r#type), self.name);
}
fn log_refresh_video_end(&self, count: usize) {
info!(
"扫描{}「{}」完成,获取到 {} 条视频",
"扫描{}「{}」完成,已拉取 {} 条视频",
CollectionType::from(self.r#type),
self.name,
count,

View File

@@ -7,6 +7,7 @@ use std::path::Path;
use std::pin::Pin;
use anyhow::Result;
use chrono::Utc;
use enum_dispatch::enum_dispatch;
use futures::Stream;
use sea_orm::DatabaseConnection;
@@ -52,6 +53,11 @@ pub trait VideoSource {
/// Box<dyn ActiveModelTrait> 又提示 ActiveModelTrait 没有 object safety因此手写一个 Enum 静态分发
fn update_latest_row_at(&self, datetime: DateTime) -> _ActiveModel;
// 判断是否应该继续拉取视频
fn should_take(&self, release_datetime: &chrono::DateTime<Utc>, latest_row_at: &chrono::DateTime<Utc>) -> bool {
release_datetime > latest_row_at
}
/// 开始刷新视频
fn log_refresh_video_start(&self);

View File

@@ -72,7 +72,7 @@ pub async fn refresh_video_source<'a>(
if release_datetime > &max_datetime {
max_datetime = *release_datetime;
}
futures::future::ready(release_datetime > &latest_row_at)
futures::future::ready(video_source.should_take(release_datetime, &latest_row_at))
}
}
})