From aa5066762bc3804f56fcc6d49540463d0cc3d943 Mon Sep 17 00:00:00 2001 From: Xaekai Date: Mon, 27 Nov 2017 23:37:41 -0800 Subject: [PATCH] This resolves an issue where Google returns HTTP200 but provides an HTML redirect to a login portal instead of video data. Closes #718 --- NEWS.md | 7 ++++++ gdrive-userscript/cytube-google-drive.user.js | 23 +++++++++++++------ package.json | 2 +- www/js/data.js | 1 + www/js/util.js | 2 +- 5 files changed, 26 insertions(+), 9 deletions(-) diff --git a/NEWS.md b/NEWS.md index 0eb5a0d9..b4cb5888 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,10 @@ +2017-11-27 +========== + +The Google Drive userscript has been updated once again. Violentmonkey is +now explicitly supported. Google login redirects are caught and handled. +See directly below on how to regenerate the user script again. + 2017-11-15 ========== diff --git a/gdrive-userscript/cytube-google-drive.user.js b/gdrive-userscript/cytube-google-drive.user.js index 94e3c7c8..c700b59a 100644 --- a/gdrive-userscript/cytube-google-drive.user.js +++ b/gdrive-userscript/cytube-google-drive.user.js @@ -8,7 +8,7 @@ // @grant GM.xmlHttpRequest // @connect docs.google.com // @run-at document-end -// @version 1.5.0 +// @version 1.6.0 // ==/UserScript== try { @@ -80,19 +80,27 @@ try { var data = {}; var error; + // Google Santa sometimes eats login cookies and gets mad if there aren't any. + if(/accounts\.google\.com\/ServiceLogin/.test(res.responseText)){ + error = 'Google Docs request failed: ' + + 'This video requires you be logged into a Google account. ' + + 'Open your Gmail in another tab and then refresh video.'; + return cb(error); + } + res.responseText.split('&').forEach(function (kv) { var pair = kv.split('='); data[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]); }); if (data.status === 'fail') { - var error = 'Google Drive request failed: ' + + error = 'Google Drive request failed: ' + unescape(data.reason).replace(/\+/g, ' '); return cb(error); } if (!data.fmt_stream_map) { - var error = 'Google Drive request failed: ' + + error = 'Google Drive request failed: ' + 'metadata lookup returned no valid links'; return cb(error); } @@ -112,7 +120,7 @@ try { onerror: function () { var error = 'Google Drive request failed: ' + - 'metadata lookup HTTP request failed'; + 'metadata lookup HTTP request failed'; error.reason = 'HTTP_ONERROR'; return cb(error); } @@ -206,7 +214,7 @@ try { 'Violentmonkey' // https://github.com/calzoneman/sync/issues/713 ]; - function isRunningTampermonkey() { + function isTampermonkeyCompatible() { try { return TM_COMPATIBLES.indexOf(GM_info.scriptHandler) >= 0; } catch (error) { @@ -214,7 +222,7 @@ try { } } - if (isRunningTampermonkey()) { + if (isTampermonkeyCompatible()) { unsafeWindow.getGoogleDriveMetadata = getVideoInfo; } else { debug('Using non-TM polling workaround'); @@ -225,7 +233,8 @@ try { unsafeWindow.console.log('Initialized userscript Google Drive player'); unsafeWindow.hasDriveUserscript = true; - unsafeWindow.driveUserscriptVersion = '1.5'; + // Checked against GS_VERSION from data.js + unsafeWindow.driveUserscriptVersion = '1.6'; } catch (error) { unsafeWindow.console.error(error); } diff --git a/package.json b/package.json index 5f98bbd4..5e10614c 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "author": "Calvin Montgomery", "name": "CyTube", "description": "Online media synchronizer and chat", - "version": "3.51.4", + "version": "3.51.5", "repository": { "url": "http://github.com/calzoneman/sync" }, diff --git a/www/js/data.js b/www/js/data.js index c3d53ff5..d0615834 100644 --- a/www/js/data.js +++ b/www/js/data.js @@ -1,4 +1,5 @@ var CL_VERSION = 3.0; +var GS_VERSION = 1.6; // Google Drive Userscript var CLIENT = { rank: -1, diff --git a/www/js/util.js b/www/js/util.js index 0b79556c..76c994e6 100644 --- a/www/js/util.js +++ b/www/js/util.js @@ -3247,7 +3247,7 @@ function maybePromptToUpgradeUserscript() { return; } - var currentVersion = [1, 5]; + var currentVersion = GS_VERSION.toString().split('.'); // data.js var userscriptVersion = window.driveUserscriptVersion; if (!userscriptVersion) { userscriptVersion = '1.0';