From 9905e8f9bb9c6ea593199becf4ae1ce1d1797324 Mon Sep 17 00:00:00 2001 From: Akira Ohgaki <akiraohgaki@gmail.com> Date: Tue, 21 Feb 2017 04:10:26 +0900 Subject: [PATCH] Add confighandler class --- src/app/app.pri | 2 + src/app/handlers/confighandler.cpp | 61 ++++++++++++++++++++++++++++++ src/app/handlers/confighandler.h | 25 ++++++++++++ 3 files changed, 88 insertions(+) create mode 100644 src/app/handlers/confighandler.cpp create mode 100644 src/app/handlers/confighandler.h diff --git a/src/app/app.pri b/src/app/app.pri index 5ccff3b..15ac50a 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 0000000..7d11115 --- /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 0000000..247afc8 --- /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_; +}; -- GitLab