refactor: 重构 nfo,增强拓展性和可读性,方便后续变更 (#345)

This commit is contained in:
ᴀᴍᴛᴏᴀᴇʀ
2025-05-30 17:28:42 +08:00
committed by GitHub
parent e9d1c9eadb
commit a574d005c3
2 changed files with 282 additions and 214 deletions

View File

@@ -22,7 +22,7 @@ use crate::utils::model::{
create_pages, create_videos, filter_unfilled_videos, filter_unhandled_video_pages, update_pages_model,
update_videos_model,
};
use crate::utils::nfo::{ModelWrapper, NFOMode, NFOSerializer};
use crate::utils::nfo::NFO;
use crate::utils::status::{PageStatus, STATUS_OK, VideoStatus};
/// 完整地处理某个视频来源
@@ -618,12 +618,12 @@ pub async fn generate_page_nfo(
return Ok(ExecutionStatus::Skipped);
}
let single_page = video_model.single_page.context("single_page is null")?;
let nfo_serializer = if single_page {
NFOSerializer(ModelWrapper::Video(video_model), NFOMode::MOVIE)
let nfo = if single_page {
NFO::Movie(video_model.into())
} else {
NFOSerializer(ModelWrapper::Page(page_model), NFOMode::EPOSODE)
NFO::Episode(page_model.into())
};
generate_nfo(nfo_serializer, nfo_path).await?;
generate_nfo(nfo, nfo_path).await?;
Ok(ExecutionStatus::Succeeded)
}
@@ -663,8 +663,7 @@ pub async fn generate_upper_nfo(
if !should_run {
return Ok(ExecutionStatus::Skipped);
}
let nfo_serializer = NFOSerializer(ModelWrapper::Video(video_model), NFOMode::UPPER);
generate_nfo(nfo_serializer, nfo_path).await?;
generate_nfo(NFO::Upper(video_model.into()), nfo_path).await?;
Ok(ExecutionStatus::Succeeded)
}
@@ -676,21 +675,16 @@ pub async fn generate_video_nfo(
if !should_run {
return Ok(ExecutionStatus::Skipped);
}
let nfo_serializer = NFOSerializer(ModelWrapper::Video(video_model), NFOMode::TVSHOW);
generate_nfo(nfo_serializer, nfo_path).await?;
generate_nfo(NFO::TVShow(video_model.into()), nfo_path).await?;
Ok(ExecutionStatus::Succeeded)
}
/// 创建 nfo_path 的父目录,然后写入 nfo 文件
async fn generate_nfo(serializer: NFOSerializer<'_>, nfo_path: PathBuf) -> Result<()> {
async fn generate_nfo(nfo: NFO<'_>, nfo_path: PathBuf) -> Result<()> {
if let Some(parent) = nfo_path.parent() {
fs::create_dir_all(parent).await?;
}
fs::write(
nfo_path,
serializer.generate_nfo(&CONFIG.nfo_time_type).await?.as_bytes(),
)
.await?;
fs::write(nfo_path, nfo.generate_nfo().await?.as_bytes()).await?;
Ok(())
}