170 lines
8.5 KiB
Rust
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");
|
|
}
|