diff --git a/src/editor/endpoints/video.rs b/src/editor/endpoints/video.rs index 2037eda..3c8a07f 100644 --- a/src/editor/endpoints/video.rs +++ b/src/editor/endpoints/video.rs @@ -65,6 +65,9 @@ pub enum VideoFormFeedback<'a> { release_date: Field, title: Field, unlisted: bool + }, + UploadPoster { + error: String } } @@ -246,6 +249,12 @@ pub fn edit_page( let poster_upload_button = upload_widget(&format!("/upload-video-poster/{path}"), "Upload Poster"); + let poster_upload_button_error = if let Some(VideoFormFeedback::UploadPoster { error }) = &form_feedback { + format!(r#"{error}"#) + } else { + String::new() + }; + let ( feedback_update, input_description, @@ -343,7 +352,10 @@ pub fn edit_page(

Poster Image

{poster} + {poster_upload_button} + {poster_upload_button_error} +
@@ -548,8 +560,18 @@ pub async fn upload_poster( if let Some(filename) = content_disposition.get_filename() { if !supported_image_extension(filename) { - // TODO: Implement without panicking - return something instead - panic!("Unsupported file extension in {filename}"); + match context.get_video(&path.path) { + Some(video) => { + let error = format!("Unsupported file extension in {filename}"); + let form_feedback = VideoFormFeedback::UploadPoster { error }; + let http_response = edit_page(&context, Some(form_feedback), &video); + return Ok(Either::Right(http_response)) + } + None => { + let http_response = not_found(&context, &format!("Video {} not found.", &path.path)); + return Ok(Either::Right(http_response)); + } + } } let original_filename = filename.to_string();