241 lines
9.6 KiB
JavaScript
241 lines
9.6 KiB
JavaScript
(function(context,$) {
|
|
|
|
"use strict";
|
|
context.JK = context.JK || {};
|
|
context.JK.RecordingFinishedDialog = function(app) {
|
|
var logger = context.JK.logger;
|
|
var rest = context.JK.Rest();
|
|
var playbackControls = null;
|
|
var recording = null; // deferred object
|
|
|
|
function resetForm() {
|
|
|
|
// remove all display errors
|
|
$('#recording-finished-dialog form .error-text').remove()
|
|
$('#recording-finished-dialog form .error').removeClass("error")
|
|
}
|
|
|
|
function beforeShow() {
|
|
if(recording == null) {
|
|
alert("recording data should not be null");
|
|
app.layout.closeDialog('recordingFinished');
|
|
return false;
|
|
}
|
|
|
|
resetForm();
|
|
|
|
var parentSelector = '#recording-finished-dialog div.genre-selector';
|
|
context.JK.GenreSelectorHelper.render(parentSelector);
|
|
|
|
// preset genre from 1st genre in current session
|
|
var currentOrLastSession = JK.CurrentSessionModel.getCurrentOrLastSession();
|
|
if(currentOrLastSession && currentOrLastSession.genres.length > 0) {
|
|
var genreDescription = currentOrLastSession.genres[0];
|
|
context.JK.GenreSelectorHelper.setSelectedGenres(parentSelector, [genreDescription]);
|
|
}
|
|
|
|
var localResults = context.jamClient.GetLocalRecordingState({recordings: [recording]});
|
|
|
|
|
|
if(localResults['error']) {
|
|
app.notify({
|
|
title : "Unable to Open Recording for Playback",
|
|
text : localResults['error'],
|
|
icon_url: "/assets/content/icon_alert_big.png"
|
|
});
|
|
}
|
|
else {
|
|
var localResult = localResults.recordings[0];
|
|
if(localResult.aggregate_state == 'MISSING') {
|
|
app.notify({
|
|
title : "Unable to Open Recording for Playback",
|
|
text : "All tracks associated with the recording are missing",
|
|
icon_url: "/assets/content/icon_alert_big.png"
|
|
});
|
|
}
|
|
else if(localResult.aggregate_state == 'PARTIALLY_MISSING') {
|
|
app.notify({
|
|
title : "Unable to Open Recording for Playback",
|
|
text: "Some tracks associated with the recording are missing",
|
|
icon_url: "/assets/content/icon_alert_big.png"
|
|
})
|
|
}
|
|
else {
|
|
|
|
// load recording
|
|
var openRecordingResult = context.jamClient.OpenRecording(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"
|
|
});
|
|
}
|
|
|
|
playbackControls.startMonitor();
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
function afterHide() {
|
|
recording = null;
|
|
playbackControls.stopMonitor();
|
|
context.jamClient.CloseRecording();
|
|
}
|
|
|
|
function discardRecording(e) {
|
|
|
|
resetForm();
|
|
registerDiscardRecordingHandlers(false);
|
|
|
|
rest.discardRecording({
|
|
id: recording.id
|
|
})
|
|
.done(function() {
|
|
console.error("recording discarded by user. recordingId=%o", recording.id);
|
|
})
|
|
.fail(function(jqXHR){
|
|
console.error("recording discard by user failed. recordingId=%o. reason: %o", recording.id, jqXHR.responseText);
|
|
})
|
|
.always(function() {
|
|
app.layout.closeDialog('recordingFinished')
|
|
registerDiscardRecordingHandlers(true);
|
|
})
|
|
return false;
|
|
}
|
|
function claimRecording(e){
|
|
|
|
resetForm();
|
|
registerClaimRecordingHandlers(false);
|
|
|
|
var name = $('#recording-finished-dialog form input[name=name]').val();
|
|
var description = $('#recording-finished-dialog form textarea[name=description]').val();
|
|
var genre = $('#recording-finished-dialog form select[name=genre]').val();
|
|
var is_public = $('#recording-finished-dialog form input[name=is_public]').is(':checked')
|
|
var is_downloadable = $('#recording-finished-dialog form input[name=is_downloadable]').is(':checked');
|
|
|
|
rest.claimRecording({
|
|
id : recording.id,
|
|
name: name,
|
|
description: description,
|
|
genre: genre,
|
|
is_public: is_public,
|
|
is_downloadable: is_downloadable
|
|
})
|
|
.done(function() {
|
|
app.layout.closeDialog('recordingFinished');
|
|
context.JK.GA.trackMakeRecording();
|
|
})
|
|
.fail(function(jqXHR) {
|
|
if(jqXHR.status == 422) {
|
|
var errors = JSON.parse(jqXHR.responseText);
|
|
|
|
var $name_errors = context.JK.format_errors('name', errors);
|
|
if($name_errors) $('#recording-finished-dialog form input[name=name]').closest('div.field').addClass('error').end().after($name_errors);
|
|
|
|
var $description_errors = context.JK.format_errors('description', errors);
|
|
if($description_errors) $('#recording-finished-dialog form input[name=description]').closest('div.field').addClass('error').end().after($description_errors);
|
|
|
|
var $genre_errors = context.JK.format_errors('genre', errors);
|
|
if($genre_errors) $('#recording-finished-dialog form select[name=genre]').closest('div.field').addClass('error').end().after($genre_errors);
|
|
|
|
var $is_public_errors = context.JK.format_errors('is_public', errors);
|
|
if($is_public_errors) $('#recording-finished-dialog form input[name=is_public]').closest('div.field').addClass('error').end().after($is_public_errors);
|
|
|
|
var $is_downloadable_errors = context.JK.format_errors('is_downloadable', errors);
|
|
if($is_downloadable_errors) $('#recording-finished-dialog form input[name=is_downloadable]').closest('div.field').addClass('error').end().after($is_downloadable_errors);
|
|
|
|
var recording_error = context.JK.get_first_error('recording_id', errors);
|
|
|
|
if (recording_error) context.JK.showErrorDialog(app, "Unable to claim recording.", recording_error);
|
|
}
|
|
else {
|
|
logger.error("unable to claim recording %o", arguments);
|
|
|
|
context.JK.showErrorDialog(app, "Unable to claim recording.", jqXHR.responseText);
|
|
}
|
|
})
|
|
.always(function() {
|
|
registerClaimRecordingHandlers(true);
|
|
});
|
|
return false;
|
|
}
|
|
|
|
function registerClaimRecordingHandlers(onOff) {
|
|
if(onOff) {
|
|
$('#keep-session-recording').on('click', claimRecording);
|
|
$('#recording-finished-dialog form').on('submit', claimRecording);
|
|
}
|
|
else {
|
|
$('#keep-session-recording').off('click', claimRecording)
|
|
$('#recording-finished-dialog form').off('submit', claimRecording);
|
|
}
|
|
|
|
}
|
|
|
|
function registerDiscardRecordingHandlers(onOff) {
|
|
if(onOff) {
|
|
$('#discard-session-recording').on('click', discardRecording);
|
|
}
|
|
else {
|
|
$('#discard-session-recording').off('click', discardRecording);
|
|
}
|
|
}
|
|
|
|
function onPause() {
|
|
logger.debug("calling jamClient.SessionStopPlay");
|
|
context.jamClient.SessionStopPlay();
|
|
}
|
|
|
|
function onPlay(e, data) {
|
|
logger.debug("calling jamClient.SessionStartPlay");
|
|
context.jamClient.SessionStartPlay(data.playbackMode);
|
|
}
|
|
|
|
function onChangePlayPosition(e, data) {
|
|
logger.debug("calling jamClient.SessionTrackSeekMs(" + data.positionMs + ")");
|
|
context.jamClient.SessionTrackSeekMs(data.positionMs);
|
|
}
|
|
|
|
function registerStaticEvents() {
|
|
registerClaimRecordingHandlers(true);
|
|
registerDiscardRecordingHandlers(true);
|
|
$(playbackControls)
|
|
.on('pause', onPause)
|
|
.on('play', onPlay)
|
|
.on('change-position', onChangePlayPosition);
|
|
}
|
|
|
|
function setRecording(recordingData) {
|
|
if(recording != null) {
|
|
//XXX - prevent start/stop recording mashing; protect this dialog
|
|
logger.error("unable to set recording data over existing recording data. this coudld be due to start/stop recording mashing");
|
|
return;
|
|
}
|
|
recording = recordingData;
|
|
}
|
|
|
|
function initialize(){
|
|
var dialogBindings = {
|
|
'beforeShow' : beforeShow,
|
|
'afterHide': afterHide
|
|
};
|
|
|
|
app.bindDialog('recordingFinished', dialogBindings);
|
|
|
|
playbackControls = new context.JK.PlaybackControls($('#recording-finished-dialog .recording-controls'));
|
|
|
|
registerStaticEvents();
|
|
};
|
|
|
|
|
|
this.initialize = initialize;
|
|
this.setRecording = setRecording;
|
|
}
|
|
|
|
return this;
|
|
})(window,jQuery); |