refactoring of app.rs and relevant flow files
This commit is contained in:
@@ -18,7 +18,7 @@ pub fn start_auth_flow() -> Result<(), String> {
|
|||||||
// Close welcome window if it's still open
|
// Close welcome window if it's still open
|
||||||
crate::services::welcome::close_welcome_window();
|
crate::services::welcome::close_welcome_window();
|
||||||
tauri::async_runtime::spawn(async {
|
tauri::async_runtime::spawn(async {
|
||||||
crate::app::bootstrap().await;
|
crate::startup::bootstrap().await;
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
.map_err(|e| e.to_string())
|
.map_err(|e| e.to_string())
|
||||||
|
|||||||
@@ -22,11 +22,12 @@ use tracing_subscriber::{self, util::SubscriberInitExt};
|
|||||||
|
|
||||||
static APP_HANDLE: std::sync::OnceLock<tauri::AppHandle<tauri::Wry>> = std::sync::OnceLock::new();
|
static APP_HANDLE: std::sync::OnceLock<tauri::AppHandle<tauri::Wry>> = std::sync::OnceLock::new();
|
||||||
|
|
||||||
mod app;
|
|
||||||
mod commands;
|
mod commands;
|
||||||
|
mod lifecycle;
|
||||||
mod models;
|
mod models;
|
||||||
mod remotes;
|
mod remotes;
|
||||||
mod services;
|
mod services;
|
||||||
|
mod startup;
|
||||||
mod state;
|
mod state;
|
||||||
mod system_tray;
|
mod system_tray;
|
||||||
mod utilities;
|
mod utilities;
|
||||||
@@ -86,7 +87,7 @@ fn setup_fdoll() -> Result<(), tauri::Error> {
|
|||||||
open_splash_window();
|
open_splash_window();
|
||||||
|
|
||||||
state::init_fdoll_state(Some(_guard));
|
state::init_fdoll_state(Some(_guard));
|
||||||
async_runtime::spawn(async move { app::start_fdoll().await });
|
async_runtime::spawn(async move { lifecycle::start_fdoll().await });
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
42
src-tauri/src/lifecycle.rs
Normal file
42
src-tauri/src/lifecycle.rs
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
use crate::{
|
||||||
|
lock_w,
|
||||||
|
services::{
|
||||||
|
active_app::init_active_app_changes_listener,
|
||||||
|
health_manager::show_health_manager_with_error,
|
||||||
|
},
|
||||||
|
startup::init_startup_sequence,
|
||||||
|
state::FDOLL,
|
||||||
|
system_tray::init_system_tray,
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Initializes and starts the core app lifecycle after initial setup.
|
||||||
|
///
|
||||||
|
/// This function handles:
|
||||||
|
/// - System tray initialization and storage in app state
|
||||||
|
/// - Active app change listener setup
|
||||||
|
/// - Startup sequence execution with error handling
|
||||||
|
///
|
||||||
|
/// # Errors
|
||||||
|
/// If the startup sequence fails, displays a health manager dialog
|
||||||
|
/// with the error details.
|
||||||
|
///
|
||||||
|
/// # Example
|
||||||
|
/// ```
|
||||||
|
/// // Called automatically during app setup in setup_fdoll()
|
||||||
|
/// lifecycle::start_fdoll().await;
|
||||||
|
/// ```
|
||||||
|
pub async fn start_fdoll() {
|
||||||
|
let tray = init_system_tray();
|
||||||
|
{
|
||||||
|
let mut guard = lock_w!(FDOLL);
|
||||||
|
guard.tray = Some(tray);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Begin listening for foreground app changes
|
||||||
|
init_active_app_changes_listener();
|
||||||
|
|
||||||
|
if let Err(err) = init_startup_sequence().await {
|
||||||
|
tracing::warn!("Startup sequence encountered an error: {}", err);
|
||||||
|
show_health_manager_with_error(Some(err.to_string()));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,37 +4,18 @@ use tokio::time::{sleep, Instant};
|
|||||||
use tracing::{info, warn};
|
use tracing::{info, warn};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
lock_w,
|
|
||||||
models::health::HealthError,
|
models::health::HealthError,
|
||||||
remotes::health::HealthRemote,
|
remotes::health::HealthRemote,
|
||||||
services::{
|
services::{
|
||||||
active_app::init_active_app_changes_listener,
|
|
||||||
auth::{get_access_token, get_tokens},
|
auth::{get_access_token, get_tokens},
|
||||||
health_manager::show_health_manager_with_error,
|
|
||||||
scene::{close_splash_window, open_scene_window, open_splash_window},
|
scene::{close_splash_window, open_scene_window, open_splash_window},
|
||||||
welcome::open_welcome_window,
|
welcome::open_welcome_window,
|
||||||
ws::init_ws_client,
|
ws::init_ws_client,
|
||||||
},
|
},
|
||||||
state::{init_app_data, FDOLL},
|
state::init_app_data,
|
||||||
system_tray::{init_system_tray, update_system_tray},
|
system_tray::update_system_tray,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub async fn start_fdoll() {
|
|
||||||
let tray = init_system_tray();
|
|
||||||
{
|
|
||||||
let mut guard = lock_w!(FDOLL);
|
|
||||||
guard.tray = Some(tray);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Begin listening for foreground app changes
|
|
||||||
init_active_app_changes_listener();
|
|
||||||
|
|
||||||
if let Err(err) = init_startup_sequence().await {
|
|
||||||
tracing::error!("startup sequence failed: {err}");
|
|
||||||
show_health_manager_with_error(Some(err.to_string()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn init_ws_after_auth() {
|
async fn init_ws_after_auth() {
|
||||||
const MAX_ATTEMPTS: u8 = 5;
|
const MAX_ATTEMPTS: u8 = 5;
|
||||||
const BACKOFF: Duration = Duration::from_millis(300);
|
const BACKOFF: Duration = Duration::from_millis(300);
|
||||||
@@ -90,7 +71,7 @@ pub async fn bootstrap() {
|
|||||||
|
|
||||||
/// Perform checks for environment, network condition
|
/// Perform checks for environment, network condition
|
||||||
/// and handle situations where startup would not be appropriate.
|
/// and handle situations where startup would not be appropriate.
|
||||||
async fn init_startup_sequence() -> Result<(), HealthError> {
|
pub async fn init_startup_sequence() -> Result<(), HealthError> {
|
||||||
let health_remote = HealthRemote::try_new()?;
|
let health_remote = HealthRemote::try_new()?;
|
||||||
|
|
||||||
// simple retry loop to smooth transient network issues
|
// simple retry loop to smooth transient network issues
|
||||||
Reference in New Issue
Block a user