Files
artcraft/app/components/reusable/UploadModal/uploadAssets.ts
T
wilandwil b3093e65e8 TABS / film set, set dressings, creatures, etc (#606)
more tabs for the object sub-categories

Co-authored-by: wil <wil@storyteller.ai>
2024-07-10 18:24:30 -04:00

103 lines
2.8 KiB
TypeScript

import { v4 as uuidv4 } from "uuid";
import {
FilterEngineCategories,
MediaFileAnimationType,
UploaderStates,
} from "~/enums";
import { getFileName, getFileExtension } from "~/utilities";
import { MediaUploadApi, MediaFilesApi } from "~/Classes/ApiManager";
import { UploaderState } from "~/models";
export const uploadAssets = async ({
title,
assetFile,
thumbnailFile,
engineCategory,
animationType,
length,
progressCallback,
}: {
title: string;
assetFile: File;
engineCategory: FilterEngineCategories;
thumbnailFile?: File;
animationType?: MediaFileAnimationType;
length?: number;
progressCallback: (newState: UploaderState) => void;
}) => {
progressCallback({ status: UploaderStates.uploadingAsset });
const mediaUploadApi = new MediaUploadApi();
const fileExtension = getFileExtension(assetFile);
const assetReponse = await (async () => {
switch (fileExtension) {
case ".zip":
return mediaUploadApi.UploadPmx({
file: assetFile,
fileName: assetFile.name,
engine_category: engineCategory,
maybe_title: title,
maybe_animation_type: animationType,
uuid: uuidv4(),
});
default:
return mediaUploadApi.UploadNewEngineAsset({
file: assetFile,
fileName: assetFile.name,
engine_category: engineCategory,
maybe_animation_type: animationType,
maybe_duration_millis: length,
maybe_title: title,
uuid: uuidv4(),
});
}
})();
if (!assetReponse.success || !assetReponse.data) {
progressCallback({
status: UploaderStates.assetError,
errorMessage: assetReponse.errorMessage,
});
return;
}
const assetToken = assetReponse.data;
if (!thumbnailFile) {
progressCallback({ status: UploaderStates.success });
return;
}
progressCallback({ status: UploaderStates.uploadingCover });
const thumbnailResponse = await mediaUploadApi.UploadImage({
uuid: uuidv4(),
blob: thumbnailFile,
fileName: getFileName(thumbnailFile),
maybe_title: "thumbnail_" + title,
});
if (!thumbnailResponse.success || !thumbnailResponse.data) {
progressCallback({
status: UploaderStates.coverCreateError,
errorMessage: thumbnailResponse.errorMessage,
});
return;
}
progressCallback({ status: UploaderStates.settingCover });
const thumbnailToken = thumbnailResponse.data;
const mediaFilesApi = new MediaFilesApi();
const setThumbnailResponse = await mediaFilesApi.UpdateCoverImage({
mediaFileToken: assetToken,
imageToken: thumbnailToken,
});
if (!setThumbnailResponse.success) {
progressCallback({
status: UploaderStates.coverSetError,
errorMessage: setThumbnailResponse.errorMessage,
});
return;
}
progressCallback({ status: UploaderStates.success });
};