187 lines
6.9 KiB
C++
187 lines
6.9 KiB
C++
#include "settings.h"
|
|
|
|
Settings *Settings::_instance = 0;
|
|
|
|
Settings *Settings::getInstance(QObject *parent) {
|
|
|
|
if (_instance == 0) {
|
|
_instance = new Settings(parent);
|
|
Q_CHECK_PTR(_instance);
|
|
}
|
|
return _instance;
|
|
}
|
|
|
|
Settings::Settings(QObject *parent) :
|
|
QSettings("Criptomart", "LibreMediaServer", parent)
|
|
{
|
|
m_layersNumber = 0;
|
|
m_ui = false;
|
|
m_audioDeviceQty = 0;
|
|
for (uint i = 0; i < MAX_AUDIODEVICES; i++)
|
|
m_audioDeviceId[i] = -1;
|
|
if (QFile::exists(fileName()))
|
|
settingsLoader();
|
|
else if (QFile::exists(DEFAULT_FILE))
|
|
readFromFile(DEFAULT_FILE);
|
|
else {
|
|
qDebug() << "Can not read initial settings, making some standard";
|
|
setValue("lmsAudio/ui", 1);
|
|
setValue("lmsAudio/dmxActive", 0);
|
|
setValue("lmsAudio/showPlayerActive", 1);
|
|
setValue("lmsAudio/layersNumber", 2);
|
|
setValue("lmsAudio/path", "../media/");
|
|
setValue("audioDevice/devicesNumber", 2);
|
|
setValue("audioDevice/id0", 4);
|
|
setValue("audioDevice/id1", 3);
|
|
setValue("layers/layer0/dmx", 1);
|
|
setValue("layers/layer0/universe", 1);
|
|
setValue("layers/layer0/id", 0);
|
|
setValue("layers/layer0/audioDevice", 0);
|
|
setValue("layers/layer1/dmx", 26);
|
|
setValue("layers/layer1/universe", 1);
|
|
setValue("layers/layer1/id", 1);
|
|
setValue("layers/layer1/audioDevice", 0);
|
|
sync();
|
|
settingsLoader();
|
|
}
|
|
}
|
|
|
|
Settings::~Settings() {
|
|
settingsSaver();
|
|
}
|
|
|
|
void Settings::settingsLoader()
|
|
{
|
|
qDebug() << "loading settings from system";
|
|
beginGroup("lmsAudio");
|
|
m_ui = value("ui", 0).toBool();
|
|
m_dmxActive = value("dmxActive", 0).toBool();
|
|
m_showPlayerActive = value("showPlayerActive", 0).toBool();
|
|
m_layersNumber = value("layersNumber", 0).toInt();
|
|
m_pathmedia = value("path", "").toString();
|
|
endGroup();
|
|
beginGroup("audioDevice");
|
|
m_audioDeviceQty = value("devicesNumber", 0).toInt();
|
|
for (uint i = 0; i < m_audioDeviceQty; i++)
|
|
m_audioDeviceId[i] = value(QString("id%1").arg(i), -1).toInt();
|
|
endGroup();
|
|
beginGroup("layers");
|
|
for (int i = 0; i < m_layersNumber; i++) {
|
|
beginGroup(QString("layer%1").arg(i));
|
|
dmxSetting temp;
|
|
temp.address = value("dmx", 0).toInt();
|
|
temp.universe = value("universe", 0).toInt();
|
|
temp.layer = value("id", 0).toInt();
|
|
temp.audioDevice = value("audioDevice", 0).toInt();
|
|
m_settings.append(temp);
|
|
if (!m_universe.contains(temp.universe)) {
|
|
m_universe.insert(temp.universe);
|
|
}
|
|
endGroup();
|
|
}
|
|
endGroup();
|
|
printSettings();
|
|
}
|
|
|
|
void Settings::settingsSaver()
|
|
{
|
|
beginGroup("lmsAudio");
|
|
setValue("ui", m_ui);
|
|
setValue("dmxActive", m_dmxActive);
|
|
setValue("showPlayerActive", m_showPlayerActive);
|
|
setValue("layersNumber", m_layersNumber);
|
|
setValue("path", m_pathmedia);
|
|
endGroup();
|
|
beginGroup("audioDevice");
|
|
setValue("devicesNumber", m_audioDeviceQty);
|
|
for (uint i = 0; i < m_audioDeviceQty; i++)
|
|
setValue(QString("id%1").arg(i), m_audioDeviceId[i]);
|
|
endGroup();
|
|
beginGroup("layers");
|
|
for (int i = 0; i < m_layersNumber; i++) {
|
|
beginGroup(QString("layer%1").arg(i));
|
|
setValue("dmx", m_settings[i].address);
|
|
setValue("universe", m_settings[i].universe);
|
|
setValue("id", m_settings[i].layer);
|
|
setValue("audioDevice", m_settings[i].audioDevice);
|
|
endGroup();
|
|
}
|
|
endGroup();
|
|
sync();
|
|
qDebug() << "writed settings to " << fileName();
|
|
}
|
|
|
|
// Read the dmx settings. At the moment we need:
|
|
// - The path to the medias folder tree
|
|
// - The number of sources/layers controlled by DMX
|
|
// - The first DMX channel of each source/layer
|
|
// - dmxActive and The universe to bind in OLA
|
|
// - Audio device id
|
|
// - Show Ui, showPlayer
|
|
void Settings::readFromFile(QString file) {
|
|
qDebug() << "loading settings from xml file " << file;
|
|
QFile* xmlFile = new QFile(file);
|
|
if (!xmlFile->open(QIODevice::ReadOnly | QIODevice::Text)) {
|
|
QMessageBox::critical(NULL,"Load XML File Problem",
|
|
QString("Couldn't open %1 to load settings").arg(file),
|
|
QMessageBox::Ok);
|
|
qCritical("Load XML File Problem");
|
|
return;
|
|
}
|
|
QXmlStreamReader* xmlReader = new QXmlStreamReader(xmlFile);
|
|
while(!xmlReader->atEnd() && !xmlReader->hasError()) {
|
|
QXmlStreamReader::TokenType token = xmlReader->readNext();
|
|
if(token == QXmlStreamReader::StartDocument) {
|
|
continue;
|
|
}
|
|
if(token == QXmlStreamReader::StartElement) {
|
|
if(xmlReader->name() == "lmsAudio") {
|
|
m_ui = xmlReader->attributes().value("ui").toLocal8Bit().toInt();
|
|
m_dmxActive = xmlReader->attributes().value("dmxActive").toInt();
|
|
m_showPlayerActive = xmlReader->attributes().value("showPlayerActive").toInt();
|
|
m_layersNumber = xmlReader->attributes().value("layersNumber").toLocal8Bit().toInt();
|
|
m_pathmedia = xmlReader->attributes().value("path").toLocal8Bit();
|
|
continue;
|
|
}
|
|
if(xmlReader->name() == "audioDevice") {
|
|
m_audioDeviceQty = xmlReader->attributes().value("devicesNumber").toLocal8Bit().toInt();
|
|
for (uint i = 0; i < m_audioDeviceQty; i++)
|
|
m_audioDeviceId[i] = xmlReader->attributes().value(QString("id%1").arg(i)).toLocal8Bit().toInt();
|
|
}
|
|
if(xmlReader->name() == "layer") {
|
|
dmxSetting temp;
|
|
temp.address = xmlReader->attributes().value("dmx").toLocal8Bit().toInt() - 1;
|
|
temp.universe = xmlReader->attributes().value("universe").toLocal8Bit().toInt();
|
|
temp.layer = xmlReader->attributes().value("id").toLocal8Bit().toInt();
|
|
temp.audioDevice = xmlReader->attributes().value("audioDevice").toLocal8Bit().toInt();
|
|
m_settings.append(temp);
|
|
if (!m_universe.contains(temp.universe)) {
|
|
m_universe.insert(temp.universe);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if(xmlReader->hasError()) {
|
|
QMessageBox::critical(NULL,"File xml Parse Error ", xmlReader->errorString(), QMessageBox::Ok);
|
|
qWarning("File xml Parse Error %s", xmlReader->errorString().toLatin1().constData());
|
|
// ToDo: manage this, open a dialog to load a new file.
|
|
}
|
|
xmlReader->clear();
|
|
xmlFile->close();
|
|
delete xmlReader;
|
|
delete xmlFile;
|
|
this->printSettings();
|
|
}
|
|
|
|
void Settings::printSettings() {
|
|
qInfo() << "Settings readed:\nShow Ui:" << m_ui << "Layers:" << m_layersNumber << "Path:" << m_pathmedia <<"Audio Device qty:" << m_audioDeviceQty;
|
|
qInfo() << "dmx: " << m_dmxActive << " showPlayer: " << m_showPlayerActive;
|
|
for (uint i = 0; i < m_audioDeviceQty; i++)
|
|
qInfo() << "Audio device internal id:" << i << "system id:" << m_audioDeviceId[i];
|
|
for (int i = 0; i < m_layersNumber; i++)
|
|
qInfo() << "Layer:" << m_settings[i].layer << "Address:" << m_settings[i].address << "Universe:" << m_settings[i].universe;
|
|
}
|
|
|
|
void Settings::readFile() {
|
|
readFromFile(DEFAULT_FILE);
|
|
}
|