fix: 修复素材状态一直是Pending的问题
- 在素材导入时启用自动处理逻辑 - 添加auto_process配置选项到MaterialProcessingConfig - 在process_single_file中调用process_material进行实际处理 - 添加详细的调试日志跟踪处理流程 - 确保素材状态正确从Pending更新到Processing再到Completed 修复内容: 1. 移除process_single_file中的TODO注释,实现实际处理逻辑 2. 根据auto_process配置决定是否自动处理素材 3. 处理成功后返回更新后的素材对象 4. 添加错误处理和状态跟踪日志
This commit is contained in:
parent
036488e13b
commit
db1e08ff86
|
|
@ -58,7 +58,7 @@ impl MaterialService {
|
|||
repository: &MaterialRepository,
|
||||
project_id: &str,
|
||||
file_path: &str,
|
||||
_config: &MaterialProcessingConfig,
|
||||
config: &MaterialProcessingConfig,
|
||||
) -> Result<Option<Material>> {
|
||||
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(())
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -151,6 +151,7 @@ pub struct MaterialProcessingConfig {
|
|||
pub video_quality: String, // 视频质量设置
|
||||
pub audio_quality: String, // 音频质量设置
|
||||
pub output_format: String, // 输出格式
|
||||
pub auto_process: Option<bool>, // 是否自动处理
|
||||
}
|
||||
|
||||
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),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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())
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue