jam-cloud/web/app/assets/javascripts/localRecordingsDialog.js

169 lines
6.7 KiB
JavaScript

(function(context,$) {
"use strict";
context.JK = context.JK || {};
context.JK.LocalRecordingsDialog = function(app) {
var logger = context.JK.logger;
var rest = context.JK.Rest();
var showing = false;
var perPage = 10;
function tbody() {
return $('#local-recordings-dialog table.local-recordings tbody');
}
function emptyList() {
tbody().empty();
}
function resetPagination() {
$('#local-recordings-dialog .paginator').remove();
}
function beforeShow() {
emptyList();
resetPagination();
showing = true;
getRecordings(0)
.done(function(data, textStatus, jqXHR) {
// initialize pagination
var $paginator = context.JK.Paginator.create(parseInt(jqXHR.getResponseHeader('total-entries')), perPage, 0, onPageSelected)
$('#local-recordings-dialog .paginator-holder').append($paginator);
});
}
function afterHide() {
showing = false;
}
function onPageSelected(targetPage) {
return getRecordings(targetPage);
}
function getRecordings(page) {
return rest.getClaimedRecordings({page:page + 1, per_page:10})
.done(function(claimedRecordings) {
emptyList();
var $tbody = tbody();
var recordings = $.map(claimedRecordings, function(val, i) { return val.recording; });
var localResults = context.jamClient.GetLocalRecordingState({recordings: recordings});
if(localResults['error']) {
app.notify({
title : "Get Recording State Failure",
text : localResults['error'],
"icon_url": "/assets/content/icon_alert_big.png"
});
app.layout.closeDialog('localRecordings');
return;
}
$.each(claimedRecordings, function(index, claimedRecording) {
var options = {
recordingId: claimedRecording.recording.id,
//date: context.JK.formatDate(claimedRecording.recording.created_at),
//time: context.JK.formatTime(claimedRecording.recording.created_at),
timeago: $.timeago(claimedRecording.recording.created_at),
name: claimedRecording.name,
aggregate_state: localResults.recordings[index]['aggregate_state'],
duration: context.JK.prettyPrintSeconds(claimedRecording.recording.duration)
};
var tr = $(context._.template($('#template-claimed-recording-row').html(), options, { variable: 'data' }));
tr.data('server-model', claimedRecording);
$tbody.append(tr);
});
})
.fail(function(jqXHR, textStatus, errorMessage) {
app.ajaxError(jqXHR, textStatus, errorMessage);
});
}
function registerStaticEvents() {
$('#local-recordings-dialog table.local-recordings tbody').on('click', 'tr', function(e) {
var localState = $(this).attr('data-local-state');
if(localState == 'MISSING') {
app.notify({
title : "Can't Open Recording",
text : "The recording is missing all tracks",
"icon_url": "/assets/content/icon_alert_big.png"
});
}
else if(localState == 'PARTIALLY_MISSING') {
app.notify({
title : "Can't Open Recording",
text : "The recording is missing some tracks",
"icon_url": "/assets/content/icon_alert_big.png"
});
}
else
{
var claimedRecording = $(this).data('server-model');
// tell the server we are about to start a recording
rest.startPlayClaimedRecording({id: context.JK.CurrentSessionModel.id(), claimed_recording_id: claimedRecording.id})
.done(function(response) {
var recordingId = $(this).attr('data-recording-id');
var openRecordingResult = context.jamClient.OpenRecording(claimedRecording.recording);
logger.debug("OpenRecording response: %o", openRecordingResult);
if(openRecordingResult.error) {
app.notify({
"title": "Can't Open Recording",
"text": openRecordingResult.error,
"icon_url": "/assets/content/icon_alert_big.png"
});
rest.stopPlayClaimedRecording({id: context.JK.CurrentSessionModel.id(), claimed_recording_id: claimedRecording.id})
.fail(function(jqXHR) {
app.notify({
"title": "Couldn't Stop Recording Playback",
"text": "Couldn't inform the server to stop playback. msg=" + jqXHR.responseText,
"icon_url": "/assets/content/icon_alert_big.png"
});
})
}
else {
app.layout.closeDialog('localRecordings');
$(this).triggerHandler('openedSession', {});
}
})
.fail(function(jqXHR) {
app.notifyServerError(jqXHR, "Unable to Open Recording For Playback");
})
}
return false;
})
}
function initialize(){
var dialogBindings = {
'beforeShow' : beforeShow,
'afterHide': afterHide
};
app.bindDialog('localRecordings', dialogBindings);
registerStaticEvents();
};
this.initialize = initialize;
this.isShowing = function isShowing() { return showing; }
}
return this;
})(window,jQuery);