diff --git a/src/app/mod.rs b/src/app/mod.rs index fb8903b..64f479c 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -123,11 +123,9 @@ impl App { TransferEvent::UploadRequest { id, request } => { self.uploads.insert(id, request); } - TransferEvent::Sent => {} - TransferEvent::Received(id) => { + TransferEvent::Cancelled(id) | TransferEvent::Received(id) => { self.uploads.remove(&id); } - _ => {} } } } diff --git a/src/app/widgets.rs b/src/app/widgets.rs index 897c93b..c5fe79a 100644 --- a/src/app/widgets.rs +++ b/src/app/widgets.rs @@ -75,6 +75,8 @@ impl Widget for &mut App { let [header_left, header_right] = header_layout.areas(top); let header_margin = Margin::new(1, 2); + let subscreen_margin = Margin::new(2, 4); + let mode = self.screen.last().unwrap(); let ups: Vec<_> = self.uploads.values().collect(); match mode { @@ -84,7 +86,7 @@ impl Widget for &mut App { let peers = PeersWidget { peers: &self.peers }; peers.render(footer_right.inner(footer_margin), buf); NetworkInfoWidget.render(footer_left.inner(footer_margin), buf); - uploads( + upload_requests( &ups, &mut self.upload_state, header_left.inner(header_margin), @@ -93,14 +95,14 @@ impl Widget for &mut App { } CurrentScreen::Logging => { main_page(*mode, &LOGGING_MENU, area, buf); - logger(area.inner(Margin::new(2, 4)), buf); + logger(area.inner(subscreen_margin), buf); } CurrentScreen::Receiving => { main_page(*mode, &UPLOADS_MENU, area, buf); - uploads( + upload_requests( &ups, &mut self.upload_state, - area.inner(Margin::new(2, 4)), + area.inner(subscreen_margin), buf, ); } @@ -142,7 +144,7 @@ fn main_page(screen: CurrentScreen, menu: &Line, area: Rect, buf: &mut Buffer) { .render(area, buf); } -fn uploads( +fn upload_requests( requests: &[&JoecalUploadRequest], state: &mut TableState, area: Rect, diff --git a/src/lib.rs b/src/lib.rs index d8f90c1..0faaba5 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -46,9 +46,8 @@ pub enum UploadDialog { #[derive(Debug, Clone)] pub enum TransferEvent { - Sent, Received(Julid), - Failed, + Cancelled(Julid), UploadRequest { id: Julid, request: JoecalUploadRequest, diff --git a/src/transfer.rs b/src/transfer.rs index bfa9d21..bfaaefb 100644 --- a/src/transfer.rs +++ b/src/transfer.rs @@ -348,7 +348,16 @@ pub async fn register_cancel( Some(session) => session, None => return StatusCode::BAD_REQUEST.into_response(), }; + + debug!("got cancel request for {}", params.session_id); + session.status = SessionStatus::Cancelled; + if let Ok(id) = Julid::from_str(¶ms.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() }