support cancel requests

This commit is contained in:
Joe Ardent 2025-08-01 16:33:00 -07:00
parent f9b77a02fe
commit 98e2897438
4 changed files with 18 additions and 10 deletions

View file

@ -123,11 +123,9 @@ impl App {
TransferEvent::UploadRequest { id, request } => { TransferEvent::UploadRequest { id, request } => {
self.uploads.insert(id, request); self.uploads.insert(id, request);
} }
TransferEvent::Sent => {} TransferEvent::Cancelled(id) | TransferEvent::Received(id) => {
TransferEvent::Received(id) => {
self.uploads.remove(&id); self.uploads.remove(&id);
} }
_ => {}
} }
} }
} }

View file

@ -75,6 +75,8 @@ impl Widget for &mut App {
let [header_left, header_right] = header_layout.areas(top); let [header_left, header_right] = header_layout.areas(top);
let header_margin = Margin::new(1, 2); let header_margin = Margin::new(1, 2);
let subscreen_margin = Margin::new(2, 4);
let mode = self.screen.last().unwrap(); let mode = self.screen.last().unwrap();
let ups: Vec<_> = self.uploads.values().collect(); let ups: Vec<_> = self.uploads.values().collect();
match mode { match mode {
@ -84,7 +86,7 @@ impl Widget for &mut App {
let peers = PeersWidget { peers: &self.peers }; let peers = PeersWidget { peers: &self.peers };
peers.render(footer_right.inner(footer_margin), buf); peers.render(footer_right.inner(footer_margin), buf);
NetworkInfoWidget.render(footer_left.inner(footer_margin), buf); NetworkInfoWidget.render(footer_left.inner(footer_margin), buf);
uploads( upload_requests(
&ups, &ups,
&mut self.upload_state, &mut self.upload_state,
header_left.inner(header_margin), header_left.inner(header_margin),
@ -93,14 +95,14 @@ impl Widget for &mut App {
} }
CurrentScreen::Logging => { CurrentScreen::Logging => {
main_page(*mode, &LOGGING_MENU, area, buf); main_page(*mode, &LOGGING_MENU, area, buf);
logger(area.inner(Margin::new(2, 4)), buf); logger(area.inner(subscreen_margin), buf);
} }
CurrentScreen::Receiving => { CurrentScreen::Receiving => {
main_page(*mode, &UPLOADS_MENU, area, buf); main_page(*mode, &UPLOADS_MENU, area, buf);
uploads( upload_requests(
&ups, &ups,
&mut self.upload_state, &mut self.upload_state,
area.inner(Margin::new(2, 4)), area.inner(subscreen_margin),
buf, buf,
); );
} }
@ -142,7 +144,7 @@ fn main_page(screen: CurrentScreen, menu: &Line, area: Rect, buf: &mut Buffer) {
.render(area, buf); .render(area, buf);
} }
fn uploads( fn upload_requests(
requests: &[&JoecalUploadRequest], requests: &[&JoecalUploadRequest],
state: &mut TableState, state: &mut TableState,
area: Rect, area: Rect,

View file

@ -46,9 +46,8 @@ pub enum UploadDialog {
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
pub enum TransferEvent { pub enum TransferEvent {
Sent,
Received(Julid), Received(Julid),
Failed, Cancelled(Julid),
UploadRequest { UploadRequest {
id: Julid, id: Julid,
request: JoecalUploadRequest, request: JoecalUploadRequest,

View file

@ -348,7 +348,16 @@ pub async fn register_cancel(
Some(session) => session, Some(session) => session,
None => return StatusCode::BAD_REQUEST.into_response(), None => return StatusCode::BAD_REQUEST.into_response(),
}; };
debug!("got cancel request for {}", params.session_id);
session.status = SessionStatus::Cancelled; session.status = SessionStatus::Cancelled;
if let Ok(id) = Julid::from_str(&params.session_id)
&& let Err(e) = state.transfer_event_tx.send(TransferEvent::Cancelled(id))
{
error!("got error sending upload canceled event: {e:?}");
};
StatusCode::OK.into_response() StatusCode::OK.into_response()
} }