From af663bfbcf0bc1caa1644f878b6d4b326abb80f6 Mon Sep 17 00:00:00 2001 From: calzoneman Date: Thu, 11 Aug 2016 20:04:51 -0700 Subject: [PATCH] Implement HTML5 hack for google drive Requires enabling in config.yaml google-drive: html5-hack-enabled: true Requires a recent version of node and an IPv6 address EXPERIMENTAL --- player/update.coffee | 8 ++++++++ player/videojs.coffee | 7 ++++--- src/config.js | 3 +++ src/get-info.js | 2 ++ src/media.js | 3 ++- www/js/player.js | 25 +++++++++++++++++++------ 6 files changed, 38 insertions(+), 10 deletions(-) diff --git a/player/update.coffee b/player/update.coffee index 0a86c2ec..5504a14d 100644 --- a/player/update.coffee +++ b/player/update.coffee @@ -30,6 +30,14 @@ window.loadMediaPlayer = (data) -> window.PLAYER = new VideoJSPlayer(data) catch e console.error e + else if data.type is 'gd' + try + if data.meta.html5hack + window.PLAYER = new VideoJSPlayer(data) + else + window.PLAYER = new GoogleDriveYouTubePlayer(data) + catch e + console.error e else if data.type of TYPE_MAP try window.PLAYER = TYPE_MAP[data.type](data) diff --git a/player/videojs.coffee b/player/videojs.coffee index e73473e6..89b6f66a 100644 --- a/player/videojs.coffee +++ b/player/videojs.coffee @@ -114,12 +114,13 @@ window.VideoJSPlayer = class VideoJSPlayer extends Player # not to run until the ready() function returns. setTimeout(-> $('#ytapiplayer .vjs-subtitles-button .vjs-menu-item').each((i, elem) -> - if elem.textContent == localStorage.lastSubtitle + textNode = elem.childNodes[0] + if textNode.textContent == localStorage.lastSubtitle elem.click() elem.onclick = -> - if elem.attributes['aria-selected'].value == 'true' - localStorage.lastSubtitle = elem.textContent + if elem.attributes['aria-checked'].value == 'true' + localStorage.lastSubtitle = textNode.textContent ) , 1) ) diff --git a/src/config.js b/src/config.js index e3d0ca82..e328a34a 100644 --- a/src/config.js +++ b/src/config.js @@ -120,6 +120,9 @@ var defaults = { "service-socket": { enabled: false, socket: "service.sock" + }, + "google-drive": { + "html5-hack-enabled": false } }; diff --git a/src/get-info.js b/src/get-info.js index 24ff6825..97dc8531 100644 --- a/src/get-info.js +++ b/src/get-info.js @@ -12,6 +12,8 @@ var YouTube = require("cytube-mediaquery/lib/provider/youtube"); var Vimeo = require("cytube-mediaquery/lib/provider/vimeo"); var Vidme = require("cytube-mediaquery/lib/provider/vidme"); var Streamable = require("cytube-mediaquery/lib/provider/streamable"); +require("cytube-mediaquery/lib/provider/googledrive").setHTML5HackEnabled( + Config.get("google-drive.html5-hack-enabled")); /* * Preference map of quality => youtube formats. diff --git a/src/media.js b/src/media.js index a07416e2..eeeed5c0 100644 --- a/src/media.js +++ b/src/media.js @@ -38,7 +38,8 @@ Media.prototype = { bitrate: this.meta.bitrate, scuri: this.meta.scuri, embed: this.meta.embed, - gdrive_subtitles: this.meta.gdrive_subtitles + gdrive_subtitles: this.meta.gdrive_subtitles, + html5hack: this.meta.html5hack } }; }, diff --git a/www/js/player.js b/www/js/player.js index 8bfe357d..27b72088 100644 --- a/www/js/player.js +++ b/www/js/player.js @@ -572,12 +572,14 @@ }); return setTimeout(function() { return $('#ytapiplayer .vjs-subtitles-button .vjs-menu-item').each(function(i, elem) { - if (elem.textContent === localStorage.lastSubtitle) { + var textNode; + textNode = elem.childNodes[0]; + if (textNode.textContent === localStorage.lastSubtitle) { elem.click(); } return elem.onclick = function() { - if (elem.attributes['aria-selected'].value === 'true') { - return localStorage.lastSubtitle = elem.textContent; + if (elem.attributes['aria-checked'].value === 'true') { + return localStorage.lastSubtitle = textNode.textContent; } }; }); @@ -1310,7 +1312,7 @@ }; window.loadMediaPlayer = function(data) { - var e, error, error1, error2, error3; + var e, error, error1, error2, error3, error4; try { if (window.PLAYER) { window.PLAYER.destroy(); @@ -1326,11 +1328,22 @@ e = error2; return console.error(e); } + } else if (data.type === 'gd') { + try { + if (data.meta.html5hack) { + return window.PLAYER = new VideoJSPlayer(data); + } else { + return window.PLAYER = new GoogleDriveYouTubePlayer(data); + } + } catch (error3) { + e = error3; + return console.error(e); + } } else if (data.type in TYPE_MAP) { try { return window.PLAYER = TYPE_MAP[data.type](data); - } catch (error3) { - e = error3; + } catch (error4) { + e = error4; return console.error(e); } }