mirror of
https://github.com/storytold/artcraft.git
synced 2026-10-26 02:59:37 +00:00
visibility on upload endpoints
This commit is contained in:
+12
@@ -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,
|
||||
})
|
||||
}
|
||||
|
||||
+13
-3
@@ -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 ==================== //
|
||||
|
||||
+12
@@ -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,
|
||||
})
|
||||
}
|
||||
|
||||
+13
-3
@@ -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);
|
||||
|
||||
+12
@@ -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,
|
||||
})
|
||||
}
|
||||
|
||||
+13
-3
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user