modules system init
This commit is contained in:
@@ -7,6 +7,7 @@ use crate::{
|
|||||||
active_app::init_foreground_app_change_listener,
|
active_app::init_foreground_app_change_listener,
|
||||||
auth::get_session_token,
|
auth::get_session_token,
|
||||||
cursor::init_cursor_tracking,
|
cursor::init_cursor_tracking,
|
||||||
|
modules::init_modules,
|
||||||
scene::{close_splash_window, open_splash_window},
|
scene::{close_splash_window, open_splash_window},
|
||||||
welcome::open_welcome_window,
|
welcome::open_welcome_window,
|
||||||
},
|
},
|
||||||
@@ -25,6 +26,7 @@ pub async fn launch_app() {
|
|||||||
init_app_state();
|
init_app_state();
|
||||||
init_system_tray();
|
init_system_tray();
|
||||||
init_cursor_tracking().await;
|
init_cursor_tracking().await;
|
||||||
|
init_modules();
|
||||||
init_foreground_app_change_listener();
|
init_foreground_app_change_listener();
|
||||||
|
|
||||||
if let Err(err) = validate_server_health().await {
|
if let Err(err) = validate_server_health().await {
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ pub mod doll_editor;
|
|||||||
pub mod health_manager;
|
pub mod health_manager;
|
||||||
pub mod health_monitor;
|
pub mod health_monitor;
|
||||||
pub mod interaction;
|
pub mod interaction;
|
||||||
|
pub mod modules;
|
||||||
pub mod scene;
|
pub mod scene;
|
||||||
pub mod sprite_recolor;
|
pub mod sprite_recolor;
|
||||||
pub mod welcome;
|
pub mod welcome;
|
||||||
|
|||||||
87
src-tauri/src/services/modules/mod.rs
Normal file
87
src-tauri/src/services/modules/mod.rs
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
use tauri::Manager;
|
||||||
|
use tracing::{error, info, warn};
|
||||||
|
|
||||||
|
use crate::get_app_handle;
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
use serde_json;
|
||||||
|
use std::{fs, path::PathBuf};
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize, Debug)]
|
||||||
|
pub struct ModuleMetadata {
|
||||||
|
pub name: String,
|
||||||
|
pub version: String,
|
||||||
|
pub description: Option<String>,
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_module_metadata(path: PathBuf) -> Option<ModuleMetadata> {
|
||||||
|
let metadata_path = path.join("metadata.json");
|
||||||
|
if metadata_path.exists() {
|
||||||
|
match fs::read_to_string(&metadata_path) {
|
||||||
|
Ok(content) => match serde_json::from_str::<ModuleMetadata>(&content) {
|
||||||
|
Ok(metadata) => {
|
||||||
|
info!(
|
||||||
|
"Loaded module metadata: {} v{} - {:?}",
|
||||||
|
metadata.name, metadata.version, metadata.description
|
||||||
|
);
|
||||||
|
|
||||||
|
return Some(metadata);
|
||||||
|
}
|
||||||
|
Err(e) => {
|
||||||
|
warn!("Failed to parse metadata.json in {}: {}", path.display(), e);
|
||||||
|
None
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Err(e) => {
|
||||||
|
warn!("Failed to read metadata.json in {}: {}", path.display(), e);
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Initialize installed modules
|
||||||
|
pub fn init_modules() {
|
||||||
|
let modules_path = get_app_handle()
|
||||||
|
.path()
|
||||||
|
.app_data_dir()
|
||||||
|
.expect("App data directory is unavailable.")
|
||||||
|
.join("modules");
|
||||||
|
|
||||||
|
if !modules_path.exists() {
|
||||||
|
if let Err(e) = fs::create_dir_all(&modules_path) {
|
||||||
|
error!("Failed to create modules directory: {}", e);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let entries = match fs::read_dir(&modules_path) {
|
||||||
|
Ok(entries) => entries,
|
||||||
|
Err(e) => {
|
||||||
|
error!("Failed to read app data directory: {}", e);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
for entry in entries {
|
||||||
|
let entry = match entry {
|
||||||
|
Ok(entry) => entry,
|
||||||
|
Err(e) => {
|
||||||
|
warn!("Failed to read directory entry: {}", e);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
let path = entry.path();
|
||||||
|
if path.is_dir() {
|
||||||
|
let module_metadata = match get_module_metadata(path) {
|
||||||
|
Some(metadata) => metadata,
|
||||||
|
None => continue,
|
||||||
|
};
|
||||||
|
dbg!(module_metadata);
|
||||||
|
// TODO: Initialize the module based on metadata
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user