perf: optimize torrent store with HashMap for O(1) updates
All checks were successful
Build MIPS Binary / build (push) Successful in 4m57s

This commit is contained in:
spinline
2026-02-08 23:52:23 +03:00
parent cffc88443a
commit 1bb3475d61
3 changed files with 47 additions and 46 deletions

View File

@@ -6,52 +6,47 @@ use crate::api;
pub fn Sidebar() -> impl IntoView {
let store = use_context::<crate::store::TorrentStore>().expect("store not provided");
let total_count = move || store.torrents.get().len();
let total_count = move || store.torrents.with(|map| map.len());
let downloading_count = move || {
store
.torrents
.get()
.iter()
.filter(|t| t.status == shared::TorrentStatus::Downloading)
.count()
store.torrents.with(|map| {
map.values()
.filter(|t| t.status == shared::TorrentStatus::Downloading)
.count()
})
};
let seeding_count = move || {
store
.torrents
.get()
.iter()
.filter(|t| t.status == shared::TorrentStatus::Seeding)
.count()
store.torrents.with(|map| {
map.values()
.filter(|t| t.status == shared::TorrentStatus::Seeding)
.count()
})
};
let completed_count = move || {
store
.torrents
.get()
.iter()
.filter(|t| {
t.status == shared::TorrentStatus::Seeding
|| (t.status == shared::TorrentStatus::Paused && t.percent_complete >= 100.0)
})
.count()
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
.get()
.iter()
.filter(|t| t.status == shared::TorrentStatus::Paused)
.count()
store.torrents.with(|map| {
map.values()
.filter(|t| t.status == shared::TorrentStatus::Paused)
.count()
})
};
let inactive_count = move || {
store
.torrents
.get()
.iter()
.filter(|t| {
t.status == shared::TorrentStatus::Paused
|| t.status == shared::TorrentStatus::Error
})
.count()
store.torrents.with(|map| {
map.values()
.filter(|t| {
t.status == shared::TorrentStatus::Paused
|| t.status == shared::TorrentStatus::Error
})
.count()
})
};
let close_drawer = move || {