diff --git a/app/app.pri b/app/app.pri index 0f601b3da985a52a1f6d90216a8ba9e385ac7299..a8c9eb3001284ff11500f8fd513bc4f7c0b794fe 100644 --- a/app/app.pri +++ b/app/app.pri @@ -1,3 +1,5 @@ +CONFIG += c++11 + QT += \ core \ gui \ diff --git a/app/configs/install_types.json b/app/configs/install_types.json index 335de22350e81310a3820d1f0d79e6a5aea33037..87e9b33e2b5a9a07d4f99c8b91a64a85854b5309 100644 --- a/app/configs/install_types.json +++ b/app/configs/install_types.json @@ -6,27 +6,27 @@ }, "downloads": { "name": "Downloads", - "destination": "$HOME/Downloads", + "destination": "$XDG_DOWNLOAD_DIR", "generic_destination": "$APP_DATA/downloads" }, "documents": { "name": "Documents", - "destination": "$HOME/Documents", + "destination": "$XDG_DOCUMENTS_DIR", "generic_destination": "$APP_DATA/documents" }, "pictures": { "name": "Pictures", - "destination": "$HOME/Pictures", + "destination": "$XDG_PICTURES_DIR", "generic_destination": "$APP_DATA/pictures" }, "music": { "name": "Music", - "destination": "$HOME/Music", + "destination": "$XDG_MUSIC_DIR", "generic_destination": "$APP_DATA/music" }, "videos": { "name": "Videos", - "destination": "$HOME/Videos", + "destination": "$XDG_VIDEOS_DIR", "generic_destination": "$APP_DATA/videos" }, "wallpapers": { diff --git a/app/src/handlers/confighandler.cpp b/app/src/handlers/confighandler.cpp index bc75e9faefc87d384f2ad19cd14ac38b580570e0..b0c4964651174fda83b733e4eb501cbca9f60078 100644 --- a/app/src/handlers/confighandler.cpp +++ b/app/src/handlers/confighandler.cpp @@ -1,6 +1,7 @@ #include "confighandler.h" #include <QStringList> +#include <QStandardPaths> #include "qtlib_dir.h" @@ -8,48 +9,69 @@ ConfigHandler::ConfigHandler(QObject *parent) : QObject(parent) { appConfig_ = qtlib::Config(":/configs"); + importAppConfigApplication(); + importAppConfigInstallTypes(); } -QJsonObject ConfigHandler::getAppConfigApplication() +QJsonObject ConfigHandler::getAppConfigApplication() const { - if (appConfigApplication_.isEmpty()) { - appConfigApplication_ = appConfig_.get("application"); - } return appConfigApplication_; } -QJsonObject ConfigHandler::getAppConfigInstallTypes() +QJsonObject ConfigHandler::getAppConfigInstallTypes() const { - 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; - } + return appConfigInstallTypes_; +} + +void ConfigHandler::importAppConfigApplication() +{ + appConfigApplication_ = appConfig_.get("application"); +} + +void ConfigHandler::importAppConfigInstallTypes() +{ + auto installTypes = appConfig_.get("install_types"); + for (const auto &key : installTypes.keys()) { + auto installtype = installTypes[key].toObject(); + installtype["destination"] = convertPathString(installtype["destination"].toString()); + installtype["generic_destination"] = convertPathString(installtype["generic_destination"].toString()); + installTypes[key] = installtype; + } + auto installTypesAlias = appConfig_.get("install_types_alias"); + for (const auto &key : installTypesAlias.keys()) { + auto installTypeAlias = installTypesAlias[key].toObject(); + auto baseKey = installTypeAlias["base"].toString(); + if (installTypes.contains(baseKey)) { + auto installType = installTypes[baseKey].toObject(); + installType["base"] = baseKey; + installType["name"] = installTypeAlias["name"].toString(); + installTypes[key] = installType; } - appConfigInstallTypes_ = installTypes; } - return appConfigInstallTypes_; + appConfigInstallTypes_ = installTypes; } -QString ConfigHandler::convertPathString(const QString &path) +QString ConfigHandler::convertPathString(const QString &path) const { - QString newPath = path; + auto newPath = path; if (newPath.contains("$HOME")) { newPath.replace("$HOME", qtlib::Dir::homePath()); } + else if (newPath.contains("$XDG_DOCUMENTS_DIR")) { + newPath.replace("$XDG_DOCUMENTS_DIR", QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation)); + } + else if (newPath.contains("$XDG_DOWNLOAD_DIR")) { + newPath.replace("$XDG_DOWNLOAD_DIR", QStandardPaths::writableLocation(QStandardPaths::DownloadLocation)); + } + else if (newPath.contains("$XDG_PICTURES_DIR")) { + newPath.replace("$XDG_PICTURES_DIR", QStandardPaths::writableLocation(QStandardPaths::PicturesLocation)); + } + else if (newPath.contains("$XDG_MUSIC_DIR")) { + newPath.replace("$XDG_MUSIC_DIR", QStandardPaths::writableLocation(QStandardPaths::MusicLocation)); + } + else if (newPath.contains("$XDG_VIDEOS_DIR")) { + newPath.replace("$XDG_VIDEOS_DIR", QStandardPaths::writableLocation(QStandardPaths::MoviesLocation)); + } else if (newPath.contains("$XDG_DATA_HOME")) { newPath.replace("$XDG_DATA_HOME", qtlib::Dir::genericDataPath()); } diff --git a/app/src/handlers/confighandler.h b/app/src/handlers/confighandler.h index 247afc85f936d325f4477afe8bf907a22403eb44..07c695136172eb52c5ffe7bbdd067cb10cb6ad0e 100644 --- a/app/src/handlers/confighandler.h +++ b/app/src/handlers/confighandler.h @@ -10,14 +10,16 @@ class ConfigHandler : public QObject Q_OBJECT public: - explicit ConfigHandler(QObject *parent = 0); + explicit ConfigHandler(QObject *parent = nullptr); public slots: - QJsonObject getAppConfigApplication(); - QJsonObject getAppConfigInstallTypes(); + QJsonObject getAppConfigApplication() const; + QJsonObject getAppConfigInstallTypes() const; private: - QString convertPathString(const QString &path); + void importAppConfigApplication(); + void importAppConfigInstallTypes(); + QString convertPathString(const QString &path) const; qtlib::Config appConfig_; QJsonObject appConfigApplication_; diff --git a/app/src/handlers/ocsurlhandler.cpp b/app/src/handlers/ocsurlhandler.cpp index 3527d7b7387b715d1fe92f04bd30356f1c26ff7a..29996c0b8c8e35348659876edb8520d8bd897384 100644 --- a/app/src/handlers/ocsurlhandler.cpp +++ b/app/src/handlers/ocsurlhandler.cpp @@ -39,15 +39,15 @@ void OcsUrlHandler::process() return; } - QString url = metadata_["url"].toString(); - qtlib::NetworkResource *resource = new qtlib::NetworkResource(url, QUrl(url), true, this); + auto url = metadata_["url"].toString(); + auto *resource = new qtlib::NetworkResource(url, QUrl(url), true, this); connect(resource, &qtlib::NetworkResource::downloadProgress, this, &OcsUrlHandler::downloadProgress); connect(resource, &qtlib::NetworkResource::finished, this, &OcsUrlHandler::networkResourceFinished); resource->get(); emit started(); } -bool OcsUrlHandler::isValid() +bool OcsUrlHandler::isValid() const { QString scheme = metadata_["scheme"].toString(); QString command = metadata_["command"].toString(); @@ -66,9 +66,9 @@ bool OcsUrlHandler::isValid() return false; } -void OcsUrlHandler::openDestination() +void OcsUrlHandler::openDestination() const { - QString type = metadata_["type"].toString(); + auto type = metadata_["type"].toString(); QDesktopServices::openUrl(QUrl("file://" + configHandler_->getAppConfigInstallTypes()[type].toObject()["destination"].toString())); } @@ -131,7 +131,7 @@ void OcsUrlHandler::saveDownloadedFile(qtlib::NetworkResource *resource) { QJsonObject result; - QString type = metadata_["type"].toString(); + auto type = metadata_["type"].toString(); qtlib::Dir destDir(configHandler_->getAppConfigInstallTypes()[type].toObject()["destination"].toString()); destDir.make(); qtlib::File destFile(destDir.path() + "/" + metadata_["filename"].toString()); @@ -166,7 +166,7 @@ void OcsUrlHandler::installDownloadedFile(qtlib::NetworkResource *resource) } qtlib::Package package(tempFile.path()); - QString type = metadata_["type"].toString(); + auto type = metadata_["type"].toString(); qtlib::Dir destDir(configHandler_->getAppConfigInstallTypes()[type].toObject()["destination"].toString()); destDir.make(); qtlib::File destFile(destDir.path() + "/" + metadata_["filename"].toString()); diff --git a/app/src/handlers/ocsurlhandler.h b/app/src/handlers/ocsurlhandler.h index 8c3f99da2d60069181862017af66386a97dfd797..38ed279847c1c9791f1025604bc9780203a49bab 100644 --- a/app/src/handlers/ocsurlhandler.h +++ b/app/src/handlers/ocsurlhandler.h @@ -14,7 +14,7 @@ class OcsUrlHandler : public QObject Q_OBJECT public: - explicit OcsUrlHandler(const QString &ocsUrl, ConfigHandler *configHandler, QObject *parent = 0); + explicit OcsUrlHandler(const QString &ocsUrl, ConfigHandler *configHandler, QObject *parent = nullptr); signals: void started(); @@ -27,8 +27,8 @@ public slots: QJsonObject metadata() const; void process(); - bool isValid(); - void openDestination(); + bool isValid() const; + void openDestination() const; private slots: void networkResourceFinished(qtlib::NetworkResource *resource); diff --git a/app/src/main.cpp b/app/src/main.cpp index 3acb73c3b6296be24473469ddd9023d843d17859..32ce2ff144f41f3ee431ad5bea6c527ce68c91b3 100644 --- a/app/src/main.cpp +++ b/app/src/main.cpp @@ -18,8 +18,8 @@ int main(int argc, char *argv[]) // Init QApplication app(argc, argv); - ConfigHandler *configHandler = new ConfigHandler(); - QJsonObject appConfigApplication = configHandler->getAppConfigApplication(); + auto *configHandler = new ConfigHandler(); + auto appConfigApplication = configHandler->getAppConfigApplication(); app.setApplicationName(appConfigApplication["name"].toString()); app.setApplicationVersion(appConfigApplication["version"].toString()); @@ -41,17 +41,17 @@ int main(int argc, char *argv[]) clParser.addPositionalArgument("OCS-URL", "OCS-URL that starts with ocs://"); clParser.process(app); - QStringList args = clParser.positionalArguments(); + auto args = clParser.positionalArguments(); if (args.size() != 1) { clParser.showHelp(1); } - QString ocsUrl = args.at(0); + auto ocsUrl = QString(args.at(0)); // Setup QML QQmlApplicationEngine qmlAppEngine; - QQmlContext *qmlContext = qmlAppEngine.rootContext(); + auto *qmlContext = qmlAppEngine.rootContext(); configHandler->setParent(&qmlAppEngine); qmlContext->setContextProperty("configHandler", configHandler); qmlContext->setContextProperty("ocsUrlHandler", new OcsUrlHandler(ocsUrl, configHandler, &qmlAppEngine)); diff --git a/ocs-url.pro b/ocs-url.pro index 79396ec30b19855a38c01b45430aada70795700f..7a803e1ee31d577c9fdebb39d7f4e340b373c223 100644 --- a/ocs-url.pro +++ b/ocs-url.pro @@ -4,8 +4,6 @@ TARGET = ocs-url TEMPLATE = app -CONFIG += c++11 - DEFINES += QT_DEPRECATED_WARNINGS DISTFILES += $${PWD}/README.md diff --git a/scripts/import.sh b/scripts/import.sh index 50992b4f529fc2ae523927a50bae7cfcca4b9d6f..8fd990fb00c40f44aa290fc4138b94f14e0a6236 100644 --- a/scripts/import.sh +++ b/scripts/import.sh @@ -7,5 +7,5 @@ PROJDIR="$(cd "$(dirname "${0}")/../" && pwd)" if [ ! -d "${PROJDIR}/lib/qtlib" ]; then - git clone https://github.com/akiraohgaki/qtlib.git -b release-0.1.0 --single-branch --depth=1 "${PROJDIR}/lib/qtlib" + git clone https://github.com/akiraohgaki/qtlib.git -b release-0.2.0 --single-branch --depth=1 "${PROJDIR}/lib/qtlib" fi