diff --git a/src/app/handlers/ocsurlhandler.cpp b/src/app/handlers/ocsurlhandler.cpp index 547c6c528c6a7275b0924d0f88dafcf1c12bd803..52edf33322b60e796774c52281a2836ea854d9b8 100644 --- a/src/app/handlers/ocsurlhandler.cpp +++ b/src/app/handlers/ocsurlhandler.cpp @@ -8,11 +8,12 @@ #include "qtlib_networkresource.h" #include "qtlib_package.h" -OcsUrlHandler::OcsUrlHandler(const QString &ocsUrl, const qtlib::Config &config, QObject *parent) - : QObject(parent), ocsUrl_(ocsUrl), config_(config) +#include "handlers/confighandler.h" + +OcsUrlHandler::OcsUrlHandler(const QString &ocsUrl, ConfigHandler *configHandler, QObject *parent) + : QObject(parent), ocsUrl_(ocsUrl), configHandler_(configHandler) { parse(); - loadDestinations(); } QString OcsUrlHandler::ocsUrl() const @@ -58,7 +59,7 @@ bool OcsUrlHandler::isValid() if ((scheme == "ocs" || scheme == "ocss" || scheme == "xdg" || scheme == "xdgs") && (command == "download" || command == "install") && QUrl(url).isValid() - && destinations_.contains(type) + && configHandler_->getAppConfigInstallTypes().contains(type) && !filename.isEmpty()) { return true; } @@ -68,7 +69,7 @@ bool OcsUrlHandler::isValid() void OcsUrlHandler::openDestination() { QString type = metadata_["type"].toString(); - QDesktopServices::openUrl(QUrl("file://" + destinations_[type].toString())); + QDesktopServices::openUrl(QUrl("file://" + configHandler_->getAppConfigInstallTypes()[type].toObject()["destination"].toString())); } void OcsUrlHandler::networkResourceFinished(qtlib::NetworkResource *resource) @@ -126,46 +127,12 @@ void OcsUrlHandler::parse() } } -void OcsUrlHandler::loadDestinations() -{ - QJsonObject configDestinations = config_.get("destinations"); - QJsonObject configDestinationsAlias = config_.get("destinations_alias"); - - foreach (const QString &key, configDestinations.keys()) { - destinations_[key] = convertPathString(configDestinations[key].toString()); - } - - foreach (const QString &key, configDestinationsAlias.keys()) { - QString value = configDestinationsAlias[key].toString(); - if (destinations_.contains(value)) { - destinations_[key] = destinations_.value(value); - } - } -} - -QString OcsUrlHandler::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()); - } - - return newPath; -} - void OcsUrlHandler::saveDownloadedFile(qtlib::NetworkResource *resource) { QJsonObject result; QString type = metadata_["type"].toString(); - qtlib::Dir destDir(destinations_[type].toString()); + qtlib::Dir destDir(configHandler_->getAppConfigInstallTypes()[type].toObject()["destination"].toString()); destDir.make(); qtlib::File destFile(destDir.path() + "/" + metadata_["filename"].toString()); @@ -200,7 +167,7 @@ void OcsUrlHandler::installDownloadedFile(qtlib::NetworkResource *resource) qtlib::Package package(tempFile.path()); QString type = metadata_["type"].toString(); - qtlib::Dir destDir(destinations_[type].toString()); + qtlib::Dir destDir(configHandler_->getAppConfigInstallTypes()[type].toObject()["destination"].toString()); destDir.make(); qtlib::File destFile(destDir.path() + "/" + metadata_["filename"].toString()); diff --git a/src/app/handlers/ocsurlhandler.h b/src/app/handlers/ocsurlhandler.h index ba56c29f535b84c8865ef44a4f2e8a50d9d9d89b..8c3f99da2d60069181862017af66386a97dfd797 100644 --- a/src/app/handlers/ocsurlhandler.h +++ b/src/app/handlers/ocsurlhandler.h @@ -3,18 +3,18 @@ #include <QObject> #include <QJsonObject> -#include "qtlib_config.h" - namespace qtlib { class NetworkResource; } +class ConfigHandler; + class OcsUrlHandler : public QObject { Q_OBJECT public: - explicit OcsUrlHandler(const QString &ocsUrl, const qtlib::Config &config, QObject *parent = 0); + explicit OcsUrlHandler(const QString &ocsUrl, ConfigHandler *configHandler, QObject *parent = 0); signals: void started(); @@ -35,13 +35,10 @@ private slots: private: void parse(); - void loadDestinations(); - QString convertPathString(const QString &path); void saveDownloadedFile(qtlib::NetworkResource *resource); void installDownloadedFile(qtlib::NetworkResource *resource); QString ocsUrl_; - qtlib::Config config_; + ConfigHandler *configHandler_; QJsonObject metadata_; - QJsonObject destinations_; }; diff --git a/src/app/main.cpp b/src/app/main.cpp index 91d81a3202d9d734fd17ccf78b440f4bd45032a0..1d84cb4cf09b3d173345339561a5039fc9a01290 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -8,8 +8,7 @@ #include <QQmlApplicationEngine> #include <QQmlContext> -#include "qtlib_config.h" - +#include "handlers/confighandler.h" #include "handlers/ocsurlhandler.h" int main(int argc, char *argv[]) @@ -17,18 +16,18 @@ int main(int argc, char *argv[]) // Init QGuiApplication app(argc, argv); - qtlib::Config config(":/configs"); - QJsonObject configApplication = config.get("application"); + ConfigHandler *configHandler = new ConfigHandler(); + QJsonObject appConfigApplication = configHandler->getAppConfigApplication(); - app.setApplicationName(configApplication["name"].toString()); - app.setApplicationVersion(configApplication["version"].toString()); - app.setOrganizationName(configApplication["organization"].toString()); - app.setOrganizationDomain(configApplication["domain"].toString()); - app.setWindowIcon(QIcon::fromTheme(configApplication["id"].toString(), QIcon(configApplication["icon"].toString()))); + app.setApplicationName(appConfigApplication["name"].toString()); + app.setApplicationVersion(appConfigApplication["version"].toString()); + app.setOrganizationName(appConfigApplication["organization"].toString()); + app.setOrganizationDomain(appConfigApplication["domain"].toString()); + app.setWindowIcon(QIcon::fromTheme(appConfigApplication["id"].toString(), QIcon(appConfigApplication["icon"].toString()))); // Setup CLI QCommandLineParser clParser; - clParser.setApplicationDescription(configApplication["description"].toString()); + clParser.setApplicationDescription(appConfigApplication["description"].toString()); clParser.addHelpOption(); clParser.addVersionOption(); clParser.addPositionalArgument("ocsurl", "OCS-URL"); @@ -45,7 +44,9 @@ int main(int argc, char *argv[]) // Setup QML QQmlApplicationEngine qmlAppEngine; QQmlContext *qmlContext = qmlAppEngine.rootContext(); - qmlContext->setContextProperty("ocsUrlHandler", new OcsUrlHandler(ocsUrl, config, &qmlAppEngine)); + configHandler->setParent(&qmlAppEngine); + qmlContext->setContextProperty("configHandler", configHandler); + qmlContext->setContextProperty("ocsUrlHandler", new OcsUrlHandler(ocsUrl, configHandler, &qmlAppEngine)); qmlAppEngine.load(QUrl("qrc:/qml/main.qml")); return app.exec();