diff --git a/src/app/app.pri b/src/app/app.pri index 5ccff3b1fc7a6da846cbed2977f9e51f2e2c8727..15ac50a30c18383817997767773a4cdb59f52e32 100644 --- a/src/app/app.pri +++ b/src/app/app.pri @@ -6,10 +6,12 @@ QT += \ svg HEADERS += \ + $${PWD}/handlers/confighandler.h \ $${PWD}/handlers/ocsurlhandler.h SOURCES += \ $${PWD}/main.cpp \ + $${PWD}/handlers/confighandler.cpp \ $${PWD}/handlers/ocsurlhandler.cpp RESOURCES += \ diff --git a/src/app/handlers/confighandler.cpp b/src/app/handlers/confighandler.cpp new file mode 100644 index 0000000000000000000000000000000000000000..7d1111575b848823487e14cd41eeb8cdd04092ef --- /dev/null +++ b/src/app/handlers/confighandler.cpp @@ -0,0 +1,61 @@ +#include "confighandler.h" + +#include "qtlib_dir.h" + +ConfigHandler::ConfigHandler(QObject *parent) + : QObject(parent) +{ + appConfig_ = qtlib::Config(":/configs"); +} + +QJsonObject ConfigHandler::getAppConfigApplication() +{ + if (appConfigApplication_.isEmpty()) { + appConfigApplication_ = appConfig_.get("application"); + } + return appConfigApplication_; +} + +QJsonObject ConfigHandler::getAppConfigInstallTypes() +{ + if (appConfigInstallTypes_.isEmpty()) { + QJsonObject installTypes = appConfig_.get("install_types"); + foreach (const QString &key, installTypes.keys()) { + QJsonObject installtype = installTypes[key].toObject(); + installtype["destination"] = convertPathString(installtype["destination"].toString()); + installtype["generic_destination"] = convertPathString(installtype["generic_destination"].toString()); + installTypes[key] = installtype; + } + QJsonObject installTypesAlias = appConfig_.get("install_types_alias"); + foreach (const QString &key, installTypesAlias.keys()) { + QJsonObject installTypeAlias = installTypesAlias[key].toObject(); + QString baseKey = installTypeAlias["base"].toString(); + if (installTypes.contains(baseKey)) { + QJsonObject installType = installTypes[baseKey].toObject(); + installType["base"] = baseKey; + installType["name"] = installTypeAlias["name"].toString(); + installTypes[key] = installType; + } + } + appConfigInstallTypes_ = installTypes; + } + return appConfigInstallTypes_; +} + +QString ConfigHandler::convertPathString(const QString &path) +{ + QString newPath = path; + if (newPath.contains("$HOME")) { + newPath.replace("$HOME", qtlib::Dir::homePath()); + } + else if (newPath.contains("$XDG_DATA_HOME")) { + newPath.replace("$XDG_DATA_HOME", qtlib::Dir::genericDataPath()); + } + else if (newPath.contains("$KDEHOME")) { + newPath.replace("$KDEHOME", qtlib::Dir::kdehomePath()); + } + else if (newPath.contains("$APP_DATA")) { + newPath.replace("$APP_DATA", qtlib::Dir::genericDataPath() + "/" + getAppConfigApplication()["id"].toString()); + } + return newPath; +} diff --git a/src/app/handlers/confighandler.h b/src/app/handlers/confighandler.h new file mode 100644 index 0000000000000000000000000000000000000000..247afc85f936d325f4477afe8bf907a22403eb44 --- /dev/null +++ b/src/app/handlers/confighandler.h @@ -0,0 +1,25 @@ +#pragma once + +#include <QObject> +#include <QJsonObject> + +#include "qtlib_config.h" + +class ConfigHandler : public QObject +{ + Q_OBJECT + +public: + explicit ConfigHandler(QObject *parent = 0); + +public slots: + QJsonObject getAppConfigApplication(); + QJsonObject getAppConfigInstallTypes(); + +private: + QString convertPathString(const QString &path); + + qtlib::Config appConfig_; + QJsonObject appConfigApplication_; + QJsonObject appConfigInstallTypes_; +};