mirror of
https://github.com/amtoaer/bili-sync.git
synced 2026-09-05 07:28:04 +08:00
fix: 视频合集/视频列表改为全量拉取,确保正确更新 (#290)
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user