diff --git a/NEWS.md b/NEWS.md
index 5ea967f2..8a4874b0 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -1,3 +1,11 @@
+2015-07-25
+==========
+
+ * CyTube now supports subtitles for Google Drive videos. In order to take
+ advantage of this, you must upgrade mediaquery by running `npm install
+ cytube/mediaquery`. Subtitles are cached in the google-drive-subtitles
+ folder.
+
2015-07-07
==========
diff --git a/lib/google2vtt.js b/lib/google2vtt.js
index b9b74f7f..70dcdef3 100644
--- a/lib/google2vtt.js
+++ b/lib/google2vtt.js
@@ -17,6 +17,8 @@ function md5(input) {
var slice = Array.prototype.slice;
var subtitleDir = path.resolve(__dirname, '..', 'google-drive-subtitles');
+var ONE_HOUR = 60 * 60 * 1000;
+var ONE_DAY = 24 * ONE_HOUR;
function padZeros(n) {
n = n.toString();
@@ -129,6 +131,7 @@ function fetchSubtitles(id, lang, name, vid, file, cb) {
if (err) {
cb(err);
} else {
+ Logger.syslog.log('Saved subtitle file ' + file);
cb();
}
});
@@ -137,3 +140,29 @@ function fetchSubtitles(id, lang, name, vid, file, cb) {
cb(err);
});
}
+
+function clearOldSubtitles() {
+ fs.readdir(subtitleDir, function (err, files) {
+ if (err) {
+ Logger.errlog.log(err.stack);
+ return;
+ }
+
+ files.forEach(function (file) {
+ fs.stat(path.join(subtitleDir, file), function (err, stats) {
+ if (err) {
+ Logger.errlog.log(err.stack);
+ return;
+ }
+
+ if (stats.mtime.getTime() < Date.now() - ONE_DAY) {
+ Logger.syslog.log('Deleting old subtitle file: ' + file);
+ fs.unlink(path.join(subtitleDir, file));
+ }
+ });
+ });
+ });
+}
+
+setInterval(clearOldSubtitles, ONE_HOUR);
+clearOldSubtitles();
diff --git a/lib/media.js b/lib/media.js
index 4b3ebc30..a07416e2 100644
--- a/lib/media.js
+++ b/lib/media.js
@@ -37,7 +37,8 @@ Media.prototype = {
codec: this.meta.codec,
bitrate: this.meta.bitrate,
scuri: this.meta.scuri,
- embed: this.meta.embed
+ embed: this.meta.embed,
+ gdrive_subtitles: this.meta.gdrive_subtitles
}
};
},
diff --git a/package.json b/package.json
index effd60e1..e22215a9 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
"author": "Calvin Montgomery",
"name": "CyTube",
"description": "Online media synchronizer and chat",
- "version": "3.8.2",
+ "version": "3.9.0",
"repository": {
"url": "http://github.com/calzoneman/sync"
},
diff --git a/player/videojs.coffee b/player/videojs.coffee
index fb357fb5..4107bc04 100644
--- a/player/videojs.coffee
+++ b/player/videojs.coffee
@@ -66,6 +66,17 @@ window.VideoJSPlayer = class VideoJSPlayer extends Player
).appendTo(video)
)
+ if data.meta.gdrive_subtitles
+ data.meta.gdrive_subtitles.available.forEach((subt) ->
+ $('').attr(
+ src: "/gdvtt/#{data.id}/#{subt.lang}/#{subt.name}.vtt?\
+ vid=#{data.meta.gdrive_subtitles.vid}"
+ kind: 'subtitles'
+ srclang: subt.lang
+ label: subt.name
+ ).appendTo(video)
+ )
+
@player = videojs(video[0], autoplay: true, controls: true)
@player.ready(=>
@setVolume(VOLUME)
diff --git a/www/js/player.js b/www/js/player.js
index b2d37a88..4cfc296c 100644
--- a/www/js/player.js
+++ b/www/js/player.js
@@ -524,6 +524,16 @@
'data-quality': source.quality
}).appendTo(video);
});
+ if (data.meta.gdrive_subtitles) {
+ data.meta.gdrive_subtitles.available.forEach(function(subt) {
+ return $('').attr({
+ src: "/gdvtt/" + data.id + "/" + subt.lang + "/" + subt.name + ".vtt?vid=" + data.meta.gdrive_subtitles.vid,
+ kind: 'subtitles',
+ srclang: subt.lang,
+ label: subt.name
+ }).appendTo(video);
+ });
+ }
_this.player = videojs(video[0], {
autoplay: true,
controls: true