From 0637e2746c0ac0e97b93e78980d0a8b1fd8ab79f Mon Sep 17 00:00:00 2001 From: spinline Date: Fri, 13 Feb 2026 19:55:34 +0300 Subject: [PATCH] fix: resolve ownership (move) errors and type inference issues in torrent table component --- frontend/src/components/torrent/table.rs | 67 +++++++++++++----------- 1 file changed, 35 insertions(+), 32 deletions(-) diff --git a/frontend/src/components/torrent/table.rs b/frontend/src/components/torrent/table.rs index cddd311..edb5a4a 100644 --- a/frontend/src/components/torrent/table.rs +++ b/frontend/src/components/torrent/table.rs @@ -577,15 +577,11 @@ fn TorrentRow( { let on_action = on_action.clone(); move || { - let t = torrent.get().unwrap(); - let t_name = t.name.clone(); - let is_active_selection = Memo::new(move |_| { let selected = store.selected_torrent.get(); selected.as_deref() == Some(stored_hash.get_value().as_str()) }); - let t_name_stored = StoredValue::new(t_name.clone()); let h_for_menu = stored_hash.get_value(); view! { @@ -603,25 +599,29 @@ fn TorrentRow( {move || visible_columns.get().contains("Name").then({ - move || view! { - - {t_name_stored.get_value()} - + move || { + let name = torrent.get().map(|t| t.name).unwrap_or_default(); + view! { + + {name} + + } } }).into_any()} {move || visible_columns.get().contains("Size").then({ - let size_bytes = t.size; move || { - let size_str = format_bytes(size_bytes); + let size = torrent.get().map(|t| t.size).unwrap_or(0); + let size_str = format_bytes(size); view! { {size_str} } } }).into_any()} {move || visible_columns.get().contains("Progress").then({ - let percent = t.percent_complete; - let status = t.status.clone(); move || { + let t = torrent.get().unwrap(); + let percent = t.percent_complete; + let status = t.status.clone(); let class = if status == shared::TorrentStatus::Error { "bg-destructive/20 [&>div]:bg-destructive".to_string() } else { @@ -642,48 +642,51 @@ fn TorrentRow( }).into_any()} {move || visible_columns.get().contains("Status").then({ - let status_text = format!("{:?}", t.status); - let variant = match t.status { - shared::TorrentStatus::Seeding => BadgeVariant::Success, - shared::TorrentStatus::Downloading => BadgeVariant::Info, - shared::TorrentStatus::Paused => BadgeVariant::Warning, - shared::TorrentStatus::Error => BadgeVariant::Destructive, - _ => BadgeVariant::Secondary, - }; - move || view! { - - {status_text.clone()} - + move || { + let t = torrent.get().unwrap(); + let status_text = format!("{:?}", t.status); + let variant = match t.status { + shared::TorrentStatus::Seeding => BadgeVariant::Success, + shared::TorrentStatus::Downloading => BadgeVariant::Info, + shared::TorrentStatus::Paused => BadgeVariant::Warning, + shared::TorrentStatus::Error => BadgeVariant::Destructive, + _ => BadgeVariant::Secondary, + }; + view! { + + {status_text} + + } } }).into_any()} {move || visible_columns.get().contains("DownSpeed").then({ - let rate = t.down_rate; move || { + let rate = torrent.get().map(|t| t.down_rate).unwrap_or(0); let speed_str = format_speed(rate); view! { {speed_str} } } }).into_any()} {move || visible_columns.get().contains("UpSpeed").then({ - let rate = t.up_rate; move || { + let rate = torrent.get().map(|t| t.up_rate).unwrap_or(0); let speed_str = format_speed(rate); view! { {speed_str} } } }).into_any()} {move || visible_columns.get().contains("ETA").then({ - let eta = t.eta; move || { + let eta = torrent.get().map(|t| t.eta).unwrap_or(0); let eta_str = format_duration(eta); view! { {eta_str} } } }).into_any()} {move || visible_columns.get().contains("AddedDate").then({ - let date = t.added_date; move || { + let date = torrent.get().map(|t| t.added_date).unwrap_or(0); let date_str = format_date(date); view! { {date_str} } } @@ -761,8 +764,8 @@ fn TorrentCard( {format!("{:.1}%", t.percent_complete)} div]:bg-destructive".to_string() } else { "".to_string() } + value=Signal::derive(move || torrent.get().map(|t| t.percent_complete).unwrap_or(0.0)) + class=move || if torrent.get().map(|t| t.status == shared::TorrentStatus::Error).unwrap_or(false) { "bg-destructive/20 [&>div]:bg-destructive".to_string() } else { "".to_string() } /> @@ -787,8 +790,8 @@ fn TorrentCard( - } - } + }.into_any() + }.into_any() } }.into_any()