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