mirror of https://github.com/calzoneman/sync.git
Add onPreChangeMedia and improve refreshing
This commit is contained in:
parent
3f959087af
commit
f36d2b0258
|
@ -131,7 +131,7 @@ ChatModule.prototype.handleChatMsg = function (user, data) {
|
|||
}
|
||||
data.meta = meta;
|
||||
|
||||
this.channel.checkModules("onUserChat", [user, data], function (err, result) {
|
||||
this.channel.checkModules("onUserPreChat", [user, data], function (err, result) {
|
||||
if (result === ChannelModule.PASSTHROUGH) {
|
||||
self.processChatMsg(user, data);
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@ DrinkModule.prototype.onUserPostJoin = function (user) {
|
|||
user.socket.emit("drinkCount", this.drinks);
|
||||
};
|
||||
|
||||
DrinkModule.prototype.onUserChat = function (user, data, cb) {
|
||||
DrinkModule.prototype.onUserPreChat = function (user, data, cb) {
|
||||
var msg = data.msg;
|
||||
var perms = this.channel.modules.permissions;
|
||||
if (msg.match(/^\/d-?[0-9]*/) && perms.canCallDrink(user)) {
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
var ChannelModule = require("./module");
|
||||
var Config = require("../config");
|
||||
var InfoGetter = require("../get-info");
|
||||
var Logger = require("../logger");
|
||||
|
||||
function MediaRefresherModule(channel) {
|
||||
ChannelModule.apply(this, arguments);
|
||||
|
@ -10,33 +11,39 @@ function MediaRefresherModule(channel) {
|
|||
|
||||
MediaRefresherModule.prototype = Object.create(ChannelModule.prototype);
|
||||
|
||||
MediaRefresherModule.prototype.onMediaChange = function (data) {
|
||||
MediaRefresherModule.prototype.onPreMediaChange = function (data, cb) {
|
||||
if (this._interval) clearInterval(this._interval);
|
||||
|
||||
this._media = data;
|
||||
|
||||
switch (data.type) {
|
||||
case "gd":
|
||||
return this.initGoogleDocs(data);
|
||||
return this.initGoogleDocs(data, function () {
|
||||
cb(null, ChannelModule.PASSTHROUGH);
|
||||
});
|
||||
case "vi":
|
||||
return this.initVimeo(data);
|
||||
return this.initVimeo(data, function () {
|
||||
cb(null, ChannelModule.PASSTHROUGH);
|
||||
});
|
||||
default:
|
||||
return cb(null, ChannelModule.PASSTHROUGH);
|
||||
}
|
||||
};
|
||||
|
||||
MediaRefresherModule.prototype.initGoogleDocs = function (data) {
|
||||
MediaRefresherModule.prototype.initGoogleDocs = function (data, cb) {
|
||||
var self = this;
|
||||
self.refreshGoogleDocs(data, true);
|
||||
self.refreshGoogleDocs(data, cb);
|
||||
|
||||
/*
|
||||
* Refresh every 55 minutes.
|
||||
* The expiration is 1 hour, but refresh 5 minutes early to be safe
|
||||
*/
|
||||
self._interval = setInterval(function () {
|
||||
self.refreshGoogleDocs(data, false);
|
||||
self.refreshGoogleDocs(data);
|
||||
}, 55 * 60 * 1000);
|
||||
};
|
||||
|
||||
MediaRefresherModule.prototype.initVimeo = function (data) {
|
||||
MediaRefresherModule.prototype.initVimeo = function (data, cb) {
|
||||
if (!Config.get("vimeo-workaround")) {
|
||||
return;
|
||||
}
|
||||
|
@ -48,13 +55,14 @@ MediaRefresherModule.prototype.initVimeo = function (data) {
|
|||
self.channel.logger.log("[mediarefresher] Refreshed vimeo video with ID " +
|
||||
data.id);
|
||||
data.meta.direct = hack;
|
||||
self.channel.broadcastAll("changeMedia", data.getFullUpdate());
|
||||
}
|
||||
self.channel.activeLock.release();
|
||||
|
||||
if (cb) cb();
|
||||
});
|
||||
};
|
||||
|
||||
MediaRefresherModule.prototype.refreshGoogleDocs = function (media, update) {
|
||||
MediaRefresherModule.prototype.refreshGoogleDocs = function (media, cb) {
|
||||
var self = this;
|
||||
|
||||
if (self.dead || self.channel.dead) {
|
||||
|
@ -72,21 +80,23 @@ MediaRefresherModule.prototype.refreshGoogleDocs = function (media, update) {
|
|||
if (err) {
|
||||
Logger.errlog.log("Google Docs refresh failed for ID " + media.id +
|
||||
": " + err);
|
||||
return self.channel.activeLock.release();
|
||||
self.channel.activeLock.release();
|
||||
if (cb) cb();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (media !== self._media) {
|
||||
return self.channel.activeLock.release();
|
||||
self.channel.activeLock.release();
|
||||
if (cb) cb();
|
||||
return;
|
||||
}
|
||||
|
||||
self.channel.logger.log("[mediarefresher] Refreshed Google Docs video with ID " +
|
||||
media.id);
|
||||
media.meta = data.meta;
|
||||
if (update) {
|
||||
self.channel.broadcastAll("changeMedia", data.getFullUpdate());
|
||||
}
|
||||
self.channel.activeLock.release();
|
||||
if (cb) cb();
|
||||
});
|
||||
};
|
||||
|
||||
|
|
|
@ -54,7 +54,14 @@ ChannelModule.prototype = {
|
|||
/**
|
||||
* Called when a chatMsg event is received
|
||||
*/
|
||||
onUserChat: function (user, data, cb) {
|
||||
onUserPreChat: function (user, data, cb) {
|
||||
cb(null, ChannelModule.PASSTHROUGH);
|
||||
},
|
||||
|
||||
/**
|
||||
* Called before a new video begins playing
|
||||
*/
|
||||
onPreMediaChange: function (data, cb) {
|
||||
cb(null, ChannelModule.PASSTHROUGH);
|
||||
},
|
||||
|
||||
|
|
|
@ -980,8 +980,16 @@ PlaylistModule.prototype.startPlayback = function (time) {
|
|||
if (self.leader != null) {
|
||||
media.paused = false;
|
||||
media.currentTime = time || 0;
|
||||
self.sendChangeMedia(self.channel.users);
|
||||
self.channel.notifyModules("onMediaChange", [self.current.media]);
|
||||
self.channel.checkModules("onPreMediaChange", [self.current.media],
|
||||
function () {
|
||||
/*
|
||||
* onPreMediaChange doesn't care about the callback result.
|
||||
* Its purpose is to allow modification of playback data before
|
||||
* users are sent a changeMedia
|
||||
*/
|
||||
self.sendChangeMedia(self.channel.users);
|
||||
}
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -996,16 +1004,24 @@ PlaylistModule.prototype.startPlayback = function (time) {
|
|||
self._leadInterval = false;
|
||||
}
|
||||
|
||||
self.sendChangeMedia(self.channel.users);
|
||||
self.channel.notifyModules("onMediaChange", [self.current.media]);
|
||||
self.channel.checkModules("onPreMediaChange", [self.current.media],
|
||||
function () {
|
||||
/*
|
||||
* onPreMediaChange currently doesn't care about the callback result.
|
||||
* Its purpose is to allow modification of playback data before
|
||||
* users are sent a changeMedia
|
||||
*/
|
||||
self.sendChangeMedia(self.channel.users);
|
||||
|
||||
/* Only start the timer if the media item is not live, i.e. has a duration */
|
||||
if (media.seconds > 0) {
|
||||
self._lastUpdate = Date.now();
|
||||
self._leadInterval = setInterval(function() {
|
||||
self._leadLoop();
|
||||
}, 1000);
|
||||
}
|
||||
/* Only start the timer if the media item is not live, i.e. has a duration */
|
||||
if (media.seconds > 0) {
|
||||
self._lastUpdate = Date.now();
|
||||
self._leadInterval = setInterval(function() {
|
||||
self._leadLoop();
|
||||
}, 1000);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
const UPDATE_INTERVAL = Config.get("playlist.update-interval");
|
||||
|
|
Loading…
Reference in New Issue