use crate::components::layout::protected::Protected; use crate::components::torrent::table::TorrentTable; use crate::components::torrent::detail::TorrentDetail; use crate::components::auth::login::Login; use crate::components::auth::setup::Setup; use leptos::prelude::*; use leptos::task::spawn_local; use leptos_router::components::{Router, Routes, Route}; use leptos_router::hooks::use_navigate; use leptos_shadcn_skeleton::Skeleton; use leptos_shadcn_toast::SonnerProvider; #[component] pub fn App() -> impl IntoView { view! { } } #[component] fn InnerApp() -> impl IntoView { crate::store::provide_torrent_store(); let store = use_context::(); let is_loading = signal(true); let is_authenticated = signal(false); let needs_setup = signal(false); Effect::new(move |_| { spawn_local(async move { log::info!("App initialization started..."); // Check if setup is needed via Server Function match shared::server_fns::auth::get_setup_status().await { Ok(status) => { if !status.completed { log::info!("Setup not completed"); needs_setup.1.set(true); is_loading.1.set(false); return; } } Err(e) => log::error!("Failed to get setup status: {:?}", e), } // Check authentication via GetUser Server Function match shared::server_fns::auth::get_user().await { Ok(Some(user_info)) => { log::info!("Authenticated as {}", user_info.username); if let Some(s) = store { s.user.set(Some(user_info.username)); } is_authenticated.1.set(true); } Ok(None) => { log::info!("Not authenticated"); } Err(e) => { log::error!("Auth check failed: {:?}", e); } } is_loading.1.set(false); }); }); Effect::new(move |_| { if is_authenticated.0.get() { spawn_local(async { gloo_timers::future::TimeoutFuture::new(2000).await; if crate::utils::platform::supports_push_notifications() && !crate::utils::platform::is_safari() { crate::store::subscribe_to_push_notifications().await; } }); } }); view! {
"404 Not Found"
}> } } /> } } /> // Sidebar skeleton
// Main content skeleton
// Header skeleton
// Table skeleton rows
// Status bar skeleton
}.into_any()>
}.into_any() }/>
"Settings Page (Coming Soon)"
} }/> } }