105 lines
3.4 KiB
JavaScript
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); |