add meda file default covers to responses

This commit is contained in:
Brandon Thomas committed 2024-04-07 11:59:23 -04:00
1 parent 05a20d44e1
commit 02ae3d81e5
8 files changed
+62 -13

No files matched your search

@@ -28,6 +28,7 @@ use users_component::endpoints::logout_handler::*;
use users_component::endpoints::session_info_handler::*;
use crate::http_server::common_responses::cover_image_details::*;
use crate::http_server::common_responses::media_file_default_cover::MediaFileDefaultCover;
use crate::http_server::common_responses::media_file_origin_details::*;
use crate::http_server::common_responses::media_file_social_meta_lite::MediaFileSocialMetaLight;
use crate::http_server::common_responses::pagination_cursors::PaginationCursors;
@@ -39,7 +40,6 @@ use crate::http_server::endpoints::inference_job::get_inference_job_status::*;
use crate::http_server::endpoints::inference_job::terminate_inference_job_handler::*;
use crate::http_server::endpoints::media_files::batch_get_media_files_handler::*;
use crate::http_server::endpoints::media_files::change_media_file_visibility_handler::*;
use crate::http_server::endpoints::tts::enqueue_infer_tts_handler::enqueue_infer_tts_handler::*;
use crate::http_server::endpoints::media_files::delete_media_file::*;
use crate::http_server::endpoints::media_files::get_media_file::*;
use crate::http_server::endpoints::media_files::list::list_featured_media_files::*;
@@ -50,6 +50,7 @@ use crate::http_server::endpoints::media_files::rename_media_file_handler::*;
use crate::http_server::endpoints::media_files::upload::upload_engine_asset::upload_engine_asset_media_file_handler::*;
use crate::http_server::endpoints::media_files::upload::upload_error::MediaFileUploadError;
use crate::http_server::endpoints::media_files::upload::upload_generic::upload_media_file_handler::*;
use crate::http_server::endpoints::tts::enqueue_infer_tts_handler::enqueue_infer_tts_handler::*;
use crate::http_server::endpoints::media_files::upload::upload_video::upload_video_media_file_handler::*;
use crate::http_server::endpoints::media_files::upsert_write::write_engine_asset::write_engine_asset_media_file_handler::*;
use crate::http_server::endpoints::media_files::upsert_write::write_error::MediaFileWriteError;
@@ -150,6 +151,7 @@ use crate::http_server::web_utils::response_success_helpers::*;
CoverImageDetails,
DefaultAvatarInfo,
DefaultCoverInfo,
MediaFileDefaultCover,
MediaFileModelDetails,
MediaFileOriginDetails,
MediaFileSocialMetaLight,
@@ -4,10 +4,11 @@ use tokens::tokens::media_files::MediaFileToken;
use tokens::tokens::users::UserToken;
const NUMBER_OF_IMAGES : u64 = 10;
// TODO: Check the model cover number of images
const NUMBER_OF_IMAGES : u64 = 8;
const NUMBER_OF_IMAGES_SALT_OFFSET : u8 = 5;
const NUMBER_OF_COLORS : u64 = 5;
const NUMBER_OF_COLORS : u64 = 8;
const NUMBER_OF_COLORS_SALT_OFFSET : u8 = 1;
#[derive(Clone, Serialize,ToSchema)]
@@ -17,10 +18,16 @@ pub struct MediaFileDefaultCover {
}
impl MediaFileDefaultCover {
/// Typical constructor
pub fn from_token(token: &MediaFileToken) -> Self {
Self::from_token_str(token.as_str())
}
/// For non-media file tokens (eg. emulated TTS results)
pub fn from_token_str(token: &str) -> Self {
Self {
image_index: hash(token.as_str(), NUMBER_OF_IMAGES, NUMBER_OF_IMAGES_SALT_OFFSET),
color_index: hash(token.as_str(), NUMBER_OF_COLORS, NUMBER_OF_COLORS_SALT_OFFSET),
image_index: hash(token, NUMBER_OF_IMAGES, NUMBER_OF_IMAGES_SALT_OFFSET),
color_index: hash(token, NUMBER_OF_COLORS, NUMBER_OF_COLORS_SALT_OFFSET),
}
}
}
@@ -44,10 +51,19 @@ mod tests {
#[test]
fn test() {
let token = MediaFileToken::new_from_str("foo");
let cover = MediaFileDefaultCover::from_token(&token);
assert_eq!(cover.color_index, 5);
assert_eq!(cover.image_index, 4);
let token = MediaFileToken::new_from_str("bar");
let cover = MediaFileDefaultCover::from_token(&token);
assert_eq!(cover.color_index, 5);
assert_eq!(cover.image_index, 2);
let token = MediaFileToken::new_from_str("asdf");
let cover = MediaFileDefaultCover::from_token(&token);
assert_eq!(cover.color_index, 3);
assert_eq!(cover.image_index, 16);
assert_eq!(cover.color_index, 0);
assert_eq!(cover.image_index, 0);
}
}
@@ -26,6 +26,7 @@ use tokens::tokens::media_files::MediaFileToken;
use tokens::tokens::model_weights::ModelWeightToken;
use tokens::tokens::prompts::PromptToken;
use users_component::common_responses::user_details_lite::UserDetailsLight;
use crate::http_server::common_responses::media_file_default_cover::MediaFileDefaultCover;
use crate::http_server::common_responses::simple_entity_stats::SimpleEntityStats;
use crate::http_server::web_utils::response_error_helpers::to_simple_json_error;
@@ -78,6 +79,9 @@ pub struct BatchMediaFileInfo {
/// URL to the media file
pub public_bucket_path: String,
// Default cover image if there is nothing else we can use as a cover and thumbnail.
pub default_cover: MediaFileDefaultCover,
//// Provenance Data
//pub origin_product: MediaFileOriginProductCategory,
//pub origin_category: MediaFileOriginCategory,
@@ -271,13 +275,14 @@ pub async fn batch_get_media_files_handler(
};
BatchMediaFileInfo {
token: result.token,
token: result.token.clone(),
media_type: result.media_type,
media_class: result.media_class,
maybe_media_subtype: result.maybe_media_subtype,
maybe_engine_extension,
maybe_batch_token: result.maybe_batch_token,
public_bucket_path,
default_cover: MediaFileDefaultCover::from_token(&result.token),
maybe_title: result.maybe_title,
maybe_text_transcript: result.maybe_text_transcript,
maybe_model_weight_info: match result.maybe_model_weights_token {
@@ -23,6 +23,7 @@ use tokens::tokens::media_files::MediaFileToken;
use tokens::tokens::model_weights::ModelWeightToken;
use tokens::tokens::prompts::PromptToken;
use users_component::common_responses::user_details_lite::UserDetailsLight;
use crate::http_server::common_responses::media_file_default_cover::MediaFileDefaultCover;
use crate::http_server::common_responses::simple_entity_stats::SimpleEntityStats;
use crate::http_server::web_utils::response_error_helpers::to_simple_json_error;
@@ -64,6 +65,9 @@ pub struct MediaFileInfo {
/// URL to the media file
pub public_bucket_path: String,
// Default cover image if there is nothing else we can use as a cover and thumbnail.
pub default_cover: MediaFileDefaultCover,
//// Provenance Data
//pub origin_product: MediaFileOriginProductCategory,
//pub origin_category: MediaFileOriginCategory,
@@ -287,13 +291,14 @@ async fn modern_media_file_lookup(
Ok(GetMediaFileSuccessResponse {
success: true,
media_file: MediaFileInfo {
token: result.token,
token: result.token.clone(),
media_type: result.media_type,
media_class: result.media_class,
maybe_media_subtype: result.maybe_media_subtype,
maybe_engine_extension,
maybe_batch_token: result.maybe_batch_token,
public_bucket_path,
default_cover: MediaFileDefaultCover::from_token(&result.token),
maybe_title: result.maybe_title,
maybe_text_transcript: result.maybe_text_transcript,
maybe_model_weight_info: match result.maybe_model_weights_token {
@@ -385,6 +390,7 @@ async fn emulate_media_file_with_legacy_tts_result_lookup(
maybe_engine_extension: None,
maybe_batch_token: None,
public_bucket_path,
default_cover: MediaFileDefaultCover::from_token_str(&result.tts_result_token),
maybe_model_weight_info: Some(GetMediaFileModelInfo {
// NB: These should be reasonable synthetic defaults for emulated TT2 results, even the "ModelWeightToken".
weight_token: ModelWeightToken::new_from_str(&result.tts_model_token),
@@ -16,6 +16,7 @@ use enums::by_table::media_files::media_file_type::MediaFileType;
use mysql_queries::queries::media_files::list::list_media_files_by_tokens::list_media_files_by_tokens;
use tokens::tokens::media_files::MediaFileToken;
use users_component::common_responses::user_details_lite::UserDetailsLight;
use crate::http_server::common_responses::media_file_default_cover::MediaFileDefaultCover;
use crate::http_server::common_responses::media_file_origin_details::MediaFileOriginDetails;
use crate::http_server::common_responses::simple_entity_stats::SimpleEntityStats;
@@ -38,6 +39,9 @@ pub struct MediaFile {
/// URL to the media file
pub public_bucket_path: String,
// Default cover image if there is nothing else we can use as a cover and thumbnail.
pub default_cover: MediaFileDefaultCover,
#[deprecated(note="Use MediaFileOriginDetails instead")]
pub origin_category: MediaFileOriginCategory,
@@ -157,9 +161,10 @@ pub async fn list_featured_media_files_handler(
.to_string();
MediaFile {
token: m.token,
token: m.token.clone(),
media_type: m.media_type,
public_bucket_path,
default_cover: MediaFileDefaultCover::from_token(&m.token),
origin: MediaFileOriginDetails::from_db_fields_str(
m.origin_category,
m.origin_product_category,
@@ -18,6 +18,7 @@ use enums::common::visibility::Visibility;
use mysql_queries::queries::media_files::list::list_media_files::{list_media_files, ListMediaFilesArgs};
use tokens::tokens::media_files::MediaFileToken;
use users_component::common_responses::user_details_lite::UserDetailsLight;
use crate::http_server::common_responses::media_file_default_cover::MediaFileDefaultCover;
use crate::http_server::common_responses::media_file_origin_details::MediaFileOriginDetails;
use crate::http_server::common_responses::pagination_cursors::PaginationCursors;
@@ -67,6 +68,9 @@ pub struct MediaFileListItem {
/// URL to the media file.
pub public_bucket_path: String,
// Default cover image if there is nothing else we can use as a cover and thumbnail.
pub default_cover: MediaFileDefaultCover,
pub maybe_creator: Option<UserDetailsLight>,
/// Statistics about the media file
@@ -239,6 +243,7 @@ pub async fn list_media_files_handler(
record.maybe_public_bucket_extension.as_deref())
.get_full_object_path_str()
.to_string(),
default_cover: MediaFileDefaultCover::from_token(&record.token),
maybe_creator: UserDetailsLight::from_optional_db_fields_owned(
record.maybe_creator_user_token,
record.maybe_creator_username,
@@ -19,6 +19,7 @@ use mysql_queries::queries::media_files::list::list_media_files_by_batch_token::
use mysql_queries::queries::media_files::list::list_media_files_for_user::{list_media_files_for_user, ListMediaFileForUserArgs};
use tokens::tokens::batch_generations::BatchGenerationToken;
use tokens::tokens::media_files::MediaFileToken;
use crate::http_server::common_responses::media_file_default_cover::MediaFileDefaultCover;
use crate::http_server::common_responses::media_file_origin_details::MediaFileOriginDetails;
use crate::http_server::common_responses::pagination_page::PaginationPage;
@@ -71,6 +72,9 @@ pub struct MediaFilesByBatchListItem {
/// URL to the media file.
pub public_bucket_path: String,
// Default cover image if there is nothing else we can use as a cover and thumbnail.
pub default_cover: MediaFileDefaultCover,
pub creator_set_visibility: Visibility,
/// The name or title of the media file (optional)
@@ -196,7 +200,7 @@ pub async fn list_media_files_by_batch_token_handler(
true
})
.map(|record| MediaFilesByBatchListItem {
token: record.token,
token: record.token.clone(),
media_type: record.media_type,
origin: MediaFileOriginDetails::from_db_fields_str(
record.origin_category,
@@ -214,6 +218,7 @@ pub async fn list_media_files_by_batch_token_handler(
record.maybe_public_bucket_extension.as_deref())
.get_full_object_path_str()
.to_string(),
default_cover: MediaFileDefaultCover::from_token(&record.token),
creator_set_visibility: record.creator_set_visibility,
maybe_title: record.maybe_title,
maybe_text_transcript: record.maybe_text_transcript,
@@ -19,6 +19,7 @@ use enums::common::view_as::ViewAs;
use enums::common::visibility::Visibility;
use mysql_queries::queries::media_files::list::list_media_files_for_user::{list_media_files_for_user, ListMediaFileForUserArgs};
use tokens::tokens::media_files::MediaFileToken;
use crate::http_server::common_responses::media_file_default_cover::MediaFileDefaultCover;
use crate::http_server::common_responses::media_file_origin_details::MediaFileOriginDetails;
use crate::http_server::common_responses::pagination_page::PaginationPage;
@@ -81,6 +82,9 @@ pub struct MediaFileForUserListItem {
/// URL to the media file.
pub public_bucket_path: String,
// Default cover image if there is nothing else we can use as a cover and thumbnail.
pub default_cover: MediaFileDefaultCover,
pub creator_set_visibility: Visibility,
/// The name or title of the media file (optional)
@@ -230,7 +234,7 @@ pub async fn list_media_files_for_user_handler(
true
})
.map(|record| MediaFileForUserListItem {
token: record.token,
token: record.token.clone(),
media_type: record.media_type,
media_class: record.media_class,
origin: MediaFileOriginDetails::from_db_fields_str(
@@ -249,6 +253,7 @@ pub async fn list_media_files_for_user_handler(
record.maybe_public_bucket_extension.as_deref())
.get_full_object_path_str()
.to_string(),
default_cover: MediaFileDefaultCover::from_token(&record.token),
creator_set_visibility: record.creator_set_visibility,
maybe_title: record.maybe_title,
maybe_text_transcript: record.maybe_text_transcript,