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