jam-cloud/web/app/assets/javascripts/dialog/audioProfileInvalidDialog.js

205 lines
6.3 KiB
JavaScript

(function (context, $) {
"use strict";
context.JK = context.JK || {};
// this dialog is shown when the user has a profile, but it's messed up. This lets them try to fix it
context.JK.AudioProfileInvalidDialog = function (app) {
var ALERT_NAMES = context.JK.ALERT_NAMES;
var EVENTS = context.JK.EVENTS;
var logger = context.JK.logger;
var rest = context.JK.Rest();
var gearUtils = context.JK.GearUtils;
var dialogId = '#audio-profile-invalid-dialog';
var $dialog = null;
var $results = null;
var $resultsDetail = null;
var $btnContinue = null;
var $btnConfigureGear = null;
var $btnRescan = null;
var $btnRestartApplication = null;
var $btnCancel = null;
var reloadAudioTimeout = null;
var rescanCount = 0;
var cancelRescanFunc = null;
function rescan() {
// true = start back upaudio, true = auto load last used profile, false = don't reinit track assignments
var result = context.jamClient.ReloadAudioSystem(true, true, false);
rescanCount++;
if(result.error) {
$results.removeClass('success failed scanning').addClass('failed')
$btnContinue.addClass('disabled')
if(result.reason == "no_profile") {
$results.removeClass('success failed scanning').addClass('failed')
context.JK.Banner.showAlert('No Active Profile', 'Please select \'GO TO AUDIO GEAR SCREEN\' and activate a profile or add a new one.');
}
else {
if(result.input) {
$resultsDetail.append('<li>Input device is not functioning.</li>')
}
if(result.output) {
$resultsDetail.append('<li>Output device is not functioning.</li>')
}
if(result.chat) {
$resultsDetail.append('<li>Chat device is not functioning.</li>')
}
if(rescanCount >= 2) {
$resultsDetail.append('<li>Tip: sometimes restarting JamKazam is necessary to clear up a device issue.</li>')
$btnRestartApplication.show();
}
}
}
else {
$results.removeClass('success failed scanning').addClass('success')
$btnContinue.removeClass('disabled')
}
}
function beforeShow() {
$dialog.data('result', null);
$results.removeClass('success failed scanning').addClass('scanning')
$resultsDetail.empty();
$btnContinue.addClass('disabled');
$btnRestartApplication.hide();
rescanCount = 0;
}
function afterShow() {
scheduleRescanSystem(500);
context.JK.onBackendEvent(ALERT_NAMES.USB_CONNECTED, 'audio-profile-invalid-dialog', onUsbDeviceConnected);
context.JK.onBackendEvent(ALERT_NAMES.USB_DISCONNECTED, 'audio-profile-invalid-dialog', onUsbDeviceDisconnected);
}
function onCancel() {
if($btnCancel.is('.disabled')) return false;
$dialog.data('result', 'cancel');
return true;
}
function beforeHide() {
context.JK.offBackendEvent(ALERT_NAMES.USB_CONNECTED, 'audio-profile-invalid-dialog', onUsbDeviceConnected);
context.JK.offBackendEvent(ALERT_NAMES.USB_DISCONNECTED, 'audio-profile-invalid-dialog', onUsbDeviceDisconnected);
cancelRescan();
}
function afterHide() {
}
function cancelRescan() {
if(cancelRescanFunc) {
cancelRescanFunc();
cancelRescanFunc = null;
}
}
function scheduleRescanSystem(time) {
cancelRescanFunc = gearUtils.scheduleAudioRestart('audio-profile-invalid-dialog', time,
function() {
$resultsDetail.empty();
$results.removeClass('success failed scanning').addClass('scanning')
$dialog.find('a[data-purpose=reload-audio]').addClass('disabled')
$dialog.find('.rescanning-notice').show();
},
function(canceled) {
$results.removeClass('success failed scanning').addClass('scanning')
$dialog.find('a[data-purpose=reload-audio]').removeClass('disabled')
$dialog.find('.rescanning-notice').hide();
if(!canceled){
rescan();
}
})
}
function onUsbDeviceConnected() {
if(!context.jamClient.IsFrontendVisible()) {return;} // don't handle USB events when minimized
logger.debug("USB device connected");
scheduleRescanSystem(3000);
}
function onUsbDeviceDisconnected() {
if(!context.jamClient.IsFrontendVisible()) {return;} // don't handle USB events when minimized
logger.debug("USB device disconnected");
scheduleRescanSystem(3000);
}
function events() {
$btnConfigureGear.click(function() {
if($(this).is('.disabled')) return false;
$dialog.data('result', 'configure_gear');
app.layout.closeDialog('audio-profile-invalid-dialog');
return false;
})
$btnRestartApplication.click(function() {
if($(this).is('.disabled')) return false;
context.JK.Banner.showYesNo({
title: "Confirm Restart",
html: "Are you sure you want to restart JamKazam?",
yes: function() {
context.jamClient.RestartApplication();
},
no : function() {
context.JK.Banner.hide();
}
})
return false;
});
$btnRescan.click(function() {
if($(this).is('.disabled')) return false;
scheduleRescanSystem(500);
return false;
})
$btnContinue.click(function() {
if($(this).is('.disabled')) return false;
$dialog.data('result', 'session');
app.layout.closeDialog('audio-profile-invalid-dialog');
return false;
})
}
function initialize() {
var dialogBindings = {
'beforeShow': beforeShow,
'afterShow' : afterShow,
'beforeHide' : beforeHide,
'afterHide': afterHide,
'onCancel' : onCancel
};
app.bindDialog('audio-profile-invalid-dialog', dialogBindings);
$dialog = $(dialogId);
$results = $dialog.find('.results');
$resultsDetail = $dialog.find('.results-detail');
$btnContinue = $dialog.find('.btnContinue');
$btnConfigureGear = $dialog.find('.btnConfigureGear');
$btnRescan = $dialog.find('a[data-purpose="reload-audio"]')
$btnRestartApplication = $dialog.find('.btnRestartApplication');
$btnCancel = $dialog.find('.btnCancel');
events();
}
this.initialize = initialize;
}
})(window, jQuery);