mirror of
https://github.com/storytold/artcraft.git
synced 2026-10-24 02:29:32 -04:00
Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
07e1ddfd77 |
-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_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
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"db_name": "MySQL",
|
||||
"query": "\nINSERT INTO media_files\nSET\n token = ?,\n\n media_class = ?,\n media_type = ?,\n maybe_project_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 maybe_project_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": 39
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "ed190d823c1d0cb5991666a25329578cbca124327bbf84116764f80d8ab4641d"
|
||||
}
|
||||
+8
@@ -8,6 +8,7 @@ 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_project_type::MediaFileProjectType;
|
||||
use enums::by_table::media_files::media_file_type::MediaFileType;
|
||||
use enums::common::visibility::Visibility;
|
||||
use errors::AnyhowResult;
|
||||
@@ -32,6 +33,9 @@ pub struct UpsertMediaFileFromUploadArgs<'a> {
|
||||
pub maybe_media_class: Option<MediaFileClass>,
|
||||
pub media_file_type: MediaFileType,
|
||||
|
||||
/// Only set for internal Artcraft project documents (`media_class = 'project'`).
|
||||
pub maybe_project_type: Option<MediaFileProjectType>,
|
||||
|
||||
pub maybe_engine_category: Option<MediaFileEngineCategory>,
|
||||
pub maybe_animation_type: Option<MediaFileAnimationType>,
|
||||
|
||||
@@ -105,6 +109,7 @@ SET
|
||||
|
||||
media_class = ?,
|
||||
media_type = ?,
|
||||
maybe_project_type = ?,
|
||||
|
||||
origin_category = ?,
|
||||
origin_product_category = ?,
|
||||
@@ -139,6 +144,7 @@ ON DUPLICATE KEY UPDATE
|
||||
|
||||
media_class = ?,
|
||||
media_type = ?,
|
||||
maybe_project_type = ?,
|
||||
|
||||
origin_category = ?,
|
||||
origin_product_category = ?,
|
||||
@@ -173,6 +179,7 @@ ON DUPLICATE KEY UPDATE
|
||||
|
||||
media_class.to_str(),
|
||||
args.media_file_type.to_str(),
|
||||
args.maybe_project_type.map(|project_type| project_type.to_str()),
|
||||
|
||||
origin_category.to_str(),
|
||||
ORIGIN_PRODUCT_CATEGORY.to_str(),
|
||||
@@ -202,6 +209,7 @@ ON DUPLICATE KEY UPDATE
|
||||
|
||||
media_class.to_str(),
|
||||
args.media_file_type.to_str(),
|
||||
args.maybe_project_type.map(|project_type| project_type.to_str()),
|
||||
|
||||
origin_category.to_str(),
|
||||
ORIGIN_PRODUCT_CATEGORY.to_str(),
|
||||
|
||||
@@ -171,22 +171,24 @@ impl MediaFileType {
|
||||
| Self::Webm
|
||||
| Self::Mov => MediaFileClass::Video,
|
||||
|
||||
Self::Bvh
|
||||
| Self::Fbx
|
||||
Self::Fbx
|
||||
| Self::Obj
|
||||
| Self::Glb
|
||||
| Self::Gltf
|
||||
| Self::Spz
|
||||
| Self::SceneRon
|
||||
| Self::SceneJson
|
||||
| Self::Pmd
|
||||
| Self::Pmx => MediaFileClass::Mesh,
|
||||
|
||||
Self::Spz => MediaFileClass::Splat,
|
||||
|
||||
// Animation and auxiliary data formats with no dedicated class yet.
|
||||
#[allow(deprecated)]
|
||||
Self::Bvh
|
||||
| Self::Vmd
|
||||
| Self::Pmx
|
||||
| Self::Csv => MediaFileClass::Dimensional,
|
||||
|
||||
// NB: SceneRon/SceneJson stay Dimensional above until existing rows are
|
||||
// backfilled to the `project` class.
|
||||
Self::Json => MediaFileClass::Project,
|
||||
Self::SceneRon
|
||||
| Self::SceneJson
|
||||
| Self::Json => MediaFileClass::Project,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -524,16 +526,16 @@ mod tests {
|
||||
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::Fbx.to_media_class(), MediaFileClass::Mesh);
|
||||
assert_eq!(MediaFileType::Obj.to_media_class(), MediaFileClass::Mesh);
|
||||
assert_eq!(MediaFileType::Glb.to_media_class(), MediaFileClass::Mesh);
|
||||
assert_eq!(MediaFileType::Gltf.to_media_class(), MediaFileClass::Mesh);
|
||||
assert_eq!(MediaFileType::Spz.to_media_class(), MediaFileClass::Splat);
|
||||
assert_eq!(MediaFileType::SceneRon.to_media_class(), MediaFileClass::Project);
|
||||
assert_eq!(MediaFileType::SceneJson.to_media_class(), MediaFileClass::Project);
|
||||
assert_eq!(MediaFileType::Pmd.to_media_class(), MediaFileClass::Mesh);
|
||||
assert_eq!(MediaFileType::Vmd.to_media_class(), MediaFileClass::Dimensional);
|
||||
assert_eq!(MediaFileType::Pmx.to_media_class(), MediaFileClass::Dimensional);
|
||||
assert_eq!(MediaFileType::Pmx.to_media_class(), MediaFileClass::Mesh);
|
||||
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);
|
||||
|
||||
+1
-1
@@ -187,7 +187,7 @@ pub async fn process_job(args: FbxToGltfJobArgs<'_>) -> Result<JobSuccessResult,
|
||||
let (inference_result_token, id) = insert_media_file_generic_from_job(InsertFromJobArgs {
|
||||
pool: &args.job_dependencies.db.mysql_pool,
|
||||
job: &job,
|
||||
media_class: MediaFileClass::Dimensional,
|
||||
media_class: MediaFileClass::Mesh,
|
||||
media_type: upload_details.media_type,
|
||||
origin_category: MediaFileOriginCategory::Processed,
|
||||
origin_product_category: MediaFileOriginProductCategory::Mocap,
|
||||
|
||||
@@ -122,7 +122,7 @@ pub async fn process_successful_job(
|
||||
.maybe_generation_provider(Some(GenerationProvider::Artcraft))
|
||||
.maybe_prompt_token(job.maybe_prompt_token.as_ref())
|
||||
.maybe_platform_type(job.maybe_platform_type)
|
||||
.media_file_class(MediaFileClass::Dimensional)
|
||||
.media_file_class(MediaFileClass::Splat)
|
||||
.media_file_origin_category(MediaFileOriginCategory::Inference)
|
||||
.media_file_origin_product_category(MediaFileOriginProductCategory::WorldGeneration)
|
||||
.media_file_type(MediaFileType::Spz)
|
||||
|
||||
+3
-2
@@ -9,6 +9,7 @@ use utoipa::ToSchema;
|
||||
use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath;
|
||||
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_project_type::MediaFileProjectType;
|
||||
use enums::by_table::media_files::media_file_type::MediaFileType;
|
||||
use enums::common::visibility::Visibility;
|
||||
use hashing::sha256::sha256_hash_bytes::sha256_hash_bytes;
|
||||
@@ -165,8 +166,8 @@ pub async fn create_scene_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::Dimensional),
|
||||
maybe_project_type: None,
|
||||
maybe_media_class: Some(MediaFileClass::Project),
|
||||
maybe_project_type: Some(MediaFileProjectType::Scene3d),
|
||||
media_file_type: MediaFileType::SceneRon,
|
||||
maybe_creator_user_token: maybe_user_token,
|
||||
maybe_creator_anonymous_visitor_token: maybe_avt_token.as_ref(),
|
||||
|
||||
+6
-3
@@ -7,7 +7,7 @@ use log::{error, info, warn};
|
||||
use utoipa::ToSchema;
|
||||
|
||||
use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath;
|
||||
use enums::by_table::media_files::media_file_class::MediaFileClass;
|
||||
use enums::by_table::media_files::media_file_project_type::MediaFileProjectType;
|
||||
use enums::by_table::media_files::media_file_type::MediaFileType;
|
||||
use enums::common::visibility::Visibility;
|
||||
use hashing::sha256::sha256_hash_bytes::sha256_hash_bytes;
|
||||
@@ -204,8 +204,11 @@ pub async fn upload_engine_asset_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::Dimensional),
|
||||
maybe_project_type: None,
|
||||
maybe_media_class: Some(media_file_type.to_media_class()),
|
||||
maybe_project_type: match media_file_type {
|
||||
MediaFileType::SceneRon | MediaFileType::SceneJson => Some(MediaFileProjectType::Scene3d),
|
||||
_ => None,
|
||||
},
|
||||
media_file_type,
|
||||
maybe_creator_user_token: maybe_user_token,
|
||||
maybe_creator_anonymous_visitor_token: maybe_avt_token.as_ref(),
|
||||
|
||||
+1
-1
@@ -256,7 +256,7 @@ pub async fn upload_pmx_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::Dimensional),
|
||||
maybe_media_class: Some(MediaFileClass::Mesh),
|
||||
maybe_project_type: None,
|
||||
media_file_type: MediaFileType::Pmx,
|
||||
maybe_creator_user_token: Some(user_session.get_user_token()),
|
||||
|
||||
+3
-2
@@ -13,6 +13,7 @@ use utoipa::ToSchema;
|
||||
use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath;
|
||||
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_project_type::MediaFileProjectType;
|
||||
use enums::by_table::media_files::media_file_type::MediaFileType;
|
||||
use enums::common::visibility::Visibility;
|
||||
use hashing::sha256::sha256_hash_bytes::sha256_hash_bytes;
|
||||
@@ -217,8 +218,8 @@ pub async fn upload_scene_snapshot_media_file_handler(
|
||||
})?;
|
||||
|
||||
let (token, record_id) = insert_media_file_from_file_upload(InsertMediaFileFromUploadArgs {
|
||||
maybe_media_class: Some(MediaFileClass::Dimensional),
|
||||
maybe_project_type: None,
|
||||
maybe_media_class: Some(MediaFileClass::Project),
|
||||
maybe_project_type: Some(MediaFileProjectType::Scene3d),
|
||||
media_file_type: MediaFileType::SceneJson,
|
||||
maybe_creator_user_token: maybe_user_token,
|
||||
maybe_creator_anonymous_visitor_token: maybe_avt_token.as_ref(),
|
||||
|
||||
+1
-1
@@ -253,7 +253,7 @@ pub async fn upload_spz_media_file_handler(
|
||||
.and_then(|text| try_parse_generation_provider(text.as_ref()));
|
||||
|
||||
let media_token = MediaFileInsertBuilder::new()
|
||||
.media_file_class(MediaFileClass::Dimensional)
|
||||
.media_file_class(MediaFileClass::Splat)
|
||||
.media_file_type(MediaFileType::Spz)
|
||||
.maybe_creator_user(maybe_user_token)
|
||||
.maybe_creator_anonymous_visitor(maybe_avt_token.as_ref())
|
||||
|
||||
+6
-2
@@ -7,7 +7,7 @@ use log::{error, info, warn};
|
||||
use utoipa::ToSchema;
|
||||
|
||||
use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath;
|
||||
use enums::by_table::media_files::media_file_class::MediaFileClass;
|
||||
use enums::by_table::media_files::media_file_project_type::MediaFileProjectType;
|
||||
use enums::by_table::media_files::media_file_type::MediaFileType;
|
||||
use enums::common::visibility::Visibility;
|
||||
use hashing::sha256::sha256_hash_bytes::sha256_hash_bytes;
|
||||
@@ -227,7 +227,11 @@ pub async fn write_engine_asset_media_file_handler(
|
||||
// TODO(bt, 2024-02-22): This should be a transaction.
|
||||
let (token, record_id) = upsert_media_file_from_file_upload(UpsertMediaFileFromUploadArgs {
|
||||
maybe_media_file_token: upload_media_request.media_file_token.as_ref(),
|
||||
maybe_media_class: Some(MediaFileClass::Dimensional),
|
||||
maybe_media_class: Some(media_file_type.to_media_class()),
|
||||
maybe_project_type: match media_file_type {
|
||||
MediaFileType::SceneRon | MediaFileType::SceneJson => Some(MediaFileProjectType::Scene3d),
|
||||
_ => None,
|
||||
},
|
||||
media_file_type,
|
||||
maybe_engine_category: upload_media_request.maybe_engine_category,
|
||||
maybe_animation_type: upload_media_request.maybe_animation_type,
|
||||
|
||||
+2
-2
@@ -143,7 +143,7 @@ pub async fn process_model_glb_payload(
|
||||
.maybe_creator_anonymous_visitor(job.maybe_creator_anonymous_visitor_token.as_ref())
|
||||
.creator_ip_address(&job.creator_ip_address)
|
||||
.public_bucket_directory_hash(&public_upload_path)
|
||||
.media_file_class(MediaFileClass::Dimensional)
|
||||
.media_file_class(MediaFileClass::Mesh)
|
||||
.media_file_type(media_file_type)
|
||||
.media_file_origin_category(MediaFileOriginCategory::Inference)
|
||||
.maybe_engine_category(Some(MediaFileEngineCategory::Object))
|
||||
@@ -280,7 +280,7 @@ async fn try_to_attach_thumbnail(
|
||||
.maybe_generation_provider(Some(GenerationProvider::Artcraft))
|
||||
.maybe_prompt_token(job.maybe_prompt_token.as_ref())
|
||||
.maybe_platform_type(job.maybe_platform_type)
|
||||
.media_file_class(MediaFileClass::Dimensional)
|
||||
.media_file_class(MediaFileClass::Image)
|
||||
.media_file_origin_category(MediaFileOriginCategory::Inference)
|
||||
.media_file_type(media_file_type)
|
||||
.mime_type(mime_type)
|
||||
|
||||
+1
-1
@@ -174,7 +174,7 @@ pub(crate) async fn upload_mesh_file(
|
||||
.maybe_generation_provider(Some(GenerationProvider::Artcraft))
|
||||
.maybe_prompt_token(job.maybe_prompt_token.as_ref())
|
||||
.maybe_platform_type(job.maybe_platform_type)
|
||||
.media_file_class(MediaFileClass::Dimensional)
|
||||
.media_file_class(MediaFileClass::Mesh)
|
||||
.media_file_origin_category(MediaFileOriginCategory::Inference)
|
||||
.media_file_type(media_file_type)
|
||||
.mime_type(mime_type)
|
||||
|
||||
Reference in New Issue
Block a user