visibility on upload endpoints

This commit is contained in:
Brandon Thomas
2024-04-27 12:09:47 -04:00
parent 68d24f2ec8
commit 3063436d18
6 changed files with 75 additions and 9 deletions
@@ -19,6 +19,9 @@ pub struct MediaFileUploadData {
// Optional: title of the scene (media_files' maybe_title)
pub title: Option<String>,
// Optional: visibility
pub visibility: Option<String>,
}
/// Pull common parts out of multipart media HTTP requests, typically for handling file uploads.
@@ -29,6 +32,7 @@ pub async fn drain_multipart_request(mut multipart_payload: Multipart) -> Anyhow
//let mut media_file_class = None;
let mut media_file_subtype = None;
let mut title = None;
let mut visibility = None;
while let Ok(Some(mut field)) = multipart_payload.try_next().await {
let mut field_name = None;
@@ -90,6 +94,13 @@ pub async fn drain_multipart_request(mut multipart_payload: Multipart) -> Anyhow
e
})?;
},
Some("visibility") => {
visibility = read_multipart_field_as_text(&mut field).await
.map_err(|e| {
warn!("Error reading title: {:}", &e);
e
})?;
},
_ => continue,
}
}
@@ -100,5 +111,6 @@ pub async fn drain_multipart_request(mut multipart_payload: Multipart) -> Anyhow
file_bytes,
media_file_subtype,
title,
visibility,
})
}
@@ -124,9 +124,19 @@ pub async fn upload_engine_asset_media_file_handler(
// ==================== UPLOAD METADATA ==================== //
let creator_set_visibility = maybe_user_session
.as_ref()
.map(|user_session| user_session.preferred_tts_result_visibility) // TODO: We need a new type of visibility control.
let creator_set_visibility = upload_media_request.visibility
.as_deref()
.map(|visibility| Visibility::from_str(visibility))
.transpose()
.map_err(|err| {
error!("Invalid visibility: {:?}", err);
MediaFileUploadError::BadInput("invalid visibility".to_string())
})?
.or_else(|| {
maybe_user_session
.as_ref()
.map(|user_session| user_session.preferred_tts_result_visibility)
})
.unwrap_or(Visibility::default());
// ==================== USER DATA ==================== //
@@ -16,6 +16,9 @@ pub struct MediaFileUploadData {
// Optional: title of the scene (media_files' maybe_title)
pub title: Option<String>,
// Optional: visibility
pub visibility: Option<String>,
}
/// Where the frontend tells us the file came from.
@@ -35,6 +38,7 @@ pub async fn drain_multipart_request(mut multipart_payload: Multipart) -> Anyhow
let mut file_name = None;
let mut media_source = None;
let mut title = None;
let mut visibility = None;
while let Ok(Some(mut field)) = multipart_payload.try_next().await {
let mut field_name = None;
@@ -77,6 +81,13 @@ pub async fn drain_multipart_request(mut multipart_payload: Multipart) -> Anyhow
e
})?;
},
Some("visibility") => {
visibility = read_multipart_field_as_text(&mut field).await
.map_err(|e| {
warn!("Error reading title: {:}", &e);
e
})?;
},
_ => continue,
}
}
@@ -99,5 +110,6 @@ pub async fn drain_multipart_request(mut multipart_payload: Multipart) -> Anyhow
file_bytes,
media_source,
title,
visibility,
})
}
@@ -119,9 +119,19 @@ pub async fn process_upload_media_file(
// ==================== PROCESS REQUEST ==================== //
let creator_set_visibility = maybe_user_session
.as_ref()
.map(|user_session| user_session.preferred_tts_result_visibility) // TODO: We need a new type of visibility control.
let creator_set_visibility = upload_media_request.visibility
.as_deref()
.map(|visibility| Visibility::from_str(visibility))
.transpose()
.map_err(|err| {
error!("Invalid visibility: {:?}", err);
MediaFileUploadError::BadInput("invalid visibility".to_string())
})?
.or_else(|| {
maybe_user_session
.as_ref()
.map(|user_session| user_session.preferred_tts_result_visibility)
})
.unwrap_or(Visibility::default());
let ip_address = get_request_ip(&http_request);
@@ -16,6 +16,9 @@ pub struct MediaFileUploadData {
// Optional: title of the scene (media_files' maybe_title)
pub title: Option<String>,
// Optional: visibility
pub visibility: Option<String>,
}
/// Where the frontend tells us the file came from.
@@ -35,6 +38,7 @@ pub async fn drain_multipart_request(mut multipart_payload: Multipart) -> Anyhow
let mut file_name = None;
let mut media_source = None;
let mut title = None;
let mut visibility = None;
while let Ok(Some(mut field)) = multipart_payload.try_next().await {
let mut field_name = None;
@@ -77,6 +81,13 @@ pub async fn drain_multipart_request(mut multipart_payload: Multipart) -> Anyhow
e
})?;
},
Some("visibility") => {
visibility = read_multipart_field_as_text(&mut field).await
.map_err(|e| {
warn!("Error reading title: {:}", &e);
e
})?;
},
_ => continue,
}
}
@@ -99,5 +110,6 @@ pub async fn drain_multipart_request(mut multipart_payload: Multipart) -> Anyhow
file_bytes,
media_source,
title,
visibility,
})
}
@@ -131,9 +131,19 @@ pub async fn upload_video_media_file_handler(
// ==================== UPLOAD METADATA ==================== //
let creator_set_visibility = maybe_user_session
.as_ref()
.map(|user_session| user_session.preferred_tts_result_visibility) // TODO: We need a new type of visibility control.
let creator_set_visibility = upload_media_request.visibility
.as_deref()
.map(|visibility| Visibility::from_str(visibility))
.transpose()
.map_err(|err| {
error!("Invalid visibility: {:?}", err);
MediaFileUploadError::BadInput("invalid visibility".to_string())
})?
.or_else(|| {
maybe_user_session
.as_ref()
.map(|user_session| user_session.preferred_tts_result_visibility)
})
.unwrap_or(Visibility::default());
let upload_type = match upload_media_request.media_source {