From 9ee5eaf0390b587bdee88dbc113a245ce142c8b6 Mon Sep 17 00:00:00 2001 From: terry feng Date: Wed, 23 Oct 2024 16:14:55 -0700 Subject: [PATCH] add try catch to loading data files --- src/components/examples/moreExamples.ts | 4 ++- src/components/fileExplorer/projectSystem.ts | 8 +++-- src/utils/fileLoader.ts | 33 ++++++++++++-------- 3 files changed, 28 insertions(+), 17 deletions(-) diff --git a/src/components/examples/moreExamples.ts b/src/components/examples/moreExamples.ts index 24be356..19c09b0 100644 --- a/src/components/examples/moreExamples.ts +++ b/src/components/examples/moreExamples.ts @@ -369,7 +369,9 @@ export default class MoreExamples { ); MoreExamples.previewExample.data.forEach(async (url: string) => { const file = await fetchDataFile(url); - ProjectSystem.addNewFile(file.name, file.data); + if (file !== null) { + ProjectSystem.addNewFile(file.name, file.data); + } }); MoreExamples.hideModal(); } diff --git a/src/components/fileExplorer/projectSystem.ts b/src/components/fileExplorer/projectSystem.ts index e82198f..16873c1 100644 --- a/src/components/fileExplorer/projectSystem.ts +++ b/src/components/fileExplorer/projectSystem.ts @@ -429,7 +429,9 @@ export async function loadChuckFileFromURL(url: string) { * @param url url to data file */ export async function loadDataFileFromURL(url: string) { - const dataFile: FileData = await fetchDataFile(url); - ProjectSystem.addNewFile(dataFile.name, dataFile.data as Uint8Array); - Console.print(`loaded file: ${dataFile.name}`); + const dataFile: FileData | null = await fetchDataFile(url); + if (dataFile !== null) { + ProjectSystem.addNewFile(dataFile.name, dataFile.data as Uint8Array); + Console.print(`loaded file: ${dataFile.name}`); + } } diff --git a/src/utils/fileLoader.ts b/src/utils/fileLoader.ts index b1620e3..b592b3c 100644 --- a/src/utils/fileLoader.ts +++ b/src/utils/fileLoader.ts @@ -16,29 +16,36 @@ export interface File { * @param url */ export async function fetchTextFile(url: string): Promise { - const filename = url.split("/").pop(); + const filename = url.split("/").pop()!; const response = await fetch(url); const text = await response.text(); - return { name: filename!, data: text }; + return { name: filename, data: text }; } /** * Load a binary file, good for loading wav files */ -export async function fetchDataFile(url: string): Promise { +export async function fetchDataFile(url: string): Promise { // const fileName = url.split('/').pop(); // let response = await fetch(url) // let blob = await response.blob(); // let data = new Uint8Array(await blob.arrayBuffer()); // return { name: fileName!, data: data}; - let file: File; - await fetch(url) - .then((response) => response.arrayBuffer()) - .then((buffer) => { - file = { - name: url.split("/").pop()!, // file name - data: new Uint8Array(buffer), // file data - }; - }); - return file!; + + let file: File | null = null; + try { + const response = await fetch(url); + if (!response.ok) { + throw new Error(`Failed to load file: ${url}`); + } + const buffer = await response.arrayBuffer(); + file = { + name: url.split("/").pop()!, // file name + data: new Uint8Array(buffer), // file data + }; + } catch (error) { + console.error(error); + } + + return file; }