Handle model import error by cleaning up resources
This commit is contained in:
@@ -47,6 +47,7 @@ import {
|
|||||||
importModelAssetFromFile,
|
importModelAssetFromFile,
|
||||||
loadModelAssetFromStorage,
|
loadModelAssetFromStorage,
|
||||||
disposeModelTemplate,
|
disposeModelTemplate,
|
||||||
|
type ImportedModelAssetResult,
|
||||||
type LoadedModelAsset
|
type LoadedModelAsset
|
||||||
} from "../assets/gltf-model-import";
|
} from "../assets/gltf-model-import";
|
||||||
import type { ModelAssetRecord, ProjectAssetRecord } from "../assets/project-assets";
|
import type { ModelAssetRecord, ProjectAssetRecord } from "../assets/project-assets";
|
||||||
@@ -1949,8 +1950,10 @@ export function App({ store, initialStatusMessage }: AppProps) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let importedModel: ImportedModelAssetResult | null = null;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const importedModel = await importModelAssetFromFile(file, projectAssetStorage);
|
importedModel = await importModelAssetFromFile(file, projectAssetStorage);
|
||||||
|
|
||||||
store.executeCommand(
|
store.executeCommand(
|
||||||
createImportModelAssetCommand({
|
createImportModelAssetCommand({
|
||||||
@@ -1971,6 +1974,11 @@ export function App({ store, initialStatusMessage }: AppProps) {
|
|||||||
setAssetStatusMessage(null);
|
setAssetStatusMessage(null);
|
||||||
setStatusMessage(`Imported ${importedModel.asset.sourceName} and placed a model instance.`);
|
setStatusMessage(`Imported ${importedModel.asset.sourceName} and placed a model instance.`);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
if (importedModel !== null) {
|
||||||
|
await projectAssetStorage.deleteAsset(importedModel.asset.storageKey).catch(() => undefined);
|
||||||
|
disposeModelTemplate(importedModel.loadedAsset.template);
|
||||||
|
}
|
||||||
|
|
||||||
const message = getErrorMessage(error);
|
const message = getErrorMessage(error);
|
||||||
setStatusMessage(message);
|
setStatusMessage(message);
|
||||||
setAssetStatusMessage(message);
|
setAssetStatusMessage(message);
|
||||||
|
|||||||
Reference in New Issue
Block a user