| 14 | std::atomic<bool> InstanceConfig::_backupMade(false); |
| 15 | |
| 16 | InstanceConfig::InstanceConfig(bool master, quint8 instanceIndex, QObject* parent) |
| 17 | : QObject(parent) |
| 18 | , _log(Logger::getInstance(QString("INSTANCE_CFG%1").arg((master) ? QString() : QString::number(instanceIndex)))) |
| 19 | { |
| 20 | QMutexLocker locker(&_lockerSettingsManager); |
| 21 | |
| 22 | Info(_log, "Loading instance configuration"); |
| 23 | |
| 24 | _sTable = std::unique_ptr<SettingsTable>(new SettingsTable(instanceIndex)); |
| 25 | |
| 26 | // get schema |
| 27 | if (_schemaJson.isEmpty()) |
| 28 | { |
| 29 | Q_INIT_RESOURCE(resource); |
| 30 | try |
| 31 | { |
| 32 | _schemaJson = QJsonUtils::readSchema(":/hyperhdr-schema"); |
| 33 | } |
| 34 | catch (const std::runtime_error& error) |
| 35 | { |
| 36 | throw std::runtime_error(error.what()); |
| 37 | } |
| 38 | } |
| 39 | |
| 40 | // get default config |
| 41 | QJsonObject defaultConfig; |
| 42 | for (settings::type selector = settings::type::SNDEFFECT; selector != settings::type::INVALID; selector = settings::type(((int)selector) + 1)) |
| 43 | { |
| 44 | if (selector != settings::type::LEDS) |
| 45 | defaultConfig.insert(typeToString(selector), QJsonObject()); |
| 46 | else |
| 47 | defaultConfig.insert(typeToString(selector), QJsonArray()); |
| 48 | } |
| 49 | |
| 50 | // transform json to string lists |
| 51 | QStringList keyList = defaultConfig.keys(); |
| 52 | QStringList defValueList; |
| 53 | for (const auto& key : keyList) |
| 54 | { |
| 55 | if (defaultConfig[key].isObject()) |
| 56 | { |
| 57 | defValueList << QString(QJsonDocument(defaultConfig[key].toObject()).toJson(QJsonDocument::Compact)); |
| 58 | } |
| 59 | else if (defaultConfig[key].isArray()) |
| 60 | { |
| 61 | defValueList << QString(QJsonDocument(defaultConfig[key].toArray()).toJson(QJsonDocument::Compact)); |
| 62 | } |
| 63 | } |
| 64 | |
| 65 | // fill database with default data if required |
| 66 | bool hasData = false; |
| 67 | for (const auto& key : keyList) |
| 68 | { |
| 69 | QString val = defValueList.takeFirst(); |
| 70 | // prevent overwrite |
| 71 | if (!_sTable->recordExist(key)) |
| 72 | _sTable->createSettingsRecord(key, val); |
| 73 | else |
nothing calls this directly
no test coverage detected