fix: resolve ownership (move) errors and type inference issues in torrent table component
Some checks failed
Build MIPS Binary / build (push) Failing after 34s

This commit is contained in:
spinline
2026-02-13 19:55:34 +03:00
parent 36b480f687
commit 0637e2746c

View File

@@ -577,15 +577,11 @@ fn TorrentRow(
{ {
let on_action = on_action.clone(); let on_action = on_action.clone();
move || { move || {
let t = torrent.get().unwrap();
let t_name = t.name.clone();
let is_active_selection = Memo::new(move |_| { let is_active_selection = Memo::new(move |_| {
let selected = store.selected_torrent.get(); let selected = store.selected_torrent.get();
selected.as_deref() == Some(stored_hash.get_value().as_str()) 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(); let h_for_menu = stored_hash.get_value();
view! { view! {
@@ -603,25 +599,29 @@ fn TorrentRow(
</DataTableCell> </DataTableCell>
{move || visible_columns.get().contains("Name").then({ {move || visible_columns.get().contains("Name").then({
move || view! { move || {
<DataTableCell class="font-medium truncate max-w-[200px] lg:max-w-md" attr:title=t_name_stored.get_value()> let name = torrent.get().map(|t| t.name).unwrap_or_default();
{t_name_stored.get_value()} view! {
</DataTableCell> <DataTableCell class="font-medium truncate max-w-[200px] lg:max-w-md" attr:title=name.clone()>
{name}
</DataTableCell>
}
} }
}).into_any()} }).into_any()}
{move || visible_columns.get().contains("Size").then({ {move || visible_columns.get().contains("Size").then({
let size_bytes = t.size;
move || { 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! { <DataTableCell class="font-mono text-xs text-muted-foreground whitespace-nowrap">{size_str}</DataTableCell> } view! { <DataTableCell class="font-mono text-xs text-muted-foreground whitespace-nowrap">{size_str}</DataTableCell> }
} }
}).into_any()} }).into_any()}
{move || visible_columns.get().contains("Progress").then({ {move || visible_columns.get().contains("Progress").then({
let percent = t.percent_complete;
let status = t.status.clone();
move || { move || {
let t = torrent.get().unwrap();
let percent = t.percent_complete;
let status = t.status.clone();
let class = if status == shared::TorrentStatus::Error { let class = if status == shared::TorrentStatus::Error {
"bg-destructive/20 [&>div]:bg-destructive".to_string() "bg-destructive/20 [&>div]:bg-destructive".to_string()
} else { } else {
@@ -642,48 +642,51 @@ fn TorrentRow(
}).into_any()} }).into_any()}
{move || visible_columns.get().contains("Status").then({ {move || visible_columns.get().contains("Status").then({
let status_text = format!("{:?}", t.status); move || {
let variant = match t.status { let t = torrent.get().unwrap();
shared::TorrentStatus::Seeding => BadgeVariant::Success, let status_text = format!("{:?}", t.status);
shared::TorrentStatus::Downloading => BadgeVariant::Info, let variant = match t.status {
shared::TorrentStatus::Paused => BadgeVariant::Warning, shared::TorrentStatus::Seeding => BadgeVariant::Success,
shared::TorrentStatus::Error => BadgeVariant::Destructive, shared::TorrentStatus::Downloading => BadgeVariant::Info,
_ => BadgeVariant::Secondary, shared::TorrentStatus::Paused => BadgeVariant::Warning,
}; shared::TorrentStatus::Error => BadgeVariant::Destructive,
move || view! { _ => BadgeVariant::Secondary,
<DataTableCell class="whitespace-nowrap"> };
<Badge variant=variant>{status_text.clone()}</Badge> view! {
</DataTableCell> <DataTableCell class="whitespace-nowrap">
<Badge variant=variant>{status_text}</Badge>
</DataTableCell>
}
} }
}).into_any()} }).into_any()}
{move || visible_columns.get().contains("DownSpeed").then({ {move || visible_columns.get().contains("DownSpeed").then({
let rate = t.down_rate;
move || { move || {
let rate = torrent.get().map(|t| t.down_rate).unwrap_or(0);
let speed_str = format_speed(rate); let speed_str = format_speed(rate);
view! { <DataTableCell class="text-right font-mono text-xs text-green-600 dark:text-green-500 whitespace-nowrap">{speed_str}</DataTableCell> } view! { <DataTableCell class="text-right font-mono text-xs text-green-600 dark:text-green-500 whitespace-nowrap">{speed_str}</DataTableCell> }
} }
}).into_any()} }).into_any()}
{move || visible_columns.get().contains("UpSpeed").then({ {move || visible_columns.get().contains("UpSpeed").then({
let rate = t.up_rate;
move || { move || {
let rate = torrent.get().map(|t| t.up_rate).unwrap_or(0);
let speed_str = format_speed(rate); let speed_str = format_speed(rate);
view! { <DataTableCell class="text-right font-mono text-xs text-blue-600 dark:text-blue-500 whitespace-nowrap">{speed_str}</DataTableCell> } view! { <DataTableCell class="text-right font-mono text-xs text-blue-600 dark:text-blue-500 whitespace-nowrap">{speed_str}</DataTableCell> }
} }
}).into_any()} }).into_any()}
{move || visible_columns.get().contains("ETA").then({ {move || visible_columns.get().contains("ETA").then({
let eta = t.eta;
move || { move || {
let eta = torrent.get().map(|t| t.eta).unwrap_or(0);
let eta_str = format_duration(eta); let eta_str = format_duration(eta);
view! { <DataTableCell class="text-right font-mono text-xs text-muted-foreground whitespace-nowrap">{eta_str}</DataTableCell> } view! { <DataTableCell class="text-right font-mono text-xs text-muted-foreground whitespace-nowrap">{eta_str}</DataTableCell> }
} }
}).into_any()} }).into_any()}
{move || visible_columns.get().contains("AddedDate").then({ {move || visible_columns.get().contains("AddedDate").then({
let date = t.added_date;
move || { move || {
let date = torrent.get().map(|t| t.added_date).unwrap_or(0);
let date_str = format_date(date); let date_str = format_date(date);
view! { <DataTableCell class="text-right font-mono text-xs text-muted-foreground whitespace-nowrap">{date_str}</DataTableCell> } view! { <DataTableCell class="text-right font-mono text-xs text-muted-foreground whitespace-nowrap">{date_str}</DataTableCell> }
} }
@@ -761,8 +764,8 @@ fn TorrentCard(
<span class="font-bold text-primary">{format!("{:.1}%", t.percent_complete)}</span> <span class="font-bold text-primary">{format!("{:.1}%", t.percent_complete)}</span>
</div> </div>
<Progress <Progress
value=Signal::derive(move || t.percent_complete) value=Signal::derive(move || torrent.get().map(|t| t.percent_complete).unwrap_or(0.0))
class=if t.status == shared::TorrentStatus::Error { "bg-destructive/20 [&>div]:bg-destructive".to_string() } else { "".to_string() } 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() }
/> />
</div> </div>
@@ -787,8 +790,8 @@ fn TorrentCard(
</div> </div>
</div> </div>
</TorrentContextMenu> </TorrentContextMenu>
} }.into_any()
} }.into_any()
} }
</Show> </Show>
}.into_any() }.into_any()