From db1e08ff866138385bbfdc6690fc837345aac4e4 Mon Sep 17 00:00:00 2001 From: imeepos Date: Sun, 13 Jul 2025 20:53:05 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E7=B4=A0=E6=9D=90?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E4=B8=80=E7=9B=B4=E6=98=AFPending=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在素材导入时启用自动处理逻辑 - 添加auto_process配置选项到MaterialProcessingConfig - 在process_single_file中调用process_material进行实际处理 - 添加详细的调试日志跟踪处理流程 - 确保素材状态正确从Pending更新到Processing再到Completed 修复内容: 1. 移除process_single_file中的TODO注释,实现实际处理逻辑 2. 根据auto_process配置决定是否自动处理素材 3. 处理成功后返回更新后的素材对象 4. 添加错误处理和状态跟踪日志 --- .../src/business/services/material_service.rs | 37 +++++++++++++++++-- .../src-tauri/src/data/models/material.rs | 2 + .../commands/material_commands.rs | 8 +++- 3 files changed, 41 insertions(+), 6 deletions(-) diff --git a/apps/desktop/src-tauri/src/business/services/material_service.rs b/apps/desktop/src-tauri/src/business/services/material_service.rs index e24e609..870d1d6 100644 --- a/apps/desktop/src-tauri/src/business/services/material_service.rs +++ b/apps/desktop/src-tauri/src/business/services/material_service.rs @@ -58,7 +58,7 @@ impl MaterialService { repository: &MaterialRepository, project_id: &str, file_path: &str, - _config: &MaterialProcessingConfig, + config: &MaterialProcessingConfig, ) -> Result> { let path = Path::new(file_path); @@ -104,10 +104,29 @@ impl MaterialService { // 保存到数据库 repository.create(&material)?; - + // 如果启用自动处理,则开始处理 - // TODO: 实现异步处理逻辑 - + if config.auto_process.unwrap_or(true) { + println!("开始自动处理素材: {} ({})", material.name, material.id); + // 同步处理素材(提取元数据、场景检测等) + match Self::process_material(repository, &material.id, config) { + Ok(_) => { + println!("素材处理成功: {}", material.name); + // 处理成功,重新获取更新后的素材 + if let Ok(Some(updated_material)) = repository.get_by_id(&material.id) { + println!("素材状态已更新为: {:?}", updated_material.processing_status); + return Ok(Some(updated_material)); + } + } + Err(e) => { + // 处理失败,但不影响导入结果,只记录错误 + println!("素材处理失败: {} - {}", material.name, e); + } + } + } else { + println!("跳过自动处理素材: {}", material.name); + } + Ok(Some(material)) } @@ -238,6 +257,8 @@ impl MaterialService { material_id: &str, config: &MaterialProcessingConfig, ) -> Result<()> { + println!("开始处理素材: {}", material_id); + // 更新状态为处理中 Self::update_material_status( repository, @@ -246,17 +267,23 @@ impl MaterialService { None, )?; + println!("素材状态已更新为 Processing: {}", material_id); + // 获取素材信息 let mut material = repository.get_by_id(material_id)? .ok_or_else(|| anyhow!("素材不存在: {}", material_id))?; // 1. 提取元数据 + println!("开始提取元数据: {} (类型: {:?})", material.original_path, material.material_type); match Self::extract_metadata(&material.original_path, &material.material_type) { Ok(metadata) => { + println!("元数据提取成功: {:?}", metadata); material.set_metadata(metadata); repository.update(&material)?; + println!("元数据已保存到数据库"); } Err(e) => { + println!("元数据提取失败: {}", e); Self::update_material_status( repository, material_id, @@ -300,6 +327,7 @@ impl MaterialService { } // 标记为完成 + println!("素材处理完成,更新状态为 Completed: {}", material_id); Self::update_material_status( repository, material_id, @@ -307,6 +335,7 @@ impl MaterialService { None, )?; + println!("素材处理流程完成: {}", material_id); Ok(()) } diff --git a/apps/desktop/src-tauri/src/data/models/material.rs b/apps/desktop/src-tauri/src/data/models/material.rs index 20287e1..dee17cc 100644 --- a/apps/desktop/src-tauri/src/data/models/material.rs +++ b/apps/desktop/src-tauri/src/data/models/material.rs @@ -151,6 +151,7 @@ pub struct MaterialProcessingConfig { pub video_quality: String, // 视频质量设置 pub audio_quality: String, // 音频质量设置 pub output_format: String, // 输出格式 + pub auto_process: Option, // 是否自动处理 } impl Default for MaterialProcessingConfig { @@ -162,6 +163,7 @@ impl Default for MaterialProcessingConfig { video_quality: "medium".to_string(), audio_quality: "medium".to_string(), output_format: "mp4".to_string(), + auto_process: Some(true), } } } diff --git a/apps/desktop/src-tauri/src/presentation/commands/material_commands.rs b/apps/desktop/src-tauri/src/presentation/commands/material_commands.rs index fbbcba3..a95a7f8 100644 --- a/apps/desktop/src-tauri/src/presentation/commands/material_commands.rs +++ b/apps/desktop/src-tauri/src/presentation/commands/material_commands.rs @@ -21,8 +21,12 @@ pub async fn import_materials( let repository = repository_guard.as_ref() .ok_or("素材仓库未初始化")?; - let config = MaterialProcessingConfig::default(); - + let mut config = MaterialProcessingConfig::default(); + config.auto_process = Some(request.auto_process); + if let Some(max_duration) = request.max_segment_duration { + config.max_segment_duration = max_duration; + } + MaterialService::import_materials(repository, request, &config) .map_err(|e| e.to_string()) }