diff --git a/frontend/src/components/layout/sidebar.rs b/frontend/src/components/layout/sidebar.rs index f27af7a..4e70d92 100644 --- a/frontend/src/components/layout/sidebar.rs +++ b/frontend/src/components/layout/sidebar.rs @@ -8,9 +8,64 @@ use crate::components::ui::switch::Switch; #[component] pub fn Sidebar() -> impl IntoView { let store = use_context::().expect("store not provided"); - - // ... (existing counts and logic) - + + let total_count = move || store.torrents.with(|map| map.len()); + let downloading_count = move || { + store.torrents.with(|map| { + map.values() + .filter(|t| t.status == shared::TorrentStatus::Downloading) + .count() + }) + }; + let seeding_count = move || { + store.torrents.with(|map| { + map.values() + .filter(|t| t.status == shared::TorrentStatus::Seeding) + .count() + }) + }; + let completed_count = move || { + store.torrents.with(|map| { + map.values() + .filter(|t| { + t.status == shared::TorrentStatus::Seeding + || (t.status == shared::TorrentStatus::Paused && t.percent_complete >= 100.0) + }) + .count() + }) + }; + let paused_count = move || { + store.torrents.with(|map| { + map.values() + .filter(|t| t.status == shared::TorrentStatus::Paused) + .count() + }) + }; + let inactive_count = move || { + store.torrents.with(|map| { + map.values() + .filter(|t| { + t.status == shared::TorrentStatus::Paused + || t.status == shared::TorrentStatus::Error + }) + .count() + }) + }; + + let set_filter = move |f: crate::store::FilterStatus| { + store.filter.set(f); + }; + + let is_active = move |f: crate::store::FilterStatus| store.filter.get() == f; + + let username = move || { + store.user.get().unwrap_or_else(|| "User".to_string()) + }; + + let first_letter = move || { + username().chars().next().unwrap_or('?').to_uppercase().to_string() + }; + let on_push_toggle = move |checked: bool| { spawn_local(async move { if checked { @@ -26,11 +81,69 @@ pub fn Sidebar() -> impl IntoView { view! { - // ... (VibeTorrent Header) +
+
+ + + +
+
+ "VibeTorrent" + "v3.0.0" +
+
- // ... (Filters) + + "Filtreler" + + + + + + + + + + + @@ -80,8 +193,6 @@ pub fn Sidebar() -> impl IntoView { } } - } -} #[component] fn SidebarItem(