From 4dc2aa175624a4d29e4c4e8d3881461df093d13f Mon Sep 17 00:00:00 2001
From: Alex Xu <alex_y_xu@yahoo.ca>
Date: Thu, 23 Jan 2014 09:25:19 -0500
Subject: stuff

---
 www/js/api.js | 95 ++++++++++++++++++++++++++++++-----------------------------
 1 file changed, 49 insertions(+), 46 deletions(-)

(limited to 'www/js')

diff --git a/www/js/api.js b/www/js/api.js
index ed357de..e029413 100644
--- a/www/js/api.js
+++ b/www/js/api.js
@@ -33,6 +33,38 @@ window.html5ks.api = new (function () {
     return when.resolve();
   },
 
+  _loadMedia: function (el, src, types) {
+    var deferred = when.defer();
+    var i = 0;
+    var _nextType = function () {
+      for (; i < types.length; i++) {
+        var type = types[i];
+        if (el.canPlayType(type[0])) {
+          el.src = src + "." + type[1];
+          el.load();
+          el.play();
+          return true;
+        }
+      }
+      return false;
+    };
+
+    _nextType();
+
+    el.onerror = function (e) {
+      if (e.code === e.MEDIA_ERR_SRC_NOT_SUPPORTED) {
+        if (!_nextType()) {
+          console.log("no audio formats supported");
+          deferred.resolve();
+        }
+      } else {
+        console.error("unknown audio error");
+        deferred.resolve();
+      }
+    };
+    return deferred.promise;
+  },
+
   play: function (channel, name, ignore, fade) {
     this.stop(channel);
     var deferred = when.defer(),
@@ -55,19 +87,6 @@ window.html5ks.api = new (function () {
         volume = html5ks.persistent.sfxVolume;
     }
 
-    var types = ["opus", "ogg", "m4a", "wav"];
-
-    var setNextType = function (i) {
-      for (; i < types.length; i++) {
-        if (Modernizr.audio[types[i]]) {
-          audio.src = src + "." + types[i];
-          return i;
-        }
-      }
-    };
-
-    var i = setNextType(0);
-
     audio.addEventListener("playing", function playing() {
       audio.removeEventListener("playing", playing, false);
       if (fade) {
@@ -75,21 +94,16 @@ window.html5ks.api = new (function () {
       }
       deferred.resolve();
     }, false);
-    audio.onerror = function (e) {
-      if (e.code === e.MEDIA_ERR_SRC_NOT_SUPPORTED) {
-        i = setNextType(i);
-        if (!i) {
-          console.log("no audio formats supported");
-          deferred.resolve();
-        }
-      } else {
-        console.error("unknown audio error");
-        deferred.resolve();
-      }
-    };
-    audio.load();
+
     audio.volume = fade ? 0 : volume;
-    audio.play();
+    this._loadMedia(audio, src, [
+      ['audio/ogg; codecs="opus"', "opus"],
+      ['audio/ogg; codecs="vorbis"', "ogg"],
+      ['audio/x-m4a', "m4a"],
+      ['audio/aac', "aac"],
+      ['audio/wav; codecs="1"', "wav"]]).then(function () { deferred.resolve(); });
+    // TODO: fix this garbage -------------------------------^
+
     return deferred.promise;
   },
 
@@ -115,7 +129,7 @@ window.html5ks.api = new (function () {
   movie_cutscene: function (vid_src, skippable) {
     var deferred = when.defer(),
         video = html5ks.elements.video,
-        src = "dump/video/" + vid_src + ".";
+        src = "dump/video/" + vid_src;
 
     this.stop("all");
     clearInterval(html5ks._nextTimeout);
@@ -124,23 +138,15 @@ window.html5ks.api = new (function () {
       return deferred.resolve();
     }
 
-    var types = {
-      "vp9": "vp9.webm",
-      "webm": "webm",
-      "ogg": "ogv",
-      "h264": "mp4"
-    };
-    for (var type in types) {
-      if (Modernizr.video[type]) {
-        video.src = src + types[type];
-        break;
-      }
-    }
-
-    video.load();
+    this._loadMedia(video, src, [
+      ['video/webm; codecs="vp9,opus"', "vp9.webm"],
+      ['video/webm; codecs="vp8,vorbis"', "webm"],
+      ['video/ogg; codecs="theora,vorbis"', "ogv"],
+      // TODO: check that this is the right codec
+      ['video/mp4; codecs="avc1.42E01E,mp4a.40.2"']]).then(function () { deferred.resolve(); });
+      // TODO: fix this garbage
     video.style.display = "block";
     video.volume = html5ks.persistent.musicVolume;
-    video.play();
     var done = function () {
       video.style.display = "none";
       video.pause();
@@ -159,9 +165,6 @@ window.html5ks.api = new (function () {
       }
     };
     video.onended = done;
-    video.onerror = function () {
-      deferred.reject(this.error);
-    };
     return deferred.promise;
   },
 
-- 
cgit v1.2.3-70-g09d2