mirror of
https://github.com/storytold/artcraft.git
synced 2026-10-24 18:22:29 +00:00
media files: stop reading and writing deprecated fields and values (#1758)
This commit is contained in:
+12
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"db_name": "MySQL",
|
||||
"query": "\n INSERT INTO media_files\n SET\n token = ?,\n\n media_class = ?,\n media_type = ?,\n\n is_user_upload = ?,\n is_intermediate_system_file = ?,\n\n origin_category = ?, \n origin_product_category = ?, \n maybe_origin_model_type = ?, \n maybe_origin_model_token = ?, \n maybe_origin_filename = ?,\n\n maybe_batch_token = ?,\n\n maybe_mime_type = ?,\n file_size_bytes = ?,\n maybe_duration_millis = ?,\n maybe_audio_encoding = ?, \n maybe_video_encoding = ?, \n maybe_frame_width = ?, \n maybe_frame_height = ?,\n maybe_prompt_token = ?,\n checksum_sha2 = ?,\n \n maybe_engine_category = ?,\n\n maybe_title = ?,\n maybe_text_transcript = ?,\n\n maybe_scene_source_media_file_token = ?,\n\n public_bucket_directory_hash = ?, \n maybe_public_bucket_prefix = ?, \n maybe_public_bucket_extension = ?, \n\n maybe_creator_user_token = ?, \n maybe_creator_anonymous_visitor_token = ?, \n\n creator_ip_address = ?, \n creator_set_visibility = ?, \n\n maybe_creator_file_synthetic_id = ?, \n maybe_creator_category_synthetic_id = ?,\n\n extra_file_modification_info = ?,\n\n maybe_generation_provider = ?,\n\n platform_type = ?,\n\n maybe_cover_image_media_file_token = ?,\n\n maybe_mod_user_token = ?,\n is_generated_on_prem = ?,\n generated_by_worker = ?,\n generated_by_cluster = ?\n ",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
"Right": 41
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "1c74e9c2dcc9205e2c9fe60a6de0828208e497e68560246e588092bafd03eb59"
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"db_name": "MySQL",
|
||||
"query": "\nINSERT INTO media_files\nSET\n token = ?,\n\n media_class = ?,\n media_type = ?,\n\n origin_category = ?,\n origin_product_category = ?,\n\n maybe_engine_category = ?,\n maybe_animation_type = ?,\n\n maybe_mime_type = ?,\n file_size_bytes = ?,\n\n checksum_sha2 = ?,\n\n public_bucket_directory_hash = ?,\n maybe_public_bucket_prefix = ?,\n maybe_public_bucket_extension = ?,\n\n maybe_creator_user_token = ?,\n maybe_creator_anonymous_visitor_token = ?,\n creator_ip_address = ?,\n\n creator_set_visibility = ?,\n\n maybe_creator_file_synthetic_id = ?,\n maybe_creator_category_synthetic_id = ?,\n\n is_user_upload = TRUE,\n\n maybe_origin_model_type = NULL,\n maybe_origin_model_token = NULL\n\nON DUPLICATE KEY UPDATE\n\n media_class = ?,\n media_type = ?,\n\n origin_category = ?,\n origin_product_category = ?,\n\n maybe_engine_category = ?,\n maybe_animation_type = ?,\n\n maybe_mime_type = ?,\n file_size_bytes = ?,\n\n checksum_sha2 = ?,\n\n public_bucket_directory_hash = ?,\n maybe_public_bucket_prefix = ?,\n maybe_public_bucket_extension = ?,\n\n maybe_creator_user_token = ?,\n maybe_creator_anonymous_visitor_token = ?,\n creator_ip_address = ?,\n\n creator_set_visibility = ?,\n\n maybe_creator_file_synthetic_id = ?,\n maybe_creator_category_synthetic_id = ?,\n\n is_user_upload = TRUE,\n\n maybe_origin_model_type = NULL,\n maybe_origin_model_token = NULL\n ",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
"Right": 37
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "3af0a10ab0ed65daba9363605db4ddae9a60a2177369c58046abdee9ad1e91ee"
|
||||
}
|
||||
-12
@@ -1,12 +0,0 @@
|
||||
{
|
||||
"db_name": "MySQL",
|
||||
"query": "\nINSERT INTO media_files\nSET\n token = ?,\n\n media_class = ?,\n media_type = ?,\n\n origin_category = ?,\n origin_product_category = ?,\n\n maybe_engine_category = ?,\n maybe_animation_type = ?,\n\n maybe_media_subtype = ?,\n maybe_mime_type = ?,\n file_size_bytes = ?,\n\n checksum_sha2 = ?,\n\n public_bucket_directory_hash = ?,\n maybe_public_bucket_prefix = ?,\n maybe_public_bucket_extension = ?,\n\n maybe_creator_user_token = ?,\n maybe_creator_anonymous_visitor_token = ?,\n creator_ip_address = ?,\n\n creator_set_visibility = ?,\n\n maybe_creator_file_synthetic_id = ?,\n maybe_creator_category_synthetic_id = ?,\n\n is_user_upload = TRUE,\n\n maybe_origin_model_type = NULL,\n maybe_origin_model_token = NULL\n\nON DUPLICATE KEY UPDATE\n\n media_class = ?,\n media_type = ?,\n\n origin_category = ?,\n origin_product_category = ?,\n\n maybe_engine_category = ?,\n maybe_animation_type = ?,\n\n maybe_media_subtype = ?,\n maybe_mime_type = ?,\n file_size_bytes = ?,\n\n checksum_sha2 = ?,\n\n public_bucket_directory_hash = ?,\n maybe_public_bucket_prefix = ?,\n maybe_public_bucket_extension = ?,\n\n maybe_creator_user_token = ?,\n maybe_creator_anonymous_visitor_token = ?,\n creator_ip_address = ?,\n\n creator_set_visibility = ?,\n\n maybe_creator_file_synthetic_id = ?,\n maybe_creator_category_synthetic_id = ?,\n\n is_user_upload = TRUE,\n\n maybe_origin_model_type = NULL,\n maybe_origin_model_token = NULL\n ",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
"Right": 39
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "55706e6ac35be221b9d9c6e8b247812944c61941964bb53815d31dc30d506be8"
|
||||
}
|
||||
+43
-54
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"db_name": "MySQL",
|
||||
"query": "\nSELECT\n m.token as `token: tokens::tokens::media_files::MediaFileToken`,\n\n m.media_class as `media_class: enums::by_table::media_files::media_file_class::MediaFileClass`,\n m.media_type as `media_type: enums::by_table::media_files::media_file_type::MediaFileType`,\n\n m.maybe_engine_category as `maybe_engine_category: enums::by_table::media_files::media_file_engine_category::MediaFileEngineCategory`,\n m.maybe_animation_type as `maybe_animation_type: enums::by_table::media_files::media_file_animation_type::MediaFileAnimationType`,\n\n m.maybe_media_subtype as `maybe_media_subtype: enums::by_table::media_files::media_file_subtype::MediaFileSubtype`,\n\n m.maybe_mime_type,\n\n users.token as `maybe_creator_user_token: tokens::tokens::users::UserToken`,\n users.username as maybe_creator_username,\n users.display_name as maybe_creator_display_name,\n users.email_gravatar_hash as maybe_creator_gravatar_hash,\n\n m.maybe_creator_anonymous_visitor_token as `maybe_creator_anonymous_visitor_token: tokens::tokens::anonymous_visitor_tracking::AnonymousVisitorTrackingToken`,\n\n m.maybe_batch_token as `maybe_batch_token: tokens::tokens::batch_generations::BatchGenerationToken`,\n\n m.maybe_style_transfer_source_media_file_token as `maybe_style_transfer_source_media_file_token: tokens::tokens::media_files::MediaFileToken`,\n m.maybe_scene_source_media_file_token as `maybe_scene_source_media_file_token: tokens::tokens::media_files::MediaFileToken`,\n\n m.maybe_title,\n m.maybe_text_transcript,\n\n m.maybe_origin_filename,\n\n m.maybe_duration_millis,\n\n m.maybe_prompt_token as `maybe_prompt_token: tokens::tokens::prompts::PromptToken`,\n prompts.maybe_other_args as maybe_other_prompt_args,\n\n media_file_cover_image.public_bucket_directory_hash as maybe_file_cover_image_public_bucket_hash,\n media_file_cover_image.maybe_public_bucket_prefix as maybe_file_cover_image_public_bucket_prefix,\n media_file_cover_image.maybe_public_bucket_extension as maybe_file_cover_image_public_bucket_extension,\n\n m.creator_set_visibility as `creator_set_visibility: enums::common::visibility::Visibility`,\n\n m.is_user_upload,\n m.is_intermediate_system_file,\n\n model_weights.token as `maybe_model_weights_token: tokens::tokens::model_weights::ModelWeightToken`,\n model_weights.title as maybe_model_weights_title,\n model_weights.weights_type as `maybe_model_weights_type: enums::by_table::model_weights::weights_types::WeightsType`,\n model_weights.weights_category as `maybe_model_weights_category: enums::by_table::model_weights::weights_category::WeightsCategory`,\n\n model_weight_cover_image.public_bucket_directory_hash as maybe_model_cover_image_public_bucket_hash,\n model_weight_cover_image.maybe_public_bucket_prefix as maybe_model_cover_image_public_bucket_prefix,\n model_weight_cover_image.maybe_public_bucket_extension as maybe_model_cover_image_public_bucket_extension,\n\n model_weight_creator.token as `maybe_model_weight_creator_user_token: tokens::tokens::users::UserToken`,\n model_weight_creator.username as maybe_model_weight_creator_username,\n model_weight_creator.display_name as maybe_model_weight_creator_display_name,\n model_weight_creator.email_gravatar_hash as maybe_model_weight_creator_gravatar_hash,\n\n m.extra_file_modification_info,\n\n m.public_bucket_directory_hash,\n m.maybe_public_bucket_prefix,\n m.maybe_public_bucket_extension,\n\n entity_stats.ratings_positive_count as maybe_ratings_positive_count,\n entity_stats.ratings_negative_count as maybe_ratings_negative_count,\n entity_stats.bookmark_count as maybe_bookmark_count,\n\n featured_items.entity_token IS NOT NULL AS is_featured,\n\n m.created_at,\n m.updated_at\n\nFROM media_files AS m\nLEFT OUTER JOIN users\n ON m.maybe_creator_user_token = users.token\nLEFT OUTER JOIN model_weights\n ON m.maybe_origin_model_token = model_weights.token\nLEFT OUTER JOIN media_files as media_file_cover_image\n ON media_file_cover_image.token = m.maybe_cover_image_media_file_token\nLEFT OUTER JOIN media_files as model_weight_cover_image\n ON model_weight_cover_image.token = model_weights.maybe_cover_image_media_file_token\nLEFT OUTER JOIN users as model_weight_creator\n ON model_weight_creator.token = model_weights.creator_user_token\nLEFT OUTER JOIN entity_stats\n ON entity_stats.entity_type = \"media_file\"\n AND entity_stats.entity_token = m.token\nLEFT OUTER JOIN prompts\n ON prompts.token = m.maybe_prompt_token\nLEFT OUTER JOIN featured_items\n ON featured_items.entity_type = 'media_file'\n AND featured_items.entity_token = m.token\n AND featured_items.deleted_at IS NULL\nWHERE\n m.token = ?\n ",
|
||||
"query": "\nSELECT\n m.token as `token: tokens::tokens::media_files::MediaFileToken`,\n\n m.media_class as `media_class: enums::by_table::media_files::media_file_class::MediaFileClass`,\n m.media_type as `media_type: enums::by_table::media_files::media_file_type::MediaFileType`,\n\n m.maybe_engine_category as `maybe_engine_category: enums::by_table::media_files::media_file_engine_category::MediaFileEngineCategory`,\n m.maybe_animation_type as `maybe_animation_type: enums::by_table::media_files::media_file_animation_type::MediaFileAnimationType`,\n\n m.maybe_mime_type,\n\n users.token as `maybe_creator_user_token: tokens::tokens::users::UserToken`,\n users.username as maybe_creator_username,\n users.display_name as maybe_creator_display_name,\n users.email_gravatar_hash as maybe_creator_gravatar_hash,\n\n m.maybe_creator_anonymous_visitor_token as `maybe_creator_anonymous_visitor_token: tokens::tokens::anonymous_visitor_tracking::AnonymousVisitorTrackingToken`,\n\n m.maybe_batch_token as `maybe_batch_token: tokens::tokens::batch_generations::BatchGenerationToken`,\n\n m.maybe_style_transfer_source_media_file_token as `maybe_style_transfer_source_media_file_token: tokens::tokens::media_files::MediaFileToken`,\n m.maybe_scene_source_media_file_token as `maybe_scene_source_media_file_token: tokens::tokens::media_files::MediaFileToken`,\n\n m.maybe_title,\n m.maybe_text_transcript,\n\n m.maybe_origin_filename,\n\n m.maybe_duration_millis,\n\n m.maybe_prompt_token as `maybe_prompt_token: tokens::tokens::prompts::PromptToken`,\n prompts.maybe_other_args as maybe_other_prompt_args,\n\n media_file_cover_image.public_bucket_directory_hash as maybe_file_cover_image_public_bucket_hash,\n media_file_cover_image.maybe_public_bucket_prefix as maybe_file_cover_image_public_bucket_prefix,\n media_file_cover_image.maybe_public_bucket_extension as maybe_file_cover_image_public_bucket_extension,\n\n m.creator_set_visibility as `creator_set_visibility: enums::common::visibility::Visibility`,\n\n m.is_user_upload,\n m.is_intermediate_system_file,\n\n model_weights.token as `maybe_model_weights_token: tokens::tokens::model_weights::ModelWeightToken`,\n model_weights.title as maybe_model_weights_title,\n model_weights.weights_type as `maybe_model_weights_type: enums::by_table::model_weights::weights_types::WeightsType`,\n model_weights.weights_category as `maybe_model_weights_category: enums::by_table::model_weights::weights_category::WeightsCategory`,\n\n model_weight_cover_image.public_bucket_directory_hash as maybe_model_cover_image_public_bucket_hash,\n model_weight_cover_image.maybe_public_bucket_prefix as maybe_model_cover_image_public_bucket_prefix,\n model_weight_cover_image.maybe_public_bucket_extension as maybe_model_cover_image_public_bucket_extension,\n\n model_weight_creator.token as `maybe_model_weight_creator_user_token: tokens::tokens::users::UserToken`,\n model_weight_creator.username as maybe_model_weight_creator_username,\n model_weight_creator.display_name as maybe_model_weight_creator_display_name,\n model_weight_creator.email_gravatar_hash as maybe_model_weight_creator_gravatar_hash,\n\n m.extra_file_modification_info,\n\n m.public_bucket_directory_hash,\n m.maybe_public_bucket_prefix,\n m.maybe_public_bucket_extension,\n\n entity_stats.ratings_positive_count as maybe_ratings_positive_count,\n entity_stats.ratings_negative_count as maybe_ratings_negative_count,\n entity_stats.bookmark_count as maybe_bookmark_count,\n\n featured_items.entity_token IS NOT NULL AS is_featured,\n\n m.created_at,\n m.updated_at\n\nFROM media_files AS m\nLEFT OUTER JOIN users\n ON m.maybe_creator_user_token = users.token\nLEFT OUTER JOIN model_weights\n ON m.maybe_origin_model_token = model_weights.token\nLEFT OUTER JOIN media_files as media_file_cover_image\n ON media_file_cover_image.token = m.maybe_cover_image_media_file_token\nLEFT OUTER JOIN media_files as model_weight_cover_image\n ON model_weight_cover_image.token = model_weights.maybe_cover_image_media_file_token\nLEFT OUTER JOIN users as model_weight_creator\n ON model_weight_creator.token = model_weights.creator_user_token\nLEFT OUTER JOIN entity_stats\n ON entity_stats.entity_type = \"media_file\"\n AND entity_stats.entity_token = m.token\nLEFT OUTER JOIN prompts\n ON prompts.token = m.maybe_prompt_token\nLEFT OUTER JOIN featured_items\n ON featured_items.entity_type = 'media_file'\n AND featured_items.entity_token = m.token\n AND featured_items.deleted_at IS NULL\nWHERE\n m.token = ?\n ",
|
||||
"describe": {
|
||||
"columns": [
|
||||
{
|
||||
@@ -55,16 +55,6 @@
|
||||
},
|
||||
{
|
||||
"ordinal": 5,
|
||||
"name": "maybe_media_subtype: enums::by_table::media_files::media_file_subtype::MediaFileSubtype",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
"flags": "BINARY",
|
||||
"char_set": 224,
|
||||
"max_size": 128
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 6,
|
||||
"name": "maybe_mime_type",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -74,7 +64,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 7,
|
||||
"ordinal": 6,
|
||||
"name": "maybe_creator_user_token: tokens::tokens::users::UserToken",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -84,7 +74,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 8,
|
||||
"ordinal": 7,
|
||||
"name": "maybe_creator_username",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -94,7 +84,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 9,
|
||||
"ordinal": 8,
|
||||
"name": "maybe_creator_display_name",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -104,7 +94,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 10,
|
||||
"ordinal": 9,
|
||||
"name": "maybe_creator_gravatar_hash",
|
||||
"type_info": {
|
||||
"type": "String",
|
||||
@@ -114,7 +104,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 11,
|
||||
"ordinal": 10,
|
||||
"name": "maybe_creator_anonymous_visitor_token: tokens::tokens::anonymous_visitor_tracking::AnonymousVisitorTrackingToken",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -124,7 +114,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 12,
|
||||
"ordinal": 11,
|
||||
"name": "maybe_batch_token: tokens::tokens::batch_generations::BatchGenerationToken",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -134,7 +124,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 13,
|
||||
"ordinal": 12,
|
||||
"name": "maybe_style_transfer_source_media_file_token: tokens::tokens::media_files::MediaFileToken",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -144,7 +134,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 14,
|
||||
"ordinal": 13,
|
||||
"name": "maybe_scene_source_media_file_token: tokens::tokens::media_files::MediaFileToken",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -154,7 +144,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 15,
|
||||
"ordinal": 14,
|
||||
"name": "maybe_title",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -164,7 +154,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 16,
|
||||
"ordinal": 15,
|
||||
"name": "maybe_text_transcript",
|
||||
"type_info": {
|
||||
"type": "Blob",
|
||||
@@ -174,7 +164,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 17,
|
||||
"ordinal": 16,
|
||||
"name": "maybe_origin_filename",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -184,7 +174,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 18,
|
||||
"ordinal": 17,
|
||||
"name": "maybe_duration_millis",
|
||||
"type_info": {
|
||||
"type": "Long",
|
||||
@@ -194,7 +184,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 19,
|
||||
"ordinal": 18,
|
||||
"name": "maybe_prompt_token: tokens::tokens::prompts::PromptToken",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -204,7 +194,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 20,
|
||||
"ordinal": 19,
|
||||
"name": "maybe_other_prompt_args",
|
||||
"type_info": {
|
||||
"type": "Blob",
|
||||
@@ -214,7 +204,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 21,
|
||||
"ordinal": 20,
|
||||
"name": "maybe_file_cover_image_public_bucket_hash",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -224,7 +214,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 22,
|
||||
"ordinal": 21,
|
||||
"name": "maybe_file_cover_image_public_bucket_prefix",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -234,7 +224,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 23,
|
||||
"ordinal": 22,
|
||||
"name": "maybe_file_cover_image_public_bucket_extension",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -244,7 +234,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 24,
|
||||
"ordinal": 23,
|
||||
"name": "creator_set_visibility: enums::common::visibility::Visibility",
|
||||
"type_info": {
|
||||
"type": "String",
|
||||
@@ -254,7 +244,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 25,
|
||||
"ordinal": 24,
|
||||
"name": "is_user_upload",
|
||||
"type_info": {
|
||||
"type": "Tiny",
|
||||
@@ -264,7 +254,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 26,
|
||||
"ordinal": 25,
|
||||
"name": "is_intermediate_system_file",
|
||||
"type_info": {
|
||||
"type": "Tiny",
|
||||
@@ -274,7 +264,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 27,
|
||||
"ordinal": 26,
|
||||
"name": "maybe_model_weights_token: tokens::tokens::model_weights::ModelWeightToken",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -284,7 +274,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 28,
|
||||
"ordinal": 27,
|
||||
"name": "maybe_model_weights_title",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -294,7 +284,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 29,
|
||||
"ordinal": 28,
|
||||
"name": "maybe_model_weights_type: enums::by_table::model_weights::weights_types::WeightsType",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -304,7 +294,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 30,
|
||||
"ordinal": 29,
|
||||
"name": "maybe_model_weights_category: enums::by_table::model_weights::weights_category::WeightsCategory",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -314,7 +304,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 31,
|
||||
"ordinal": 30,
|
||||
"name": "maybe_model_cover_image_public_bucket_hash",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -324,7 +314,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 32,
|
||||
"ordinal": 31,
|
||||
"name": "maybe_model_cover_image_public_bucket_prefix",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -334,7 +324,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 33,
|
||||
"ordinal": 32,
|
||||
"name": "maybe_model_cover_image_public_bucket_extension",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -344,7 +334,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 34,
|
||||
"ordinal": 33,
|
||||
"name": "maybe_model_weight_creator_user_token: tokens::tokens::users::UserToken",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -354,7 +344,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 35,
|
||||
"ordinal": 34,
|
||||
"name": "maybe_model_weight_creator_username",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -364,7 +354,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 36,
|
||||
"ordinal": 35,
|
||||
"name": "maybe_model_weight_creator_display_name",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -374,7 +364,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 37,
|
||||
"ordinal": 36,
|
||||
"name": "maybe_model_weight_creator_gravatar_hash",
|
||||
"type_info": {
|
||||
"type": "String",
|
||||
@@ -384,7 +374,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 38,
|
||||
"ordinal": 37,
|
||||
"name": "extra_file_modification_info",
|
||||
"type_info": {
|
||||
"type": "Blob",
|
||||
@@ -394,7 +384,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 39,
|
||||
"ordinal": 38,
|
||||
"name": "public_bucket_directory_hash",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -404,7 +394,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 40,
|
||||
"ordinal": 39,
|
||||
"name": "maybe_public_bucket_prefix",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -414,7 +404,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 41,
|
||||
"ordinal": 40,
|
||||
"name": "maybe_public_bucket_extension",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -424,7 +414,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 42,
|
||||
"ordinal": 41,
|
||||
"name": "maybe_ratings_positive_count",
|
||||
"type_info": {
|
||||
"type": "Long",
|
||||
@@ -434,7 +424,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 43,
|
||||
"ordinal": 42,
|
||||
"name": "maybe_ratings_negative_count",
|
||||
"type_info": {
|
||||
"type": "Long",
|
||||
@@ -444,7 +434,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 44,
|
||||
"ordinal": 43,
|
||||
"name": "maybe_bookmark_count",
|
||||
"type_info": {
|
||||
"type": "Long",
|
||||
@@ -454,7 +444,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 45,
|
||||
"ordinal": 44,
|
||||
"name": "is_featured",
|
||||
"type_info": {
|
||||
"type": "LongLong",
|
||||
@@ -464,7 +454,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 46,
|
||||
"ordinal": 45,
|
||||
"name": "created_at",
|
||||
"type_info": {
|
||||
"type": "Timestamp",
|
||||
@@ -474,7 +464,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 47,
|
||||
"ordinal": 46,
|
||||
"name": "updated_at",
|
||||
"type_info": {
|
||||
"type": "Timestamp",
|
||||
@@ -511,7 +501,6 @@
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
@@ -538,5 +527,5 @@
|
||||
false
|
||||
]
|
||||
},
|
||||
"hash": "f6c37066ab3e508050e81cf3bea38cc708b05c5c59ba1c322dcfb775e4b9e7a6"
|
||||
"hash": "784ca68c6cb61d481b605bfe6ee3248a5b44499038c71b57fc9ea6c4722d170f"
|
||||
}
|
||||
+43
-54
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"db_name": "MySQL",
|
||||
"query": "\nSELECT\n m.token as `token: tokens::tokens::media_files::MediaFileToken`,\n\n m.media_class as `media_class: enums::by_table::media_files::media_file_class::MediaFileClass`,\n m.media_type as `media_type: enums::by_table::media_files::media_file_type::MediaFileType`,\n\n m.maybe_engine_category as `maybe_engine_category: enums::by_table::media_files::media_file_engine_category::MediaFileEngineCategory`,\n m.maybe_animation_type as `maybe_animation_type: enums::by_table::media_files::media_file_animation_type::MediaFileAnimationType`,\n\n m.maybe_media_subtype as `maybe_media_subtype: enums::by_table::media_files::media_file_subtype::MediaFileSubtype`,\n\n m.maybe_mime_type,\n\n users.token as `maybe_creator_user_token: tokens::tokens::users::UserToken`,\n users.username as maybe_creator_username,\n users.display_name as maybe_creator_display_name,\n users.email_gravatar_hash as maybe_creator_gravatar_hash,\n\n m.maybe_creator_anonymous_visitor_token as `maybe_creator_anonymous_visitor_token: tokens::tokens::anonymous_visitor_tracking::AnonymousVisitorTrackingToken`,\n\n m.maybe_batch_token as `maybe_batch_token: tokens::tokens::batch_generations::BatchGenerationToken`,\n\n m.maybe_style_transfer_source_media_file_token as `maybe_style_transfer_source_media_file_token: tokens::tokens::media_files::MediaFileToken`,\n m.maybe_scene_source_media_file_token as `maybe_scene_source_media_file_token: tokens::tokens::media_files::MediaFileToken`,\n\n\n m.maybe_title,\n m.maybe_text_transcript,\n\n m.maybe_origin_filename,\n\n m.maybe_duration_millis,\n\n m.maybe_prompt_token as `maybe_prompt_token: tokens::tokens::prompts::PromptToken`,\n prompts.maybe_other_args as maybe_other_prompt_args,\n\n media_file_cover_image.public_bucket_directory_hash as maybe_file_cover_image_public_bucket_hash,\n media_file_cover_image.maybe_public_bucket_prefix as maybe_file_cover_image_public_bucket_prefix,\n media_file_cover_image.maybe_public_bucket_extension as maybe_file_cover_image_public_bucket_extension,\n\n m.creator_set_visibility as `creator_set_visibility: enums::common::visibility::Visibility`,\n\n m.is_user_upload,\n m.is_intermediate_system_file,\n\n model_weights.token as `maybe_model_weights_token: tokens::tokens::model_weights::ModelWeightToken`,\n model_weights.title as maybe_model_weights_title,\n model_weights.weights_type as `maybe_model_weights_type: enums::by_table::model_weights::weights_types::WeightsType`,\n model_weights.weights_category as `maybe_model_weights_category: enums::by_table::model_weights::weights_category::WeightsCategory`,\n\n model_weight_cover_image.public_bucket_directory_hash as maybe_model_cover_image_public_bucket_hash,\n model_weight_cover_image.maybe_public_bucket_prefix as maybe_model_cover_image_public_bucket_prefix,\n model_weight_cover_image.maybe_public_bucket_extension as maybe_model_cover_image_public_bucket_extension,\n\n model_weight_creator.token as `maybe_model_weight_creator_user_token: tokens::tokens::users::UserToken`,\n model_weight_creator.username as maybe_model_weight_creator_username,\n model_weight_creator.display_name as maybe_model_weight_creator_display_name,\n model_weight_creator.email_gravatar_hash as maybe_model_weight_creator_gravatar_hash,\n\n m.extra_file_modification_info,\n\n m.public_bucket_directory_hash,\n m.maybe_public_bucket_prefix,\n m.maybe_public_bucket_extension,\n\n entity_stats.ratings_positive_count as maybe_ratings_positive_count,\n entity_stats.ratings_negative_count as maybe_ratings_negative_count,\n entity_stats.bookmark_count as maybe_bookmark_count,\n\n featured_items.entity_token IS NOT NULL AS is_featured,\n\n m.created_at,\n m.updated_at\n\nFROM media_files AS m\nLEFT OUTER JOIN users\n ON m.maybe_creator_user_token = users.token\nLEFT OUTER JOIN model_weights\n ON m.maybe_origin_model_token = model_weights.token\nLEFT OUTER JOIN media_files as media_file_cover_image\n ON media_file_cover_image.token = m.maybe_cover_image_media_file_token\nLEFT OUTER JOIN media_files as model_weight_cover_image\n ON model_weight_cover_image.token = model_weights.maybe_cover_image_media_file_token\nLEFT OUTER JOIN users as model_weight_creator\n ON model_weight_creator.token = model_weights.creator_user_token\nLEFT OUTER JOIN entity_stats\n ON entity_stats.entity_type = \"media_file\"\n AND entity_stats.entity_token = m.token\nLEFT OUTER JOIN prompts\n ON prompts.token = m.maybe_prompt_token\nLEFT OUTER JOIN featured_items\n ON featured_items.entity_type = 'media_file'\n AND featured_items.entity_token = m.token\n AND featured_items.deleted_at IS NULL\nWHERE\n m.token = ?\n AND m.user_deleted_at IS NULL\n AND m.mod_deleted_at IS NULL\n ",
|
||||
"query": "\nSELECT\n m.token as `token: tokens::tokens::media_files::MediaFileToken`,\n\n m.media_class as `media_class: enums::by_table::media_files::media_file_class::MediaFileClass`,\n m.media_type as `media_type: enums::by_table::media_files::media_file_type::MediaFileType`,\n\n m.maybe_engine_category as `maybe_engine_category: enums::by_table::media_files::media_file_engine_category::MediaFileEngineCategory`,\n m.maybe_animation_type as `maybe_animation_type: enums::by_table::media_files::media_file_animation_type::MediaFileAnimationType`,\n\n m.maybe_mime_type,\n\n users.token as `maybe_creator_user_token: tokens::tokens::users::UserToken`,\n users.username as maybe_creator_username,\n users.display_name as maybe_creator_display_name,\n users.email_gravatar_hash as maybe_creator_gravatar_hash,\n\n m.maybe_creator_anonymous_visitor_token as `maybe_creator_anonymous_visitor_token: tokens::tokens::anonymous_visitor_tracking::AnonymousVisitorTrackingToken`,\n\n m.maybe_batch_token as `maybe_batch_token: tokens::tokens::batch_generations::BatchGenerationToken`,\n\n m.maybe_style_transfer_source_media_file_token as `maybe_style_transfer_source_media_file_token: tokens::tokens::media_files::MediaFileToken`,\n m.maybe_scene_source_media_file_token as `maybe_scene_source_media_file_token: tokens::tokens::media_files::MediaFileToken`,\n\n\n m.maybe_title,\n m.maybe_text_transcript,\n\n m.maybe_origin_filename,\n\n m.maybe_duration_millis,\n\n m.maybe_prompt_token as `maybe_prompt_token: tokens::tokens::prompts::PromptToken`,\n prompts.maybe_other_args as maybe_other_prompt_args,\n\n media_file_cover_image.public_bucket_directory_hash as maybe_file_cover_image_public_bucket_hash,\n media_file_cover_image.maybe_public_bucket_prefix as maybe_file_cover_image_public_bucket_prefix,\n media_file_cover_image.maybe_public_bucket_extension as maybe_file_cover_image_public_bucket_extension,\n\n m.creator_set_visibility as `creator_set_visibility: enums::common::visibility::Visibility`,\n\n m.is_user_upload,\n m.is_intermediate_system_file,\n\n model_weights.token as `maybe_model_weights_token: tokens::tokens::model_weights::ModelWeightToken`,\n model_weights.title as maybe_model_weights_title,\n model_weights.weights_type as `maybe_model_weights_type: enums::by_table::model_weights::weights_types::WeightsType`,\n model_weights.weights_category as `maybe_model_weights_category: enums::by_table::model_weights::weights_category::WeightsCategory`,\n\n model_weight_cover_image.public_bucket_directory_hash as maybe_model_cover_image_public_bucket_hash,\n model_weight_cover_image.maybe_public_bucket_prefix as maybe_model_cover_image_public_bucket_prefix,\n model_weight_cover_image.maybe_public_bucket_extension as maybe_model_cover_image_public_bucket_extension,\n\n model_weight_creator.token as `maybe_model_weight_creator_user_token: tokens::tokens::users::UserToken`,\n model_weight_creator.username as maybe_model_weight_creator_username,\n model_weight_creator.display_name as maybe_model_weight_creator_display_name,\n model_weight_creator.email_gravatar_hash as maybe_model_weight_creator_gravatar_hash,\n\n m.extra_file_modification_info,\n\n m.public_bucket_directory_hash,\n m.maybe_public_bucket_prefix,\n m.maybe_public_bucket_extension,\n\n entity_stats.ratings_positive_count as maybe_ratings_positive_count,\n entity_stats.ratings_negative_count as maybe_ratings_negative_count,\n entity_stats.bookmark_count as maybe_bookmark_count,\n\n featured_items.entity_token IS NOT NULL AS is_featured,\n\n m.created_at,\n m.updated_at\n\nFROM media_files AS m\nLEFT OUTER JOIN users\n ON m.maybe_creator_user_token = users.token\nLEFT OUTER JOIN model_weights\n ON m.maybe_origin_model_token = model_weights.token\nLEFT OUTER JOIN media_files as media_file_cover_image\n ON media_file_cover_image.token = m.maybe_cover_image_media_file_token\nLEFT OUTER JOIN media_files as model_weight_cover_image\n ON model_weight_cover_image.token = model_weights.maybe_cover_image_media_file_token\nLEFT OUTER JOIN users as model_weight_creator\n ON model_weight_creator.token = model_weights.creator_user_token\nLEFT OUTER JOIN entity_stats\n ON entity_stats.entity_type = \"media_file\"\n AND entity_stats.entity_token = m.token\nLEFT OUTER JOIN prompts\n ON prompts.token = m.maybe_prompt_token\nLEFT OUTER JOIN featured_items\n ON featured_items.entity_type = 'media_file'\n AND featured_items.entity_token = m.token\n AND featured_items.deleted_at IS NULL\nWHERE\n m.token = ?\n AND m.user_deleted_at IS NULL\n AND m.mod_deleted_at IS NULL\n ",
|
||||
"describe": {
|
||||
"columns": [
|
||||
{
|
||||
@@ -55,16 +55,6 @@
|
||||
},
|
||||
{
|
||||
"ordinal": 5,
|
||||
"name": "maybe_media_subtype: enums::by_table::media_files::media_file_subtype::MediaFileSubtype",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
"flags": "BINARY",
|
||||
"char_set": 224,
|
||||
"max_size": 128
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 6,
|
||||
"name": "maybe_mime_type",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -74,7 +64,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 7,
|
||||
"ordinal": 6,
|
||||
"name": "maybe_creator_user_token: tokens::tokens::users::UserToken",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -84,7 +74,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 8,
|
||||
"ordinal": 7,
|
||||
"name": "maybe_creator_username",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -94,7 +84,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 9,
|
||||
"ordinal": 8,
|
||||
"name": "maybe_creator_display_name",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -104,7 +94,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 10,
|
||||
"ordinal": 9,
|
||||
"name": "maybe_creator_gravatar_hash",
|
||||
"type_info": {
|
||||
"type": "String",
|
||||
@@ -114,7 +104,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 11,
|
||||
"ordinal": 10,
|
||||
"name": "maybe_creator_anonymous_visitor_token: tokens::tokens::anonymous_visitor_tracking::AnonymousVisitorTrackingToken",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -124,7 +114,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 12,
|
||||
"ordinal": 11,
|
||||
"name": "maybe_batch_token: tokens::tokens::batch_generations::BatchGenerationToken",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -134,7 +124,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 13,
|
||||
"ordinal": 12,
|
||||
"name": "maybe_style_transfer_source_media_file_token: tokens::tokens::media_files::MediaFileToken",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -144,7 +134,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 14,
|
||||
"ordinal": 13,
|
||||
"name": "maybe_scene_source_media_file_token: tokens::tokens::media_files::MediaFileToken",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -154,7 +144,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 15,
|
||||
"ordinal": 14,
|
||||
"name": "maybe_title",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -164,7 +154,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 16,
|
||||
"ordinal": 15,
|
||||
"name": "maybe_text_transcript",
|
||||
"type_info": {
|
||||
"type": "Blob",
|
||||
@@ -174,7 +164,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 17,
|
||||
"ordinal": 16,
|
||||
"name": "maybe_origin_filename",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -184,7 +174,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 18,
|
||||
"ordinal": 17,
|
||||
"name": "maybe_duration_millis",
|
||||
"type_info": {
|
||||
"type": "Long",
|
||||
@@ -194,7 +184,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 19,
|
||||
"ordinal": 18,
|
||||
"name": "maybe_prompt_token: tokens::tokens::prompts::PromptToken",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -204,7 +194,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 20,
|
||||
"ordinal": 19,
|
||||
"name": "maybe_other_prompt_args",
|
||||
"type_info": {
|
||||
"type": "Blob",
|
||||
@@ -214,7 +204,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 21,
|
||||
"ordinal": 20,
|
||||
"name": "maybe_file_cover_image_public_bucket_hash",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -224,7 +214,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 22,
|
||||
"ordinal": 21,
|
||||
"name": "maybe_file_cover_image_public_bucket_prefix",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -234,7 +224,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 23,
|
||||
"ordinal": 22,
|
||||
"name": "maybe_file_cover_image_public_bucket_extension",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -244,7 +234,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 24,
|
||||
"ordinal": 23,
|
||||
"name": "creator_set_visibility: enums::common::visibility::Visibility",
|
||||
"type_info": {
|
||||
"type": "String",
|
||||
@@ -254,7 +244,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 25,
|
||||
"ordinal": 24,
|
||||
"name": "is_user_upload",
|
||||
"type_info": {
|
||||
"type": "Tiny",
|
||||
@@ -264,7 +254,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 26,
|
||||
"ordinal": 25,
|
||||
"name": "is_intermediate_system_file",
|
||||
"type_info": {
|
||||
"type": "Tiny",
|
||||
@@ -274,7 +264,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 27,
|
||||
"ordinal": 26,
|
||||
"name": "maybe_model_weights_token: tokens::tokens::model_weights::ModelWeightToken",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -284,7 +274,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 28,
|
||||
"ordinal": 27,
|
||||
"name": "maybe_model_weights_title",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -294,7 +284,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 29,
|
||||
"ordinal": 28,
|
||||
"name": "maybe_model_weights_type: enums::by_table::model_weights::weights_types::WeightsType",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -304,7 +294,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 30,
|
||||
"ordinal": 29,
|
||||
"name": "maybe_model_weights_category: enums::by_table::model_weights::weights_category::WeightsCategory",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -314,7 +304,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 31,
|
||||
"ordinal": 30,
|
||||
"name": "maybe_model_cover_image_public_bucket_hash",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -324,7 +314,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 32,
|
||||
"ordinal": 31,
|
||||
"name": "maybe_model_cover_image_public_bucket_prefix",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -334,7 +324,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 33,
|
||||
"ordinal": 32,
|
||||
"name": "maybe_model_cover_image_public_bucket_extension",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -344,7 +334,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 34,
|
||||
"ordinal": 33,
|
||||
"name": "maybe_model_weight_creator_user_token: tokens::tokens::users::UserToken",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -354,7 +344,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 35,
|
||||
"ordinal": 34,
|
||||
"name": "maybe_model_weight_creator_username",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -364,7 +354,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 36,
|
||||
"ordinal": 35,
|
||||
"name": "maybe_model_weight_creator_display_name",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -374,7 +364,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 37,
|
||||
"ordinal": 36,
|
||||
"name": "maybe_model_weight_creator_gravatar_hash",
|
||||
"type_info": {
|
||||
"type": "String",
|
||||
@@ -384,7 +374,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 38,
|
||||
"ordinal": 37,
|
||||
"name": "extra_file_modification_info",
|
||||
"type_info": {
|
||||
"type": "Blob",
|
||||
@@ -394,7 +384,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 39,
|
||||
"ordinal": 38,
|
||||
"name": "public_bucket_directory_hash",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -404,7 +394,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 40,
|
||||
"ordinal": 39,
|
||||
"name": "maybe_public_bucket_prefix",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -414,7 +404,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 41,
|
||||
"ordinal": 40,
|
||||
"name": "maybe_public_bucket_extension",
|
||||
"type_info": {
|
||||
"type": "VarString",
|
||||
@@ -424,7 +414,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 42,
|
||||
"ordinal": 41,
|
||||
"name": "maybe_ratings_positive_count",
|
||||
"type_info": {
|
||||
"type": "Long",
|
||||
@@ -434,7 +424,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 43,
|
||||
"ordinal": 42,
|
||||
"name": "maybe_ratings_negative_count",
|
||||
"type_info": {
|
||||
"type": "Long",
|
||||
@@ -444,7 +434,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 44,
|
||||
"ordinal": 43,
|
||||
"name": "maybe_bookmark_count",
|
||||
"type_info": {
|
||||
"type": "Long",
|
||||
@@ -454,7 +444,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 45,
|
||||
"ordinal": 44,
|
||||
"name": "is_featured",
|
||||
"type_info": {
|
||||
"type": "LongLong",
|
||||
@@ -464,7 +454,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 46,
|
||||
"ordinal": 45,
|
||||
"name": "created_at",
|
||||
"type_info": {
|
||||
"type": "Timestamp",
|
||||
@@ -474,7 +464,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"ordinal": 47,
|
||||
"ordinal": 46,
|
||||
"name": "updated_at",
|
||||
"type_info": {
|
||||
"type": "Timestamp",
|
||||
@@ -511,7 +501,6 @@
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
@@ -538,5 +527,5 @@
|
||||
false
|
||||
]
|
||||
},
|
||||
"hash": "57fa22e6cd4e82b801605c96eac21babd78df3df361b3be566993b78a46efef2"
|
||||
"hash": "ad217c26087b2ebed6f2c9f79b16ead63727107dfce3366f3c1d12bc9d565c2c"
|
||||
}
|
||||
-12
@@ -1,12 +0,0 @@
|
||||
{
|
||||
"db_name": "MySQL",
|
||||
"query": "\n INSERT INTO media_files\n SET\n token = ?,\n\n media_class = ?,\n media_type = ?,\n\n is_user_upload = ?,\n is_intermediate_system_file = ?,\n\n origin_category = ?, \n origin_product_category = ?, \n maybe_origin_model_type = ?, \n maybe_origin_model_token = ?, \n maybe_origin_filename = ?,\n\n is_batch_generated = ?,\n maybe_batch_token = ?,\n\n maybe_mime_type = ?,\n file_size_bytes = ?,\n maybe_duration_millis = ?,\n maybe_audio_encoding = ?, \n maybe_video_encoding = ?, \n maybe_frame_width = ?, \n maybe_frame_height = ?,\n maybe_prompt_token = ?,\n checksum_sha2 = ?,\n \n maybe_engine_category = ?,\n\n maybe_title = ?,\n maybe_text_transcript = ?,\n\n maybe_scene_source_media_file_token = ?,\n\n public_bucket_directory_hash = ?, \n maybe_public_bucket_prefix = ?, \n maybe_public_bucket_extension = ?, \n\n maybe_creator_user_token = ?, \n maybe_creator_anonymous_visitor_token = ?, \n\n creator_ip_address = ?, \n creator_set_visibility = ?, \n\n maybe_creator_file_synthetic_id = ?, \n maybe_creator_category_synthetic_id = ?,\n\n extra_file_modification_info = ?,\n\n maybe_generation_provider = ?,\n\n platform_type = ?,\n\n maybe_cover_image_media_file_token = ?,\n\n maybe_mod_user_token = ?,\n is_generated_on_prem = ?,\n generated_by_worker = ?,\n generated_by_cluster = ?\n ",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
"Right": 42
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "ad2ffbd9f48e52678a5c61817bec043bf1df4033463e5c5a18468c04af391e6a"
|
||||
}
|
||||
-5
@@ -76,11 +76,6 @@ pub struct MediaFileInfo {
|
||||
/// this describes the animation regime used or supported.
|
||||
pub maybe_animation_type: Option<MediaFileAnimationType>,
|
||||
|
||||
// /// If the media file has a subtype, we'll report it.
|
||||
// /// This is mostly used for Bevy engine files.
|
||||
// #[deprecated(note="This was for the Bevy engine. Do not use.")]
|
||||
// pub maybe_media_subtype: Option<MediaFileSubtype>,
|
||||
|
||||
// /// Extension for the engine to load over remote:// URLs.
|
||||
// #[deprecated(note="This was for the Bevy engine. Do not use.")]
|
||||
// pub maybe_engine_extension: Option<String>,
|
||||
|
||||
@@ -26,7 +26,7 @@ pub async fn seed_test_videos(mysql_pool: &Pool<MySql>, user_token: UserToken) -
|
||||
let media1 = InsertArgs {
|
||||
pool: &mysql_pool,
|
||||
maybe_use_apriori_media_token: Some(&model_weight_token1),
|
||||
media_file_type: MediaFileType::Video,
|
||||
media_file_type: MediaFileType::Mp4,
|
||||
maybe_mime_type: Some(&*metadata1.mimetype),
|
||||
file_size_bytes: metadata1.file_size_bytes,
|
||||
sha256_checksum: &metadata1.sha256_checksum,
|
||||
|
||||
@@ -29,16 +29,16 @@ pub async fn seed_media_files(mysql_pool: &Pool<MySql>, maybe_bucket_clients: Op
|
||||
// Delete the records if you want to re-seed.
|
||||
let media_files = [
|
||||
// Audio
|
||||
(HANASHI_USER_TOKEN, "m_21jxt406aattq2cna1xtgf5m4mjyyr", MediaFileType::Audio, "media/audio/voice-samples/biden.wav"),
|
||||
(HANASHI_USER_TOKEN, "m_cxzabpxf88h10rshqraksxbqmhs41h", MediaFileType::Audio, "media/audio/voice-samples/brandon1.wav"),
|
||||
(HANASHI_USER_TOKEN, "m_sq2vhrrmmbr079afk21543aa2jg53g", MediaFileType::Audio, "media/audio/voice-samples/brandon2.wav"),
|
||||
(HANASHI_USER_TOKEN, "m_s61a8g3jnddr3xdg3gctsjxxk9jwja", MediaFileType::Audio, "media/audio/voice-samples/elon.wav"),
|
||||
(HANASHI_USER_TOKEN, "m_e59fh75g76pvebx4qe4r4aymd93q30", MediaFileType::Audio, "media/audio/voice-samples/goku.wav"),
|
||||
(HANASHI_USER_TOKEN, "m_ttq0ym8ht4v0z87zqz27fhadp0743c", MediaFileType::Audio, "media/audio/voice-samples/hillary.wav"),
|
||||
(HANASHI_USER_TOKEN, "m_300bv6f141hv553fjf287p5gb76k37", MediaFileType::Audio, "media/audio/voice-samples/mario_impersonator.wav"),
|
||||
(HANASHI_USER_TOKEN, "m_rd1ey2jem8a37r3vna2h9mht6zevs5", MediaFileType::Audio, "media/audio/voice-samples/rick.wav"),
|
||||
(HANASHI_USER_TOKEN, "m_8n5epqfvs2vh60khap0s3ezem4epkc", MediaFileType::Audio, "media/audio/voice-samples/trump.wav"),
|
||||
(HANASHI_USER_TOKEN, "m_g6dpwcpq51e6kvmpbbkdvgxfan9k1k", MediaFileType::Audio, "media/audio/voice-samples/trump_tts.wav"),
|
||||
(HANASHI_USER_TOKEN, "m_21jxt406aattq2cna1xtgf5m4mjyyr", MediaFileType::Wav, "media/audio/voice-samples/biden.wav"),
|
||||
(HANASHI_USER_TOKEN, "m_cxzabpxf88h10rshqraksxbqmhs41h", MediaFileType::Wav, "media/audio/voice-samples/brandon1.wav"),
|
||||
(HANASHI_USER_TOKEN, "m_sq2vhrrmmbr079afk21543aa2jg53g", MediaFileType::Wav, "media/audio/voice-samples/brandon2.wav"),
|
||||
(HANASHI_USER_TOKEN, "m_s61a8g3jnddr3xdg3gctsjxxk9jwja", MediaFileType::Wav, "media/audio/voice-samples/elon.wav"),
|
||||
(HANASHI_USER_TOKEN, "m_e59fh75g76pvebx4qe4r4aymd93q30", MediaFileType::Wav, "media/audio/voice-samples/goku.wav"),
|
||||
(HANASHI_USER_TOKEN, "m_ttq0ym8ht4v0z87zqz27fhadp0743c", MediaFileType::Wav, "media/audio/voice-samples/hillary.wav"),
|
||||
(HANASHI_USER_TOKEN, "m_300bv6f141hv553fjf287p5gb76k37", MediaFileType::Wav, "media/audio/voice-samples/mario_impersonator.wav"),
|
||||
(HANASHI_USER_TOKEN, "m_rd1ey2jem8a37r3vna2h9mht6zevs5", MediaFileType::Wav, "media/audio/voice-samples/rick.wav"),
|
||||
(HANASHI_USER_TOKEN, "m_8n5epqfvs2vh60khap0s3ezem4epkc", MediaFileType::Wav, "media/audio/voice-samples/trump.wav"),
|
||||
(HANASHI_USER_TOKEN, "m_g6dpwcpq51e6kvmpbbkdvgxfan9k1k", MediaFileType::Wav, "media/audio/voice-samples/trump_tts.wav"),
|
||||
// Images
|
||||
(HANASHI_USER_TOKEN, "m_cn5t6ywm9k1ge9qzzxst5krc5tm08m", MediaFileType::Jpg, "media/image/face-animator-inputs/bill.jpg"),
|
||||
(HANASHI_USER_TOKEN, "m_nf9xebrr8hd1bxkfy7src5k8nv2dzy", MediaFileType::Jpg, "media/image/face-animator-inputs/elon.jpg"),
|
||||
@@ -48,18 +48,18 @@ pub async fn seed_media_files(mysql_pool: &Pool<MySql>, maybe_bucket_clients: Op
|
||||
(HANASHI_USER_TOKEN, "m_we7mnzbd76g4yn19dm6m53er0pjvew", MediaFileType::Png, "media/image/face-animator-inputs/san.png"),
|
||||
(HANASHI_USER_TOKEN, "m_wahwz92nxxfg0x42dw9fdrhwq30yk0", MediaFileType::Jpg, "media/image/face-animator-inputs/zelda.jpg"),
|
||||
// Video
|
||||
(HANASHI_USER_TOKEN, "m_gedarcfdkxx3zv8zz2wmwsnc1r8jbp", MediaFileType::Video, "media/video/storyteller-studio-renders/girl-rotating-room.mp4"),
|
||||
(HANASHI_USER_TOKEN, "m_3s74yyd4jwrjdp17yx1694n29jv5gr", MediaFileType::Video, "media/video/storyteller-studio-renders/hanashi-run.mp4"),
|
||||
(HANASHI_USER_TOKEN, "m_p6d64gm1wawz25bmdahfded3366b9f", MediaFileType::Video, "media/video/storyteller-studio-renders/mocap-kiss.mp4"),
|
||||
(HANASHI_USER_TOKEN, "m_szp2c77z6je965k44vc22xn9432a88", MediaFileType::Video, "media/video/storyteller-studio-renders/rotating-mocap-girl.mp4"),
|
||||
(HANASHI_USER_TOKEN, "m_mdwspz81zymw9hvmb1d3jm830t25xe", MediaFileType::Video, "media/video/storyteller-studio-renders/rotating-mocap-m.mp4"),
|
||||
(HANASHI_USER_TOKEN, "m_prcs6xkm8phs5y4a2dfwemwjy6n6z3", MediaFileType::Video, "media/video/storyteller-studio-renders/rotating-run-girl.mp4"),
|
||||
(HANASHI_USER_TOKEN, "m_5j889dzw08vn9pbrscx1sncff43ekp", MediaFileType::Video, "media/video/storyteller-studio-renders/rotating-run-jww.mp4"),
|
||||
(HANASHI_USER_TOKEN, "m_fwm2w6wbssez274ayz6x8ta0h1a9qp", MediaFileType::Video, "media/video/storyteller-studio-renders/rotating-run-pascal.mp4"),
|
||||
(HANASHI_USER_TOKEN, "m_yqqkrt2srep6a35xg78114jn9epwg1", MediaFileType::Video, "media/video/storyteller-studio-renders/rotating-run-pop.mp4"),
|
||||
(HANASHI_USER_TOKEN, "m_m4r043kez14pm6vaamsecpz8fafh7g", MediaFileType::Video, "media/video/video-style-transfer/man-explaining.mp4"),
|
||||
(HANASHI_USER_TOKEN, "m_81gq3hygqvrahg6ncxbtcpjap4f9nv", MediaFileType::Video, "media/video/video-style-transfer/woman-gradient-background.mp4"),
|
||||
(HANASHI_USER_TOKEN, "m_dp9ykj3yasjx69g2fx2bpd26wwjz0f", MediaFileType::Video, "media/video/video-style-transfer/woman-red-hair.mp4"),
|
||||
(HANASHI_USER_TOKEN, "m_gedarcfdkxx3zv8zz2wmwsnc1r8jbp", MediaFileType::Mp4, "media/video/storyteller-studio-renders/girl-rotating-room.mp4"),
|
||||
(HANASHI_USER_TOKEN, "m_3s74yyd4jwrjdp17yx1694n29jv5gr", MediaFileType::Mp4, "media/video/storyteller-studio-renders/hanashi-run.mp4"),
|
||||
(HANASHI_USER_TOKEN, "m_p6d64gm1wawz25bmdahfded3366b9f", MediaFileType::Mp4, "media/video/storyteller-studio-renders/mocap-kiss.mp4"),
|
||||
(HANASHI_USER_TOKEN, "m_szp2c77z6je965k44vc22xn9432a88", MediaFileType::Mp4, "media/video/storyteller-studio-renders/rotating-mocap-girl.mp4"),
|
||||
(HANASHI_USER_TOKEN, "m_mdwspz81zymw9hvmb1d3jm830t25xe", MediaFileType::Mp4, "media/video/storyteller-studio-renders/rotating-mocap-m.mp4"),
|
||||
(HANASHI_USER_TOKEN, "m_prcs6xkm8phs5y4a2dfwemwjy6n6z3", MediaFileType::Mp4, "media/video/storyteller-studio-renders/rotating-run-girl.mp4"),
|
||||
(HANASHI_USER_TOKEN, "m_5j889dzw08vn9pbrscx1sncff43ekp", MediaFileType::Mp4, "media/video/storyteller-studio-renders/rotating-run-jww.mp4"),
|
||||
(HANASHI_USER_TOKEN, "m_fwm2w6wbssez274ayz6x8ta0h1a9qp", MediaFileType::Mp4, "media/video/storyteller-studio-renders/rotating-run-pascal.mp4"),
|
||||
(HANASHI_USER_TOKEN, "m_yqqkrt2srep6a35xg78114jn9epwg1", MediaFileType::Mp4, "media/video/storyteller-studio-renders/rotating-run-pop.mp4"),
|
||||
(HANASHI_USER_TOKEN, "m_m4r043kez14pm6vaamsecpz8fafh7g", MediaFileType::Mp4, "media/video/video-style-transfer/man-explaining.mp4"),
|
||||
(HANASHI_USER_TOKEN, "m_81gq3hygqvrahg6ncxbtcpjap4f9nv", MediaFileType::Mp4, "media/video/video-style-transfer/woman-gradient-background.mp4"),
|
||||
(HANASHI_USER_TOKEN, "m_dp9ykj3yasjx69g2fx2bpd26wwjz0f", MediaFileType::Mp4, "media/video/video-style-transfer/woman-red-hair.mp4"),
|
||||
];
|
||||
|
||||
let seed_tool_data_root = get_seed_tool_data_root();
|
||||
|
||||
@@ -73,14 +73,14 @@ pub async fn main() -> AnyhowResult<()> {
|
||||
match mimetype {
|
||||
Some("audio/wav") |
|
||||
Some("audio/x-wav") => {
|
||||
media_file_type = MediaFileType::Video;
|
||||
media_file_type = MediaFileType::Wav;
|
||||
maybe_mime_type = Some("audio/wav");
|
||||
maybe_public_bucket_prefix = Some("dev_upload_");
|
||||
maybe_public_bucket_extension = Some(".wav");
|
||||
|
||||
}
|
||||
Some("video/mp4") => {
|
||||
media_file_type = MediaFileType::Video;
|
||||
media_file_type = MediaFileType::Mp4;
|
||||
maybe_mime_type = mimetype;
|
||||
maybe_public_bucket_prefix = Some("dev_upload_");
|
||||
maybe_public_bucket_extension = Some(".mp4");
|
||||
|
||||
-1
@@ -105,7 +105,6 @@ async fn create_document_from_record(elasticsearch: &Elasticsearch, record: Medi
|
||||
|
||||
media_class: record.media_class,
|
||||
media_type: record.media_type,
|
||||
maybe_media_subtype: record.maybe_media_subtype,
|
||||
maybe_engine_category: record.maybe_engine_category,
|
||||
maybe_animation_type: record.maybe_animation_type,
|
||||
|
||||
|
||||
-1
@@ -264,7 +264,6 @@ async fn upload_grok_video(
|
||||
// TODO: media_files.maybe_generation_provider
|
||||
// TODO: media_files.maybe_origin_model_type
|
||||
// TODO: media_files.maybe_origin_model_token (sref?)
|
||||
// TODO: media_files.is_batch_generated
|
||||
// TODO: media_files.maybe_batch_token
|
||||
// TODO: media_files.is_user_upload
|
||||
|
||||
|
||||
-1
@@ -294,7 +294,6 @@ async fn upload_midjourney_batch(
|
||||
// TODO: media_files.maybe_generation_provider
|
||||
// TODO: media_files.maybe_origin_model_type
|
||||
// TODO: media_files.maybe_origin_model_token (sref?)
|
||||
// TODO: media_files.is_batch_generated
|
||||
// TODO: media_files.maybe_batch_token
|
||||
// TODO: media_files.is_user_upload
|
||||
|
||||
|
||||
-1
@@ -254,7 +254,6 @@ async fn upload_spz_splat(
|
||||
// TODO: media_files.maybe_generation_provider
|
||||
// TODO: media_files.maybe_origin_model_type
|
||||
// TODO: media_files.maybe_origin_model_token (sref?)
|
||||
// TODO: media_files.is_batch_generated
|
||||
// TODO: media_files.maybe_batch_token
|
||||
// TODO: media_files.is_user_upload
|
||||
|
||||
|
||||
@@ -6,7 +6,6 @@ use serde::{Deserialize, Serialize};
|
||||
use enums::by_table::media_files::media_file_animation_type::MediaFileAnimationType;
|
||||
use enums::by_table::media_files::media_file_class::MediaFileClass;
|
||||
use enums::by_table::media_files::media_file_engine_category::MediaFileEngineCategory;
|
||||
use enums::by_table::media_files::media_file_subtype::MediaFileSubtype;
|
||||
use enums::by_table::media_files::media_file_type::MediaFileType;
|
||||
use enums::common::visibility::Visibility;
|
||||
use tokens::tokens::media_files::MediaFileToken;
|
||||
@@ -25,7 +24,6 @@ pub struct MediaFileDocument {
|
||||
|
||||
pub media_class: MediaFileClass,
|
||||
pub media_type: MediaFileType,
|
||||
pub maybe_media_subtype: Option<MediaFileSubtype>,
|
||||
pub maybe_engine_category: Option<MediaFileEngineCategory>,
|
||||
|
||||
pub maybe_mime_type: Option<String>,
|
||||
|
||||
-4
@@ -117,8 +117,6 @@ pub async fn insert_media_file_generic(
|
||||
let mut maybe_creator_file_synthetic_id : Option<u64> = None;
|
||||
let mut maybe_creator_category_synthetic_id : Option<u64> = None;
|
||||
|
||||
let is_batch_generated = args.maybe_batch_token.is_some();
|
||||
|
||||
let mut maybe_generation_provider_str = None;
|
||||
let mut is_intermediate_system_file = args.is_intermediate_system_file;
|
||||
let mut is_user_upload = args.is_user_upload;
|
||||
@@ -172,7 +170,6 @@ pub async fn insert_media_file_generic(
|
||||
maybe_origin_model_token = ?,
|
||||
maybe_origin_filename = ?,
|
||||
|
||||
is_batch_generated = ?,
|
||||
maybe_batch_token = ?,
|
||||
|
||||
maybe_mime_type = ?,
|
||||
@@ -232,7 +229,6 @@ pub async fn insert_media_file_generic(
|
||||
args.maybe_origin_model_token.map(|t| t.to_string()),
|
||||
args.maybe_origin_filename,
|
||||
|
||||
is_batch_generated,
|
||||
args.maybe_batch_token.map(|t| t.as_str()),
|
||||
|
||||
args.maybe_mime_type,
|
||||
|
||||
+5
-1
@@ -82,6 +82,10 @@ pub async fn insert_media_file_from_comfy_ui(args: InsertArgs<'_>) -> AnyhowResu
|
||||
|
||||
let maybe_model_type = args.maybe_model_type.map(|m| m.to_str());
|
||||
|
||||
let media_type = args.maybe_mime_type
|
||||
.and_then(MediaFileType::try_from_mime_type)
|
||||
.unwrap_or(MediaFileType::Video); // Coarse fallback for unrecognized mimes
|
||||
|
||||
let record_id = {
|
||||
let query_result = sqlx::query!(
|
||||
r#"
|
||||
@@ -129,7 +133,7 @@ SET
|
||||
result_token.as_str(),
|
||||
|
||||
MediaFileClass::Video.to_str(),
|
||||
MediaFileType::Video.to_str(), // TODO(bt,2024-04-30): This needs to become "mp4" after a frontend migration
|
||||
media_type.to_str(),
|
||||
|
||||
ORIGIN_CATEGORY.to_str(),
|
||||
product.to_str(),
|
||||
|
||||
+5
-1
@@ -69,6 +69,10 @@ pub async fn insert_media_file_from_f5_tts(
|
||||
const ORIGIN_CATEGORY : MediaFileOriginCategory = MediaFileOriginCategory::Inference;
|
||||
const ORIGIN_PRODUCT_CATEGORY : MediaFileOriginProductCategory = MediaFileOriginProductCategory::TextToSpeech;
|
||||
|
||||
let media_type = args.maybe_mime_type
|
||||
.and_then(MediaFileType::try_from_mime_type)
|
||||
.unwrap_or(MediaFileType::Audio); // Coarse fallback for unrecognized mimes
|
||||
|
||||
let record_id = {
|
||||
let query_result = sqlx::query!(
|
||||
r#"
|
||||
@@ -116,7 +120,7 @@ SET
|
||||
result_token.as_str(),
|
||||
|
||||
MediaFileClass::Audio.to_str(),
|
||||
MediaFileType::Audio.to_str(), // TODO(bt,2024-04-30): This needs to become "wav" after a frontend migration
|
||||
media_type.to_str(),
|
||||
|
||||
ORIGIN_CATEGORY.to_str(),
|
||||
ORIGIN_PRODUCT_CATEGORY.to_str(),
|
||||
|
||||
+5
-1
@@ -68,6 +68,10 @@ pub async fn insert_media_file_from_face_animation(
|
||||
const ORIGIN_PRODUCT_CATEGORY : MediaFileOriginProductCategory = MediaFileOriginProductCategory::FaceAnimator;
|
||||
const ORIGIN_MODEL_TYPE : MediaFileOriginModelType = MediaFileOriginModelType::SadTalker;
|
||||
|
||||
let media_type = args.maybe_mime_type
|
||||
.and_then(MediaFileType::try_from_mime_type)
|
||||
.unwrap_or(MediaFileType::Video); // Coarse fallback for unrecognized mimes
|
||||
|
||||
let record_id = {
|
||||
let query_result = sqlx::query!(
|
||||
r#"
|
||||
@@ -108,7 +112,7 @@ SET
|
||||
result_token.as_str(),
|
||||
|
||||
MediaFileClass::Video.to_str(),
|
||||
MediaFileType::Video.to_str(),
|
||||
media_type.to_str(),
|
||||
|
||||
ORIGIN_CATEGORY.to_str(),
|
||||
ORIGIN_PRODUCT_CATEGORY.to_str(),
|
||||
|
||||
+4
-2
@@ -66,7 +66,9 @@ pub async fn insert_media_file_from_rerender(
|
||||
const ORIGIN_CATEGORY : MediaFileOriginCategory = MediaFileOriginCategory::Inference;
|
||||
const ORIGIN_PRODUCT_CATEGORY : MediaFileOriginProductCategory = MediaFileOriginProductCategory::VideoFilter;
|
||||
const ORIGIN_MODEL_TYPE : MediaFileOriginModelType = MediaFileOriginModelType::Rerender;
|
||||
const MEDIA_TYPE : MediaFileType = MediaFileType::Video;
|
||||
let media_type = args.maybe_mime_type
|
||||
.and_then(MediaFileType::try_from_mime_type)
|
||||
.unwrap_or(MediaFileType::Video); // Coarse fallback for unrecognized mimes
|
||||
|
||||
let record_id = {
|
||||
let query_result = sqlx::query!(
|
||||
@@ -109,7 +111,7 @@ SET
|
||||
ORIGIN_PRODUCT_CATEGORY.to_str(),
|
||||
ORIGIN_MODEL_TYPE.to_str(),
|
||||
|
||||
MEDIA_TYPE.to_str(),
|
||||
media_type.to_str(),
|
||||
args.maybe_mime_type,
|
||||
args.file_size_bytes,
|
||||
|
||||
|
||||
+5
-1
@@ -69,6 +69,10 @@ pub async fn insert_media_file_from_seed_vc(
|
||||
const ORIGIN_CATEGORY : MediaFileOriginCategory = MediaFileOriginCategory::Inference;
|
||||
const ORIGIN_PRODUCT_CATEGORY : MediaFileOriginProductCategory = MediaFileOriginProductCategory::TextToSpeech;
|
||||
|
||||
let media_type = args.maybe_mime_type
|
||||
.and_then(MediaFileType::try_from_mime_type)
|
||||
.unwrap_or(MediaFileType::Audio); // Coarse fallback for unrecognized mimes
|
||||
|
||||
let record_id = {
|
||||
let query_result = sqlx::query!(
|
||||
r#"
|
||||
@@ -116,7 +120,7 @@ SET
|
||||
result_token.as_str(),
|
||||
|
||||
MediaFileClass::Audio.to_str(),
|
||||
MediaFileType::Audio.to_str(), // TODO(bt,2024-04-30): This needs to become "wav" after a frontend migration
|
||||
media_type.to_str(),
|
||||
|
||||
ORIGIN_CATEGORY.to_str(),
|
||||
ORIGIN_PRODUCT_CATEGORY.to_str(),
|
||||
|
||||
+5
-1
@@ -75,6 +75,10 @@ pub async fn insert_media_file_from_studio_gen2(args: InsertArgs<'_>) -> AnyhowR
|
||||
|
||||
const MODEL_TYPE : MediaFileOriginModelType = MediaFileOriginModelType::StorytellerStudio;
|
||||
|
||||
let media_type = args.maybe_mime_type
|
||||
.and_then(MediaFileType::try_from_mime_type)
|
||||
.unwrap_or(MediaFileType::Video); // Coarse fallback for unrecognized mimes
|
||||
|
||||
let record_id = {
|
||||
let query_result = sqlx::query!(
|
||||
r#"
|
||||
@@ -121,7 +125,7 @@ SET
|
||||
result_token.as_str(),
|
||||
|
||||
MediaFileClass::Video.to_str(),
|
||||
MediaFileType::Video.to_str(), // TODO(bt,2024-04-30): This needs to become "mp4" after a frontend migration
|
||||
media_type.to_str(),
|
||||
|
||||
ORIGIN_CATEGORY.to_str(),
|
||||
PRODUCT.to_str(),
|
||||
|
||||
+5
-1
@@ -69,6 +69,10 @@ pub async fn insert_media_file_from_tacotron2(
|
||||
const ORIGIN_CATEGORY : MediaFileOriginCategory = MediaFileOriginCategory::Inference;
|
||||
const ORIGIN_PRODUCT_CATEGORY : MediaFileOriginProductCategory = MediaFileOriginProductCategory::TextToSpeech;
|
||||
|
||||
let media_type = args.maybe_mime_type
|
||||
.and_then(MediaFileType::try_from_mime_type)
|
||||
.unwrap_or(MediaFileType::Audio); // Coarse fallback for unrecognized mimes
|
||||
|
||||
let record_id = {
|
||||
let query_result = sqlx::query!(
|
||||
r#"
|
||||
@@ -116,7 +120,7 @@ SET
|
||||
result_token.as_str(),
|
||||
|
||||
MediaFileClass::Audio.to_str(),
|
||||
MediaFileType::Audio.to_str(), // TODO(bt,2024-04-30): This needs to become "wav" after a frontend migration
|
||||
media_type.to_str(),
|
||||
|
||||
ORIGIN_CATEGORY.to_str(),
|
||||
ORIGIN_PRODUCT_CATEGORY.to_str(),
|
||||
|
||||
+5
-1
@@ -80,6 +80,10 @@ pub async fn insert_media_file_from_voice_conversion(
|
||||
const ORIGIN_CATEGORY : MediaFileOriginCategory = MediaFileOriginCategory::Inference;
|
||||
const ORIGIN_PRODUCT_CATEGORY : MediaFileOriginProductCategory = MediaFileOriginProductCategory::VoiceConversion;
|
||||
|
||||
let media_type = args.maybe_mime_type
|
||||
.and_then(MediaFileType::try_from_mime_type)
|
||||
.unwrap_or(MediaFileType::Audio); // Coarse fallback for unrecognized mimes
|
||||
|
||||
let record_id = {
|
||||
let query_result = sqlx::query!(
|
||||
r#"
|
||||
@@ -122,7 +126,7 @@ SET
|
||||
result_token.as_str(),
|
||||
|
||||
MediaFileClass::Audio.to_str(),
|
||||
MediaFileType::Audio.to_str(), // TODO(bt,2024-04-30): This needs to become "wav" after a frontend migration
|
||||
media_type.to_str(),
|
||||
|
||||
ORIGIN_CATEGORY.to_str(),
|
||||
ORIGIN_PRODUCT_CATEGORY.to_str(),
|
||||
|
||||
+4
-2
@@ -70,7 +70,9 @@ pub async fn insert_media_file_from_zero_shot(
|
||||
// Since fill this out apart of the funtion this seems like the only thing to change.
|
||||
const ORIGIN_CATEGORY : MediaFileOriginCategory = MediaFileOriginCategory::Inference;
|
||||
const ORIGIN_PRODUCT_CATEGORY : MediaFileOriginProductCategory = MediaFileOriginProductCategory::ZeroShotVoice;
|
||||
const MEDIA_TYPE : MediaFileType = MediaFileType::Audio;
|
||||
let media_type = args.maybe_mime_type
|
||||
.and_then(MediaFileType::try_from_mime_type)
|
||||
.unwrap_or(MediaFileType::Audio); // Coarse fallback for unrecognized mimes
|
||||
|
||||
let record_id = {
|
||||
let query_result = sqlx::query!(
|
||||
@@ -118,7 +120,7 @@ pub async fn insert_media_file_from_zero_shot(
|
||||
|
||||
args.job.maybe_raw_inference_text,
|
||||
|
||||
MEDIA_TYPE.to_str(),
|
||||
media_type.to_str(),
|
||||
args.maybe_mime_type,
|
||||
args.file_size_bytes,
|
||||
|
||||
|
||||
-6
@@ -12,7 +12,6 @@ use enums::by_table::media_files::media_file_animation_type::MediaFileAnimationT
|
||||
use enums::traits::mysql_from_row::MySqlFromRow as _;
|
||||
use enums::by_table::media_files::media_file_class::MediaFileClass;
|
||||
use enums::by_table::media_files::media_file_engine_category::MediaFileEngineCategory;
|
||||
use enums::by_table::media_files::media_file_subtype::MediaFileSubtype;
|
||||
use enums::by_table::media_files::media_file_type::MediaFileType;
|
||||
use enums::by_table::model_weights::weights_category::WeightsCategory;
|
||||
use enums::by_table::model_weights::weights_types::WeightsType;
|
||||
@@ -38,7 +37,6 @@ pub struct MediaFile {
|
||||
pub maybe_engine_category: Option<MediaFileEngineCategory>,
|
||||
pub maybe_animation_type: Option<MediaFileAnimationType>,
|
||||
|
||||
pub maybe_media_subtype: Option<MediaFileSubtype>,
|
||||
|
||||
// TODO: Bucket hash bits.
|
||||
|
||||
@@ -125,7 +123,6 @@ pub struct MediaFileRaw {
|
||||
pub maybe_engine_category: Option<MediaFileEngineCategory>,
|
||||
pub maybe_animation_type: Option<MediaFileAnimationType>,
|
||||
|
||||
pub maybe_media_subtype: Option<MediaFileSubtype>,
|
||||
|
||||
// TODO: Bucket hash bits.
|
||||
|
||||
@@ -234,7 +231,6 @@ pub async fn batch_get_media_files(
|
||||
media_type: record.media_type,
|
||||
maybe_engine_category: record.maybe_engine_category,
|
||||
maybe_animation_type: record.maybe_animation_type,
|
||||
maybe_media_subtype: record.maybe_media_subtype,
|
||||
maybe_batch_token: record.maybe_batch_token,
|
||||
maybe_title: record.maybe_title,
|
||||
maybe_text_transcript: record.maybe_text_transcript,
|
||||
@@ -294,7 +290,6 @@ SELECT
|
||||
m.maybe_engine_category,
|
||||
m.maybe_animation_type,
|
||||
|
||||
m.maybe_media_subtype,
|
||||
|
||||
users.token as maybe_creator_user_token,
|
||||
users.username as maybe_creator_username,
|
||||
@@ -390,7 +385,6 @@ impl FromRow<'_, MySqlRow> for MediaFileRaw {
|
||||
maybe_engine_category: MediaFileEngineCategory::try_from_mysql_row_nullable(row, "maybe_engine_category")?,
|
||||
maybe_animation_type: MediaFileAnimationType::try_from_mysql_row_nullable(row, "maybe_animation_type")?,
|
||||
|
||||
maybe_media_subtype: MediaFileSubtype::try_from_mysql_row_nullable(row, "maybe_media_subtype")?,
|
||||
|
||||
maybe_batch_token: BatchGenerationToken::try_from_mysql_row_nullable(row, "maybe_batch_token")?,
|
||||
|
||||
|
||||
@@ -8,7 +8,6 @@ use chrono::{DateTime, Utc};
|
||||
use enums::by_table::media_files::media_file_animation_type::MediaFileAnimationType;
|
||||
use enums::by_table::media_files::media_file_class::MediaFileClass;
|
||||
use enums::by_table::media_files::media_file_engine_category::MediaFileEngineCategory;
|
||||
use enums::by_table::media_files::media_file_subtype::MediaFileSubtype;
|
||||
use enums::by_table::media_files::media_file_type::MediaFileType;
|
||||
use enums::by_table::model_weights::weights_category::WeightsCategory;
|
||||
use enums::by_table::model_weights::weights_types::WeightsType;
|
||||
@@ -39,8 +38,6 @@ pub struct MediaFile {
|
||||
pub maybe_engine_category: Option<MediaFileEngineCategory>,
|
||||
pub maybe_animation_type: Option<MediaFileAnimationType>,
|
||||
|
||||
pub maybe_media_subtype: Option<MediaFileSubtype>,
|
||||
|
||||
pub maybe_mime_type: Option<String>,
|
||||
|
||||
// TODO: Other media details (file size, dimensions, duration, etc.)
|
||||
@@ -134,8 +131,6 @@ pub struct MediaFileRaw {
|
||||
pub maybe_engine_category: Option<MediaFileEngineCategory>,
|
||||
pub maybe_animation_type: Option<MediaFileAnimationType>,
|
||||
|
||||
pub maybe_media_subtype: Option<MediaFileSubtype>,
|
||||
|
||||
pub maybe_mime_type: Option<String>,
|
||||
|
||||
pub maybe_batch_token: Option<BatchGenerationToken>,
|
||||
@@ -263,7 +258,6 @@ pub async fn get_media_file_with_transactor(
|
||||
maybe_engine_category: record.maybe_engine_category,
|
||||
maybe_animation_type: record.maybe_animation_type,
|
||||
media_class: record.media_class,
|
||||
maybe_media_subtype: record.maybe_media_subtype,
|
||||
maybe_mime_type: record.maybe_mime_type,
|
||||
maybe_batch_token: record.maybe_batch_token,
|
||||
maybe_style_transfer_source_media_file_token: record.maybe_style_transfer_source_media_file_token,
|
||||
@@ -327,8 +321,6 @@ SELECT
|
||||
m.maybe_engine_category as `maybe_engine_category: enums::by_table::media_files::media_file_engine_category::MediaFileEngineCategory`,
|
||||
m.maybe_animation_type as `maybe_animation_type: enums::by_table::media_files::media_file_animation_type::MediaFileAnimationType`,
|
||||
|
||||
m.maybe_media_subtype as `maybe_media_subtype: enums::by_table::media_files::media_file_subtype::MediaFileSubtype`,
|
||||
|
||||
m.maybe_mime_type,
|
||||
|
||||
users.token as `maybe_creator_user_token: tokens::tokens::users::UserToken`,
|
||||
@@ -450,8 +442,6 @@ SELECT
|
||||
m.maybe_engine_category as `maybe_engine_category: enums::by_table::media_files::media_file_engine_category::MediaFileEngineCategory`,
|
||||
m.maybe_animation_type as `maybe_animation_type: enums::by_table::media_files::media_file_animation_type::MediaFileAnimationType`,
|
||||
|
||||
m.maybe_media_subtype as `maybe_media_subtype: enums::by_table::media_files::media_file_subtype::MediaFileSubtype`,
|
||||
|
||||
m.maybe_mime_type,
|
||||
|
||||
users.token as `maybe_creator_user_token: tokens::tokens::users::UserToken`,
|
||||
|
||||
-20
@@ -14,7 +14,6 @@ use enums::by_table::media_files::media_file_engine_category::MediaFileEngineCat
|
||||
use enums::by_table::media_files::media_file_origin_category::MediaFileOriginCategory;
|
||||
use enums::by_table::media_files::media_file_origin_model_type::MediaFileOriginModelType;
|
||||
use enums::by_table::media_files::media_file_origin_product_category::MediaFileOriginProductCategory;
|
||||
use enums::by_table::media_files::media_file_subtype::MediaFileSubtype;
|
||||
use enums::by_table::media_files::media_file_type::MediaFileType;
|
||||
use enums::common::visibility::Visibility;
|
||||
use errors::AnyhowResult;
|
||||
@@ -42,7 +41,6 @@ pub struct MediaFileForElasticsearchRecord {
|
||||
|
||||
pub maybe_origin_filename: Option<String>,
|
||||
|
||||
pub is_batch_generated: bool,
|
||||
pub maybe_batch_token: Option<BatchGenerationToken>,
|
||||
|
||||
pub is_user_upload: bool,
|
||||
@@ -59,11 +57,8 @@ pub struct MediaFileForElasticsearchRecord {
|
||||
pub maybe_style_transfer_source_media_file_token: Option<MediaFileToken>,
|
||||
pub maybe_scene_source_media_file_token: Option<MediaFileToken>,
|
||||
|
||||
pub nsfw_status: String,
|
||||
|
||||
pub media_type: MediaFileType,
|
||||
pub media_class: MediaFileClass,
|
||||
pub maybe_media_subtype: Option<MediaFileSubtype>,
|
||||
|
||||
pub maybe_mime_type: Option<String>,
|
||||
pub file_size_bytes: u64,
|
||||
@@ -159,7 +154,6 @@ pub async fn list_media_files_for_elastic_search_backfill_using_cursor(
|
||||
maybe_origin_model_type: record.maybe_origin_model_type,
|
||||
maybe_origin_model_token: record.maybe_origin_model_token,
|
||||
maybe_origin_filename: record.maybe_origin_filename,
|
||||
is_batch_generated: i8_to_bool(record.is_batch_generated),
|
||||
maybe_batch_token: record.maybe_batch_token,
|
||||
is_user_upload: i8_to_bool(record.is_user_upload),
|
||||
is_intermediate_system_file: i8_to_bool(record.is_intermediate_system_file),
|
||||
@@ -170,10 +164,8 @@ pub async fn list_media_files_for_elastic_search_backfill_using_cursor(
|
||||
maybe_cover_image_public_bucket_extension: record.maybe_cover_image_public_bucket_extension,
|
||||
maybe_style_transfer_source_media_file_token: record.maybe_style_transfer_source_media_file_token,
|
||||
maybe_scene_source_media_file_token: record.maybe_scene_source_media_file_token,
|
||||
nsfw_status: record.nsfw_status,
|
||||
media_type: record.media_type,
|
||||
media_class: record.media_class,
|
||||
maybe_media_subtype: record.maybe_media_subtype,
|
||||
maybe_mime_type: record.maybe_mime_type,
|
||||
file_size_bytes: record.file_size_bytes as u64,
|
||||
maybe_duration_millis: record.maybe_duration_millis.map(|d| d as u64),
|
||||
@@ -222,7 +214,6 @@ SELECT
|
||||
m.maybe_origin_model_token,
|
||||
m.maybe_origin_filename,
|
||||
|
||||
m.is_batch_generated,
|
||||
m.maybe_batch_token,
|
||||
|
||||
m.is_user_upload,
|
||||
@@ -238,11 +229,8 @@ SELECT
|
||||
m.maybe_style_transfer_source_media_file_token,
|
||||
m.maybe_scene_source_media_file_token,
|
||||
|
||||
m.nsfw_status,
|
||||
|
||||
m.media_type,
|
||||
m.media_class,
|
||||
m.maybe_media_subtype,
|
||||
|
||||
m.maybe_mime_type,
|
||||
m.file_size_bytes,
|
||||
@@ -372,7 +360,6 @@ struct RawRecord {
|
||||
|
||||
pub maybe_origin_filename: Option<String>,
|
||||
|
||||
pub is_batch_generated: i8,
|
||||
pub maybe_batch_token: Option<BatchGenerationToken>,
|
||||
|
||||
pub is_user_upload: i8,
|
||||
@@ -389,11 +376,8 @@ struct RawRecord {
|
||||
pub maybe_style_transfer_source_media_file_token: Option<MediaFileToken>,
|
||||
pub maybe_scene_source_media_file_token: Option<MediaFileToken>,
|
||||
|
||||
pub nsfw_status: String,
|
||||
|
||||
pub media_type: MediaFileType,
|
||||
pub media_class: MediaFileClass,
|
||||
pub maybe_media_subtype: Option<MediaFileSubtype>,
|
||||
|
||||
pub maybe_mime_type: Option<String>,
|
||||
pub file_size_bytes: i32,
|
||||
@@ -459,7 +443,6 @@ impl FromRow<'_, MySqlRow> for RawRecord {
|
||||
maybe_origin_model_token: row.try_get("maybe_origin_model_token")?,
|
||||
maybe_origin_filename: row.try_get("maybe_origin_filename")?,
|
||||
|
||||
is_batch_generated: row.try_get("is_batch_generated")?,
|
||||
maybe_batch_token: BatchGenerationToken::try_from_mysql_row_nullable(row, "maybe_batch_token")?,
|
||||
|
||||
is_user_upload: row.try_get("is_user_upload")?,
|
||||
@@ -475,11 +458,8 @@ impl FromRow<'_, MySqlRow> for RawRecord {
|
||||
maybe_style_transfer_source_media_file_token: row.try_get("maybe_style_transfer_source_media_file_token")?,
|
||||
maybe_scene_source_media_file_token: row.try_get("maybe_scene_source_media_file_token")?,
|
||||
|
||||
nsfw_status: row.try_get("nsfw_status")?,
|
||||
|
||||
media_type: MediaFileType::try_from_mysql_row(row, "media_type")?,
|
||||
media_class: MediaFileClass::try_from_mysql_row(row, "media_class")?,
|
||||
maybe_media_subtype: MediaFileSubtype::try_from_mysql_row_nullable(row, "maybe_media_subtype")?,
|
||||
|
||||
maybe_mime_type: row.try_get("maybe_mime_type")?,
|
||||
file_size_bytes: row.try_get("file_size_bytes")?,
|
||||
|
||||
-9
@@ -8,7 +8,6 @@ use enums::by_table::media_files::media_file_class::MediaFileClass;
|
||||
use enums::by_table::media_files::media_file_engine_category::MediaFileEngineCategory;
|
||||
use enums::by_table::media_files::media_file_origin_category::MediaFileOriginCategory;
|
||||
use enums::by_table::media_files::media_file_origin_product_category::MediaFileOriginProductCategory;
|
||||
use enums::by_table::media_files::media_file_subtype::MediaFileSubtype;
|
||||
use enums::by_table::media_files::media_file_type::MediaFileType;
|
||||
use enums::common::visibility::Visibility;
|
||||
use errors::AnyhowResult;
|
||||
@@ -43,8 +42,6 @@ pub struct UpsertMediaFileFromUploadArgs<'a> {
|
||||
|
||||
pub upload_type: UploadType,
|
||||
|
||||
pub maybe_media_subtype: Option<MediaFileSubtype>,
|
||||
|
||||
pub maybe_mime_type: Option<&'a str>,
|
||||
pub file_size_bytes: u64,
|
||||
pub duration_millis: u64,
|
||||
@@ -115,7 +112,6 @@ SET
|
||||
maybe_engine_category = ?,
|
||||
maybe_animation_type = ?,
|
||||
|
||||
maybe_media_subtype = ?,
|
||||
maybe_mime_type = ?,
|
||||
file_size_bytes = ?,
|
||||
|
||||
@@ -150,7 +146,6 @@ ON DUPLICATE KEY UPDATE
|
||||
maybe_engine_category = ?,
|
||||
maybe_animation_type = ?,
|
||||
|
||||
maybe_media_subtype = ?,
|
||||
maybe_mime_type = ?,
|
||||
file_size_bytes = ?,
|
||||
|
||||
@@ -185,8 +180,6 @@ ON DUPLICATE KEY UPDATE
|
||||
args.maybe_engine_category.map(|s| s.to_str()),
|
||||
args.maybe_animation_type.map(|s| s.to_str()),
|
||||
|
||||
args.maybe_media_subtype.map(|s| s.to_str()),
|
||||
|
||||
args.maybe_mime_type,
|
||||
args.file_size_bytes,
|
||||
|
||||
@@ -216,8 +209,6 @@ ON DUPLICATE KEY UPDATE
|
||||
args.maybe_engine_category.map(|s| s.to_str()),
|
||||
args.maybe_animation_type.map(|s| s.to_str()),
|
||||
|
||||
args.maybe_media_subtype.map(|s| s.to_str()),
|
||||
|
||||
args.maybe_mime_type,
|
||||
args.file_size_bytes,
|
||||
|
||||
|
||||
+9
@@ -183,9 +183,18 @@ impl RawUserBookmarkRecord {
|
||||
MediaFileType::Jpg => Some("image media file".to_string()),
|
||||
MediaFileType::Png => Some("image media file".to_string()),
|
||||
MediaFileType::Gif => Some("image media file".to_string()),
|
||||
MediaFileType::Webp => Some("image media file".to_string()),
|
||||
MediaFileType::Mp4 => Some("video media file".to_string()),
|
||||
MediaFileType::Webm => Some("video media file".to_string()),
|
||||
MediaFileType::Mov => Some("video media file".to_string()),
|
||||
MediaFileType::Wav => Some("audio media file".to_string()),
|
||||
MediaFileType::Mp3 => Some("audio media file".to_string()),
|
||||
MediaFileType::Opus => Some("audio media file".to_string()),
|
||||
MediaFileType::Ogg => Some("audio media file".to_string()),
|
||||
MediaFileType::Aac => Some("audio media file".to_string()),
|
||||
MediaFileType::M4a => Some("audio media file".to_string()),
|
||||
MediaFileType::Flac => Some("audio media file".to_string()),
|
||||
MediaFileType::Json => Some("project file".to_string()),
|
||||
}),
|
||||
UserBookmarkEntityType::VoiceConversionModel => self.maybe_descriptive_text_voice_conversion_model_title,
|
||||
UserBookmarkEntityType::ZsVoice => self.maybe_descriptive_text_zs_voice_title,
|
||||
|
||||
@@ -6,6 +6,8 @@ use strum::EnumCount;
|
||||
use strum::EnumIter;
|
||||
use utoipa::ToSchema;
|
||||
|
||||
use crate::by_table::media_files::media_file_class::MediaFileClass;
|
||||
|
||||
/// Used in the `media_files` table in a `VARCHAR(16)` field.
|
||||
///
|
||||
/// DO NOT CHANGE VALUES WITHOUT A MIGRATION STRATEGY.
|
||||
@@ -90,6 +92,36 @@ pub enum MediaFileType {
|
||||
|
||||
/// Mp3 audio
|
||||
Mp3,
|
||||
|
||||
// ========================= LESS SUPPORT FOR THE FILES BELOW THIS LINE ========================= //
|
||||
|
||||
/// Webp images
|
||||
Webp,
|
||||
|
||||
/// Webm videos
|
||||
Webm,
|
||||
|
||||
/// QuickTime videos
|
||||
Mov,
|
||||
|
||||
/// Opus audio
|
||||
Opus,
|
||||
|
||||
/// Ogg audio
|
||||
Ogg,
|
||||
|
||||
/// AAC audio
|
||||
Aac,
|
||||
|
||||
/// M4a audio
|
||||
M4a,
|
||||
|
||||
/// FLAC audio
|
||||
Flac,
|
||||
|
||||
/// Generic JSON documents (eg. internal project files).
|
||||
/// NB: 3D scene files predate this and use `scene_json` instead.
|
||||
Json,
|
||||
}
|
||||
|
||||
// TODO(bt, 2022-12-21): This desperately needs MySQL integration tests!
|
||||
@@ -110,7 +142,53 @@ impl MediaFileType {
|
||||
pub fn is_jpg_or_png_or_legacy_image(&self) -> bool {
|
||||
matches!(self, Self::Jpg | Self::Png | Self::Image)
|
||||
}
|
||||
|
||||
|
||||
/// Any image format, including the legacy coarse `Image` type.
|
||||
pub fn is_image(&self) -> bool {
|
||||
matches!(self, Self::Image | Self::Jpg | Self::Png | Self::Gif | Self::Webp)
|
||||
}
|
||||
|
||||
/// The broad `media_class` this file format belongs to.
|
||||
pub fn to_media_class(&self) -> MediaFileClass {
|
||||
match self {
|
||||
Self::Audio
|
||||
| Self::Wav
|
||||
| Self::Mp3
|
||||
| Self::Opus
|
||||
| Self::Ogg
|
||||
| Self::Aac
|
||||
| Self::M4a
|
||||
| Self::Flac => MediaFileClass::Audio,
|
||||
|
||||
Self::Image
|
||||
| Self::Jpg
|
||||
| Self::Png
|
||||
| Self::Gif
|
||||
| Self::Webp => MediaFileClass::Image,
|
||||
|
||||
Self::Video
|
||||
| Self::Mp4
|
||||
| Self::Webm
|
||||
| Self::Mov => MediaFileClass::Video,
|
||||
|
||||
Self::Bvh
|
||||
| Self::Fbx
|
||||
| Self::Obj
|
||||
| Self::Glb
|
||||
| Self::Gltf
|
||||
| Self::Spz
|
||||
| Self::SceneRon
|
||||
| Self::SceneJson
|
||||
| Self::Pmd
|
||||
| Self::Vmd
|
||||
| Self::Pmx
|
||||
| Self::Csv => MediaFileClass::Dimensional,
|
||||
|
||||
// Generic project documents don't have a class yet.
|
||||
Self::Json => MediaFileClass::Unknown,
|
||||
}
|
||||
}
|
||||
|
||||
/// Returns the `MediaFileType` if the mime type matches one of the known types.
|
||||
/// This is not exhaustive.
|
||||
/// (NB: In general we shouldn't keep much application logic in the `enums` crate,
|
||||
@@ -119,19 +197,80 @@ impl MediaFileType {
|
||||
match mime_type {
|
||||
"image/jpeg" => Some(Self::Jpg),
|
||||
"image/png" => Some(Self::Png),
|
||||
"image/gif" => Some(Self::Gif),
|
||||
"image/webp" => Some(Self::Webp),
|
||||
"video/mp4" => Some(Self::Mp4),
|
||||
"video/webm" => Some(Self::Webm),
|
||||
"video/quicktime" => Some(Self::Mov),
|
||||
"audio/wav" => Some(Self::Wav),
|
||||
"audio/x-wav" => Some(Self::Wav),
|
||||
"audio/wave" => Some(Self::Wav),
|
||||
"audio/mpeg" => Some(Self::Mp3),
|
||||
"audio/mp3" => Some(Self::Mp3),
|
||||
"audio/opus" => Some(Self::Opus),
|
||||
"audio/ogg" => Some(Self::Ogg),
|
||||
"audio/aac" => Some(Self::Aac),
|
||||
"audio/m4a" => Some(Self::M4a),
|
||||
"audio/x-m4a" => Some(Self::M4a),
|
||||
"audio/mp4" => Some(Self::M4a),
|
||||
"audio/flac" => Some(Self::Flac),
|
||||
"audio/x-flac" => Some(Self::Flac),
|
||||
"model/gltf-binary" => Some(Self::Glb),
|
||||
"model/gltf+json" => Some(Self::Gltf),
|
||||
"model/fbx" => Some(Self::Fbx),
|
||||
"application/fbx" => Some(Self::Fbx),
|
||||
"model/obj" => Some(Self::Obj),
|
||||
//"audio/wav" => Some(Self::Wav), // NB: Not sure if this is correct
|
||||
//"audio/mpeg" => Some(Self::Mp3), // NB: Not sure if this is correct
|
||||
//"image/gif" => Some(Self::Gif), // NB: Not sure if this is correct
|
||||
//"model/gltf+json" => Some(Self::Gltf), // NB: Not sure if this is correct
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// Tries the input as a filename first, then as a bare extension.
|
||||
/// Useful as a fallback when `try_from_mime_type` fails.
|
||||
pub fn try_from_filename_or_extension(filename_or_extension: &str) -> Option<Self> {
|
||||
Self::try_from_filename(filename_or_extension)
|
||||
.or_else(|| Self::try_from_extension(filename_or_extension))
|
||||
}
|
||||
|
||||
/// Returns the `MediaFileType` for a filename by examining its extension.
|
||||
pub fn try_from_filename(filename: &str) -> Option<Self> {
|
||||
let (_, extension) = filename.trim().rsplit_once('.')?;
|
||||
Self::try_from_extension(extension)
|
||||
}
|
||||
|
||||
/// Returns the `MediaFileType` for a known file extension.
|
||||
/// Accepts extensions with or without a leading dot, in any letter case.
|
||||
pub fn try_from_extension(extension: &str) -> Option<Self> {
|
||||
let extension = extension.trim().trim_start_matches('.').to_ascii_lowercase();
|
||||
match extension.as_str() {
|
||||
"jpg" | "jpeg" => Some(Self::Jpg),
|
||||
"png" => Some(Self::Png),
|
||||
"gif" => Some(Self::Gif),
|
||||
"webp" => Some(Self::Webp),
|
||||
"mp4" => Some(Self::Mp4),
|
||||
"webm" => Some(Self::Webm),
|
||||
"mov" => Some(Self::Mov),
|
||||
"wav" => Some(Self::Wav),
|
||||
"mp3" => Some(Self::Mp3),
|
||||
"opus" => Some(Self::Opus),
|
||||
"ogg" => Some(Self::Ogg),
|
||||
"aac" => Some(Self::Aac),
|
||||
"m4a" => Some(Self::M4a),
|
||||
"flac" => Some(Self::Flac),
|
||||
"bvh" => Some(Self::Bvh),
|
||||
"fbx" => Some(Self::Fbx),
|
||||
"obj" => Some(Self::Obj),
|
||||
"glb" => Some(Self::Glb),
|
||||
"gltf" => Some(Self::Gltf),
|
||||
"spz" => Some(Self::Spz),
|
||||
"pmd" => Some(Self::Pmd),
|
||||
"vmd" => Some(Self::Vmd),
|
||||
"pmx" => Some(Self::Pmx),
|
||||
"csv" => Some(Self::Csv),
|
||||
"json" => Some(Self::Json),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn to_str(&self) -> &'static str {
|
||||
match self {
|
||||
Self::Audio => "audio",
|
||||
@@ -155,6 +294,15 @@ impl MediaFileType {
|
||||
Self::Mp4 => "mp4",
|
||||
Self::Wav => "wav",
|
||||
Self::Mp3 => "mp3",
|
||||
Self::Webp => "webp",
|
||||
Self::Webm => "webm",
|
||||
Self::Mov => "mov",
|
||||
Self::Opus => "opus",
|
||||
Self::Ogg => "ogg",
|
||||
Self::Aac => "aac",
|
||||
Self::M4a => "m4a",
|
||||
Self::Flac => "flac",
|
||||
Self::Json => "json",
|
||||
}
|
||||
}
|
||||
|
||||
@@ -181,6 +329,15 @@ impl MediaFileType {
|
||||
"mp4" => Ok(Self::Mp4),
|
||||
"wav" => Ok(Self::Wav),
|
||||
"mp3" => Ok(Self::Mp3),
|
||||
"webp" => Ok(Self::Webp),
|
||||
"webm" => Ok(Self::Webm),
|
||||
"mov" => Ok(Self::Mov),
|
||||
"opus" => Ok(Self::Opus),
|
||||
"ogg" => Ok(Self::Ogg),
|
||||
"aac" => Ok(Self::Aac),
|
||||
"m4a" => Ok(Self::M4a),
|
||||
"flac" => Ok(Self::Flac),
|
||||
"json" => Ok(Self::Json),
|
||||
_ => Err(format!("invalid value: {:?}", value)),
|
||||
}
|
||||
}
|
||||
@@ -210,12 +367,22 @@ impl MediaFileType {
|
||||
Self::Mp4,
|
||||
Self::Wav,
|
||||
Self::Mp3,
|
||||
Self::Webp,
|
||||
Self::Webm,
|
||||
Self::Mov,
|
||||
Self::Opus,
|
||||
Self::Ogg,
|
||||
Self::Aac,
|
||||
Self::M4a,
|
||||
Self::Flac,
|
||||
Self::Json,
|
||||
])
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use crate::by_table::media_files::media_file_class::MediaFileClass;
|
||||
use crate::by_table::media_files::media_file_type::MediaFileType;
|
||||
use crate::test_helpers::assert_serialization;
|
||||
|
||||
@@ -268,6 +435,15 @@ mod tests {
|
||||
assert_serialization(MediaFileType::Mp4, "mp4");
|
||||
assert_serialization(MediaFileType::Wav, "wav");
|
||||
assert_serialization(MediaFileType::Mp3, "mp3");
|
||||
assert_serialization(MediaFileType::Webp, "webp");
|
||||
assert_serialization(MediaFileType::Webm, "webm");
|
||||
assert_serialization(MediaFileType::Mov, "mov");
|
||||
assert_serialization(MediaFileType::Opus, "opus");
|
||||
assert_serialization(MediaFileType::Ogg, "ogg");
|
||||
assert_serialization(MediaFileType::Aac, "aac");
|
||||
assert_serialization(MediaFileType::M4a, "m4a");
|
||||
assert_serialization(MediaFileType::Flac, "flac");
|
||||
assert_serialization(MediaFileType::Json, "json");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -296,6 +472,15 @@ mod tests {
|
||||
assert_eq!(MediaFileType::Mp4.to_str(), "mp4");
|
||||
assert_eq!(MediaFileType::Wav.to_str(), "wav");
|
||||
assert_eq!(MediaFileType::Mp3.to_str(), "mp3");
|
||||
assert_eq!(MediaFileType::Webp.to_str(), "webp");
|
||||
assert_eq!(MediaFileType::Webm.to_str(), "webm");
|
||||
assert_eq!(MediaFileType::Mov.to_str(), "mov");
|
||||
assert_eq!(MediaFileType::Opus.to_str(), "opus");
|
||||
assert_eq!(MediaFileType::Ogg.to_str(), "ogg");
|
||||
assert_eq!(MediaFileType::Aac.to_str(), "aac");
|
||||
assert_eq!(MediaFileType::M4a.to_str(), "m4a");
|
||||
assert_eq!(MediaFileType::Flac.to_str(), "flac");
|
||||
assert_eq!(MediaFileType::Json.to_str(), "json");
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -320,8 +505,185 @@ mod tests {
|
||||
assert_eq!(MediaFileType::from_str("mp4").unwrap(), MediaFileType::Mp4);
|
||||
assert_eq!(MediaFileType::from_str("wav").unwrap(), MediaFileType::Wav);
|
||||
assert_eq!(MediaFileType::from_str("mp3").unwrap(), MediaFileType::Mp3);
|
||||
assert_eq!(MediaFileType::from_str("webp").unwrap(), MediaFileType::Webp);
|
||||
assert_eq!(MediaFileType::from_str("webm").unwrap(), MediaFileType::Webm);
|
||||
assert_eq!(MediaFileType::from_str("mov").unwrap(), MediaFileType::Mov);
|
||||
assert_eq!(MediaFileType::from_str("opus").unwrap(), MediaFileType::Opus);
|
||||
assert_eq!(MediaFileType::from_str("ogg").unwrap(), MediaFileType::Ogg);
|
||||
assert_eq!(MediaFileType::from_str("aac").unwrap(), MediaFileType::Aac);
|
||||
assert_eq!(MediaFileType::from_str("m4a").unwrap(), MediaFileType::M4a);
|
||||
assert_eq!(MediaFileType::from_str("flac").unwrap(), MediaFileType::Flac);
|
||||
assert_eq!(MediaFileType::from_str("json").unwrap(), MediaFileType::Json);
|
||||
assert!(MediaFileType::from_str("foo").is_err());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn to_media_class() {
|
||||
assert_eq!(MediaFileType::Audio.to_media_class(), MediaFileClass::Audio);
|
||||
assert_eq!(MediaFileType::Image.to_media_class(), MediaFileClass::Image);
|
||||
assert_eq!(MediaFileType::Video.to_media_class(), MediaFileClass::Video);
|
||||
assert_eq!(MediaFileType::Bvh.to_media_class(), MediaFileClass::Dimensional);
|
||||
assert_eq!(MediaFileType::Fbx.to_media_class(), MediaFileClass::Dimensional);
|
||||
assert_eq!(MediaFileType::Obj.to_media_class(), MediaFileClass::Dimensional);
|
||||
assert_eq!(MediaFileType::Glb.to_media_class(), MediaFileClass::Dimensional);
|
||||
assert_eq!(MediaFileType::Gltf.to_media_class(), MediaFileClass::Dimensional);
|
||||
assert_eq!(MediaFileType::Spz.to_media_class(), MediaFileClass::Dimensional);
|
||||
assert_eq!(MediaFileType::SceneRon.to_media_class(), MediaFileClass::Dimensional);
|
||||
assert_eq!(MediaFileType::SceneJson.to_media_class(), MediaFileClass::Dimensional);
|
||||
assert_eq!(MediaFileType::Pmd.to_media_class(), MediaFileClass::Dimensional);
|
||||
assert_eq!(MediaFileType::Vmd.to_media_class(), MediaFileClass::Dimensional);
|
||||
assert_eq!(MediaFileType::Pmx.to_media_class(), MediaFileClass::Dimensional);
|
||||
assert_eq!(MediaFileType::Csv.to_media_class(), MediaFileClass::Dimensional);
|
||||
assert_eq!(MediaFileType::Jpg.to_media_class(), MediaFileClass::Image);
|
||||
assert_eq!(MediaFileType::Png.to_media_class(), MediaFileClass::Image);
|
||||
assert_eq!(MediaFileType::Gif.to_media_class(), MediaFileClass::Image);
|
||||
assert_eq!(MediaFileType::Webp.to_media_class(), MediaFileClass::Image);
|
||||
assert_eq!(MediaFileType::Mp4.to_media_class(), MediaFileClass::Video);
|
||||
assert_eq!(MediaFileType::Webm.to_media_class(), MediaFileClass::Video);
|
||||
assert_eq!(MediaFileType::Mov.to_media_class(), MediaFileClass::Video);
|
||||
assert_eq!(MediaFileType::Wav.to_media_class(), MediaFileClass::Audio);
|
||||
assert_eq!(MediaFileType::Mp3.to_media_class(), MediaFileClass::Audio);
|
||||
assert_eq!(MediaFileType::Opus.to_media_class(), MediaFileClass::Audio);
|
||||
assert_eq!(MediaFileType::Ogg.to_media_class(), MediaFileClass::Audio);
|
||||
assert_eq!(MediaFileType::Aac.to_media_class(), MediaFileClass::Audio);
|
||||
assert_eq!(MediaFileType::M4a.to_media_class(), MediaFileClass::Audio);
|
||||
assert_eq!(MediaFileType::Flac.to_media_class(), MediaFileClass::Audio);
|
||||
assert_eq!(MediaFileType::Json.to_media_class(), MediaFileClass::Unknown);
|
||||
}
|
||||
}
|
||||
|
||||
mod format_detection {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn try_from_mime_type() {
|
||||
assert_eq!(MediaFileType::try_from_mime_type("image/jpeg"), Some(MediaFileType::Jpg));
|
||||
assert_eq!(MediaFileType::try_from_mime_type("image/png"), Some(MediaFileType::Png));
|
||||
assert_eq!(MediaFileType::try_from_mime_type("image/gif"), Some(MediaFileType::Gif));
|
||||
assert_eq!(MediaFileType::try_from_mime_type("image/webp"), Some(MediaFileType::Webp));
|
||||
assert_eq!(MediaFileType::try_from_mime_type("video/mp4"), Some(MediaFileType::Mp4));
|
||||
assert_eq!(MediaFileType::try_from_mime_type("video/webm"), Some(MediaFileType::Webm));
|
||||
assert_eq!(MediaFileType::try_from_mime_type("video/quicktime"), Some(MediaFileType::Mov));
|
||||
assert_eq!(MediaFileType::try_from_mime_type("audio/wav"), Some(MediaFileType::Wav));
|
||||
assert_eq!(MediaFileType::try_from_mime_type("audio/x-wav"), Some(MediaFileType::Wav));
|
||||
assert_eq!(MediaFileType::try_from_mime_type("audio/wave"), Some(MediaFileType::Wav));
|
||||
assert_eq!(MediaFileType::try_from_mime_type("audio/mpeg"), Some(MediaFileType::Mp3));
|
||||
assert_eq!(MediaFileType::try_from_mime_type("audio/mp3"), Some(MediaFileType::Mp3));
|
||||
assert_eq!(MediaFileType::try_from_mime_type("audio/opus"), Some(MediaFileType::Opus));
|
||||
assert_eq!(MediaFileType::try_from_mime_type("audio/ogg"), Some(MediaFileType::Ogg));
|
||||
assert_eq!(MediaFileType::try_from_mime_type("audio/aac"), Some(MediaFileType::Aac));
|
||||
assert_eq!(MediaFileType::try_from_mime_type("audio/m4a"), Some(MediaFileType::M4a));
|
||||
assert_eq!(MediaFileType::try_from_mime_type("audio/x-m4a"), Some(MediaFileType::M4a));
|
||||
assert_eq!(MediaFileType::try_from_mime_type("audio/mp4"), Some(MediaFileType::M4a));
|
||||
assert_eq!(MediaFileType::try_from_mime_type("audio/flac"), Some(MediaFileType::Flac));
|
||||
assert_eq!(MediaFileType::try_from_mime_type("audio/x-flac"), Some(MediaFileType::Flac));
|
||||
assert_eq!(MediaFileType::try_from_mime_type("model/gltf-binary"), Some(MediaFileType::Glb));
|
||||
assert_eq!(MediaFileType::try_from_mime_type("model/gltf+json"), Some(MediaFileType::Gltf));
|
||||
assert_eq!(MediaFileType::try_from_mime_type("model/fbx"), Some(MediaFileType::Fbx));
|
||||
assert_eq!(MediaFileType::try_from_mime_type("application/fbx"), Some(MediaFileType::Fbx));
|
||||
assert_eq!(MediaFileType::try_from_mime_type("model/obj"), Some(MediaFileType::Obj));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn try_from_mime_type_unknown_mimes() {
|
||||
// NB: application/json is deliberately unmapped — scene JSON, mood boards,
|
||||
// and other project files can't be told apart by mime alone.
|
||||
assert_eq!(MediaFileType::try_from_mime_type("application/json"), None);
|
||||
// NB: application/gzip is the mime for spz splats, but gzip isn't
|
||||
// necessarily a splat, so it stays unmapped.
|
||||
assert_eq!(MediaFileType::try_from_mime_type("application/gzip"), None);
|
||||
assert_eq!(MediaFileType::try_from_mime_type("application/octet-stream"), None);
|
||||
assert_eq!(MediaFileType::try_from_mime_type("text/plain"), None);
|
||||
assert_eq!(MediaFileType::try_from_mime_type(""), None);
|
||||
assert_eq!(MediaFileType::try_from_mime_type("IMAGE/PNG"), None);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn try_from_extension() {
|
||||
assert_eq!(MediaFileType::try_from_extension("jpg"), Some(MediaFileType::Jpg));
|
||||
assert_eq!(MediaFileType::try_from_extension("jpeg"), Some(MediaFileType::Jpg));
|
||||
assert_eq!(MediaFileType::try_from_extension("png"), Some(MediaFileType::Png));
|
||||
assert_eq!(MediaFileType::try_from_extension("gif"), Some(MediaFileType::Gif));
|
||||
assert_eq!(MediaFileType::try_from_extension("webp"), Some(MediaFileType::Webp));
|
||||
assert_eq!(MediaFileType::try_from_extension("mp4"), Some(MediaFileType::Mp4));
|
||||
assert_eq!(MediaFileType::try_from_extension("webm"), Some(MediaFileType::Webm));
|
||||
assert_eq!(MediaFileType::try_from_extension("mov"), Some(MediaFileType::Mov));
|
||||
assert_eq!(MediaFileType::try_from_extension("wav"), Some(MediaFileType::Wav));
|
||||
assert_eq!(MediaFileType::try_from_extension("mp3"), Some(MediaFileType::Mp3));
|
||||
assert_eq!(MediaFileType::try_from_extension("opus"), Some(MediaFileType::Opus));
|
||||
assert_eq!(MediaFileType::try_from_extension("ogg"), Some(MediaFileType::Ogg));
|
||||
assert_eq!(MediaFileType::try_from_extension("aac"), Some(MediaFileType::Aac));
|
||||
assert_eq!(MediaFileType::try_from_extension("m4a"), Some(MediaFileType::M4a));
|
||||
assert_eq!(MediaFileType::try_from_extension("flac"), Some(MediaFileType::Flac));
|
||||
assert_eq!(MediaFileType::try_from_extension("bvh"), Some(MediaFileType::Bvh));
|
||||
assert_eq!(MediaFileType::try_from_extension("fbx"), Some(MediaFileType::Fbx));
|
||||
assert_eq!(MediaFileType::try_from_extension("obj"), Some(MediaFileType::Obj));
|
||||
assert_eq!(MediaFileType::try_from_extension("glb"), Some(MediaFileType::Glb));
|
||||
assert_eq!(MediaFileType::try_from_extension("gltf"), Some(MediaFileType::Gltf));
|
||||
assert_eq!(MediaFileType::try_from_extension("spz"), Some(MediaFileType::Spz));
|
||||
assert_eq!(MediaFileType::try_from_extension("pmd"), Some(MediaFileType::Pmd));
|
||||
assert_eq!(MediaFileType::try_from_extension("vmd"), Some(MediaFileType::Vmd));
|
||||
assert_eq!(MediaFileType::try_from_extension("pmx"), Some(MediaFileType::Pmx));
|
||||
assert_eq!(MediaFileType::try_from_extension("csv"), Some(MediaFileType::Csv));
|
||||
assert_eq!(MediaFileType::try_from_extension("json"), Some(MediaFileType::Json));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn try_from_extension_normalization() {
|
||||
// Leading dot
|
||||
assert_eq!(MediaFileType::try_from_extension(".mp4"), Some(MediaFileType::Mp4));
|
||||
assert_eq!(MediaFileType::try_from_extension(".spz"), Some(MediaFileType::Spz));
|
||||
// Case insensitivity
|
||||
assert_eq!(MediaFileType::try_from_extension("JPG"), Some(MediaFileType::Jpg));
|
||||
assert_eq!(MediaFileType::try_from_extension(".WebP"), Some(MediaFileType::Webp));
|
||||
// Whitespace
|
||||
assert_eq!(MediaFileType::try_from_extension(" png "), Some(MediaFileType::Png));
|
||||
assert_eq!(MediaFileType::try_from_extension(" .glb "), Some(MediaFileType::Glb));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn try_from_extension_unknown_extensions() {
|
||||
assert_eq!(MediaFileType::try_from_extension("ron"), None);
|
||||
assert_eq!(MediaFileType::try_from_extension("exe"), None);
|
||||
assert_eq!(MediaFileType::try_from_extension("scene_json"), None);
|
||||
assert_eq!(MediaFileType::try_from_extension("audio"), None);
|
||||
assert_eq!(MediaFileType::try_from_extension(""), None);
|
||||
assert_eq!(MediaFileType::try_from_extension("."), None);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn try_from_filename() {
|
||||
assert_eq!(MediaFileType::try_from_filename("photo.jpg"), Some(MediaFileType::Jpg));
|
||||
assert_eq!(MediaFileType::try_from_filename("PHOTO.JPEG"), Some(MediaFileType::Jpg));
|
||||
assert_eq!(MediaFileType::try_from_filename("clip.final.mp4"), Some(MediaFileType::Mp4));
|
||||
assert_eq!(MediaFileType::try_from_filename("model.GLB"), Some(MediaFileType::Glb));
|
||||
assert_eq!(MediaFileType::try_from_filename("scene.spz"), Some(MediaFileType::Spz));
|
||||
assert_eq!(MediaFileType::try_from_filename("data.json"), Some(MediaFileType::Json));
|
||||
assert_eq!(MediaFileType::try_from_filename(" padded.png "), Some(MediaFileType::Png));
|
||||
// Failures
|
||||
assert_eq!(MediaFileType::try_from_filename("archive.tar.gz"), None);
|
||||
assert_eq!(MediaFileType::try_from_filename("noextension"), None);
|
||||
assert_eq!(MediaFileType::try_from_filename("file."), None);
|
||||
assert_eq!(MediaFileType::try_from_filename(".gitignore"), None);
|
||||
assert_eq!(MediaFileType::try_from_filename(""), None);
|
||||
// NB: a bare extension is not a filename (no dot separator)
|
||||
assert_eq!(MediaFileType::try_from_filename("mp4"), None);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn try_from_filename_or_extension() {
|
||||
// Filenames
|
||||
assert_eq!(MediaFileType::try_from_filename_or_extension("movie.mp4"), Some(MediaFileType::Mp4));
|
||||
assert_eq!(MediaFileType::try_from_filename_or_extension("track.FLAC"), Some(MediaFileType::Flac));
|
||||
// Bare extensions, with and without a leading dot
|
||||
assert_eq!(MediaFileType::try_from_filename_or_extension("mp4"), Some(MediaFileType::Mp4));
|
||||
assert_eq!(MediaFileType::try_from_filename_or_extension(".mp4"), Some(MediaFileType::Mp4));
|
||||
assert_eq!(MediaFileType::try_from_filename_or_extension("webp"), Some(MediaFileType::Webp));
|
||||
// Failures
|
||||
assert_eq!(MediaFileType::try_from_filename_or_extension("movie.xyz"), None);
|
||||
assert_eq!(MediaFileType::try_from_filename_or_extension("unknown"), None);
|
||||
assert_eq!(MediaFileType::try_from_filename_or_extension(""), None);
|
||||
}
|
||||
}
|
||||
|
||||
mod manual_variant_checks {
|
||||
@@ -330,7 +692,7 @@ mod tests {
|
||||
#[test]
|
||||
fn all_variants() {
|
||||
let mut variants = MediaFileType::all_variants();
|
||||
assert_eq!(variants.len(), 21);
|
||||
assert_eq!(variants.len(), 30);
|
||||
assert_eq!(variants.pop_first(), Some(MediaFileType::Audio));
|
||||
assert_eq!(variants.pop_first(), Some(MediaFileType::Image));
|
||||
assert_eq!(variants.pop_first(), Some(MediaFileType::Video));
|
||||
@@ -352,6 +714,15 @@ mod tests {
|
||||
assert_eq!(variants.pop_first(), Some(MediaFileType::Mp4));
|
||||
assert_eq!(variants.pop_first(), Some(MediaFileType::Wav));
|
||||
assert_eq!(variants.pop_first(), Some(MediaFileType::Mp3));
|
||||
assert_eq!(variants.pop_first(), Some(MediaFileType::Webp));
|
||||
assert_eq!(variants.pop_first(), Some(MediaFileType::Webm));
|
||||
assert_eq!(variants.pop_first(), Some(MediaFileType::Mov));
|
||||
assert_eq!(variants.pop_first(), Some(MediaFileType::Opus));
|
||||
assert_eq!(variants.pop_first(), Some(MediaFileType::Ogg));
|
||||
assert_eq!(variants.pop_first(), Some(MediaFileType::Aac));
|
||||
assert_eq!(variants.pop_first(), Some(MediaFileType::M4a));
|
||||
assert_eq!(variants.pop_first(), Some(MediaFileType::Flac));
|
||||
assert_eq!(variants.pop_first(), Some(MediaFileType::Json));
|
||||
assert_eq!(variants.pop_first(), None);
|
||||
}
|
||||
}
|
||||
|
||||
-1
@@ -126,7 +126,6 @@ async fn create_document_from_record(elasticsearch: &Elasticsearch, record: Medi
|
||||
|
||||
media_class: record.media_class,
|
||||
media_type: record.media_type,
|
||||
maybe_media_subtype: record.maybe_media_subtype,
|
||||
maybe_engine_category: record.maybe_engine_category,
|
||||
maybe_animation_type: record.maybe_animation_type,
|
||||
|
||||
|
||||
+2
-7
@@ -251,13 +251,8 @@ pub async fn process_job_inference(
|
||||
}
|
||||
};
|
||||
|
||||
let media_type = match metadata.mimetype.as_ref() {
|
||||
"image/png" => MediaFileType::Png,
|
||||
"image/jpeg" => MediaFileType::Jpg,
|
||||
"image/gif" => MediaFileType::Gif,
|
||||
"image/webp" => MediaFileType::Image, // Fallback
|
||||
_ => MediaFileType::Image, // Fallback
|
||||
};
|
||||
let media_type = MediaFileType::try_from_mime_type(metadata.mimetype.as_ref())
|
||||
.unwrap_or(MediaFileType::Image); // Coarse fallback for unrecognized mimes
|
||||
|
||||
// extra_file_modification_info: todo!(), // JSON ENCODED STRUCT
|
||||
let (media_file_token, _id) = insert_media_file_generic_from_job(InsertFromJobArgs {
|
||||
|
||||
+3
-1
@@ -257,7 +257,9 @@ pub async fn process_job(args: BvhToWorkflowJobArgs<'_>) -> Result<JobSuccessRes
|
||||
pool: &args.job_dependencies.db.mysql_pool,
|
||||
job: &job,
|
||||
media_class: MediaFileClass::Video,
|
||||
media_type: MediaFileType::Video,
|
||||
media_type: maybe_mimetype.as_deref()
|
||||
.and_then(MediaFileType::try_from_mime_type)
|
||||
.unwrap_or(MediaFileType::Video), // Coarse fallback for unrecognized mimes
|
||||
origin_category: MediaFileOriginCategory::Processed,
|
||||
origin_product_category: MediaFileOriginProductCategory::Mocap,
|
||||
maybe_origin_model_type: None,
|
||||
|
||||
@@ -259,7 +259,6 @@ use enums::by_table::media_files::media_file_class::MediaFileClass;
|
||||
use enums::by_table::media_files::media_file_engine_category::MediaFileEngineCategory;
|
||||
use enums::by_table::media_files::media_file_origin_category::MediaFileOriginCategory;
|
||||
use enums::by_table::media_files::media_file_origin_product_category::MediaFileOriginProductCategory;
|
||||
use enums::by_table::media_files::media_file_subtype::MediaFileSubtype;
|
||||
use enums::by_table::media_files::media_file_type::MediaFileType;
|
||||
use enums::by_table::model_weights::{weights_category::WeightsCategory, weights_types::WeightsType};
|
||||
use enums::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType;
|
||||
@@ -710,7 +709,6 @@ use crate::http_server::endpoints::media_files::list::list_batch_generated_redux
|
||||
MediaFileEngineCategory,
|
||||
MediaFileOriginCategory,
|
||||
MediaFileOriginProductCategory,
|
||||
MediaFileSubtype,
|
||||
MediaFileType,
|
||||
CommonModelClass,
|
||||
CommonModelType,
|
||||
|
||||
+3
-20
@@ -177,26 +177,9 @@ pub async fn process_upload_media_file(
|
||||
// do not have any open issues filed. They may simply be too old:
|
||||
// - .wma (audio/x-ms-wma)
|
||||
// - .avi (video/x-msvideo)
|
||||
media_file_type = match mimetype {
|
||||
// Audio
|
||||
"audio/aac" /* .aac */ => Some(MediaFileType::Audio),
|
||||
"audio/m4a" /* .m4a */ => Some(MediaFileType::Audio),
|
||||
"audio/mpeg" /* .mp3 */ => Some(MediaFileType::Audio),
|
||||
"audio/ogg" /* .ogg */ => Some(MediaFileType::Audio),
|
||||
"audio/opus" /* .opus */ => Some(MediaFileType::Audio),
|
||||
"audio/x-flac" /* .flac */ => Some(MediaFileType::Audio),
|
||||
"audio/x-wav" /* .wav */ => Some(MediaFileType::Audio),
|
||||
// Image — `webp` has no dedicated variant yet
|
||||
"image/gif" /* .gif */ => Some(MediaFileType::Gif),
|
||||
"image/jpeg" /* .jpg */ => Some(MediaFileType::Jpg),
|
||||
"image/png" /* .png */ => Some(MediaFileType::Png),
|
||||
"image/webp" /* .webp */ => Some(MediaFileType::Image), // TODO: Replace.
|
||||
// Video
|
||||
"video/mp4" /* .mp4 */ => Some(MediaFileType::Video),
|
||||
"video/quicktime" /* .mov */ => Some(MediaFileType::Video),
|
||||
"video/webm" /* .webm */ => Some(MediaFileType::Video),
|
||||
_ => None,
|
||||
};
|
||||
// NB: mimetypes are gated by the allow-list check above; this only maps
|
||||
// the already-permitted set to concrete media types.
|
||||
media_file_type = MediaFileType::try_from_mime_type(mimetype);
|
||||
|
||||
let do_audio_decode = match mimetype {
|
||||
// TODO: Revisit when Safari can send us this metadata consistently
|
||||
|
||||
+5
-7
@@ -236,13 +236,11 @@ pub async fn upload_snapshot_media_file_handler(
|
||||
MediaFileUploadError::ServerError
|
||||
})?;
|
||||
|
||||
let media_file_type = match mimetype.as_str() {
|
||||
"image/jpeg" => MediaFileType::Jpg,
|
||||
"image/png" => MediaFileType::Png,
|
||||
"image/gif" => MediaFileType::Gif,
|
||||
"image/webp" => MediaFileType::Image, // Fallback
|
||||
_ => MediaFileType::Image, // Fallback
|
||||
};
|
||||
let maybe_upload_filename = form.snapshot.file_name.as_deref();
|
||||
|
||||
let media_file_type = MediaFileType::try_from_mime_type(&mimetype)
|
||||
.or_else(|| maybe_upload_filename.and_then(MediaFileType::try_from_filename_or_extension))
|
||||
.unwrap_or(MediaFileType::Image); // Coarse fallback for unrecognized files
|
||||
|
||||
let (token, record_id) = insert_media_file_from_file_upload(InsertMediaFileFromUploadArgs {
|
||||
maybe_media_class: Some(MediaFileClass::Image),
|
||||
|
||||
+2
-2
@@ -129,9 +129,9 @@ pub async fn set_media_file_cover_image_handler(
|
||||
//let can_use_image = media_file.creator_set_visibility == Visibility::Public
|
||||
// && media_file.media_type == MediaFileType::Image;
|
||||
|
||||
let can_use_image = media_file.media_type == MediaFileType::Image;
|
||||
let can_use_image = media_file.media_type.is_image();
|
||||
|
||||
if !can_use_image {
|
||||
if !can_use_image {
|
||||
return Err(CommonWebError::BadInputWithSimpleMessage("Invalid media file token.".to_string()));
|
||||
}
|
||||
|
||||
|
||||
-7
@@ -10,7 +10,6 @@ use chrono::{DateTime, Utc};
|
||||
use enums::by_table::media_files::media_file_animation_type::MediaFileAnimationType;
|
||||
use enums::by_table::media_files::media_file_class::MediaFileClass;
|
||||
use enums::by_table::media_files::media_file_engine_category::MediaFileEngineCategory;
|
||||
use enums::by_table::media_files::media_file_subtype::MediaFileSubtype;
|
||||
use enums::by_table::media_files::media_file_type::MediaFileType;
|
||||
use enums::by_table::model_weights::weights_category::WeightsCategory;
|
||||
use enums::by_table::model_weights::weights_types::WeightsType;
|
||||
@@ -79,11 +78,6 @@ pub struct BatchMediaFileInfo {
|
||||
/// this describes the animation regime used or supported.
|
||||
pub maybe_animation_type: Option<MediaFileAnimationType>,
|
||||
|
||||
/// If the media file has a subtype, we'll report it.
|
||||
/// This is mostly used for Bevy engine files.
|
||||
#[deprecated(note="This was for the Bevy engine. Do not use.")]
|
||||
pub maybe_media_subtype: Option<MediaFileSubtype>,
|
||||
|
||||
/// Extension for the engine to load over remote:// URLs.
|
||||
#[deprecated(note="This was for the Bevy engine. Do not use.")]
|
||||
pub maybe_engine_extension: Option<String>,
|
||||
@@ -289,7 +283,6 @@ pub async fn batch_get_media_files_handler(
|
||||
media_type: result.media_type,
|
||||
maybe_engine_category: result.maybe_engine_category,
|
||||
maybe_animation_type: result.maybe_animation_type,
|
||||
maybe_media_subtype: result.maybe_media_subtype,
|
||||
maybe_engine_extension,
|
||||
maybe_batch_token: result.maybe_batch_token,
|
||||
media_links: MediaLinksBuilder::from_media_path_and_env(
|
||||
|
||||
-9
@@ -19,7 +19,6 @@ use chrono::{DateTime, Utc};
|
||||
use enums::by_table::media_files::media_file_animation_type::MediaFileAnimationType;
|
||||
use enums::by_table::media_files::media_file_class::MediaFileClass;
|
||||
use enums::by_table::media_files::media_file_engine_category::MediaFileEngineCategory;
|
||||
use enums::by_table::media_files::media_file_subtype::MediaFileSubtype;
|
||||
use enums::by_table::media_files::media_file_type::MediaFileType;
|
||||
use enums::by_table::model_weights::weights_category::WeightsCategory;
|
||||
use enums::by_table::model_weights::weights_types::WeightsType;
|
||||
@@ -69,11 +68,6 @@ pub struct MediaFileInfo {
|
||||
/// this describes the animation regime used or supported.
|
||||
pub maybe_animation_type: Option<MediaFileAnimationType>,
|
||||
|
||||
/// If the media file has a subtype, we'll report it.
|
||||
/// This is mostly used for Bevy engine files.
|
||||
#[deprecated(note="This was for the Bevy engine. Do not use.")]
|
||||
pub maybe_media_subtype: Option<MediaFileSubtype>,
|
||||
|
||||
/// Extension for the engine to load over remote:// URLs.
|
||||
#[deprecated(note="This was for the Bevy engine. Do not use.")]
|
||||
pub maybe_engine_extension: Option<String>,
|
||||
@@ -321,8 +315,6 @@ async fn modern_media_file_lookup(
|
||||
media_type: result.media_type,
|
||||
maybe_engine_category: result.maybe_engine_category,
|
||||
maybe_animation_type: result.maybe_animation_type,
|
||||
// maybe_media_subtype: result.maybe_media_subtype,
|
||||
maybe_media_subtype: None, // NB(bt,2024-07-25): Stop populating field for consumers.
|
||||
maybe_engine_extension,
|
||||
maybe_batch_token: result.maybe_batch_token,
|
||||
maybe_scene_source_media_file_token: result.maybe_scene_source_media_file_token,
|
||||
@@ -460,7 +452,6 @@ async fn emulate_media_file_with_legacy_tts_result_lookup(
|
||||
media_type: MediaFileType::Audio, // NB: Always audio
|
||||
maybe_engine_category: None,
|
||||
maybe_animation_type: None,
|
||||
maybe_media_subtype: None,
|
||||
maybe_engine_extension: None,
|
||||
maybe_batch_token: None,
|
||||
maybe_scene_source_media_file_token: None,
|
||||
|
||||
+5
-1
@@ -331,9 +331,13 @@ pub async fn upload_audio_media_file_handler(
|
||||
UploadType::Filesystem
|
||||
};
|
||||
|
||||
let maybe_upload_filename = form.file.file_name.as_deref();
|
||||
|
||||
let (token, record_id) = insert_media_file_from_file_upload(InsertMediaFileFromUploadArgs {
|
||||
maybe_media_class: Some(MediaFileClass::Audio),
|
||||
media_file_type: MediaFileType::Audio,
|
||||
media_file_type: MediaFileType::try_from_mime_type(&mimetype)
|
||||
.or_else(|| maybe_upload_filename.and_then(MediaFileType::try_from_filename_or_extension))
|
||||
.unwrap_or(MediaFileType::Audio), // Coarse fallback for unrecognized files
|
||||
maybe_creator_user_token: maybe_user_token,
|
||||
maybe_creator_anonymous_visitor_token: maybe_avt_token.as_ref(),
|
||||
creator_ip_address: &ip_address,
|
||||
|
||||
+6
-43
@@ -204,26 +204,11 @@ pub async fn process_upload_media_file(
|
||||
// do not have any open issues filed. They may simply be too old:
|
||||
// - .wma (audio/x-ms-wma)
|
||||
// - .avi (video/x-msvideo)
|
||||
media_file_type = match mimetype {
|
||||
// Audio
|
||||
"audio/aac" /* .aac */ => Some(MediaFileType::Audio),
|
||||
"audio/m4a" /* .m4a */ => Some(MediaFileType::Audio),
|
||||
"audio/mpeg" /* .mp3 */ => Some(MediaFileType::Audio),
|
||||
"audio/ogg" /* .ogg */ => Some(MediaFileType::Audio),
|
||||
"audio/opus" /* .opus */ => Some(MediaFileType::Audio),
|
||||
"audio/x-flac" /* .flac */ => Some(MediaFileType::Audio),
|
||||
"audio/x-wav" /* .wav */ => Some(MediaFileType::Audio),
|
||||
// Image — `webp` has no dedicated variant yet
|
||||
"image/gif" /* .gif */ => Some(MediaFileType::Gif),
|
||||
"image/jpeg" /* .jpg */ => Some(MediaFileType::Jpg),
|
||||
"image/png" /* .png */ => Some(MediaFileType::Png),
|
||||
"image/webp" /* .webp */ => Some(MediaFileType::Image),
|
||||
// Video
|
||||
"video/mp4" /* .mp4 */ => Some(MediaFileType::Video),
|
||||
"video/quicktime" /* .mov */ => Some(MediaFileType::Video),
|
||||
"video/webm" /* .webm */ => Some(MediaFileType::Video),
|
||||
_ => None,
|
||||
};
|
||||
// NB: mimetypes are gated by the `allowed_mimetypes` check above; this only
|
||||
// maps the already-permitted set to concrete media types.
|
||||
let maybe_upload_filename = upload_media_request.file_name.as_deref();
|
||||
media_file_type = MediaFileType::try_from_mime_type(mimetype)
|
||||
.or_else(|| maybe_upload_filename.and_then(MediaFileType::try_from_filename_or_extension));
|
||||
|
||||
let do_audio_decode = match mimetype {
|
||||
// TODO: Revisit when Safari can send us this metadata consistently
|
||||
@@ -313,29 +298,7 @@ pub async fn process_upload_media_file(
|
||||
},
|
||||
};
|
||||
|
||||
let media_file_class = match media_file_type {
|
||||
MediaFileType::Audio => MediaFileClass::Audio,
|
||||
MediaFileType::Image => MediaFileClass::Image,
|
||||
MediaFileType::Video => MediaFileClass::Video,
|
||||
MediaFileType::Bvh => MediaFileClass::Dimensional,
|
||||
MediaFileType::Fbx => MediaFileClass::Dimensional,
|
||||
MediaFileType::Obj => MediaFileClass::Dimensional,
|
||||
MediaFileType::Glb => MediaFileClass::Dimensional,
|
||||
MediaFileType::Gltf => MediaFileClass::Dimensional,
|
||||
MediaFileType::Spz => MediaFileClass::Dimensional,
|
||||
MediaFileType::SceneRon => MediaFileClass::Dimensional,
|
||||
MediaFileType::SceneJson => MediaFileClass::Dimensional,
|
||||
MediaFileType::Pmd => MediaFileClass::Dimensional,
|
||||
MediaFileType::Vmd => MediaFileClass::Dimensional,
|
||||
MediaFileType::Csv => MediaFileClass::Dimensional,
|
||||
MediaFileType::Pmx => MediaFileClass::Dimensional,
|
||||
MediaFileType::Jpg => MediaFileClass::Image,
|
||||
MediaFileType::Png => MediaFileClass::Image,
|
||||
MediaFileType::Gif => MediaFileClass::Image,
|
||||
MediaFileType::Mp4 => MediaFileClass::Video,
|
||||
MediaFileType::Wav => MediaFileClass::Audio,
|
||||
MediaFileType::Mp3 => MediaFileClass::Audio,
|
||||
};
|
||||
let media_file_class = media_file_type.to_media_class();
|
||||
|
||||
let upload_type = match upload_media_request.media_source {
|
||||
MediaFileUploadSource::Unknown => UploadType::Filesystem,
|
||||
|
||||
+5
-7
@@ -299,13 +299,11 @@ pub async fn upload_image_media_file_handler(
|
||||
UploadType::Filesystem
|
||||
};
|
||||
|
||||
let media_file_type = match mimetype.as_str() {
|
||||
"image/jpeg" => MediaFileType::Jpg,
|
||||
"image/png" => MediaFileType::Png,
|
||||
"image/gif" => MediaFileType::Gif,
|
||||
"image/webp" => MediaFileType::Image, // Fallback
|
||||
_ => MediaFileType::Image, // fallback
|
||||
};
|
||||
let maybe_upload_filename = form.file.file_name.as_deref();
|
||||
|
||||
let media_file_type = MediaFileType::try_from_mime_type(&mimetype)
|
||||
.or_else(|| maybe_upload_filename.and_then(MediaFileType::try_from_filename_or_extension))
|
||||
.unwrap_or(MediaFileType::Image); // Coarse fallback for unrecognized files
|
||||
|
||||
let (token, record_id) = insert_media_file_from_file_upload(InsertMediaFileFromUploadArgs {
|
||||
maybe_media_class: Some(MediaFileClass::Image),
|
||||
|
||||
+1
-5
@@ -389,11 +389,7 @@ fn validate_and_process_form(
|
||||
}
|
||||
};
|
||||
|
||||
let media_class = match media_type {
|
||||
MediaFileType::Jpg | MediaFileType::Png | MediaFileType::Gif => MediaFileClass::Image,
|
||||
MediaFileType::Mp4 => MediaFileClass::Video,
|
||||
_ => MediaFileClass::Dimensional,
|
||||
};
|
||||
let media_class = media_type.to_media_class();
|
||||
|
||||
Ok(FileInfo {
|
||||
media_class,
|
||||
|
||||
+5
-1
@@ -504,9 +504,13 @@ pub async fn upload_new_video_media_file_handler(
|
||||
UploadType::Filesystem
|
||||
};
|
||||
|
||||
let maybe_upload_filename = form.file.file_name.as_deref();
|
||||
|
||||
let (token, record_id) = insert_media_file_from_file_upload(InsertMediaFileFromUploadArgs {
|
||||
maybe_media_class: Some(MediaFileClass::Video),
|
||||
media_file_type: MediaFileType::Video,
|
||||
media_file_type: MediaFileType::try_from_mime_type(&mimetype)
|
||||
.or_else(|| maybe_upload_filename.and_then(MediaFileType::try_from_filename_or_extension))
|
||||
.unwrap_or(MediaFileType::Video), // Coarse fallback for unrecognized files
|
||||
maybe_creator_user_token: maybe_user_token,
|
||||
maybe_creator_anonymous_visitor_token: maybe_avt_token.as_ref(),
|
||||
creator_ip_address: &ip_address,
|
||||
|
||||
+2
-1
@@ -221,7 +221,8 @@ pub async fn upload_video_media_file_handler(
|
||||
// TODO(bt, 2024-02-22): This should be a transaction.
|
||||
let (token, record_id) = insert_media_file_from_file_upload(InsertMediaFileFromUploadArgs {
|
||||
maybe_media_class: Some(MediaFileClass::Video),
|
||||
media_file_type: MediaFileType::Video,
|
||||
media_file_type: MediaFileType::try_from_mime_type(mimetype)
|
||||
.unwrap_or(MediaFileType::Video), // Coarse fallback for unrecognized mimes
|
||||
maybe_creator_user_token: maybe_user_token,
|
||||
maybe_creator_anonymous_visitor_token: maybe_avt_token.as_ref(),
|
||||
creator_ip_address: &ip_address,
|
||||
|
||||
-1
@@ -231,7 +231,6 @@ pub async fn write_engine_asset_media_file_handler(
|
||||
media_file_type,
|
||||
maybe_engine_category: upload_media_request.maybe_engine_category,
|
||||
maybe_animation_type: upload_media_request.maybe_animation_type,
|
||||
maybe_media_subtype: None,
|
||||
maybe_creator_user_token: maybe_user_token,
|
||||
maybe_creator_anonymous_visitor_token: maybe_avt_token.as_ref(),
|
||||
creator_ip_address: &ip_address,
|
||||
|
||||
-1
@@ -219,7 +219,6 @@ pub async fn write_scene_file_media_file_handler(
|
||||
media_file_type: MediaFileType::SceneJson,
|
||||
maybe_engine_category: Some(MediaFileEngineCategory::Scene),
|
||||
maybe_animation_type: None,
|
||||
maybe_media_subtype: None,
|
||||
maybe_creator_user_token: maybe_user_token,
|
||||
maybe_creator_anonymous_visitor_token: maybe_avt_token.as_ref(),
|
||||
creator_ip_address: &ip_address,
|
||||
|
||||
+7
-10
@@ -202,15 +202,12 @@ impl MediaUploadKind {
|
||||
}
|
||||
|
||||
fn media_file_type(&self, mimetype: &str) -> MediaFileType {
|
||||
match self {
|
||||
MediaUploadKind::Image => match mimetype {
|
||||
"image/jpeg" => MediaFileType::Jpg,
|
||||
"image/png" => MediaFileType::Png,
|
||||
"image/gif" => MediaFileType::Gif,
|
||||
_ => MediaFileType::Image,
|
||||
},
|
||||
MediaUploadKind::Video => MediaFileType::Video,
|
||||
MediaUploadKind::Audio => MediaFileType::Audio,
|
||||
}
|
||||
MediaFileType::try_from_mime_type(mimetype)
|
||||
.unwrap_or(match self {
|
||||
// Coarse fallbacks for unrecognized mimes
|
||||
MediaUploadKind::Image => MediaFileType::Image,
|
||||
MediaUploadKind::Video => MediaFileType::Video,
|
||||
MediaUploadKind::Audio => MediaFileType::Audio,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
+5
-1
@@ -275,9 +275,13 @@ pub async fn omni_upload_audio_media_file_handler(
|
||||
UploadType::Filesystem
|
||||
};
|
||||
|
||||
let maybe_upload_filename = form.file.file_name.as_deref();
|
||||
|
||||
let (token, record_id) = insert_media_file_from_file_upload(InsertMediaFileFromUploadArgs {
|
||||
maybe_media_class: Some(MediaFileClass::Audio),
|
||||
media_file_type: MediaFileType::Audio,
|
||||
media_file_type: MediaFileType::try_from_mime_type(&mimetype)
|
||||
.or_else(|| maybe_upload_filename.and_then(MediaFileType::try_from_filename_or_extension))
|
||||
.unwrap_or(MediaFileType::Audio), // Coarse fallback for unrecognized files
|
||||
maybe_creator_user_token: maybe_user_token,
|
||||
// NB: AVT (anonymous visitor) tokens are a web-session concept; API-key callers have none.
|
||||
maybe_creator_anonymous_visitor_token: None,
|
||||
|
||||
+5
-7
@@ -259,13 +259,11 @@ pub async fn omni_upload_image_media_file_handler(
|
||||
UploadType::Filesystem
|
||||
};
|
||||
|
||||
let media_file_type = match mimetype.as_str() {
|
||||
"image/jpeg" => MediaFileType::Jpg,
|
||||
"image/png" => MediaFileType::Png,
|
||||
"image/gif" => MediaFileType::Gif,
|
||||
"image/webp" => MediaFileType::Image, // Fallback
|
||||
_ => MediaFileType::Image, // fallback
|
||||
};
|
||||
let maybe_upload_filename = form.file.file_name.as_deref();
|
||||
|
||||
let media_file_type = MediaFileType::try_from_mime_type(&mimetype)
|
||||
.or_else(|| maybe_upload_filename.and_then(MediaFileType::try_from_filename_or_extension))
|
||||
.unwrap_or(MediaFileType::Image); // Coarse fallback for unrecognized files
|
||||
|
||||
let (token, record_id) = insert_media_file_from_file_upload(InsertMediaFileFromUploadArgs {
|
||||
maybe_media_class: Some(MediaFileClass::Image),
|
||||
|
||||
+5
-1
@@ -456,9 +456,13 @@ pub async fn omni_upload_video_media_file_handler(
|
||||
UploadType::Filesystem
|
||||
};
|
||||
|
||||
let maybe_upload_filename = form.file.file_name.as_deref();
|
||||
|
||||
let (token, record_id) = insert_media_file_from_file_upload(InsertMediaFileFromUploadArgs {
|
||||
maybe_media_class: Some(MediaFileClass::Video),
|
||||
media_file_type: MediaFileType::Video,
|
||||
media_file_type: MediaFileType::try_from_mime_type(&mimetype)
|
||||
.or_else(|| maybe_upload_filename.and_then(MediaFileType::try_from_filename_or_extension))
|
||||
.unwrap_or(MediaFileType::Video), // Coarse fallback for unrecognized files
|
||||
maybe_creator_user_token: maybe_user_token,
|
||||
// NB: AVT (anonymous visitor) tokens are a web-session concept; API-key callers have none.
|
||||
maybe_creator_anonymous_visitor_token: None,
|
||||
|
||||
+2
-2
@@ -134,9 +134,9 @@ pub async fn set_model_weight_cover_image_handler(
|
||||
//let can_use_image = media_file.creator_set_visibility == Visibility::Public
|
||||
// && media_file.media_type == MediaFileType::Image;
|
||||
|
||||
let can_use_image = media_file.media_type == MediaFileType::Image;
|
||||
let can_use_image = media_file.media_type.is_image();
|
||||
|
||||
if !can_use_image {
|
||||
if !can_use_image {
|
||||
return Err(CommonWebError::BadInputWithSimpleMessage("Invalid media file token.".to_string()));
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -158,7 +158,7 @@ pub async fn update_weight_handler(
|
||||
let maybe_media_file_type = maybe_media_file.map(|media_file| media_file.media_type);
|
||||
|
||||
match maybe_media_file_type {
|
||||
Some(MediaFileType::Image) => cover_image = Some(CoverImageOption::SetCoverImage(media_file_token)),
|
||||
Some(media_file_type) if media_file_type.is_image() => cover_image = Some(CoverImageOption::SetCoverImage(media_file_token)),
|
||||
None => return Err(CommonWebError::BadInputWithSimpleMessage("Media file does not exist".to_string())),
|
||||
_ => return Err(CommonWebError::BadInputWithSimpleMessage("Media file is the wrong type".to_string())),
|
||||
}
|
||||
|
||||
@@ -43,7 +43,6 @@ describe("MediaFilesApi", () => {
|
||||
},
|
||||
maybe_duration_millis: 0,
|
||||
maybe_engine_category: "scene",
|
||||
maybe_media_subtype: "mixamo",
|
||||
maybe_model_weight_info: {
|
||||
maybe_cover_image_public_bucket_path: "string",
|
||||
maybe_weight_creator: {
|
||||
|
||||
@@ -31,28 +31,3 @@ export enum MediaFileType {
|
||||
None = "none",
|
||||
}
|
||||
|
||||
export enum MediaFileSubtype {
|
||||
/// Animation file from Mixamo
|
||||
/// Primarily used for FBX and GLB.
|
||||
Mixamo = "mixamo",
|
||||
|
||||
/// Animation file from MocapNet
|
||||
/// Primarily used for BVH.
|
||||
MocapNet = "mocap_net",
|
||||
|
||||
/// Generic animation case
|
||||
/// Used for BVH files, but can also pertain to animation-only files of other types.
|
||||
AnimationOnly = "animation_only",
|
||||
|
||||
// TODO(bt,2024-03-08): Migrate records and code, then remove
|
||||
/// DEPRECATED: Use `SceneImport` instead.
|
||||
Scene = "scene",
|
||||
|
||||
/// Generic 3D scene file.
|
||||
/// Can pertain to glTF, glB, FBX, etc.
|
||||
SceneImport = "scene_import",
|
||||
|
||||
/// Native Storyteller scene format.
|
||||
/// Typically stored in a `.scn.ron` file.
|
||||
StorytellerScene = "storyteller_scene",
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { MediaFileClass } from "../enums/MediaFileClass";
|
||||
import { MediaFileType, MediaFileSubtype } from "../enums/MediaFileType";
|
||||
import { MediaFileType } from "../enums/MediaFileType";
|
||||
import { WeightCategory } from "../enums/WeightCategory";
|
||||
import { WeightType } from "../enums/WeightType";
|
||||
import { UserInfo } from "./Users";
|
||||
@@ -9,7 +9,6 @@ export interface MediaFile {
|
||||
media_type: MediaFileType;
|
||||
media_class: MediaFileClass | null;
|
||||
maybe_animation_type: string | null;
|
||||
maybe_media_subtype: MediaFileSubtype | null;
|
||||
maybe_engine_extension: string | null;
|
||||
maybe_batch_token: string;
|
||||
maybe_original_filename: string | null;
|
||||
|
||||
@@ -50,7 +50,6 @@ export {
|
||||
FilterMediaClasses,
|
||||
FilterMediaType,
|
||||
MediaFileType,
|
||||
MediaFileSubtype,
|
||||
MediaFileClass,
|
||||
ToastTypes,
|
||||
WeightCategory,
|
||||
|
||||
@@ -34,28 +34,3 @@ export enum MediaFileType {
|
||||
None = "none",
|
||||
}
|
||||
|
||||
export enum MediaFileSubtype {
|
||||
/// Animation file from Mixamo
|
||||
/// Primarily used for FBX and GLB.
|
||||
Mixamo = "mixamo",
|
||||
|
||||
/// Animation file from MocapNet
|
||||
/// Primarily used for BVH.
|
||||
MocapNet = "mocap_net",
|
||||
|
||||
/// Generic animation case
|
||||
/// Used for BVH files, but can also pertain to animation-only files of other types.
|
||||
AnimationOnly = "animation_only",
|
||||
|
||||
// TODO(bt,2024-03-08): Migrate records and code, then remove
|
||||
/// DEPRECATED: Use `SceneImport` instead.
|
||||
Scene = "scene",
|
||||
|
||||
/// Generic 3D scene file.
|
||||
/// Can pertain to glTF, glB, FBX, etc.
|
||||
SceneImport = "scene_import",
|
||||
|
||||
/// Native Storyteller scene format.
|
||||
/// Typically stored in a `.scn.ron` file.
|
||||
StorytellerScene = "storyteller_scene",
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@ import { UserDetailsLight } from "./types";
|
||||
|
||||
import {
|
||||
MediaFileClass,
|
||||
MediaFileSubtype,
|
||||
MediaFileType,
|
||||
WeightCategory,
|
||||
WeightType,
|
||||
@@ -13,7 +12,6 @@ export interface MediaInfo {
|
||||
media_type: MediaFileType;
|
||||
media_class: MediaFileClass | null;
|
||||
maybe_animation_type: string | null;
|
||||
maybe_media_subtype: MediaFileSubtype | null;
|
||||
maybe_engine_extension: string | null;
|
||||
maybe_batch_token: string;
|
||||
maybe_original_filename: string | null;
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
/// Basic information to display a user and their avatar.
|
||||
import {
|
||||
MediaFileClass,
|
||||
MediaFileSubtype,
|
||||
MediaFileType,
|
||||
WeightCategory,
|
||||
WeightType,
|
||||
@@ -29,7 +28,6 @@ export interface MediaFile {
|
||||
token: string;
|
||||
media_type: MediaFileType;
|
||||
media_class: MediaFileClass | null;
|
||||
maybe_media_subtype: MediaFileSubtype | null;
|
||||
public_bucket_path: string;
|
||||
maybe_engine_extension: string | null;
|
||||
maybe_batch_token: string;
|
||||
|
||||
Reference in New Issue
Block a user