From 70ddee0ddea7de8bb83f27a5087a2736e9763797 Mon Sep 17 00:00:00 2001
From: Robert Long <robert@robertlong.me>
Date: Fri, 3 Aug 2018 15:15:41 -0700
Subject: [PATCH] Refactor resolveMedia to make basePath correct.

---
 src/components/gltf-model-plus.js | 10 +++++-----
 src/components/media-loader.js    | 10 ++--------
 src/utils/media-utils.js          |  6 ++++++
 3 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/src/components/gltf-model-plus.js b/src/components/gltf-model-plus.js
index 5a6a3025c..6e79da6ff 100644
--- a/src/components/gltf-model-plus.js
+++ b/src/components/gltf-model-plus.js
@@ -226,9 +226,11 @@ function resolveURL(url, path) {
   return path + url;
 }
 
-async function loadGLTF(src, basePath, contentType, preferredTechnique, onProgress) {
-  let gltfUrl = (await resolveMedia(src)).raw;
+async function loadGLTF(src, preferredTechnique, onProgress) {
+  const { raw, origin, contentType } = await resolveMedia(src);
+  const basePath = THREE.LoaderUtils.extractUrlBase(origin);
 
+  let gltfUrl = raw;
   let fileMap;
 
   if (contentType === "model/gltf+zip") {
@@ -327,8 +329,6 @@ async function loadGLTF(src, basePath, contentType, preferredTechnique, onProgre
 AFRAME.registerComponent("gltf-model-plus", {
   schema: {
     src: { type: "string" },
-    contentType: { type: "string" },
-    basePath: { type: "string", default: undefined },
     inflate: { default: false }
   },
 
@@ -371,7 +371,7 @@ AFRAME.registerComponent("gltf-model-plus", {
       const gltfPath = THREE.LoaderUtils.extractUrlBase(src);
 
       if (!GLTFCache[src]) {
-        GLTFCache[src] = loadGLTF(src, this.data.basePath, this.data.contentType, this.preferredTechnique);
+        GLTFCache[src] = loadGLTF(src, this.preferredTechnique);
       }
 
       const cachedModel = await GLTFCache[src];
diff --git a/src/components/media-loader.js b/src/components/media-loader.js
index 544d4443a..ada77a518 100644
--- a/src/components/media-loader.js
+++ b/src/components/media-loader.js
@@ -1,8 +1,6 @@
 import { getBox, getScaleCoefficient } from "../utils/auto-box-collider";
 import { resolveMedia } from "../utils/media-utils";
 
-const fetchContentType = async url => fetch(url, { method: "HEAD" }).then(r => r.headers.get("content-type"));
-
 AFRAME.registerComponent("media-loader", {
   schema: {
     src: { type: "string" },
@@ -53,10 +51,8 @@ AFRAME.registerComponent("media-loader", {
         this.setShapeAndScale(true);
       }, 100);
 
-      const { raw, origin, meta } = await resolveMedia(url);
-      console.log("resolved", url, raw, origin, meta);
+      const { raw, contentType } = await resolveMedia(url);
 
-      const contentType = (meta && meta.expected_content_type) || (await fetchContentType(raw));
       if (contentType.startsWith("image/") || contentType.startsWith("video/") || contentType.startsWith("audio/")) {
         this.el.addEventListener(
           "image-loaded",
@@ -78,9 +74,7 @@ AFRAME.registerComponent("media-loader", {
         );
         this.el.addEventListener("model-error", this.onError, { once: true });
         this.el.setAttribute("gltf-model-plus", {
-          src: raw,
-          contentType,
-          basePath: THREE.LoaderUtils.extractUrlBase(origin),
+          src: url,
           inflate: true
         });
       } else {
diff --git a/src/utils/media-utils.js b/src/utils/media-utils.js
index 96e3b618a..0ebd5c3e1 100644
--- a/src/utils/media-utils.js
+++ b/src/utils/media-utils.js
@@ -6,6 +6,8 @@ if (process.env.RETICULUM_SERVER) {
   mediaAPIEndpoint = `https://${process.env.RETICULUM_SERVER}${mediaAPIEndpoint}`;
 }
 
+const fetchContentType = async url => fetch(url, { method: "HEAD" }).then(r => r.headers.get("content-type"));
+
 const resolveMediaCache = new Map();
 export const resolveMedia = async url => {
   const parsedUrl = new URL(url);
@@ -19,6 +21,10 @@ export const resolveMedia = async url => {
           headers: { "Content-Type": "application/json" },
           body: JSON.stringify({ media: { url } })
         }).then(r => r.json());
+
+  const contentType = (resolved.meta && resolved.meta.expected_content_type) || (await fetchContentType(resolved.raw));
+  resolved.contentType = contentType;
+
   resolveMediaCache.set(url, resolved);
   return resolved;
 };
-- 
GitLab