Files
mixvideo-v2/apps/desktop/src-tauri/src/presentation/commands/debug_commands.rs
imeepos 939efd70d4 feat: 完善模板导入功能
新增功能:
- 添加详细的模板导入日志系统
- 实现全局进度存储机制
- 完善模板状态管理

 修复问题:
- 修复进度监控无限轮询问题
- 修复模板列表状态显示不正确问题
- 修复所有unwrap()导致的panic错误
- 修复外键约束失败问题

 改进:
- 优化素材上传逻辑,只上传视频/音频/图片
- 上传失败时自动跳过而不是中断导入
- 缺失文件时继续导入而不是失败
- 改进错误处理机制
2025-07-14 21:34:07 +08:00

108 lines
4.1 KiB
Rust

use crate::business::services::draft_parser::DraftContentParser;
/// 测试解析剪映草稿文件
#[tauri::command]
pub async fn test_parse_draft_file(
file_path: String,
) -> Result<String, String> {
match DraftContentParser::parse_file(&file_path, None) {
Ok(parse_result) => {
let summary = serde_json::json!({
"success": true,
"template_name": parse_result.template.name,
"duration": parse_result.template.duration,
"fps": parse_result.template.fps,
"canvas_config": parse_result.template.canvas_config,
"materials_count": parse_result.template.materials.len(),
"tracks_count": parse_result.template.tracks.len(),
"missing_files_count": parse_result.missing_files.len(),
"warnings_count": parse_result.warnings.len(),
"missing_files": parse_result.missing_files,
"warnings": parse_result.warnings
});
Ok(summary.to_string())
}
Err(e) => {
let error_info = serde_json::json!({
"success": false,
"error": e.to_string(),
"error_type": "ParseError"
});
Ok(error_info.to_string())
}
}
}
/// 验证模板数据结构
#[tauri::command]
pub async fn validate_template_structure(
file_path: String,
) -> Result<String, String> {
match DraftContentParser::parse_file(&file_path, None) {
Ok(parse_result) => {
let template = &parse_result.template;
let mut validation_results = Vec::new();
// 验证基本信息
if template.name.is_empty() {
validation_results.push("模板名称为空".to_string());
}
if template.duration == 0 {
validation_results.push("模板时长为0".to_string());
}
if template.materials.is_empty() {
validation_results.push("没有素材".to_string());
}
if template.tracks.is_empty() {
validation_results.push("没有轨道".to_string());
}
// 验证轨道和片段
for (track_idx, track) in template.tracks.iter().enumerate() {
if track.segments.is_empty() {
validation_results.push(format!("轨道 {} 没有片段", track_idx));
}
for (seg_idx, segment) in track.segments.iter().enumerate() {
if segment.duration == 0 {
validation_results.push(format!("轨道 {} 片段 {} 时长为0", track_idx, seg_idx));
}
// 检查素材引用是否存在
if let Some(ref material_id) = segment.template_material_id {
let material_exists = template.materials.iter()
.any(|m| m.id == *material_id);
if !material_exists {
validation_results.push(format!("轨道 {} 片段 {} 引用的素材不存在: {}",
track_idx, seg_idx, material_id));
}
}
}
}
let result = serde_json::json!({
"success": true,
"valid": validation_results.is_empty(),
"issues": validation_results,
"summary": {
"materials": template.materials.len(),
"tracks": template.tracks.len(),
"total_segments": template.tracks.iter().map(|t| t.segments.len()).sum::<usize>()
}
});
Ok(result.to_string())
}
Err(e) => {
let error_info = serde_json::json!({
"success": false,
"error": e.to_string()
});
Ok(error_info.to_string())
}
}
}