mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2025-03-01 10:33:28 +00:00
add Hue EntertainmentAPI + Forwarder & other Fixes (#592)
* whitespaces + typo fixes * JS / LGTM fixes * SSDP Handler crash fix * MessageForwarder handlePriorityChanges Slave fixes * use aboutToQuit Signal * complete rewriten Hue Entertainment API structure combined Philips Hue and Entertainment API with new MbedTLS based SSL UDP Provider * add required cross-compile submodules * logical rebuild fn: initLeds, setLights + new logs -more detailed checks and error handling inside iniLeds and setLights - logical script procedure before ProviderUdpSSL init - first steps for multiple ProviderUdpSSL usage - better fallback support to old RestAPI, if entertainment api is not supported - just 4 u LordGrey: new log fn for cosmetic config outputs ;) * add OSX CompileHowTo - undo from CrossCompileHowTo * whitespace fixes * lightID toString fix * fix unsigned int E-API + debug output * bugfixes, reworked black signal detection, wizard: - change device config field light-ids from int to string -> real unsigned int fix - add signal detection brightness minimum threshold value 0.0 for 0% brightness - 1.0 for 100% brightness to count for blacklight signal detection reason: input may not 100% black, like mine - i have a deep dark gray input signal -> my threshold value is set to 0.005 for 0.5% minimum brightness = 1 (from max 255) to count as black - wizard optimations, with fallback without entertainment support (beta state) - whitespace fixes * cleanup + minor fixes * change fixed Hue UPD SSL config to _devConfig paras * Hotfix SSL Connection, new light models, wizard: - Fix UPD SSL Connection failed Problems - add new supported gamut C light models: LCG002, LCA001, LCA002, LCA003 - wizard: extend fallback support to classic mode + hints * whitespace, typo fix * uncheck useEntertainmentAPI, if noAPISupport detected + hint * coredump fix -> add _blackLightsTimer nullptr init * code cleanup / remove old debugs + whitespacefixes * add gamut C LCP001, LCP002 * SSL UDP config made more flexible + remove qDebug -> switch to hyerion.ng _log -> replace logCommand with verbose -> code cleanups etc... * extended mbedtls debugging infos * add adjustable ssl timeout settings * error handling * streamdebugger bugfixes * UPDSSL psk / psk_identity bugfixes! + hue wizard fn typo fix + - verbose option available without dependencies - whitespace fixes * Philips Hue Assistant now recognizes non-original bridges better... + Added note if no clientkey is set when using the entertainment API + User creation (+ clientkey) for non-original bridges can now also be used + Minor changes and bug fixes * CMAKE mbedTLS detection * minor bug fixes + code cleanups * FindMbedTLS.cmake remove Path-Hints + wizard.js: ajax timeout handling Test - content_grabber.js: run relevant code only, if V4L2_AVAIL is true: conf_grabber don't displays other devices, if V4L2 is not available * compile mbedtls via cmake as static lib * remove libmbedtls-dev from compileHowto / scripts * Fix Windows build * Fix windows build (part 2) * removed unnecessary osx x11 include directory path * QTimer Shutdown bugfix * cmake win32 fix + minor bugfixes * cmake debug msg used mbedtls libs * Bugfix: noSignalDetection wasn't switchedOn again if no signal was previously detected * Some code fixes based on alerts from lgtm.com Co-authored-by: Paulchen Panther <16664240+Paulchen-Panther@users.noreply.github.com>
This commit is contained in:
@@ -180,9 +180,11 @@ $(document).ready( function() {
|
||||
|
||||
//create introduction
|
||||
if(window.showOptHelp)
|
||||
{
|
||||
createHint("intro", $.i18n('conf_general_intro'), "editor_container");
|
||||
createHint("intro", $.i18n('conf_general_tok_desc'), "tok_desc_cont");
|
||||
createHint("intro", $.i18n('conf_general_inst_desc'), "inst_desc_cont");
|
||||
}
|
||||
|
||||
removeOverlay();
|
||||
});
|
||||
|
@@ -1,205 +1,207 @@
|
||||
$(document).ready( function() {
|
||||
performTranslation();
|
||||
var conf_editor_v4l2 = null;
|
||||
var conf_editor_fg = null;
|
||||
performTranslation();
|
||||
var conf_editor_v4l2 = null;
|
||||
var conf_editor_fg = null;
|
||||
var conf_editor_instCapt = null;
|
||||
var V4L2_AVAIL = window.serverInfo.grabbers.available.includes("v4l2");
|
||||
|
||||
// Dynamic v4l2 enum schema
|
||||
var v4l2_dynamic_enum_schema = {
|
||||
"available_devices":
|
||||
{
|
||||
"type": "string",
|
||||
"title": "edt_conf_v4l2_device_title",
|
||||
"propertyOrder" : 1,
|
||||
"required" : true
|
||||
},
|
||||
"resolutions":
|
||||
{
|
||||
"type": "string",
|
||||
"title": "edt_conf_v4l2_resolution_title",
|
||||
"propertyOrder" : 4,
|
||||
"required" : true
|
||||
},
|
||||
"framerates":
|
||||
{
|
||||
"type": "string",
|
||||
"title": "edt_conf_v4l2_framerate_title",
|
||||
"propertyOrder" : 7,
|
||||
"required" : true
|
||||
}
|
||||
};
|
||||
if(V4L2_AVAIL) {
|
||||
// Dynamic v4l2 enum schema
|
||||
var v4l2_dynamic_enum_schema = {
|
||||
"available_devices":
|
||||
{
|
||||
"type": "string",
|
||||
"title": "edt_conf_v4l2_device_title",
|
||||
"propertyOrder" : 1,
|
||||
"required" : true
|
||||
},
|
||||
"resolutions":
|
||||
{
|
||||
"type": "string",
|
||||
"title": "edt_conf_v4l2_resolution_title",
|
||||
"propertyOrder" : 4,
|
||||
"required" : true
|
||||
},
|
||||
"framerates":
|
||||
{
|
||||
"type": "string",
|
||||
"title": "edt_conf_v4l2_framerate_title",
|
||||
"propertyOrder" : 7,
|
||||
"required" : true
|
||||
}
|
||||
};
|
||||
|
||||
// Build dynamic v4l2 enum schema parts
|
||||
var buildSchemaPart = function(key, schema, device) {
|
||||
if (schema[key]) {
|
||||
var enumVals = [];
|
||||
var enumTitelVals = [];
|
||||
var v4l2_properties = JSON.parse(JSON.stringify(window.serverInfo.grabbers.v4l2_properties));
|
||||
// Build dynamic v4l2 enum schema parts
|
||||
var buildSchemaPart = function(key, schema, device) {
|
||||
if (schema[key]) {
|
||||
var enumVals = [];
|
||||
var enumTitelVals = [];
|
||||
var v4l2_properties = JSON.parse(JSON.stringify(window.serverInfo.grabbers.v4l2_properties));
|
||||
|
||||
if (key === 'available_devices') {
|
||||
for (var i = 0; i < v4l2_properties.length; i++) {
|
||||
enumVals.push(v4l2_properties[i]['device']);
|
||||
if (key === 'available_devices') {
|
||||
for (var i = 0; i < v4l2_properties.length; i++) {
|
||||
enumVals.push(v4l2_properties[i]['device']);
|
||||
|
||||
v4l2_properties[i].hasOwnProperty('name')
|
||||
? enumTitelVals.push(v4l2_properties[i]['name'])
|
||||
: enumTitelVals.push(v4l2_properties[i]['device']);
|
||||
}
|
||||
} else if (key == 'resolutions' || key == 'framerates') {
|
||||
for (var i = 0; i < v4l2_properties.length; i++) {
|
||||
if (v4l2_properties[i]['device'] == device) {
|
||||
enumVals = enumTitelVals = v4l2_properties[i][key];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
v4l2_properties[i].hasOwnProperty('name')
|
||||
? enumTitelVals.push(v4l2_properties[i]['name'])
|
||||
: enumTitelVals.push(v4l2_properties[i]['device']);
|
||||
}
|
||||
} else if (key == 'resolutions' || key == 'framerates') {
|
||||
for (var i = 0; i < v4l2_properties.length; i++) {
|
||||
if (v4l2_properties[i]['device'] == device) {
|
||||
enumVals = enumTitelVals = v4l2_properties[i][key];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
window.schema.grabberV4L2.properties[key] = {
|
||||
"type": schema[key].type,
|
||||
"title": schema[key].title,
|
||||
"enum": [].concat(["auto"], enumVals, ["custom"]),
|
||||
"options" :
|
||||
{
|
||||
"enum_titles" : [].concat(["edt_conf_enum_automatic"], enumTitelVals, ["edt_conf_enum_custom"]),
|
||||
},
|
||||
"propertyOrder" : schema[key].propertyOrder,
|
||||
"required" : schema[key].required
|
||||
};
|
||||
}
|
||||
};
|
||||
window.schema.grabberV4L2.properties[key] = {
|
||||
"type": schema[key].type,
|
||||
"title": schema[key].title,
|
||||
"enum": [].concat(["auto"], enumVals, ["custom"]),
|
||||
"options" :
|
||||
{
|
||||
"enum_titles" : [].concat(["edt_conf_enum_automatic"], enumTitelVals, ["edt_conf_enum_custom"]),
|
||||
},
|
||||
"propertyOrder" : schema[key].propertyOrder,
|
||||
"required" : schema[key].required
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
// Switch between visible states
|
||||
function toggleOption(option, state) {
|
||||
$('[data-schemapath*="root.grabberV4L2.'+option+'"]').toggle(state);
|
||||
if (state) (
|
||||
$('[data-schemapath*="root.grabberV4L2.'+option+'"]').addClass('col-md-12'),
|
||||
$('label[for="root_grabberV4L2_'+option+'"]').css('left','10px'),
|
||||
$('[id="root_grabberV4L2_'+option+'"]').css('left','10px')
|
||||
);
|
||||
}
|
||||
// Switch between visible states
|
||||
function toggleOption(option, state) {
|
||||
$('[data-schemapath*="root.grabberV4L2.'+option+'"]').toggle(state);
|
||||
if (state) (
|
||||
$('[data-schemapath*="root.grabberV4L2.'+option+'"]').addClass('col-md-12'),
|
||||
$('label[for="root_grabberV4L2_'+option+'"]').css('left','10px'),
|
||||
$('[id="root_grabberV4L2_'+option+'"]').css('left','10px')
|
||||
);
|
||||
}
|
||||
|
||||
// Watch all v4l2 dynamic fields
|
||||
var setWatchers = function(schema) {
|
||||
var path = 'root.grabberV4L2.';
|
||||
Object.keys(schema).forEach(function(key) {
|
||||
conf_editor_v4l2.watch(path + key, function() {
|
||||
var ed = conf_editor_v4l2.getEditor(path + key);
|
||||
var val = ed.getValue();
|
||||
// Watch all v4l2 dynamic fields
|
||||
var setWatchers = function(schema) {
|
||||
var path = 'root.grabberV4L2.';
|
||||
Object.keys(schema).forEach(function(key) {
|
||||
conf_editor_v4l2.watch(path + key, function() {
|
||||
var ed = conf_editor_v4l2.getEditor(path + key);
|
||||
var val = ed.getValue();
|
||||
|
||||
if (key == 'available_devices') {
|
||||
var V4L2properties = ['resolutions', 'framerates'];
|
||||
if (val == 'custom') {
|
||||
var grabberV4L2 = ed.parent;
|
||||
V4L2properties.forEach(function(item) {
|
||||
buildSchemaPart(item, v4l2_dynamic_enum_schema, 'none');
|
||||
grabberV4L2.original_schema.properties[item] = window.schema.grabberV4L2.properties[item];
|
||||
grabberV4L2.schema.properties[item] = window.schema.grabberV4L2.properties[item];
|
||||
if (key == 'available_devices') {
|
||||
var V4L2properties = ['resolutions', 'framerates'];
|
||||
if (val == 'custom') {
|
||||
var grabberV4L2 = ed.parent;
|
||||
V4L2properties.forEach(function(item) {
|
||||
buildSchemaPart(item, v4l2_dynamic_enum_schema, 'none');
|
||||
grabberV4L2.original_schema.properties[item] = window.schema.grabberV4L2.properties[item];
|
||||
grabberV4L2.schema.properties[item] = window.schema.grabberV4L2.properties[item];
|
||||
|
||||
grabberV4L2.removeObjectProperty(item);
|
||||
delete grabberV4L2.cached_editors[item];
|
||||
grabberV4L2.addObjectProperty(item);
|
||||
grabberV4L2.removeObjectProperty(item);
|
||||
delete grabberV4L2.cached_editors[item];
|
||||
grabberV4L2.addObjectProperty(item);
|
||||
|
||||
conf_editor_v4l2.getEditor(path + item).enable();
|
||||
});
|
||||
conf_editor_v4l2.getEditor(path + item).enable();
|
||||
});
|
||||
|
||||
toggleOption('device', true);
|
||||
} else if (val == 'auto') {
|
||||
V4L2properties.forEach(function(item) {
|
||||
conf_editor_v4l2.getEditor(path + item).setValue('auto');
|
||||
conf_editor_v4l2.getEditor(path + item).disable();
|
||||
});
|
||||
toggleOption('device', true);
|
||||
} else if (val == 'auto') {
|
||||
V4L2properties.forEach(function(item) {
|
||||
conf_editor_v4l2.getEditor(path + item).setValue('auto');
|
||||
conf_editor_v4l2.getEditor(path + item).disable();
|
||||
});
|
||||
|
||||
(toggleOption('device', false), toggleOption('width', false),
|
||||
toggleOption('height', false), toggleOption('fps', false));
|
||||
} else {
|
||||
var grabberV4L2 = ed.parent;
|
||||
V4L2properties.forEach(function(item) {
|
||||
buildSchemaPart(item, v4l2_dynamic_enum_schema, val);
|
||||
grabberV4L2.original_schema.properties[item] = window.schema.grabberV4L2.properties[item];
|
||||
grabberV4L2.schema.properties[item] = window.schema.grabberV4L2.properties[item];
|
||||
(toggleOption('device', false), toggleOption('width', false),
|
||||
toggleOption('height', false), toggleOption('fps', false));
|
||||
} else {
|
||||
var grabberV4L2 = ed.parent;
|
||||
V4L2properties.forEach(function(item) {
|
||||
buildSchemaPart(item, v4l2_dynamic_enum_schema, val);
|
||||
grabberV4L2.original_schema.properties[item] = window.schema.grabberV4L2.properties[item];
|
||||
grabberV4L2.schema.properties[item] = window.schema.grabberV4L2.properties[item];
|
||||
|
||||
grabberV4L2.removeObjectProperty(item);
|
||||
delete grabberV4L2.cached_editors[item];
|
||||
grabberV4L2.addObjectProperty(item);
|
||||
grabberV4L2.removeObjectProperty(item);
|
||||
delete grabberV4L2.cached_editors[item];
|
||||
grabberV4L2.addObjectProperty(item);
|
||||
|
||||
conf_editor_v4l2.getEditor(path + item).enable();
|
||||
});
|
||||
conf_editor_v4l2.getEditor(path + item).enable();
|
||||
});
|
||||
|
||||
toggleOption('device', false);
|
||||
}
|
||||
}
|
||||
toggleOption('device', false);
|
||||
}
|
||||
}
|
||||
|
||||
if (key == 'resolutions')
|
||||
val != 'custom'
|
||||
? (toggleOption('width', false), toggleOption('height', false))
|
||||
: (toggleOption('width', true), toggleOption('height', true));
|
||||
if (key == 'resolutions')
|
||||
val != 'custom'
|
||||
? (toggleOption('width', false), toggleOption('height', false))
|
||||
: (toggleOption('width', true), toggleOption('height', true));
|
||||
|
||||
if (key == 'framerates')
|
||||
val != 'custom'
|
||||
? toggleOption('fps', false)
|
||||
: toggleOption('fps', true);
|
||||
});
|
||||
});
|
||||
};
|
||||
if (key == 'framerates')
|
||||
val != 'custom'
|
||||
? toggleOption('fps', false)
|
||||
: toggleOption('fps', true);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
// Insert dynamic v4l2 enum schema parts
|
||||
Object.keys(v4l2_dynamic_enum_schema).forEach(function(key) {
|
||||
buildSchemaPart(key, v4l2_dynamic_enum_schema, window.serverConfig.grabberV4L2.device);
|
||||
});
|
||||
// Insert dynamic v4l2 enum schema parts
|
||||
Object.keys(v4l2_dynamic_enum_schema).forEach(function(key) {
|
||||
buildSchemaPart(key, v4l2_dynamic_enum_schema, window.serverConfig.grabberV4L2.device);
|
||||
});
|
||||
}
|
||||
|
||||
if(window.showOptHelp) {
|
||||
// Instance Capture
|
||||
$('#conf_cont').append(createRow('conf_cont_instCapt'));
|
||||
$('#conf_cont_instCapt').append(createOptPanel('fa-camera', $.i18n("edt_conf_instCapture_heading_title"), 'editor_container_instCapt', 'btn_submit_instCapt'));
|
||||
$('#conf_cont_instCapt').append(createHelpTable(window.schema.instCapture.properties, $.i18n("edt_conf_instCapture_heading_title")));
|
||||
if(window.showOptHelp) {
|
||||
// Instance Capture
|
||||
$('#conf_cont').append(createRow('conf_cont_instCapt'));
|
||||
$('#conf_cont_instCapt').append(createOptPanel('fa-camera', $.i18n("edt_conf_instCapture_heading_title"), 'editor_container_instCapt', 'btn_submit_instCapt'));
|
||||
$('#conf_cont_instCapt').append(createHelpTable(window.schema.instCapture.properties, $.i18n("edt_conf_instCapture_heading_title")));
|
||||
|
||||
// Framegrabber
|
||||
$('#conf_cont').append(createRow('conf_cont_fg'));
|
||||
$('#conf_cont_fg').append(createOptPanel('fa-camera', $.i18n("edt_conf_fg_heading_title"), 'editor_container_fg', 'btn_submit_fg'));
|
||||
$('#conf_cont_fg').append(createHelpTable(window.schema.framegrabber.properties, $.i18n("edt_conf_fg_heading_title")));
|
||||
// Framegrabber
|
||||
$('#conf_cont').append(createRow('conf_cont_fg'));
|
||||
$('#conf_cont_fg').append(createOptPanel('fa-camera', $.i18n("edt_conf_fg_heading_title"), 'editor_container_fg', 'btn_submit_fg'));
|
||||
$('#conf_cont_fg').append(createHelpTable(window.schema.framegrabber.properties, $.i18n("edt_conf_fg_heading_title")));
|
||||
|
||||
// V4L2 - hide if not available
|
||||
if(V4L2_AVAIL){
|
||||
if(V4L2_AVAIL) {
|
||||
$('#conf_cont').append(createRow('conf_cont_v4l'));
|
||||
$('#conf_cont_v4l').append(createOptPanel('fa-camera', $.i18n("edt_conf_v4l2_heading_title"), 'editor_container_v4l2', 'btn_submit_v4l2'));
|
||||
$('#conf_cont_v4l').append(createHelpTable(window.schema.grabberV4L2.properties, $.i18n("edt_conf_v4l2_heading_title")));
|
||||
}
|
||||
} else {
|
||||
$('#conf_cont').addClass('row');
|
||||
$('#conf_cont').append(createOptPanel('fa-camera', $.i18n("edt_conf_instCapture_heading_title"), 'editor_container_instCapt', 'btn_submit_instCapt'));
|
||||
} else {
|
||||
$('#conf_cont').addClass('row');
|
||||
$('#conf_cont').append(createOptPanel('fa-camera', $.i18n("edt_conf_instCapture_heading_title"), 'editor_container_instCapt', 'btn_submit_instCapt'));
|
||||
$('#conf_cont').append(createOptPanel('fa-camera', $.i18n("edt_conf_fg_heading_title"), 'editor_container_fg', 'btn_submit_fg'));
|
||||
if(V4L2_AVAIL){
|
||||
if(V4L2_AVAIL) {
|
||||
$('#conf_cont').append(createOptPanel('fa-camera', $.i18n("edt_conf_v4l2_heading_title"), 'editor_container_v4l2', 'btn_submit_v4l2'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Instance Capture
|
||||
conf_editor_instCapt = createJsonEditor('editor_container_instCapt', {
|
||||
instCapture: window.schema.instCapture
|
||||
}, true, true);
|
||||
// Instance Capture
|
||||
conf_editor_instCapt = createJsonEditor('editor_container_instCapt', {
|
||||
instCapture: window.schema.instCapture
|
||||
}, true, true);
|
||||
|
||||
conf_editor_instCapt.on('change',function() {
|
||||
conf_editor_instCapt.validate().length ? $('#btn_submit_instCapt').attr('disabled', true) : $('#btn_submit_instCapt').attr('disabled', false);
|
||||
});
|
||||
conf_editor_instCapt.on('change',function() {
|
||||
conf_editor_instCapt.validate().length ? $('#btn_submit_instCapt').attr('disabled', true) : $('#btn_submit_instCapt').attr('disabled', false);
|
||||
});
|
||||
|
||||
$('#btn_submit_instCapt').off().on('click',function() {
|
||||
requestWriteConfig(conf_editor_instCapt.getValue());
|
||||
});
|
||||
$('#btn_submit_instCapt').off().on('click',function() {
|
||||
requestWriteConfig(conf_editor_instCapt.getValue());
|
||||
});
|
||||
|
||||
// Framegrabber
|
||||
conf_editor_fg = createJsonEditor('editor_container_fg', {
|
||||
framegrabber: window.schema.framegrabber
|
||||
}, true, true);
|
||||
// Framegrabber
|
||||
conf_editor_fg = createJsonEditor('editor_container_fg', {
|
||||
framegrabber: window.schema.framegrabber
|
||||
}, true, true);
|
||||
|
||||
conf_editor_fg.on('change',function() {
|
||||
conf_editor_fg.validate().length ? $('#btn_submit_fg').attr('disabled', true) : $('#btn_submit_fg').attr('disabled', false);
|
||||
});
|
||||
conf_editor_fg.on('change',function() {
|
||||
conf_editor_fg.validate().length ? $('#btn_submit_fg').attr('disabled', true) : $('#btn_submit_fg').attr('disabled', false);
|
||||
});
|
||||
|
||||
$('#btn_submit_fg').off().on('click',function() {
|
||||
requestWriteConfig(conf_editor_fg.getValue());
|
||||
});
|
||||
$('#btn_submit_fg').off().on('click',function() {
|
||||
requestWriteConfig(conf_editor_fg.getValue());
|
||||
});
|
||||
|
||||
if(V4L2_AVAIL){
|
||||
if(V4L2_AVAIL) {
|
||||
conf_editor_v4l2 = createJsonEditor('editor_container_v4l2', {
|
||||
grabberV4L2 : window.schema.grabberV4L2
|
||||
}, true, true);
|
||||
@@ -258,35 +260,35 @@ $(document).ready( function() {
|
||||
});
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
//create introduction
|
||||
if(window.showOptHelp) {
|
||||
//create introduction
|
||||
if(window.showOptHelp) {
|
||||
createHint("intro", $.i18n('conf_grabber_fg_intro'), "editor_container_fg");
|
||||
if(V4L2_AVAIL){
|
||||
createHint("intro", $.i18n('conf_grabber_v4l_intro'), "editor_container_v4l2");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function hideEl(el) {
|
||||
for(var i = 0; i<el.length; i++) {
|
||||
$('[data-schemapath*="root.framegrabber.'+el[i]+'"]').toggle(false);
|
||||
}
|
||||
}
|
||||
function hideEl(el) {
|
||||
for(var i = 0; i<el.length; i++) {
|
||||
$('[data-schemapath*="root.framegrabber.'+el[i]+'"]').toggle(false);
|
||||
}
|
||||
}
|
||||
|
||||
//hide specific options
|
||||
conf_editor_fg.on('ready',function() {
|
||||
var grabbers = window.serverInfo.grabbers.available;
|
||||
//hide specific options
|
||||
conf_editor_fg.on('ready',function() {
|
||||
var grabbers = window.serverInfo.grabbers.available;
|
||||
|
||||
if (grabbers.indexOf('dispmanx') > -1)
|
||||
hideEl(["device","pixelDecimation"]);
|
||||
else if (grabbers.indexOf('x11') > -1)
|
||||
hideEl(["device","width","height"]);
|
||||
else if (grabbers.indexOf('osx') > -1 )
|
||||
hideEl(["device","pixelDecimation"]);
|
||||
else if (grabbers.indexOf('amlogic') > -1)
|
||||
hideEl(["pixelDecimation"]);
|
||||
});
|
||||
if (grabbers.indexOf('dispmanx') > -1)
|
||||
hideEl(["device","pixelDecimation"]);
|
||||
else if (grabbers.indexOf('x11') > -1)
|
||||
hideEl(["device","width","height"]);
|
||||
else if (grabbers.indexOf('osx') > -1 )
|
||||
hideEl(["device","pixelDecimation"]);
|
||||
else if (grabbers.indexOf('amlogic') > -1)
|
||||
hideEl(["pixelDecimation"]);
|
||||
});
|
||||
|
||||
removeOverlay();
|
||||
removeOverlay();
|
||||
});
|
||||
|
@@ -163,7 +163,6 @@ $(document).ready(function () {
|
||||
requestTokenAuthorization(loginToken)
|
||||
else
|
||||
loadContentTo("#page-content", "login")
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
|
@@ -39,12 +39,12 @@ function createLedPreview(leds, origin){
|
||||
{
|
||||
var led = leds[idx];
|
||||
var led_id='ledc_'+[idx];
|
||||
var bgcolor = "background-color:hsl("+(idx*360/leds.length)+",100%,50%);";
|
||||
var bgcolor = "background-color:hsla("+(idx*360/leds.length)+",100%,50%,0.75);";
|
||||
var pos = "left:"+(led.hmin * canvas_width)+"px;"+
|
||||
"top:"+(led.vmin * canvas_height)+"px;"+
|
||||
"width:"+((led.hmax-led.hmin) * (canvas_width-1))+"px;"+
|
||||
"height:"+((led.vmax-led.vmin) * (canvas_height-1))+"px;";
|
||||
leds_html += '<div id="'+led_id+'" class="led" style="'+bgcolor+pos+'" title="'+idx+'"><span id="'+led_id+'_num" class="led_prev_num">'+idx+'</span></div>';
|
||||
leds_html += '<div id="'+led_id+'" class="led" style="'+bgcolor+pos+'" title="'+idx+'"><span id="'+led_id+'_num" class="led_prev_num">'+((led.name) ? led.name : idx)+'</span></div>';
|
||||
}
|
||||
$('#leds_preview').html(leds_html);
|
||||
$('#ledc_0').css({"background-color":"black","z-index":"12"});
|
||||
@@ -496,9 +496,13 @@ $(document).ready(function() {
|
||||
$("#leddevices").off().on("change", function() {
|
||||
var generalOptions = window.serverSchema.properties.device;
|
||||
|
||||
// Modified schema enty "hardwareLedCount" in generalOptions to minimum LedCount
|
||||
// Modified schema entry "hardwareLedCount" in generalOptions to minimum LedCount
|
||||
var ledType = $(this).val();
|
||||
|
||||
var specificOptions = window.serverSchema.properties.alldevices[$(this).val()];
|
||||
//philipshueentertainment backward fix
|
||||
if(ledType == "philipshueentertainment") ledType = "philipshue";
|
||||
|
||||
var specificOptions = window.serverSchema.properties.alldevices[ledType];
|
||||
conf_editor = createJsonEditor('editor_container', {
|
||||
generalOptions : generalOptions,
|
||||
specificOptions : specificOptions,
|
||||
@@ -506,21 +510,19 @@ $(document).ready(function() {
|
||||
|
||||
var values_general = {};
|
||||
var values_specific = {};
|
||||
var isCurrentDevice = (window.serverConfig.device.type == $(this).val());
|
||||
var isCurrentDevice = (window.serverConfig.device.type == ledType);
|
||||
|
||||
for(var key in window.serverConfig.device){
|
||||
if (key != "type" && key in generalOptions.properties)
|
||||
values_general[key] = window.serverConfig.device[key];
|
||||
for(var key in window.serverConfig.device) {
|
||||
if (key != "type" && key in generalOptions.properties) values_general[key] = window.serverConfig.device[key];
|
||||
};
|
||||
conf_editor.getEditor("root.generalOptions").setValue( values_general );
|
||||
|
||||
if (isCurrentDevice)
|
||||
{
|
||||
var specificOptions_val = conf_editor.getEditor("root.specificOptions").getValue()
|
||||
var specificOptions_val = conf_editor.getEditor("root.specificOptions").getValue();
|
||||
for(var key in specificOptions_val){
|
||||
values_specific[key] = (key in window.serverConfig.device) ? window.serverConfig.device[key] : specificOptions_val[key];
|
||||
values_specific[key] = (key in window.serverConfig.device) ? window.serverConfig.device[key] : specificOptions_val[key];
|
||||
};
|
||||
|
||||
conf_editor.getEditor("root.specificOptions").setValue( values_specific );
|
||||
};
|
||||
|
||||
@@ -528,18 +530,29 @@ $(document).ready(function() {
|
||||
conf_editor.validate().length ? $('#btn_submit_controller').attr('disabled', true) : $('#btn_submit_controller').attr('disabled', false);
|
||||
|
||||
// led controller sepecific wizards
|
||||
if($(this).val() == "philipshue")
|
||||
{
|
||||
createHint("wizard", $.i18n('wiz_hue_title'), "btn_wiz_holder","btn_led_device_wiz");
|
||||
$('#btn_led_device_wiz').off().on('click',startWizardPhilipsHue);
|
||||
}
|
||||
else
|
||||
{
|
||||
$('#btn_wiz_holder').html("")
|
||||
$('#btn_led_device_wiz').off();
|
||||
}
|
||||
$('#btn_wiz_holder').html("")
|
||||
$('#btn_led_device_wiz').off();
|
||||
|
||||
if(ledType == "philipshue") {
|
||||
$('#root_specificOptions_useEntertainmentAPI').bind("change", function() {
|
||||
var ledWizardType = (this.checked) ? "philipshueentertainment" : ledType;
|
||||
var data = { type: ledWizardType };
|
||||
var hue_title = (this.checked) ? 'wiz_hue_e_title' : 'wiz_hue_title';
|
||||
changeWizard(data, hue_title, startWizardPhilipsHue);
|
||||
});
|
||||
$("#root_specificOptions_useEntertainmentAPI").trigger("change");
|
||||
}
|
||||
|
||||
function changeWizard(data, hint, fn) {
|
||||
$('#btn_wiz_holder').html("")
|
||||
createHint("wizard", $.i18n(hint), "btn_wiz_holder","btn_led_device_wiz");
|
||||
$('#btn_led_device_wiz').off().on('click', data , fn);
|
||||
}
|
||||
});
|
||||
|
||||
//philipshueentertainment backward fix
|
||||
if(window.serverConfig.device.type == "philipshueentertainment") window.serverConfig.device.type = "philipshue";
|
||||
|
||||
// create led device selection
|
||||
var ledDevices = window.serverInfo.ledDevices.available;
|
||||
var devRPiSPI = ['apa102', 'apa104', 'ws2801', 'lpd6803', 'lpd8806', 'p9813', 'sk6812spi', 'sk6822spi', 'ws2812spi'];
|
||||
|
@@ -147,15 +147,19 @@ $(document).ready(function() {
|
||||
//roundRect(ledsCanvasNodeCtx, led.hmin * canvas_width, led.vmin * canvas_height, (led.hmax-led.hmin) * canvas_width, (led.vmax-led.vmin) * canvas_height, 4, true, colors[idx])
|
||||
//ledsCanvasNodeCtx.fillRect(led.hmin * canvas_width, led.vmin * canvas_height, (led.hmax-led.hmin) * canvas_width, (led.vmax-led.vmin) * canvas_height);
|
||||
|
||||
ledsCanvasNodeCtx.fillStyle = (useColor) ? "rgba("+colors[cPos]+","+colors[cPos+1]+","+colors[cPos+2]+",0.9)" : "hsl("+(idx*360/leds.length)+",100%,50%)";
|
||||
ledsCanvasNodeCtx.fillStyle = (useColor) ? "rgba("+colors[cPos]+","+colors[cPos+1]+","+colors[cPos+2]+",0.75)" : "hsla("+(idx*360/leds.length)+",100%,50%,0.75)";
|
||||
ledsCanvasNodeCtx.fill(twoDPaths[idx]);
|
||||
ledsCanvasNodeCtx.stroke(twoDPaths[idx]);
|
||||
|
||||
if(toggleLedsNum)
|
||||
{
|
||||
ledsCanvasNodeCtx.fillStyle = "blue";
|
||||
//ledsCanvasNodeCtx.shadowOffsetX = 1;
|
||||
//ledsCanvasNodeCtx.shadowOffsetY = 1;
|
||||
//ledsCanvasNodeCtx.shadowColor = "black";
|
||||
//ledsCanvasNodeCtx.shadowBlur = 4;
|
||||
ledsCanvasNodeCtx.fillStyle = "white";
|
||||
ledsCanvasNodeCtx.textAlign = "center";
|
||||
ledsCanvasNodeCtx.fillText(idx, (led.hmin * canvas_width) + ( ((led.hmax-led.hmin) * canvas_width) / 2), (led.vmin * canvas_height) + ( ((led.vmax-led.vmin) * canvas_height) / 2));
|
||||
ledsCanvasNodeCtx.fillText(((led.name) ? led.name : idx), (led.hmin * canvas_width) + ( ((led.hmax-led.hmin) * canvas_width) / 2), (led.vmin * canvas_height) + ( ((led.vmax-led.vmin) * canvas_height) / 2));
|
||||
}
|
||||
|
||||
// increment colorsPosition
|
||||
|
@@ -247,7 +247,7 @@
|
||||
String.locale = String.locale || $( 'html' ).attr( 'lang' );
|
||||
|
||||
if ( !String.locale ) {
|
||||
if ( typeof window.navigator !== undefined ) {
|
||||
if ( typeof window.navigator !== 'undefined' ) {
|
||||
nav = window.navigator;
|
||||
String.locale = nav.language || nav.userLanguage || '';
|
||||
} else {
|
||||
|
@@ -360,7 +360,7 @@
|
||||
|
||||
// Check if the restore to Latin number flag is set:
|
||||
if ( integer ) {
|
||||
if ( parseFloat( num, 10 ) === num ) {
|
||||
if ( parseFloat( num ) === num ) {
|
||||
return num;
|
||||
}
|
||||
|
||||
@@ -381,7 +381,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
return integer ? parseFloat( convertedNumber, 10 ) : convertedNumber;
|
||||
return integer ? parseFloat( convertedNumber ) : convertedNumber;
|
||||
},
|
||||
|
||||
/**
|
||||
|
@@ -157,20 +157,16 @@ $(document).ready( function() {
|
||||
{
|
||||
if(lsys != window.wSess[i].host+':'+window.wSess[i].port)
|
||||
{
|
||||
var hyperionAddress
|
||||
|
||||
if (window.wSess[i].address.indexOf(':') > -1 && window.wSess[i].address.length == 36)
|
||||
hyperionAddress = 'http://['+window.wSess[i].address+']:'+window.wSess[i].port
|
||||
else
|
||||
hyperionAddress = 'http://'+window.wSess[i].address+':'+window.wSess[i].port
|
||||
|
||||
$('#id_select').append(createSelOpt(hyperionAddress, window.wSess[i].host))
|
||||
var hyperionAddress = window.wSess[i].address;
|
||||
if(hyperionAddress.indexOf(':') > -1 && hyperionAddress.length == 36) hyperionAddress = '['+hyperionAddress+']';
|
||||
hyperionAddress = 'http://'+hyperionAddress+':'+window.wSess[i].port;
|
||||
$('#id_select').append(createSelOpt(hyperionAddress, window.wSess[i].name));
|
||||
}
|
||||
}
|
||||
|
||||
$('#id_btn_saveset').off().on('click',function() {
|
||||
$("#loading_overlay").addClass("overlay");
|
||||
window.location.href = $('#id_select').val()
|
||||
window.location.href = $('#id_select').val();
|
||||
});
|
||||
|
||||
});
|
||||
|
@@ -2,7 +2,7 @@ $(document).ready( function() {
|
||||
|
||||
// check if browser supports streaming
|
||||
if(window.navigator.mediaDevices && window.navigator.mediaDevices.getDisplayMedia){
|
||||
$("#btn_streamer").toggle()
|
||||
$("#btn_streamer").toggle();
|
||||
}
|
||||
|
||||
// variables
|
||||
|
@@ -109,7 +109,7 @@ function loadContent(event, forceRefresh)
|
||||
var lastSelectedInstance = getStorage('lastSelectedInstance', false);
|
||||
|
||||
if (lastSelectedInstance && (lastSelectedInstance != window.currentHyperionInstance))
|
||||
if (typeof(window.serverInfo.instance[lastSelectedInstance].running) !== 'undefined' && window.serverInfo.instance[lastSelectedInstance].running)
|
||||
if (typeof(window.serverInfo.instance[lastSelectedInstance].running) !== 'undefined' && window.serverInfo.instance[lastSelectedInstance].running)
|
||||
instanceSwitch(lastSelectedInstance);
|
||||
else
|
||||
removeStorage('lastSelectedInstance', false);
|
||||
@@ -890,12 +890,12 @@ function getReleases(callback)
|
||||
continue;
|
||||
|
||||
if(releases[i].tag_name.includes('alpha'))
|
||||
{
|
||||
{
|
||||
if (sem = semverLite.gt(releases[i].tag_name, highestAlphaRelease.tag_name))
|
||||
highestAlphaRelease = releases[i];
|
||||
highestAlphaRelease = releases[i];
|
||||
}
|
||||
else if (releases[i].tag_name.includes('beta'))
|
||||
{
|
||||
{
|
||||
if (sem = semverLite.gt(releases[i].tag_name, highestBetaRelease.tag_name))
|
||||
highestBetaRelease = releases[i];
|
||||
}
|
||||
@@ -907,7 +907,7 @@ function getReleases(callback)
|
||||
else
|
||||
{
|
||||
if (semverLite.gt(releases[i].tag_name, highestRelease.tag_name))
|
||||
highestRelease = releases[i];
|
||||
highestRelease = releases[i];
|
||||
}
|
||||
}
|
||||
window.latestStableVersion = highestRelease;
|
||||
@@ -915,7 +915,7 @@ function getReleases(callback)
|
||||
window.latestAlphaVersion= highestAlphaRelease;
|
||||
window.latestRcVersion = highestRcRelease;
|
||||
|
||||
|
||||
|
||||
if(window.serverConfig.general.watchedVersionBranch == "Beta" && semverLite.gt(highestBetaRelease.tag_name, highestRelease.tag_name))
|
||||
window.latestVersion = highestBetaRelease;
|
||||
else
|
||||
@@ -951,4 +951,4 @@ function handleDarkMode()
|
||||
setStorage("darkMode", "on", false);
|
||||
$('#btn_darkmode_icon').removeClass('fa fa-moon-o');
|
||||
$('#btn_darkmode_icon').addClass('fa fa-sun-o');
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user