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
+8 -1
View File
@@ -3,6 +3,7 @@ use std::pin::Pin;
use anyhow::{Context, Result}; use anyhow::{Context, Result};
use bili_sync_entity::*; use bili_sync_entity::*;
use chrono::Utc;
use futures::Stream; use futures::Stream;
use sea_orm::ActiveValue::Set; use sea_orm::ActiveValue::Set;
use sea_orm::entity::prelude::*; 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) { 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,
+6
View File
@@ -7,6 +7,7 @@ use std::path::Path;
use std::pin::Pin; use std::pin::Pin;
use anyhow::Result; use anyhow::Result;
use chrono::Utc;
use enum_dispatch::enum_dispatch; use enum_dispatch::enum_dispatch;
use futures::Stream; use futures::Stream;
use sea_orm::DatabaseConnection; use sea_orm::DatabaseConnection;
@@ -52,6 +53,11 @@ pub trait VideoSource {
/// Box<dyn ActiveModelTrait> 又提示 ActiveModelTrait 没有 object safety,因此手写一个 Enum 静态分发 /// Box<dyn ActiveModelTrait> 又提示 ActiveModelTrait 没有 object safety,因此手写一个 Enum 静态分发
fn update_latest_row_at(&self, datetime: DateTime) -> _ActiveModel; 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); fn log_refresh_video_start(&self);
+1 -1
View File
@@ -72,7 +72,7 @@ pub async fn refresh_video_source<'a>(
if release_datetime > &max_datetime { if release_datetime > &max_datetime {
max_datetime = *release_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))
} }
} }
}) })