Files
mxivideo/src-tauri/src/commands/template.rs
2025-07-10 23:06:18 +08:00

143 lines
3.9 KiB
Rust

use serde::{Deserialize, Serialize};
use crate::python_executor::{execute_python_command, execute_python_action_with_progress};
use tauri::AppHandle;
#[derive(Debug, Deserialize)]
pub struct BatchImportRequest {
pub source_folder: String,
}
// Re-export PythonProgress as ImportProgress for backward compatibility
// Note: This is used by frontend TypeScript definitions
#[allow(unused_imports)]
pub use crate::python_executor::PythonProgress as ImportProgress;
#[derive(Debug, Serialize)]
pub struct TemplateInfo {
pub id: String,
pub name: String,
pub description: String,
pub thumbnail_path: String,
pub draft_content_path: String,
pub resources_path: String,
pub created_at: String,
pub updated_at: String,
pub canvas_config: serde_json::Value,
pub duration: i64,
pub material_count: i32,
pub track_count: i32,
pub tags: Vec<String>,
}
#[tauri::command]
pub async fn batch_import_templates(app: tauri::AppHandle, request: BatchImportRequest) -> Result<String, String> {
let args = vec![
"-m".to_string(),
"python_core.services.template_manager".to_string(),
"--action".to_string(),
"batch_import".to_string(),
"--source_folder".to_string(),
request.source_folder,
];
execute_python_command(app, &args, None).await
}
#[tauri::command]
pub async fn batch_import_templates_with_progress(
app: AppHandle,
request: BatchImportRequest
) -> Result<String, String> {
let params = &[("--source_folder", request.source_folder.as_str())];
execute_python_action_with_progress(
app,
"python_core.services.template_manager",
"batch_import",
params,
"template-import-progress",
None,
).await
}
#[tauri::command]
pub async fn get_templates(app: tauri::AppHandle) -> Result<String, String> {
let args = vec![
"-m".to_string(),
"python_core.services.template_manager".to_string(),
"--action".to_string(),
"get_templates".to_string(),
];
execute_python_command(app, &args, None).await
}
#[tauri::command]
pub async fn get_template(app: tauri::AppHandle, template_id: String) -> Result<String, String> {
let args = vec![
"-m".to_string(),
"python_core.services.template_manager".to_string(),
"--action".to_string(),
"get_template".to_string(),
"--template_id".to_string(),
template_id,
];
execute_python_command(app, &args, None).await
}
#[tauri::command]
pub async fn delete_template(app: tauri::AppHandle, template_id: String) -> Result<String, String> {
let args = vec![
"-m".to_string(),
"python_core.services.template_manager".to_string(),
"--action".to_string(),
"delete_template".to_string(),
"--template_id".to_string(),
template_id,
];
execute_python_command(app, &args, None).await
}
#[tauri::command]
pub async fn get_template_detail(app: tauri::AppHandle, template_id: String) -> Result<String, String> {
let args = vec![
"-m".to_string(),
"python_core.services.template_manager".to_string(),
"--action".to_string(),
"get_template_detail".to_string(),
"--template_id".to_string(),
template_id,
];
execute_python_command(app, &args, None).await
}
// Example: AI Video generation with progress
#[allow(dead_code)]
#[tauri::command]
pub async fn generate_video_with_progress(
app: AppHandle,
image_path: String,
prompt: String,
output_path: String,
) -> Result<String, String> {
let params = &[
("--image_path", image_path.as_str()),
("--prompt", prompt.as_str()),
("--output_path", output_path.as_str()),
];
execute_python_action_with_progress(
app,
"python_core.ai_video.video_generator",
"generate",
params,
"video-generation-progress",
None,
).await
}