diff --git a/gdrive-userscript/cytube-google-drive.user.js b/gdrive-userscript/cytube-google-drive.user.js
index d8fa6655..88a24a6f 100644
--- a/gdrive-userscript/cytube-google-drive.user.js
+++ b/gdrive-userscript/cytube-google-drive.user.js
@@ -7,7 +7,7 @@
// @grant GM_xmlhttpRequest
// @connect docs.google.com
// @run-at document-end
-// @version 1.1.0
+// @version 1.2.0
// ==/UserScript==
try {
@@ -67,18 +67,14 @@ try {
});
if (data.status === 'fail') {
- error = new Error('Google Docs request failed: ' +
- 'metadata indicated status=fail');
- error.response = res.responseText;
- error.reason = 'RESPONSE_STATUS_FAIL';
+ var error = 'Google Docs request failed: ' +
+ unescape(data.reason).replace(/\+/g, ' ');
return cb(error);
}
if (!data.fmt_stream_map) {
- error = new Error('Google Docs request failed: ' +
- 'metadata lookup returned no valid links');
- error.response = res.responseText;
- error.reason = 'MISSING_LINKS';
+ var error = 'Google Docs request failed: ' +
+ 'metadata lookup returned no valid links';
return cb(error);
}
@@ -96,8 +92,8 @@ try {
},
onerror: function () {
- var error = new Error('Google Docs request failed: ' +
- 'metadata lookup HTTP request failed');
+ var error = 'Google Docs request failed: ' +
+ 'metadata lookup HTTP request failed';
error.reason = 'HTTP_ONERROR';
return cb(error);
}
@@ -205,6 +201,7 @@ try {
unsafeWindow.console.log('Initialized userscript Google Drive player');
unsafeWindow.hasDriveUserscript = true;
+ unsafeWindow.driveUserscriptVersion = '1.2';
} catch (error) {
unsafeWindow.console.error(error);
}
diff --git a/package.json b/package.json
index 068b74ad..d4389f43 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
"author": "Calvin Montgomery",
"name": "CyTube",
"description": "Online media synchronizer and chat",
- "version": "3.23.2",
+ "version": "3.23.3",
"repository": {
"url": "http://github.com/calzoneman/sync"
},
diff --git a/player/gdrive-player.coffee b/player/gdrive-player.coffee
index 026216bb..1805d8fb 100644
--- a/player/gdrive-player.coffee
+++ b/player/gdrive-player.coffee
@@ -6,13 +6,14 @@ window.GoogleDrivePlayer = class GoogleDrivePlayer extends VideoJSPlayer
super(data)
load: (data) ->
+ window.maybePromptToUpgradeUserscript()
if typeof window.getGoogleDriveMetadata is 'function'
window.getGoogleDriveMetadata(data.id, (error, metadata) =>
if error
console.error(error)
alertBox = window.document.createElement('div')
alertBox.className = 'alert alert-danger'
- alertBox.textContent = error.message
+ alertBox.textContent = error
document.getElementById('ytapiplayer').appendChild(alertBox)
else
data.meta.direct = metadata.videoMap
diff --git a/templates/google_drive_userscript.pug b/templates/google_drive_userscript.pug
index f0744431..1befdcd3 100644
--- a/templates/google_drive_userscript.pug
+++ b/templates/google_drive_userscript.pug
@@ -49,7 +49,7 @@ html(lang="en")
| Tampermonkey supports many browsers besides Chrome.
p.
Once you have installed the userscript manager addon for your browser,
- you can
+ you can
install the userscript. If this link 404s, it means the administrator
of this server hasn't generated it yet.
p.
@@ -58,17 +58,3 @@ html(lang="en")
include footer
+footer()
- script(type="text/javascript").
- function showEmail(btn, email, key) {
- email = unescape(email);
- key = unescape(key);
- var dest = new Array(email.length);
- for (var i = 0; i < email.length; i++) {
- dest[i] = String.fromCharCode(email.charCodeAt(i) ^ key.charCodeAt(i % key.length));
- }
- email = dest.join("");
- $("").attr("href", "mailto:" + email)
- .text(email)
- .insertBefore(btn);
- $(btn).remove();
- }
diff --git a/www/js/player.js b/www/js/player.js
index 4638dfce..63694864 100644
--- a/www/js/player.js
+++ b/www/js/player.js
@@ -679,6 +679,7 @@
}
GoogleDrivePlayer.prototype.load = function(data) {
+ window.maybePromptToUpgradeUserscript();
if (typeof window.getGoogleDriveMetadata === 'function') {
return window.getGoogleDriveMetadata(data.id, (function(_this) {
return function(error, metadata) {
@@ -687,7 +688,7 @@
console.error(error);
alertBox = window.document.createElement('div');
alertBox.className = 'alert alert-danger';
- alertBox.textContent = error.message;
+ alertBox.textContent = error;
return document.getElementById('ytapiplayer').appendChild(alertBox);
} else {
data.meta.direct = metadata.videoMap;
@@ -1019,7 +1020,7 @@
};
TwitchPlayer.prototype.load = function(data) {
- var error, error1;
+ var error;
this.setMediaProperties(data);
try {
if (data.type === 'tv') {
@@ -1034,7 +1035,7 @@
};
TwitchPlayer.prototype.pause = function() {
- var error, error1;
+ var error;
try {
this.twitch.pause();
return this.paused = true;
@@ -1045,7 +1046,7 @@
};
TwitchPlayer.prototype.play = function() {
- var error, error1;
+ var error;
try {
this.twitch.play();
return this.paused = false;
@@ -1056,7 +1057,7 @@
};
TwitchPlayer.prototype.seekTo = function(time) {
- var error, error1;
+ var error;
try {
return this.twitch.seek(time);
} catch (error1) {
@@ -1066,7 +1067,7 @@
};
TwitchPlayer.prototype.getTime = function(cb) {
- var error, error1;
+ var error;
try {
return cb(this.twitch.getCurrentTime());
} catch (error1) {
@@ -1076,7 +1077,7 @@
};
TwitchPlayer.prototype.setVolume = function(volume) {
- var error, error1;
+ var error;
try {
this.twitch.setVolume(volume);
if (volume > 0) {
@@ -1089,7 +1090,7 @@
};
TwitchPlayer.prototype.getVolume = function(cb) {
- var error, error1;
+ var error;
try {
if (this.twitch.isPaused()) {
return cb(0);
@@ -1513,7 +1514,7 @@
};
window.loadMediaPlayer = function(data) {
- var e, error, error1, error2, error3, error4;
+ var e, error;
try {
if (window.PLAYER) {
window.PLAYER.destroy();
@@ -1525,8 +1526,8 @@
if (data.meta.direct && data.type !== 'gd') {
try {
return window.PLAYER = new VideoJSPlayer(data);
- } catch (error2) {
- e = error2;
+ } catch (error1) {
+ e = error1;
return console.error(e);
}
} else if (data.type === 'gd') {
@@ -1536,15 +1537,15 @@
} else {
return window.PLAYER = new GoogleDriveYouTubePlayer(data);
}
- } catch (error3) {
- e = error3;
+ } catch (error1) {
+ e = error1;
return console.error(e);
}
} else if (data.type in TYPE_MAP) {
try {
return window.PLAYER = TYPE_MAP[data.type](data);
- } catch (error4) {
- e = error4;
+ } catch (error1) {
+ e = error1;
return console.error(e);
}
}
diff --git a/www/js/util.js b/www/js/util.js
index 985f3a4b..9b806124 100644
--- a/www/js/util.js
+++ b/www/js/util.js
@@ -3205,3 +3205,54 @@ function stopQueueSpinner(data) {
$("#queueprogress").remove();
}
}
+
+function maybePromptToUpgradeUserscript() {
+ if (document.getElementById('prompt-upgrade-drive-userscript')) {
+ return;
+ }
+
+ if (!window.hasDriveUserscript) {
+ return;
+ }
+
+ var currentVersion = [1, 2];
+ var userscriptVersion = window.driveUserscriptVersion;
+ if (!userscriptVersion) {
+ userscriptVersion = '1.0';
+ }
+ userscriptVersion = userscriptVersion.split('.').map(function (part) {
+ return parseInt(part, 10);
+ });
+
+ var older = false;
+ for (var i = 0; i < currentVersion.length; i++) {
+ if (userscriptVersion[i] < currentVersion[i]) {
+ older = true;
+ }
+ }
+
+ if (!older) {
+ return;
+ }
+
+ var alertBox = document.createElement('div');
+ alertBox.id = 'prompt-upgrade-drive-userscript';
+ alertBox.className = 'alert alert-info'
+ alertBox.innerHTML = 'A newer version of the Google Drive userscript is available.';
+ alertBox.appendChild(document.createElement('br'));
+ var infoLink = document.createElement('a');
+ infoLink.className = 'btn btn-info';
+ infoLink.href = '/google_drive_userscript';
+ infoLink.textContent = 'Click here for installation instructions';
+ infoLink.target = '_blank';
+ alertBox.appendChild(infoLink);
+
+ var closeButton = document.createElement('button');
+ closeButton.className = 'close pull-right';
+ closeButton.innerHTML = '×';
+ closeButton.onclick = function () {
+ alertBox.parentNode.removeChild(alertBox);
+ }
+ alertBox.insertBefore(closeButton, alertBox.firstChild)
+ document.getElementById('videowrap').appendChild(alertBox);
+}