Description
Add a Resend action on History rows: reuse the file set from a past transfer and send it to a device picked fresh from the radar (not auto-sent back to the original peer). Works both directions — Sent (original source files) and Received (locally saved copies).
Plan
- Store source file paths on each
HistoryEntry (src/transfer/history.rs) — Sent: the sent paths; Received: the saved destination paths. Add as Option / #[serde(default)] so existing history.json stays loadable.
- History row
A = Resend → stage that entry's file paths.
- Jump to the radar in a "pick a device to send N files" mode (files-first, the inverse of the normal device→browser→send flow).
A on a peer → outbound::spawn(alias, base_url, me, staged_paths, …), reusing the existing send path (src/app/mod.rs:520) with no file-browser step.
- Contextual History footer hint:
A Resend · L1/R1 Tabs.
Notes
- Destination is picked live from the radar, so no need to persist the peer's device id/address — the stored
peer alias stays display-only.
- Source files moved/deleted since: disable Resend on that row (or skip missing) with a clear reason.
- Respect the one-transfer-at-a-time guard ("A send is already running").
- Current state: History tab is read-only (footer just
L1/R1 Tabs), entries lack file paths.
Description
Add a Resend action on History rows: reuse the file set from a past transfer and send it to a device picked fresh from the radar (not auto-sent back to the original peer). Works both directions —
Sent(original source files) andReceived(locally saved copies).Plan
HistoryEntry(src/transfer/history.rs) —Sent: the sent paths;Received: the saved destination paths. Add asOption/#[serde(default)]so existinghistory.jsonstays loadable.A= Resend → stage that entry's file paths.Aon a peer →outbound::spawn(alias, base_url, me, staged_paths, …), reusing the existing send path (src/app/mod.rs:520) with no file-browser step.A Resend · L1/R1 Tabs.Notes
peeralias stays display-only.L1/R1 Tabs), entries lack file paths.