mirror of
https://github.com/amtoaer/bili-sync.git
synced 2026-09-05 07:28:04 +08:00
fix: 修复 reset 执行问题 (#263)
This commit is contained in:
@@ -5,8 +5,8 @@ use axum::extract::{Extension, Path, Query};
|
|||||||
use bili_sync_entity::*;
|
use bili_sync_entity::*;
|
||||||
use bili_sync_migration::{Expr, OnConflict};
|
use bili_sync_migration::{Expr, OnConflict};
|
||||||
use sea_orm::{
|
use sea_orm::{
|
||||||
ColumnTrait, DatabaseConnection, EntityTrait, PaginatorTrait, QueryFilter, QueryOrder, QuerySelect, Set,
|
ColumnTrait, DatabaseConnection, EntityTrait, IntoActiveModel, PaginatorTrait, QueryFilter, QueryOrder,
|
||||||
TransactionTrait, Unchanged,
|
QuerySelect, Set, TransactionTrait, Unchanged,
|
||||||
};
|
};
|
||||||
use utoipa::OpenApi;
|
use utoipa::OpenApi;
|
||||||
|
|
||||||
@@ -197,18 +197,16 @@ pub async fn reset_video(
|
|||||||
let Some(video_status) = video_status else {
|
let Some(video_status) = video_status else {
|
||||||
return Err(anyhow!(InnerApiError::NotFound(id)).into());
|
return Err(anyhow!(InnerApiError::NotFound(id)).into());
|
||||||
};
|
};
|
||||||
let resetted_pages_tuple: Vec<(i32, u32)> = page::Entity::find()
|
let resetted_pages_model: Vec<_> = page::Entity::find()
|
||||||
.filter(page::Column::VideoId.eq(id))
|
.filter(page::Column::VideoId.eq(id))
|
||||||
.select_only()
|
|
||||||
.columns([page::Column::Id, page::Column::DownloadStatus])
|
|
||||||
.into_tuple::<(i32, u32)>()
|
|
||||||
.all(&txn)
|
.all(&txn)
|
||||||
.await?
|
.await?
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.filter_map(|(id, page_status)| {
|
.filter_map(|mut model| {
|
||||||
let mut page_status = PageStatus::from(page_status);
|
let mut page_status = PageStatus::from(model.download_status);
|
||||||
if page_status.reset_failed() {
|
if page_status.reset_failed() {
|
||||||
Some((id, page_status.into()))
|
model.download_status = page_status.into();
|
||||||
|
Some(model)
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
@@ -216,7 +214,7 @@ pub async fn reset_video(
|
|||||||
.collect();
|
.collect();
|
||||||
let mut video_status = VideoStatus::from(video_status);
|
let mut video_status = VideoStatus::from(video_status);
|
||||||
let mut should_update_video = video_status.reset_failed();
|
let mut should_update_video = video_status.reset_failed();
|
||||||
if !resetted_pages_tuple.is_empty() {
|
if !resetted_pages_model.is_empty() {
|
||||||
// 视频状态标志的第 5 位表示是否有分 P 下载失败,如果有需要重置的分页,需要同时重置视频的该状态
|
// 视频状态标志的第 5 位表示是否有分 P 下载失败,如果有需要重置的分页,需要同时重置视频的该状态
|
||||||
video_status.set(4, 0);
|
video_status.set(4, 0);
|
||||||
should_update_video = true;
|
should_update_video = true;
|
||||||
@@ -230,15 +228,12 @@ pub async fn reset_video(
|
|||||||
.exec(&txn)
|
.exec(&txn)
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
let resetted_pages: Vec<_> = resetted_pages_tuple
|
let resetted_pages_id: Vec<_> = resetted_pages_model.iter().map(|model| model.id).collect();
|
||||||
.iter()
|
let resetted_pages_model: Vec<page::ActiveModel> = resetted_pages_model
|
||||||
.map(|(id, page_status)| page::ActiveModel {
|
.into_iter()
|
||||||
id: Unchanged(*id),
|
.map(|model| model.into_active_model())
|
||||||
download_status: Set(*page_status),
|
|
||||||
..Default::default()
|
|
||||||
})
|
|
||||||
.collect();
|
.collect();
|
||||||
for page_trunk in resetted_pages.chunks(50) {
|
for page_trunk in resetted_pages_model.chunks(50) {
|
||||||
page::Entity::insert_many(page_trunk.to_vec())
|
page::Entity::insert_many(page_trunk.to_vec())
|
||||||
.on_conflict(
|
.on_conflict(
|
||||||
OnConflict::column(page::Column::Id)
|
OnConflict::column(page::Column::Id)
|
||||||
@@ -252,6 +247,6 @@ pub async fn reset_video(
|
|||||||
Ok(ApiResponse::ok(ResetVideoResponse {
|
Ok(ApiResponse::ok(ResetVideoResponse {
|
||||||
resetted: should_update_video,
|
resetted: should_update_video,
|
||||||
video: id,
|
video: id,
|
||||||
pages: resetted_pages_tuple.into_iter().map(|(id, _)| id).collect(),
|
pages: resetted_pages_id,
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user