Wire up google drive subtitles

This commit is contained in:
calzoneman 2015-07-25 01:19:32 -07:00
parent 6d9fc73701
commit 33e7f81fa7
6 changed files with 61 additions and 2 deletions

View File

@ -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 2015-07-07
========== ==========

View File

@ -17,6 +17,8 @@ function md5(input) {
var slice = Array.prototype.slice; var slice = Array.prototype.slice;
var subtitleDir = path.resolve(__dirname, '..', 'google-drive-subtitles'); var subtitleDir = path.resolve(__dirname, '..', 'google-drive-subtitles');
var ONE_HOUR = 60 * 60 * 1000;
var ONE_DAY = 24 * ONE_HOUR;
function padZeros(n) { function padZeros(n) {
n = n.toString(); n = n.toString();
@ -129,6 +131,7 @@ function fetchSubtitles(id, lang, name, vid, file, cb) {
if (err) { if (err) {
cb(err); cb(err);
} else { } else {
Logger.syslog.log('Saved subtitle file ' + file);
cb(); cb();
} }
}); });
@ -137,3 +140,29 @@ function fetchSubtitles(id, lang, name, vid, file, cb) {
cb(err); 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();

View File

@ -37,7 +37,8 @@ Media.prototype = {
codec: this.meta.codec, codec: this.meta.codec,
bitrate: this.meta.bitrate, bitrate: this.meta.bitrate,
scuri: this.meta.scuri, scuri: this.meta.scuri,
embed: this.meta.embed embed: this.meta.embed,
gdrive_subtitles: this.meta.gdrive_subtitles
} }
}; };
}, },

View File

@ -2,7 +2,7 @@
"author": "Calvin Montgomery", "author": "Calvin Montgomery",
"name": "CyTube", "name": "CyTube",
"description": "Online media synchronizer and chat", "description": "Online media synchronizer and chat",
"version": "3.8.2", "version": "3.9.0",
"repository": { "repository": {
"url": "http://github.com/calzoneman/sync" "url": "http://github.com/calzoneman/sync"
}, },

View File

@ -66,6 +66,17 @@ window.VideoJSPlayer = class VideoJSPlayer extends Player
).appendTo(video) ).appendTo(video)
) )
if data.meta.gdrive_subtitles
data.meta.gdrive_subtitles.available.forEach((subt) ->
$('<track/>').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 = videojs(video[0], autoplay: true, controls: true)
@player.ready(=> @player.ready(=>
@setVolume(VOLUME) @setVolume(VOLUME)

View File

@ -524,6 +524,16 @@
'data-quality': source.quality 'data-quality': source.quality
}).appendTo(video); }).appendTo(video);
}); });
if (data.meta.gdrive_subtitles) {
data.meta.gdrive_subtitles.available.forEach(function(subt) {
return $('<track/>').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], { _this.player = videojs(video[0], {
autoplay: true, autoplay: true,
controls: true controls: true