jam-cloud/app/assets/javascripts/session.js

105 lines
3.4 KiB
JavaScript

(function(context,$) {
context.JK = context.JK || {};
context.JK.SessionScreen = function(app) {
var logger = context.JK.logger;
var sessionId;
var tracks = {};
function beforeShow(data) {
logger.debug('beforeShow');
logger.debug(data);
sessionId = data.id;
}
function afterShow(data) {
logger.debug('afterShow');
logger.debug(data);
$.ajax({
type: "GET",
url: "/api/sessions/" + sessionId
}).done(renderSession);
context.JK.joinMusicSession(sessionId);
}
function beforeHide(data) {
logger.debug('beforeHide');
logger.debug(data);
context.JK.leaveMusicSession(sessionId);
}
function renderSession(sessionData) {
_renderSessionInfo(sessionData);
// TODO: Just for testing. Should respond to events.
var trackData = {
clientId: 'abc-123',
name: "Jonathon Wilson",
part: "Keyboard",
avatar: "https://en.gravatar.com/userimage/3198431/5ba95e655ce68d976f46dcf6f99fdde5.png",
latency: "good",
vu: 0.0,
gain: 0.5,
mute: false
};
_addTrack(trackData);
// TODO - hook events to the session-tracks container, not the tracks.
// then have the events see which track fired.
//
context.setTimeout(function() {tracks['abc-123'].setGain(0.75);}, 3000);
}
function _renderSessionInfo(sessionData) {
$info = $('#session-info');
$info.empty();
var template = $('#template-session-contents').html();
var contents = JK.fillTemplate(template, sessionData);
$info.html(contents);
}
function _addTrack(trackData) {
var template = $('#template-session-track').html();
var newTrack = JK.fillTemplate(template, trackData);
$('#session-tracks').append(newTrack);
tracks[trackData.clientId] = new JK.SessionTrack(trackData.clientId);
logger.debug(tracks);
}
function _userJoinedSession() {
logger.debug(arguments);
// TODO: This doesn't get the payload of the notification.
// Do we need two different notification mechanisms (app and JamServer)?
}
function deleteSession(evt) {
var sessionId = $(this).attr("action-id");
if (sessionId) {
$.ajax({
type: "DELETE",
url: "/api/sessions/" + sessionId
}).done(
function() { self.location="#/home"; }
);
}
}
function events() {
$('#session-contents').on("click", '[action="delete"]', deleteSession);
}
this.initialize = function() {
events();
screenBindings = {
'beforeShow': beforeShow,
'afterShow': afterShow,
'beforeHide': beforeHide
};
app.bindScreen('session', screenBindings);
app.subscribe(JK.MessageType.USER_JOINED_MUSIC_SESSION, _userJoinedSession);
};
this.tracks = tracks;
};
})(window,jQuery);