(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 var $dialog = null; var $saveVideoCheckbox = null var $uploadToYoutube = null var timeout = null var CLIENT_ROLE = context.JK.CLIENT_ROLE function resetForm() { // remove all display errors $('#recording-finished-dialog form .error-text').remove() $('#recording-finished-dialog form .error').removeClass("error") if(recording.video) { if(recording.owner.id == context.JK.currentUserId) { // only the owner of the video gets to see video options $dialog.find('.save-video').show() $dialog.find('.upload-to-youtube').show() } else { $dialog.find('.save-video').hide() $dialog.find('.upload-to-youtube').hide() } } else { $dialog.find('.save-video').hide() $dialog.find('.upload-to-youtube').hide() } removeGoogleLoginErrors() } function beforeShow() { $dialog.data('result', null); if (recording == null) { alert("recording data should not be null"); app.layout.closeDialog('recordingFinished'); return false; } resetForm(); if(context.jamClient.getClientParentChildRole() == CLIENT_ROLE.CHILD) { logger.debug("child client; launching preview after xfer"); $('#recording-finished-dialog span.nowait').addClass('hidden') $('#recording-finished-dialog span.pleasewait').removeClass('hidden') $('#recording-finished-dialog .preview-area').css('visibility', 'hidden') $('#recording-finished-dialog form').css('visibility', 'hidden') waitForMixTransfer() } else { console.log("normal client; launching preview immediately") $('#recording-finished-dialog span.pleasewait').addClass('hidden') $('#recording-finished-dialog span.nowait').removeClass('hidden') $('#recording-finished-dialog .preview-area').css('visibility', 'visible') $('#recording-finished-dialog form').css('visibility', 'visible') launchPreview(); } } function waitForMixTransfer() { timeout = setTimeout(function() { console.log("checking for file transfer", window.RecordingStore.mixTransferred) if(window.RecordingStore.mixTransferred) { $('#recording-finished-dialog span.pleasewait').addClass('hidden') $('#recording-finished-dialog span.nowait').removeClass('hidden') $('#recording-finished-dialog .preview-area').css('visibility', 'visible') $('#recording-finished-dialog form').css('visibility', 'visible') timeout = null launchPreview() } else { waitForMixTransfer(); } }, 1000) } function launchPreview() { 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']) { logger.error("unable to open recording due to error: %o", localResults); 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') { logger.error("unable to open recording due to all missing tracks: %o", localResults); app.notify({ title: "Unable to Open Recording for Playback", text: "All of your tracks associated with the recording are missing. This is a bug in the application.", icon_url: "/assets/content/icon_alert_big.png" }); } else if (localResult.aggregate_state == 'PARTIALLY_MISSING') { logger.error("unable to open recording due to some missing tracks: %o", recording, localResults); app.notify({ title: "Unable to Open Recording for Playback", text: "Some of your tracks associated with the recording are missing. This is a bug in the application.", icon_url: "/assets/content/icon_alert_big.png" }) } else { // load recording var openRecordingResult = context.jamClient.PreviewRecording(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" }); } else { // hunt for missing backing tracks; if so, mark them as silent context._.each(openRecordingResult.backing_tracks, function(backingTrack) { if(backingTrack.local_state == "MISSING") { // mark this as deleted logger.debug("marking recorded track as deleted") rest.markRecordedBackingTrackSilent({recording_id: openRecordingResult.recording_id, backing_track_id: backingTrack.client_track_id}) .fail(function() { app.notify({ "title": "Unable to Mark Backing Track", "text": "A backing track was never played, but we could not tell the server to remove it from the recording.", "icon_url": "/assets/content/icon_alert_big.png" }); }) } }) } playbackControls.startMonitor(); } } } function afterHide() { if(timeout) { clearTimeout(timeout) timeout = null } if(recording && recording.video) { var name = $('#recording-finished-dialog form input[name=name]').val(); name = name.replace(/[^A-Za-z0-9\-\ ]/g, ''); var saveToDisk = $('#recording-finished-dialog form input[name=save_video]').is(':checked') var keepResult = $dialog.data('result'); keepResult = keepResult && keepResult.keep logger.debug("VideoDecision rid:" + recording.id + ", name=" + name + ", keepResult=" + keepResult + ", saveToDisk=" + saveToDisk); context.jamClient.VideoDecision(recording.id, name, keepResult && saveToDisk) } recording = null; playbackControls.stopMonitor(); context.jamClient.ClosePreviewRecording(); } function onCancel() { return false; } function discardRecording(e) { resetForm(); registerDiscardRecordingHandlers(false); rest.discardRecording({ id: recording.id }) .done(function () { logger.debug("recording discarded by user. recordingId=%o", recording.id); }) .fail(function (jqXHR) { logger.error("recording discard by user failed. recordingId=%o. reason: %o", recording.id, jqXHR.responseText); }) .always(function () { $dialog.data('result', {keep:false}); app.layout.closeDialog('recordingFinished') registerDiscardRecordingHandlers(true); }) return false; } function startGoogleLogin(e) { e.preventDefault() logger.debug("Starting google login") window._oauth_win = window.open("/auth/google_login", "Log In to Google", "height=500,width=500,menubar=no,resizable=no,status=no"); window._oauth_callback = function() { window._oauth_win.close() logger.debug("closing window") setGoogleAuthState() } return false; } function claimRecording(e) { resetForm(); registerClaimRecordingHandlers(false) var upload_to_youtube = $('#recording-finished-dialog form input[name=upload_to_youtube]').is(':checked') upload_to_youtube = false // don't prevent user from getting through dialog because popup now handles auth if (upload_to_youtube) { $.ajax({ type: "GET", dataType: "json", url: "/auth/has_google_auth" }).success(function(data) { if(data.has_google_auth) { performClaim() } else { var error_ul = $('