From 82fb7d07c70eab779476f2f783e0334ec0f63a28 Mon Sep 17 00:00:00 2001 From: netpro2k <netpro2k@gmail.com> Date: Thu, 12 Jul 2018 15:01:21 -0700 Subject: [PATCH] Use expected_content_type from reticulum instead for static mapping --- src/utils/media-utils.js | 18 +++++++----------- src/vendor/GLTFLoader.js | 6 +++--- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/src/utils/media-utils.js b/src/utils/media-utils.js index e22efc18f..211ebd9d5 100644 --- a/src/utils/media-utils.js +++ b/src/utils/media-utils.js @@ -8,19 +8,15 @@ if (process.env.NODE_ENV === "development") { export const resolveFarsparkUrl = async url => { const parsedUrl = new URL(url); if ((parsedUrl.protocol !== "http:" && parsedUrl.protocol !== "https:") || isHostWhitelisted(parsedUrl.hostname)) - return [url, url]; + return { raw: url, origin: url }; - const mediaResponse = await fetch(resolveMediaUrl, { + return await fetch(resolveMediaUrl, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ media: { url } }) }).then(r => r.json()); - return [mediaResponse.raw, mediaResponse.origin]; }; -const staticContentMappings = { - "poly.googleapis.com": "model/gltf" -}; const fetchContentType = async url => fetch(url, { method: "HEAD" }).then(r => r.headers.get("content-type")); let interactableId = 0; @@ -59,14 +55,14 @@ export const spawnNetworkedInteractable = (src, basePath) => { export const addMedia = async url => { try { - const [farsparkUrl, originUrl] = await resolveFarsparkUrl(url); - console.log("resolved", url, farsparkUrl, originUrl); + const { raw, origin, meta } = await resolveFarsparkUrl(url); + console.log("resolved", url, raw, origin, meta); - const contentType = staticContentMappings[new URL(originUrl).hostname] || (await fetchContentType(farsparkUrl)); + const contentType = (meta && meta.expected_content_type) || (await fetchContentType(raw)); if (contentType.startsWith("image/") || contentType.startsWith("video/")) { - return spawnNetworkedImage(farsparkUrl, contentType); + return spawnNetworkedImage(raw, contentType); } else if (contentType.startsWith("model/gltf") || url.endsWith(".gltf") || url.endsWith(".glb")) { - return spawnNetworkedInteractable(farsparkUrl, THREE.LoaderUtils.extractUrlBase(originUrl)); + return spawnNetworkedInteractable(raw, THREE.LoaderUtils.extractUrlBase(origin)); } else { throw new Error(`Unsupported content type: ${contentType}`); } diff --git a/src/vendor/GLTFLoader.js b/src/vendor/GLTFLoader.js index 52887bc9d..5e23d9250 100644 --- a/src/vendor/GLTFLoader.js +++ b/src/vendor/GLTFLoader.js @@ -40,7 +40,7 @@ THREE.GLTFLoader = ( function () { loader.setResponseType( 'arraybuffer' ); - var [farsparkURL] = await resolveFarsparkUrl(url); + var farsparkURL = (await resolveFarsparkUrl(url)).raw; loader.load( farsparkURL, function ( data ) { @@ -1623,7 +1623,7 @@ THREE.GLTFLoader = ( function () { var options = this.options; - var [farsparkURL] = await resolveFarsparkUrl(resolveURL(bufferDef.uri, options.path)); + var farsparkURL = (await resolveFarsparkUrl(resolveURL(bufferDef.uri, options.path))).raw; return new Promise( function ( resolve, reject ) { @@ -1823,7 +1823,7 @@ THREE.GLTFLoader = ( function () { var urlToLoad = resolveURL(sourceURI, options.path); if (!hasBufferView){ - [urlToLoad] = await resolveFarsparkUrl(urlToLoad); + urlToLoad = (await resolveFarsparkUrl(urlToLoad)).raw; } return Promise.resolve( sourceURI ).then( function ( sourceURI ) { -- GitLab