fix asset loading when no content-type header

This commit is contained in:
dank074 2022-11-18 20:07:05 -06:00
parent 673fcd112c
commit 9947f8af40
2 changed files with 25 additions and 10 deletions

View File

@ -85,19 +85,28 @@ export class AssetManager implements IAssetManager
public async downloadAssets(urls: string[]): Promise<boolean> public async downloadAssets(urls: string[]): Promise<boolean>
{ {
if(!urls || !urls.length) return true; if(!urls || !urls.length) return Promise.resolve(true);
const responses = await Promise.allSettled(urls.map(url => fetch(url)));
try try
{ {
for await (const url of urls) for(const response of responses)
{ {
const response = await fetch(url); if(response.status === 'rejected') continue;
const contentType = response.headers.get('Content-Type');
let contentType = 'application/octet-stream';
if(response.value.headers.has('Content-Type'))
{
contentType = response.value.headers.get('Content-Type');
}
switch(contentType) switch(contentType)
{ {
case 'application/octet-stream': { case 'application/octet-stream': {
const nitroBundle = new NitroBundle(await response.arrayBuffer()); const buffer = await response.value.arrayBuffer();
const nitroBundle = new NitroBundle(buffer);
await this.processAsset(nitroBundle.baseTexture, (nitroBundle.jsonFile as IAssetData)); await this.processAsset(nitroBundle.baseTexture, (nitroBundle.jsonFile as IAssetData));
break; break;
@ -105,14 +114,15 @@ export class AssetManager implements IAssetManager
case 'image/png': case 'image/png':
case 'image/jpeg': case 'image/jpeg':
case 'image/gif': { case 'image/gif': {
const base64 = ArrayBufferToBase64(await response.arrayBuffer()); const buffer = await response.value.arrayBuffer();
const base64 = ArrayBufferToBase64(buffer);
const baseTexture = BaseTexture.from(`data:${contentType};base64,${base64}`); const baseTexture = BaseTexture.from(`data:${contentType};base64,${base64}`);
const createAsset = async () => const createAsset = async () =>
{ {
const texture = new Texture(baseTexture); const texture = new Texture(baseTexture);
this.setTexture(response.url, texture); this.setTexture(response.value.url, texture);
}; };
if(baseTexture.valid) if(baseTexture.valid)
@ -136,14 +146,14 @@ export class AssetManager implements IAssetManager
} }
} }
return true; return Promise.resolve(true);
} }
catch (err) catch (err)
{ {
NitroLogger.error(err); NitroLogger.error(err);
return false; return Promise.resolve(false);
} }
} }

View File

@ -494,7 +494,12 @@ export class RoomContentLoader implements IFurnitureDataListener, IRoomContentLo
try try
{ {
const response = await fetch(assetUrl); const response = await fetch(assetUrl);
const contentType = response.headers.get('Content-Type'); let contentType = 'application/octet-stream';
if(response.headers.has('Content-Type'))
{
contentType = response.headers.get('Content-Type');
}
switch(contentType) switch(contentType)
{ {