mixvideo-v2/apps/desktop/src-tauri/src/lib.rs

170 lines
8.5 KiB
Rust

// 导入宏
extern crate lazy_static;
// 四层架构模块定义
pub mod infrastructure;
pub mod data;
pub mod business;
pub mod presentation;
// 应用状态和配置
pub mod app_state;
pub mod config;
// 测试模块
#[cfg(test)]
mod tests;
use app_state::AppState;
use presentation::commands;
use tauri::Manager;
use infrastructure::logging;
use tracing::info;
#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
tauri::Builder::default()
.plugin(tauri_plugin_opener::init())
.plugin(tauri_plugin_fs::init())
.plugin(tauri_plugin_dialog::init())
.manage(AppState::new())
.invoke_handler(tauri::generate_handler![
commands::project_commands::create_project,
commands::project_commands::get_all_projects,
commands::project_commands::get_project_by_id,
commands::project_commands::update_project,
commands::project_commands::delete_project,
commands::project_commands::validate_project_path,
commands::project_commands::get_default_project_name,
commands::system_commands::select_directory,
commands::system_commands::get_app_info,
commands::system_commands::validate_directory,
commands::system_commands::get_directory_name,
commands::system_commands::get_database_info,
commands::system_commands::get_performance_report,
commands::system_commands::cleanup_performance_data,
commands::system_commands::record_performance_metric,
commands::system_commands::cleanup_invalid_projects,
commands::material_commands::import_materials,
commands::material_commands::import_materials_async,
commands::material_commands::select_material_folders,
commands::material_commands::scan_folder_materials,
commands::material_commands::get_project_materials,
commands::material_commands::get_material_by_id,
commands::material_commands::delete_material,
commands::material_commands::get_project_material_stats,
commands::material_commands::batch_process_materials,
commands::material_commands::update_material_status,
commands::material_commands::cleanup_invalid_materials,
commands::material_commands::is_supported_format,
commands::material_commands::get_supported_extensions,
commands::material_commands::select_material_files,
commands::material_commands::validate_material_files,
commands::material_commands::get_file_info,
commands::material_commands::check_ffmpeg_available,
commands::material_commands::get_ffmpeg_version,
commands::material_commands::get_ffmpeg_status,
commands::material_commands::extract_file_metadata,
commands::material_commands::detect_video_scenes,
commands::material_commands::generate_video_thumbnail,
commands::material_commands::test_scene_detection,
commands::material_commands::get_material_segments,
commands::material_commands::test_video_split,
commands::material_commands::associate_material_to_model,
commands::material_commands::disassociate_material_from_model,
commands::material_commands::get_materials_by_model_id,
commands::material_commands::get_unassociated_materials,
// 模特管理命令
commands::model_commands::create_model,
commands::model_commands::get_model_by_id,
commands::model_commands::get_all_models,
commands::model_commands::search_models,
commands::model_commands::update_model,
commands::model_commands::delete_model,
commands::model_commands::delete_model_permanently,
commands::model_commands::add_model_photo,
commands::model_commands::delete_model_photo,
commands::model_commands::set_cover_photo,
commands::model_commands::add_model_tag,
commands::model_commands::remove_model_tag,
commands::model_commands::update_model_status,
commands::model_commands::set_model_rating,
commands::model_commands::set_model_avatar,
commands::model_commands::get_model_statistics,
commands::model_commands::select_photo_files,
commands::model_commands::select_photo_file,
// AI分类管理命令
commands::ai_classification_commands::create_ai_classification,
commands::ai_classification_commands::get_all_ai_classifications,
commands::ai_classification_commands::get_ai_classification_by_id,
commands::ai_classification_commands::update_ai_classification,
commands::ai_classification_commands::delete_ai_classification,
commands::ai_classification_commands::get_ai_classification_count,
commands::ai_classification_commands::generate_ai_classification_preview,
commands::ai_classification_commands::update_ai_classification_sort_orders,
commands::ai_classification_commands::toggle_ai_classification_status,
commands::ai_classification_commands::validate_ai_classification_name,
// AI视频分类命令
commands::video_classification_commands::start_video_classification,
commands::video_classification_commands::get_classification_queue_status,
commands::video_classification_commands::get_project_classification_queue_status,
commands::video_classification_commands::get_classification_task_progress,
commands::video_classification_commands::get_all_classification_task_progress,
commands::video_classification_commands::get_project_classification_task_progress,
commands::video_classification_commands::stop_classification_queue,
commands::video_classification_commands::pause_classification_queue,
commands::video_classification_commands::resume_classification_queue,
commands::video_classification_commands::get_material_classification_records,
commands::video_classification_commands::get_classification_statistics,
commands::video_classification_commands::is_segment_classified,
commands::video_classification_commands::cancel_classification_task,
commands::video_classification_commands::retry_classification_task,
commands::video_classification_commands::test_gemini_connection,
// AI分析日志命令
commands::ai_analysis_log_commands::get_ai_analysis_logs,
commands::ai_analysis_log_commands::get_ai_analysis_stats,
commands::ai_analysis_log_commands::export_ai_analysis_logs,
commands::ai_analysis_log_commands::cleanup_ai_analysis_logs,
commands::ai_analysis_log_commands::retry_failed_classification_task,
commands::ai_analysis_log_commands::get_classification_record_detail,
commands::ai_analysis_log_commands::delete_classification_records,
commands::ai_analysis_log_commands::get_ai_analysis_log_filters,
commands::ai_analysis_log_commands::create_test_ai_analysis_logs
])
.setup(|app| {
// 初始化日志系统
let log_config = logging::LogConfig::default();
if let Err(e) = logging::init_logging(log_config) {
eprintln!("日志系统初始化失败: {}", e);
}
info!("MixVideo Desktop 应用启动");
// 初始化应用状态
let app_handle = app.handle();
let state: tauri::State<AppState> = app_handle.state();
// 初始化数据库
if let Err(e) = state.initialize_database() {
eprintln!("Failed to initialize database: {}", e);
return Err(e.into());
}
// 发布应用启动事件
let event_bus_manager = state.event_bus_manager.clone();
tauri::async_runtime::spawn(async move {
let _ = event_bus_manager.publish_app_started().await;
});
// 记录启动性能指标
{
let mut monitor = state.performance_monitor.lock().unwrap();
monitor.record_metric("startup_time_ms", 0.0); // 实际应该测量真实启动时间
}
Ok(())
})
.run(tauri::generate_context!())
.expect("error while running tauri application");
}