#include "viewmodel/displayString/util/ScopeTranslationParser.h" #include #include #include #include constexpr int INVALID_SCOPE_ID = std::numeric_limits::min(); /*************************************************************************************************/ ScopeTranslationParser::ScopeTranslationParser(QString configFilePath) : _configFilePath(configFilePath) { } /*************************************************************************************************/ QMap ScopeTranslationParser::parse() const { auto scopes = createJsonObject(readConfigFile())["scopes"]; QMap map; if(scopes.isArray()) { for(const auto val : scopes.toArray()) { auto translation = getScopeTranslationFromJsonObj(val.toObject()); if(translation.has_value()) { map[translation.value().first] = translation.value().second; } } } return map; } /*************************************************************************************************/ QByteArray ScopeTranslationParser::readConfigFile() const { QFile file(_configFilePath); return file.readAll(); } /*************************************************************************************************/ QJsonObject ScopeTranslationParser::createJsonObject(const QByteArray& jsonFileContent) const { QJsonDocument doc = QJsonDocument::fromJson(jsonFileContent); return doc.object(); } /*************************************************************************************************/ std::optional > ScopeTranslationParser::getScopeTranslationFromJsonObj( const QJsonObject& obj) const { auto id = obj["id"].toInt(INVALID_SCOPE_ID); auto nameVal = obj["name"]; if(id == INVALID_SCOPE_ID or not nameVal.isString()) { return std::nullopt; } return QPair{id, nameVal.toString()}; }