const ws_utils = require('../utils');
const watchrooms = require('../../utils/watchrooms');
const broadcast = require('../broadcast');
module.exports = function(user_id, data) {
//ws_utils.log.v("Update viewer state for", user_id);
//ws_utils.log.v(data);
let watchroom = watchrooms.get(data.video_id);
if (!watchroom) {
// Prevent race condition error where user
// requests state change then leaves the
// watchroom before it is executed
return;
}
if (watchroom.state.paused) {
if (watchroom.state.invoked_by === "server") {
let all_ready = true;
for (const viewer of Object.values(watchroom.viewers)) {
if (!viewer.ready) {
all_ready = false;
break;
}
}
if (all_ready) {
ws_utils.log.v("Play video for everyone now that all viewers are ready");
ws_utils.server_update_state(data.video_id, {
paused: false
});
}
}
} else if (!data.viewer.ready) {
ws_utils.log.v(`Pause video for everyone to let ${user_id} sync state`);
ws_utils.server_update_state(data.video_id, {
paused: true
});
}
broadcast({
command: "announce",
data: {
target: "watchroom",
type: "viewer-update",
viewer: watchrooms.update_user(user_id, data.video_id, data.viewer)
}
}, watchroom.viewers);
};