diff --git a/CHANGELOG.md b/CHANGELOG.md index 16b076ff..512f6196 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,14 +4,32 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [Unreleased](https://github.com/hyperion-project/hyperion.ng/compare/2.0.0-alpha.11...HEAD) +## [Unreleased](https://github.com/hyperion-project/hyperion.ng/compare/2.0.12...HEAD) ### Breaking ### Added +### Changed + +### Fixed + +## Removed + +## [2.0.12](https://github.com/hyperion-project/hyperion.ng/releases/tag/2.0.12) - 2021-11-20 +Hyperion's November release brings you some new features, removed IPv6 address related limitations, as well as fixing a couple of issues. + +Hyperion packages can be installed now under Ubuntu (x64) and Debian (amd64/armhf) (incl. Raspberry Pi OS) via our own APT server. +Details about the installation can be found in the installation.md and at apt.hyperion-project.org. + +### Added + +- New LED-device type: Razor Chroma. +Note: Due to Chroma Razer API limitations, only one device can be configured. +- APA102 - Support setting maximum brightness level (1-31) +- New installation method (Drag'n Drop) for macOS. - hyperion-remote & standalone grabbers: IPv6 support -- New languages - Danish & Hungarian +- New languages: Danish & Hungarian ### Changed @@ -24,9 +42,17 @@ Note: Existing configurations are migrated to new structures automatically ### Fixed +- Fixed API Subscription (e.g. as used by HomeAssistant) (#1351) +- Fixed APA102 protocol aligning to the standard defined, removed Latch-Time as not required by APA102 protocol (#1352, #1132) - Fixed hyperion-remote when sending multiple Hex-Colors with "Set Color" option +- UI: Fixed "Selected Hyperion instance isn't running" issue (#1357) +- Fixed Database migration version handling +- Fixed Python ModuleNotFoundError (#1109) -### Removed +### Technical + +- Added Qt6 support +- Migrated to MBEDTSL 3 ## [2.0.0-alpha.11](https://github.com/hyperion-project/hyperion.ng/releases/tag/2.0.0-alpha.11) - 2021-10-06 diff --git a/assets/webconfig/js/content_leds.js b/assets/webconfig/js/content_leds.js index 83180850..d87c8cb0 100755 --- a/assets/webconfig/js/content_leds.js +++ b/assets/webconfig/js/content_leds.js @@ -1630,7 +1630,7 @@ function updateElements(ledType, key) { if (ledProperties && ledProperties.leds && ledProperties.maxLedCount) { hardwareLedCount = ledProperties.leds.count; - var maxLedCount = ledProperties.maxLedCount + var maxLedCount = ledProperties.maxLedCount; if (hardwareLedCount > maxLedCount) { showInfoDialog('warning', $.i18n("conf_leds_config_warning"), $.i18n('conf_leds_error_hwled_gt_maxled', hardwareLedCount, maxLedCount, maxLedCount)); hardwareLedCount = maxLedCount; @@ -1661,7 +1661,7 @@ function updateElements(ledType, key) { if (ledProperties && ledProperties.maxLedCount) { hardwareLedCount = conf_editor.getEditor("root.generalOptions.hardwareLedCount").getValue(); - var maxLedCount = ledProperties.maxLedCount + var maxLedCount = ledProperties.maxLedCount; if (hardwareLedCount > maxLedCount) { showInfoDialog('warning', $.i18n("conf_leds_config_warning"), $.i18n('conf_leds_error_hwled_gt_maxled', hardwareLedCount, maxLedCount, maxLedCount)); hardwareLedCount = maxLedCount; diff --git a/assets/webconfig/js/content_network.js b/assets/webconfig/js/content_network.js index 41c5f601..da23a6dd 100644 --- a/assets/webconfig/js/content_network.js +++ b/assets/webconfig/js/content_network.js @@ -14,35 +14,35 @@ $(document).ready(function () { if (window.showOptHelp) { //network - $('#conf_cont').append(createRow('conf_cont_net')) + $('#conf_cont').append(createRow('conf_cont_net')); $('#conf_cont_net').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_net_heading_title"), 'editor_container_net', 'btn_submit_net', 'panel-system')); $('#conf_cont_net').append(createHelpTable(window.schema.network.properties, $.i18n("edt_conf_net_heading_title"))); //jsonserver - $('#conf_cont').append(createRow('conf_cont_json')) + $('#conf_cont').append(createRow('conf_cont_json')); $('#conf_cont_json').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_js_heading_title"), 'editor_container_jsonserver', 'btn_submit_jsonserver', 'panel-system')); $('#conf_cont_json').append(createHelpTable(window.schema.jsonServer.properties, $.i18n("edt_conf_js_heading_title"))); //flatbufserver - $('#conf_cont').append(createRow('conf_cont_flatbuf')) + $('#conf_cont').append(createRow('conf_cont_flatbuf')); $('#conf_cont_flatbuf').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_fbs_heading_title"), 'editor_container_fbserver', 'btn_submit_fbserver', 'panel-system')); $('#conf_cont_flatbuf').append(createHelpTable(window.schema.flatbufServer.properties, $.i18n("edt_conf_fbs_heading_title"), "flatbufServerHelpPanelId")); //protoserver - $('#conf_cont').append(createRow('conf_cont_proto')) + $('#conf_cont').append(createRow('conf_cont_proto')); $('#conf_cont_proto').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_pbs_heading_title"), 'editor_container_protoserver', 'btn_submit_protoserver', 'panel-system')); $('#conf_cont_proto').append(createHelpTable(window.schema.protoServer.properties, $.i18n("edt_conf_pbs_heading_title"), "protoServerHelpPanelId")); //boblight if (BOBLIGHT_ENABLED) { - $('#conf_cont').append(createRow('conf_cont_bobl')) + $('#conf_cont').append(createRow('conf_cont_bobl')); $('#conf_cont_bobl').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_bobls_heading_title"), 'editor_container_boblightserver', 'btn_submit_boblightserver', 'panel-system')); $('#conf_cont_bobl').append(createHelpTable(window.schema.boblightServer.properties, $.i18n("edt_conf_bobls_heading_title"), "boblightServerHelpPanelId")); } //forwarder if (storedAccess != 'default') { - $('#conf_cont').append(createRow('conf_cont_fw')) + $('#conf_cont').append(createRow('conf_cont_fw')); $('#conf_cont_fw').append(createOptPanel('fa-sitemap', $.i18n("edt_conf_fw_heading_title"), 'editor_container_forwarder', 'btn_submit_forwarder', 'panel-system')); $('#conf_cont_fw').append(createHelpTable(window.schema.forwarder.properties, $.i18n("edt_conf_fw_heading_title"), "forwarderHelpPanelId")); } @@ -243,7 +243,7 @@ $(document).ready(function () { $('#root_network_apiAuth').change(function () { var state = $(this).is(":checked"); checkApiTokenState(state); - }) + }); checkApiTokenState(window.serverConfig.network.apiAuth); diff --git a/libsrc/hyperion/SettingsManager.cpp b/libsrc/hyperion/SettingsManager.cpp index 6446d761..72f8ea0e 100644 --- a/libsrc/hyperion/SettingsManager.cpp +++ b/libsrc/hyperion/SettingsManager.cpp @@ -570,13 +570,30 @@ bool SettingsManager::handleConfigUpgrade(QJsonObject& config) } migrated = true; } + } - if (migrated) + if (newDeviceConfig.contains("type")) + { + QString type = newDeviceConfig["type"].toString(); + if (type == "apa102") { - config["device"] = newDeviceConfig; - Debug(_log, "LED-Device records migrated"); + if (newDeviceConfig.contains("colorOrder")) + { + QString colorOrder = newDeviceConfig["colorOrder"].toString(); + if (colorOrder == "bgr") + { + newDeviceConfig["colorOrder"] = "rgb"; + migrated = true; + } + } } } + + if (migrated) + { + config["device"] = newDeviceConfig; + Debug(_log, "LED-Device records migrated"); + } } // Have Hostname/IP-address separate from port for Forwarder diff --git a/libsrc/utils/jsonschema/QJsonSchemaChecker.cpp b/libsrc/utils/jsonschema/QJsonSchemaChecker.cpp index 2307b7f2..d972c28f 100644 --- a/libsrc/utils/jsonschema/QJsonSchemaChecker.cpp +++ b/libsrc/utils/jsonschema/QJsonSchemaChecker.cpp @@ -233,24 +233,28 @@ void QJsonSchemaChecker::checkProperties(const QJsonObject& value, const QJsonOb { validate(value[property], propertyValue.toObject()); } - else if (verifyDeps(property, value, schema)) + else if (!verifyDeps(property, value, schema)) { - } - else if (required != propertyValue.toObject().end() && propertyValue.toObject().find("required").value().toBool() && !_ignoreRequired) - { - _error = true; + if (required != propertyValue.toObject().end() && propertyValue.toObject().find("required").value().toBool() && !_ignoreRequired) + { + _error = true; - if (_correct == "create") + if (_correct == "create") + { + QJsonUtils::modify(_autoCorrected, _currentPath, QJsonUtils::create(propertyValue, _ignoreRequired), property); + setMessage("Create property: " + property + " with value: " + QJsonUtils::getDefaultValue(propertyValue)); + } + + if (_correct == "") + { + setMessage("missing member"); + } + } + else if (_correct == "create" && _ignoreRequired) { QJsonUtils::modify(_autoCorrected, _currentPath, QJsonUtils::create(propertyValue, _ignoreRequired), property); - setMessage("Create property: " + property + " with value: " + QJsonUtils::getDefaultValue(propertyValue)); } - - if (_correct == "") - setMessage("missing member"); } - else if (_correct == "create" && _ignoreRequired) - QJsonUtils::modify(_autoCorrected, _currentPath, QJsonUtils::create(propertyValue, _ignoreRequired), property); _currentPath.removeLast(); }