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 } => {
self.uploads.insert(id, request);
}
TransferEvent::Sent => {}
TransferEvent::Received(id) => {
TransferEvent::Cancelled(id) | TransferEvent::Received(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_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,

View file

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

View file

@ -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(&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()
}