From edecf885b0c72c054fb54d698b5ca1ffc3aa3752 Mon Sep 17 00:00:00 2001 From: Lol3rrr Date: Fri, 1 Nov 2024 14:38:07 +0100 Subject: [PATCH] Improved the upload UI to give more feedback --- backend/src/api/demos.rs | 19 +++++++++++++------ frontend/src/lib.rs | 40 +++++++++++++++++++++++++++++++++++----- 2 files changed, 48 insertions(+), 11 deletions(-) diff --git a/backend/src/api/demos.rs b/backend/src/api/demos.rs index 101390c..3f50595 100644 --- a/backend/src/api/demos.rs +++ b/backend/src/api/demos.rs @@ -89,13 +89,13 @@ async fn upload( State(state): State>, session: crate::UserSession, mut form: axum::extract::Multipart, -) -> Result { +) -> Result<(), (axum::http::StatusCode, String)> { let steam_id = session .data() .steam_id .ok_or_else(|| (axum::http::StatusCode::UNAUTHORIZED, "Not logged in".into()))?; - tracing::info!("Upload for Session: {:?}", steam_id); + tracing::info!("Starting upload for Session: {:?}", steam_id); let file_field = loop { let field = match form.next_field().await { @@ -124,14 +124,19 @@ async fn upload( .upload( steam_id.to_string(), demo_id.clone(), - file_field.filter_map(|b| async { b.ok() }).boxed(), + file_field + .filter_map(|b| async { b.ok() }) + .inspect(|b| { + tracing::debug!("Received {} bytes", b.len()); + }) + .boxed(), ) .await .map_err(|e| (axum::http::StatusCode::INTERNAL_SERVER_ERROR, e))?; - let mut db_con = crate::db_connection().await; + tracing::info!("Saved to storage"); - // Turn all of this into a single transaction + let mut db_con = crate::db_connection().await; let db_trans_result = db_con .build_transaction() @@ -168,7 +173,9 @@ async fn upload( tracing::error!("Inserting data into db: {:?}", e); } - Ok(axum::response::Redirect::to("/")) + tracing::info!("Done with upload"); + + Ok(()) } #[tracing::instrument(skip(session))] diff --git a/frontend/src/lib.rs b/frontend/src/lib.rs index 1c08e03..ee7c964 100644 --- a/frontend/src/lib.rs +++ b/frontend/src/lib.rs @@ -29,7 +29,7 @@ pub fn upload_demo( left: 25vw; top: 15vh; width: 48vw; - height: 18vh; + min-height: 18vh; padding: 1vh 1vw; color: #f1f1f1; @@ -40,23 +40,53 @@ pub fn upload_demo( display: none; } - .container.shown { + .hidden { + display: none; + } + .shown { display: block; } }; + let uploading = RwSignal::new(false); + + let handle_resp: std::rc::Rc = std::rc::Rc::new(move |resp: &leptos::web_sys::Response| { + if resp.status() != 200 { + // TODO + // Display error somehow + return; + } + + uploading.set(false); + + // Remove the Upload popup + update_shown.set(DemoUploadStatus::Hidden); + + // TOOD + // Reload the demo list + }); + + let on_submit: std::rc::Rc = std::rc::Rc::new(move |_| { + uploading.set(true); + }); + view! {class = style,

Upload a Demo

-
-

Select File to upload

+ +

Select Demo to upload

- +
+ +

Uploading...

} }