mirror of
https://github.com/sudoxnym/open-hyperion.git
synced 2026-04-14 11:36:31 +00:00
Add auto-start feature
Remove useless code
This commit is contained in:
parent
9b466ec48d
commit
5010ce5a0c
3 changed files with 232 additions and 159 deletions
|
|
@ -1,12 +1,13 @@
|
|||
#include "OpenRGBE131ReceiverDialog.h"
|
||||
#include "ui_OpenRGBE131ReceiverDialog.h"
|
||||
|
||||
#include <e131.h>
|
||||
#include <QDir>
|
||||
#include <QLineEdit>
|
||||
#include <QMessageBox>
|
||||
#include <QSignalMapper>
|
||||
#include <fstream>
|
||||
#include "filesystem.h"
|
||||
#include <e131.h>
|
||||
#include <fstream>
|
||||
|
||||
#ifndef _WIN32
|
||||
#include <unistd.h>
|
||||
|
|
@ -84,6 +85,7 @@ OpenRGBE131ReceiverDialog::OpenRGBE131ReceiverDialog(ResourceManager* manager, Q
|
|||
resource_manager->RegisterDetectionProgressCallback(DeviceListChanged_Callback, this);
|
||||
|
||||
online = false;
|
||||
initialized = false;
|
||||
received_count = 0;
|
||||
|
||||
UpdateOnlineStatus();
|
||||
|
|
@ -109,7 +111,16 @@ void OpenRGBE131ReceiverDialog::DeviceListChanged()
|
|||
universe_list.clear();
|
||||
|
||||
UpdateControllersTreeView();
|
||||
UpdateTreeView();
|
||||
LoadMap();
|
||||
|
||||
if (!initialized)
|
||||
{
|
||||
if (ui->EnableAutoStartBox->checkState() == Qt::Checked)
|
||||
{
|
||||
this->StartReceiver();
|
||||
}
|
||||
initialized = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -488,15 +499,208 @@ void OpenRGBE131ReceiverDialog::UpdateOnlineStatus()
|
|||
}
|
||||
}
|
||||
|
||||
void OpenRGBE131ReceiverDialog::on_ButtonStartReceiver_clicked()
|
||||
void OpenRGBE131ReceiverDialog::LoadMap()
|
||||
{
|
||||
if(!online)
|
||||
/*-----------------------------------------------------*\
|
||||
| Read in the JSON map from a file |
|
||||
\*-----------------------------------------------------*/
|
||||
json universe_map;
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| Open input file in binary mode |
|
||||
\*---------------------------------------------------------*/
|
||||
std::ifstream universe_file(resource_manager->GetConfigurationDirectory() / "plugins"
|
||||
/ "settings" / "E131UniverseMap.json",
|
||||
std::ios::in | std::ios::binary);
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| Read settings into JSON store |
|
||||
\*---------------------------------------------------------*/
|
||||
if (universe_file) {
|
||||
try {
|
||||
universe_file >> universe_map;
|
||||
} catch (std::exception e) {
|
||||
/*-------------------------------------------------*\
|
||||
| If an exception was caught, that means the JSON |
|
||||
| parsing failed. Clear out any data in the store |
|
||||
| as it is corrupt. |
|
||||
\*-------------------------------------------------*/
|
||||
universe_map.clear();
|
||||
}
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| Load checkboxes state |
|
||||
\*---------------------------------------------------------*/
|
||||
if (universe_map.contains("enable_multicast")) {
|
||||
if (universe_map["enable_multicast"]) {
|
||||
ui->EnableMulticastBox->setCheckState(Qt::Checked);
|
||||
} else {
|
||||
ui->EnableMulticastBox->setCheckState(Qt::Unchecked);
|
||||
}
|
||||
}
|
||||
if (universe_map.contains("enable_autostart")) {
|
||||
if (universe_map["enable_autostart"]) {
|
||||
ui->EnableAutoStartBox->setCheckState(Qt::Checked);
|
||||
} else {
|
||||
ui->EnableAutoStartBox->setCheckState(Qt::Unchecked);
|
||||
}
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| Clear the universe map |
|
||||
\*---------------------------------------------------------*/
|
||||
universe_list.clear();
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| Loop through all saved universes and create list entries |
|
||||
\*---------------------------------------------------------*/
|
||||
if (universe_map.contains("universes")) {
|
||||
for (unsigned int universe_index = 0; universe_index < universe_map["universes"].size();
|
||||
universe_index++) {
|
||||
if (universe_map["universes"][universe_index].contains("universe")) {
|
||||
universe_entry new_universe;
|
||||
|
||||
new_universe.universe = universe_map["universes"][universe_index]["universe"];
|
||||
|
||||
if (universe_map["universes"][universe_index].contains("members")) {
|
||||
for (unsigned int member_index = 0;
|
||||
member_index < universe_map["universes"][universe_index]["members"].size();
|
||||
member_index++) {
|
||||
universe_member new_member;
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| Fill in default values in case entries are missing |
|
||||
\*---------------------------------------------------------*/
|
||||
new_member.controller = NULL;
|
||||
new_member.start_channel = 1;
|
||||
new_member.start_led = 0;
|
||||
new_member.num_leds = 0;
|
||||
new_member.update = false;
|
||||
|
||||
if (universe_map["universes"][universe_index]["members"][member_index]
|
||||
.contains("start_channel")) {
|
||||
new_member.start_channel
|
||||
= universe_map["universes"][universe_index]["members"][member_index]
|
||||
["start_channel"];
|
||||
}
|
||||
|
||||
if (universe_map["universes"][universe_index]["members"][member_index]
|
||||
.contains("start_led")) {
|
||||
new_member.start_led
|
||||
= universe_map["universes"][universe_index]["members"][member_index]
|
||||
["start_led"];
|
||||
}
|
||||
|
||||
if (universe_map["universes"][universe_index]["members"][member_index]
|
||||
.contains("num_leds")) {
|
||||
new_member.num_leds = universe_map["universes"][universe_index]
|
||||
["members"][member_index]["num_leds"];
|
||||
}
|
||||
|
||||
if (universe_map["universes"][universe_index]["members"][member_index]
|
||||
.contains("update")) {
|
||||
new_member.update = universe_map["universes"][universe_index]["members"]
|
||||
[member_index]["update"];
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| Get controller information |
|
||||
\*---------------------------------------------------------*/
|
||||
std::string controller_name = "";
|
||||
std::string controller_description = "";
|
||||
std::string controller_location = "";
|
||||
std::string controller_serial = "";
|
||||
unsigned int controller_led_count = 0;
|
||||
|
||||
if (universe_map["universes"][universe_index]["members"][member_index]
|
||||
.contains("controller_name")) {
|
||||
controller_name = universe_map["universes"][universe_index]["members"]
|
||||
[member_index]["controller_name"];
|
||||
}
|
||||
|
||||
if (universe_map["universes"][universe_index]["members"][member_index]
|
||||
.contains("controller_description")) {
|
||||
controller_description
|
||||
= universe_map["universes"][universe_index]["members"][member_index]
|
||||
["controller_description"];
|
||||
}
|
||||
|
||||
if (universe_map["universes"][universe_index]["members"][member_index]
|
||||
.contains("controller_location")) {
|
||||
controller_location
|
||||
= universe_map["universes"][universe_index]["members"][member_index]
|
||||
["controller_location"];
|
||||
}
|
||||
|
||||
if (universe_map["universes"][universe_index]["members"][member_index]
|
||||
.contains("controller_serial")) {
|
||||
controller_serial = universe_map["universes"][universe_index]["members"]
|
||||
[member_index]["controller_serial"];
|
||||
}
|
||||
|
||||
if (universe_map["universes"][universe_index]["members"][member_index]
|
||||
.contains("controller_led_count")) {
|
||||
controller_led_count
|
||||
= universe_map["universes"][universe_index]["members"][member_index]
|
||||
["controller_led_count"];
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| Search the controller list for a matching controller |
|
||||
\*---------------------------------------------------------*/
|
||||
for (unsigned int controller_index = 0;
|
||||
controller_index < resource_manager->GetRGBControllers().size();
|
||||
controller_index++) {
|
||||
if ((resource_manager->GetRGBControllers()[controller_index]->name
|
||||
== controller_name)
|
||||
&& (resource_manager->GetRGBControllers()[controller_index]->description
|
||||
== controller_description)
|
||||
&& (resource_manager->GetRGBControllers()[controller_index]->location
|
||||
== controller_location)
|
||||
&& (resource_manager->GetRGBControllers()[controller_index]->serial
|
||||
== controller_serial)
|
||||
&& (resource_manager->GetRGBControllers()[controller_index]
|
||||
->colors.size()
|
||||
== controller_led_count)) {
|
||||
new_member.controller = resource_manager
|
||||
->GetRGBControllers()[controller_index];
|
||||
}
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| If a controller was found, add the member to the universe |
|
||||
\*---------------------------------------------------------*/
|
||||
if (new_member.controller != NULL) {
|
||||
new_universe.members.push_back(new_member);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
universe_list.push_back(new_universe);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Update the universe tree view |
|
||||
\*-----------------------------------------------------*/
|
||||
UpdateTreeView();
|
||||
}
|
||||
|
||||
void OpenRGBE131ReceiverDialog::StartReceiver()
|
||||
{
|
||||
if (!online) {
|
||||
// Start the receiver thread
|
||||
E131ReceiverThread = new std::thread(&OpenRGBE131ReceiverDialog::E131ReceiverThreadFunction, this);
|
||||
}
|
||||
}
|
||||
|
||||
void OpenRGBE131ReceiverDialog::on_ButtonStartReceiver_clicked()
|
||||
{
|
||||
StartReceiver();
|
||||
}
|
||||
|
||||
void OpenRGBE131ReceiverDialog::on_ButtonStopReceiver_clicked()
|
||||
{
|
||||
online = false;
|
||||
|
|
@ -816,10 +1020,19 @@ void OpenRGBE131ReceiverDialog::on_ButtonSaveMap_clicked()
|
|||
}
|
||||
}
|
||||
|
||||
universe_map["enable_multicast"] = ui->EnableMulticastBox->checkState() == Qt::Checked;
|
||||
universe_map["enable_autostart"] = ui->EnableAutoStartBox->checkState() == Qt::Checked;
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Write out the JSON structure to a file |
|
||||
\*-----------------------------------------------------*/
|
||||
std::ofstream universe_file(resource_manager->GetConfigurationDirectory() / "plugins" / "settings" / "E131UniverseMap.json", std::ios::out | std::ios::binary);
|
||||
filesystem::path settings_dir = resource_manager->GetConfigurationDirectory() / "plugins" / "settings";
|
||||
|
||||
if (!std::filesystem::is_directory(settings_dir) || !std::filesystem::exists(settings_dir)) {
|
||||
std::filesystem::create_directories(settings_dir);
|
||||
}
|
||||
|
||||
std::ofstream universe_file(settings_dir / "E131UniverseMap.json", std::ios::out | std::ios::binary);
|
||||
|
||||
if(universe_file)
|
||||
{
|
||||
|
|
@ -838,155 +1051,5 @@ void OpenRGBE131ReceiverDialog::on_ButtonSaveMap_clicked()
|
|||
|
||||
void OpenRGBE131ReceiverDialog::on_ButtonLoadMap_clicked()
|
||||
{
|
||||
/*-----------------------------------------------------*\
|
||||
| Read in the JSON map from a file |
|
||||
\*-----------------------------------------------------*/
|
||||
json universe_map;
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| Open input file in binary mode |
|
||||
\*---------------------------------------------------------*/
|
||||
std::ifstream universe_file(resource_manager->GetConfigurationDirectory() / "plugins" / "settings" / "E131UniverseMap.json", std::ios::in | std::ios::binary);
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| Read settings into JSON store |
|
||||
\*---------------------------------------------------------*/
|
||||
if(universe_file)
|
||||
{
|
||||
try
|
||||
{
|
||||
universe_file >> universe_map;
|
||||
}
|
||||
catch(std::exception e)
|
||||
{
|
||||
/*-------------------------------------------------*\
|
||||
| If an exception was caught, that means the JSON |
|
||||
| parsing failed. Clear out any data in the store |
|
||||
| as it is corrupt. |
|
||||
\*-------------------------------------------------*/
|
||||
universe_map.clear();
|
||||
}
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| Clear the universe map |
|
||||
\*---------------------------------------------------------*/
|
||||
universe_list.clear();
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| Loop through all saved universes and create list entries |
|
||||
\*---------------------------------------------------------*/
|
||||
if(universe_map.contains("universes"))
|
||||
{
|
||||
for(unsigned int universe_index = 0; universe_index < universe_map["universes"].size(); universe_index++)
|
||||
{
|
||||
if(universe_map["universes"][universe_index].contains("universe"))
|
||||
{
|
||||
universe_entry new_universe;
|
||||
|
||||
new_universe.universe = universe_map["universes"][universe_index]["universe"];
|
||||
|
||||
if(universe_map["universes"][universe_index].contains("members"))
|
||||
{
|
||||
for(unsigned int member_index = 0; member_index < universe_map["universes"][universe_index]["members"].size(); member_index++)
|
||||
{
|
||||
universe_member new_member;
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| Fill in default values in case entries are missing |
|
||||
\*---------------------------------------------------------*/
|
||||
new_member.controller = NULL;
|
||||
new_member.start_channel = 1;
|
||||
new_member.start_led = 0;
|
||||
new_member.num_leds = 0;
|
||||
new_member.update = false;
|
||||
|
||||
if(universe_map["universes"][universe_index]["members"][member_index].contains("start_channel"))
|
||||
{
|
||||
new_member.start_channel = universe_map["universes"][universe_index]["members"][member_index]["start_channel"];
|
||||
}
|
||||
|
||||
if(universe_map["universes"][universe_index]["members"][member_index].contains("start_led"))
|
||||
{
|
||||
new_member.start_led = universe_map["universes"][universe_index]["members"][member_index]["start_led"];
|
||||
}
|
||||
|
||||
if(universe_map["universes"][universe_index]["members"][member_index].contains("num_leds"))
|
||||
{
|
||||
new_member.num_leds = universe_map["universes"][universe_index]["members"][member_index]["num_leds"];
|
||||
}
|
||||
|
||||
if(universe_map["universes"][universe_index]["members"][member_index].contains("update"))
|
||||
{
|
||||
new_member.update = universe_map["universes"][universe_index]["members"][member_index]["update"];
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| Get controller information |
|
||||
\*---------------------------------------------------------*/
|
||||
std::string controller_name = "";
|
||||
std::string controller_description = "";
|
||||
std::string controller_location = "";
|
||||
std::string controller_serial = "";
|
||||
unsigned int controller_led_count = 0;
|
||||
|
||||
if(universe_map["universes"][universe_index]["members"][member_index].contains("controller_name"))
|
||||
{
|
||||
controller_name = universe_map["universes"][universe_index]["members"][member_index]["controller_name"];
|
||||
}
|
||||
|
||||
if(universe_map["universes"][universe_index]["members"][member_index].contains("controller_description"))
|
||||
{
|
||||
controller_description = universe_map["universes"][universe_index]["members"][member_index]["controller_description"];
|
||||
}
|
||||
|
||||
if(universe_map["universes"][universe_index]["members"][member_index].contains("controller_location"))
|
||||
{
|
||||
controller_location = universe_map["universes"][universe_index]["members"][member_index]["controller_location"];
|
||||
}
|
||||
|
||||
if(universe_map["universes"][universe_index]["members"][member_index].contains("controller_serial"))
|
||||
{
|
||||
controller_serial = universe_map["universes"][universe_index]["members"][member_index]["controller_serial"];
|
||||
}
|
||||
|
||||
if(universe_map["universes"][universe_index]["members"][member_index].contains("controller_led_count"))
|
||||
{
|
||||
controller_led_count = universe_map["universes"][universe_index]["members"][member_index]["controller_led_count"];
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| Search the controller list for a matching controller |
|
||||
\*---------------------------------------------------------*/
|
||||
for(unsigned int controller_index = 0; controller_index < resource_manager->GetRGBControllers().size(); controller_index++)
|
||||
{
|
||||
if((resource_manager->GetRGBControllers()[controller_index]->name == controller_name)
|
||||
&&(resource_manager->GetRGBControllers()[controller_index]->description == controller_description)
|
||||
&&(resource_manager->GetRGBControllers()[controller_index]->location == controller_location)
|
||||
&&(resource_manager->GetRGBControllers()[controller_index]->serial == controller_serial)
|
||||
&&(resource_manager->GetRGBControllers()[controller_index]->colors.size() == controller_led_count))
|
||||
{
|
||||
new_member.controller = resource_manager->GetRGBControllers()[controller_index];
|
||||
}
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------*\
|
||||
| If a controller was found, add the member to the universe |
|
||||
\*---------------------------------------------------------*/
|
||||
if(new_member.controller != NULL)
|
||||
{
|
||||
new_universe.members.push_back(new_member);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
universe_list.push_back(new_universe);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Update the universe tree view |
|
||||
\*-----------------------------------------------------*/
|
||||
UpdateTreeView();
|
||||
this->LoadMap();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -43,6 +43,7 @@ private:
|
|||
Ui::OpenRGBE131ReceiverDialog *ui;
|
||||
|
||||
bool online;
|
||||
bool initialized;
|
||||
unsigned long received_count;
|
||||
|
||||
std::thread* E131ReceiverThread;
|
||||
|
|
@ -50,6 +51,8 @@ private:
|
|||
void UpdateOnlineStatus();
|
||||
void UpdateControllersTreeView();
|
||||
void UpdateTreeView();
|
||||
void LoadMap();
|
||||
void StartReceiver();
|
||||
};
|
||||
|
||||
#endif // OPENRGBE131RECEIVERDIALOG_H
|
||||
|
|
|
|||
|
|
@ -111,7 +111,7 @@
|
|||
<item row="0" column="4">
|
||||
<widget class="QCheckBox" name="EnableMulticastBox">
|
||||
<property name="layoutDirection">
|
||||
<enum>Qt::LeftToRight</enum>
|
||||
<enum>Qt::LayoutDirection::LeftToRight</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Enable Multicast</string>
|
||||
|
|
@ -156,6 +156,13 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="4">
|
||||
<widget class="QCheckBox" name="EnableAutoStartBox">
|
||||
<property name="text">
|
||||
<string>Enable AutoStart</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
|
|
|
|||
Loading…
Reference in a new issue