diff --git a/app/app.pri b/app/app.pri index 5495172d96673f2b36daadf58ce583280ca3cd8d..768f484af6d2e4fc61a3a97b4aa3bf55ea26fa3c 100644 --- a/app/app.pri +++ b/app/app.pri @@ -1,3 +1,5 @@ +CONFIG += c++11 + QT += \ core \ gui \ diff --git a/app/configs/application.json b/app/configs/application.json index d690c57350a886ab79c82e2112b405bad84687a8..60360beabb2659595301106c898ce03ae329490e 100644 --- a/app/configs/application.json +++ b/app/configs/application.json @@ -1,7 +1,7 @@ { "id": "ocs-manager", "name": "ocs-manager", - "version": "0.1.0", + "version": "0.2.0", "organization": "Opendesktop.org", "domain": "org.opendesktop.ocs-manager", "icon": "", 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 bcb3cd820ca411bf4ce247c9b12973e53156431b..bcb3e744f50dacf5d8b2a3ceb9ca6d8f6a670bf7 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,84 +9,62 @@ ConfigHandler::ConfigHandler(QObject *parent) : QObject(parent) { appConfig_ = qtlib::Config(":/configs"); + importAppConfigApplication(); + importAppConfigInstallTypes(); usrConfig_ = qtlib::Config(qtlib::Dir::genericConfigPath() + "/" + getAppConfigApplication()["id"].toString()); } -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"); - for (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"); - for (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_; } -QJsonObject ConfigHandler::getUsrConfigApplication() +QJsonObject ConfigHandler::getUsrConfigApplication() const { return usrConfig_.get("application"); } -bool ConfigHandler::setUsrConfigApplication(const QJsonObject &object) +bool ConfigHandler::setUsrConfigApplication(const QJsonObject &object) const { return usrConfig_.set("application", object); } -QJsonObject ConfigHandler::getUsrConfigProviders() +QJsonObject ConfigHandler::getUsrConfigProviders() const { return usrConfig_.get("providers"); } -bool ConfigHandler::setUsrConfigProviders(const QJsonObject &object) +bool ConfigHandler::setUsrConfigProviders(const QJsonObject &object) const { return usrConfig_.set("providers", object); } -QJsonObject ConfigHandler::getUsrConfigCategories() +QJsonObject ConfigHandler::getUsrConfigCategories() const { return usrConfig_.get("categories"); } -bool ConfigHandler::setUsrConfigCategories(const QJsonObject &object) +bool ConfigHandler::setUsrConfigCategories(const QJsonObject &object) const { return usrConfig_.set("categories", object); } -QJsonObject ConfigHandler::getUsrConfigInstalledItems() +QJsonObject ConfigHandler::getUsrConfigInstalledItems() const { return usrConfig_.get("installed_items"); } -bool ConfigHandler::setUsrConfigInstalledItems(const QJsonObject &object) +bool ConfigHandler::setUsrConfigInstalledItems(const QJsonObject &object) const { return usrConfig_.set("installed_items", object); } -bool ConfigHandler::setUsrConfigProvidersProvider(const QString &providerKey, const QJsonObject &object) +bool ConfigHandler::setUsrConfigProvidersProvider(const QString &providerKey, const QJsonObject &object) const { /* object format { @@ -98,19 +77,19 @@ bool ConfigHandler::setUsrConfigProvidersProvider(const QString &providerKey, co "_providerfile": "https://example.com/ocs/providers.xml" } */ - QJsonObject providers = getUsrConfigProviders(); + auto providers = getUsrConfigProviders(); providers[providerKey] = object; return setUsrConfigProviders(providers); } -bool ConfigHandler::removeUsrConfigProvidersProvider(const QString &providerKey) +bool ConfigHandler::removeUsrConfigProvidersProvider(const QString &providerKey) const { - QJsonObject providers = getUsrConfigProviders(); + auto providers = getUsrConfigProviders(); providers.remove(providerKey); return setUsrConfigProviders(providers); } -bool ConfigHandler::setUsrConfigCategoriesProvider(const QString &providerKey, const QJsonObject &object) +bool ConfigHandler::setUsrConfigCategoriesProvider(const QString &providerKey, const QJsonObject &object) const { /* object format { @@ -126,21 +105,21 @@ bool ConfigHandler::setUsrConfigCategoriesProvider(const QString &providerKey, c } } */ - QJsonObject categories = getUsrConfigCategories(); + auto categories = getUsrConfigCategories(); categories[providerKey] = object; return setUsrConfigCategories(categories); } -bool ConfigHandler::removeUsrConfigCategoriesProvider(const QString &providerKey) +bool ConfigHandler::removeUsrConfigCategoriesProvider(const QString &providerKey) const { - QJsonObject categories = getUsrConfigCategories(); + auto categories = getUsrConfigCategories(); categories.remove(providerKey); return setUsrConfigCategories(categories); } -bool ConfigHandler::setUsrConfigCategoriesInstallType(const QString &providerKey, const QString &categoryKey, const QString &installType) +bool ConfigHandler::setUsrConfigCategoriesInstallType(const QString &providerKey, const QString &categoryKey, const QString &installType) const { - QJsonObject categories = getUsrConfigCategories(); + auto categories = getUsrConfigCategories(); QJsonObject providerCategories; if (categories.contains(providerKey)) { providerCategories = categories[providerKey].toObject(); @@ -155,7 +134,7 @@ bool ConfigHandler::setUsrConfigCategoriesInstallType(const QString &providerKey return setUsrConfigCategories(categories); } -bool ConfigHandler::setUsrConfigInstalledItemsItem(const QString &itemKey, const QJsonObject &object) +bool ConfigHandler::setUsrConfigInstalledItemsItem(const QString &itemKey, const QJsonObject &object) const { /* object format { @@ -171,24 +150,67 @@ bool ConfigHandler::setUsrConfigInstalledItemsItem(const QString &itemKey, const "installed_at": 1483658977219 } */ - QJsonObject installedItems = getUsrConfigInstalledItems(); + auto installedItems = getUsrConfigInstalledItems(); installedItems[itemKey] = object; return setUsrConfigInstalledItems(installedItems); } -bool ConfigHandler::removeUsrConfigInstalledItemsItem(const QString &itemKey) +bool ConfigHandler::removeUsrConfigInstalledItemsItem(const QString &itemKey) const { - QJsonObject installedItems = getUsrConfigInstalledItems(); + auto installedItems = getUsrConfigInstalledItems(); installedItems.remove(itemKey); return setUsrConfigInstalledItems(installedItems); } -QString ConfigHandler::convertPathString(const QString &path) +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; +} + +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 ebaa18e14ec99f246c857d38e20fe7884309fe8f..bd44739d030aec2fe98cc653aed0e7c9f2632c12 100644 --- a/app/src/handlers/confighandler.h +++ b/app/src/handlers/confighandler.h @@ -10,31 +10,33 @@ class ConfigHandler : public QObject Q_OBJECT public: - explicit ConfigHandler(QObject *parent = 0); + explicit ConfigHandler(QObject *parent = nullptr); public slots: - QJsonObject getAppConfigApplication(); - QJsonObject getAppConfigInstallTypes(); - - QJsonObject getUsrConfigApplication(); - bool setUsrConfigApplication(const QJsonObject &object); - QJsonObject getUsrConfigProviders(); - bool setUsrConfigProviders(const QJsonObject &object); - QJsonObject getUsrConfigCategories(); - bool setUsrConfigCategories(const QJsonObject &object); - QJsonObject getUsrConfigInstalledItems(); - bool setUsrConfigInstalledItems(const QJsonObject &object); - - bool setUsrConfigProvidersProvider(const QString &providerKey, const QJsonObject &object); - bool removeUsrConfigProvidersProvider(const QString &providerKey); - bool setUsrConfigCategoriesProvider(const QString &providerKey, const QJsonObject &object); - bool removeUsrConfigCategoriesProvider(const QString &providerKey); - bool setUsrConfigCategoriesInstallType(const QString &providerKey, const QString &categoryKey, const QString &installType); - bool setUsrConfigInstalledItemsItem(const QString &itemKey, const QJsonObject &object); - bool removeUsrConfigInstalledItemsItem(const QString &itemKey); + QJsonObject getAppConfigApplication() const; + QJsonObject getAppConfigInstallTypes() const; + + QJsonObject getUsrConfigApplication() const; + bool setUsrConfigApplication(const QJsonObject &object) const; + QJsonObject getUsrConfigProviders() const; + bool setUsrConfigProviders(const QJsonObject &object) const; + QJsonObject getUsrConfigCategories() const; + bool setUsrConfigCategories(const QJsonObject &object) const; + QJsonObject getUsrConfigInstalledItems() const; + bool setUsrConfigInstalledItems(const QJsonObject &object) const; + + bool setUsrConfigProvidersProvider(const QString &providerKey, const QJsonObject &object) const; + bool removeUsrConfigProvidersProvider(const QString &providerKey) const; + bool setUsrConfigCategoriesProvider(const QString &providerKey, const QJsonObject &object) const; + bool removeUsrConfigCategoriesProvider(const QString &providerKey) const; + bool setUsrConfigCategoriesInstallType(const QString &providerKey, const QString &categoryKey, const QString &installType) const; + bool setUsrConfigInstalledItemsItem(const QString &itemKey, const QJsonObject &object) const; + bool removeUsrConfigInstalledItemsItem(const QString &itemKey) const; private: - QString convertPathString(const QString &path); + void importAppConfigApplication(); + void importAppConfigInstallTypes(); + QString convertPathString(const QString &path) const; qtlib::Config appConfig_; qtlib::Config usrConfig_; diff --git a/app/src/handlers/itemhandler.cpp b/app/src/handlers/itemhandler.cpp index 6fe9a26436fda3e3ea29055aaa1c9bf2c6abfb36..d8c731a4f564bfeb9aeea018c163f2051a325134 100644 --- a/app/src/handlers/itemhandler.cpp +++ b/app/src/handlers/itemhandler.cpp @@ -30,7 +30,7 @@ void ItemHandler::getItem(const QString &command, const QString &url, const QStr const QString &providerKey, const QString &contentId) { // Use URL as unique key for metadata, network resource, and installed item - QString itemKey = url; + auto itemKey = url; QJsonObject metadata; metadata["command"] = command; @@ -48,7 +48,7 @@ void ItemHandler::getItem(const QString &command, const QString &url, const QStr QJsonObject result; result["metadata"] = metadata; - QJsonObject itemMetadataSet = metadataSet(); + auto itemMetadataSet = metadataSet(); if (itemMetadataSet.contains(itemKey)) { result["status"] = QString("error_downloadstart"); @@ -60,7 +60,7 @@ void ItemHandler::getItem(const QString &command, const QString &url, const QStr itemMetadataSet[itemKey] = metadata; setMetadataSet(itemMetadataSet); - qtlib::NetworkResource *resource = new qtlib::NetworkResource(itemKey, QUrl(url), true, this); + auto *resource = new qtlib::NetworkResource(itemKey, QUrl(url), true, this); connect(resource, &qtlib::NetworkResource::downloadProgress, this, &ItemHandler::downloadProgress); connect(resource, &qtlib::NetworkResource::finished, this, &ItemHandler::networkResourceFinished); resource->get(); @@ -128,14 +128,14 @@ void ItemHandler::uninstall(const QString &itemKey) result["message"] = tr("Uninstalling"); emit uninstallStarted(result); - QJsonObject installedItem = configHandler_->getUsrConfigInstalledItems()[itemKey].toObject(); - QString installType = installedItem["install_type"].toString(); + auto installedItem = configHandler_->getUsrConfigInstalledItems()[itemKey].toObject(); + auto installType = installedItem["install_type"].toString(); qtlib::Dir destDir; #ifdef QTLIB_UNIX destDir.setPath(configHandler_->getAppConfigInstallTypes()[installType].toObject()["destination"].toString()); - for (const QJsonValue &filename : installedItem["files"].toArray()) { + for (const auto &filename : installedItem["files"].toArray()) { QFileInfo fileInfo(destDir.path() + "/" + filename.toString()); // plasmapkg: Installation process has should be saved plasmapkg into destination directory @@ -180,7 +180,7 @@ void ItemHandler::uninstall(const QString &itemKey) #else destDir.setPath(configHandler_->getAppConfigInstallTypes()[installType].toObject()["generic_destination"].toString()); - for (const QJsonValue &filename : installedItem["files"].toArray()) { + for (const auto &filename : installedItem["files"].toArray()) { QFileInfo fileInfo(destDir.path() + "/" + filename.toString()); if (fileInfo.isDir()) { qtlib::Dir(fileInfo.filePath()).remove(); @@ -200,10 +200,10 @@ void ItemHandler::uninstall(const QString &itemKey) void ItemHandler::networkResourceFinished(qtlib::NetworkResource *resource) { - QString itemKey = resource->id(); + auto itemKey = resource->id(); - QJsonObject itemMetadataSet = metadataSet(); - QJsonObject metadata = itemMetadataSet[itemKey].toObject(); + auto itemMetadataSet = metadataSet(); + auto metadata = itemMetadataSet[itemKey].toObject(); QJsonObject result; result["metadata"] = metadata; @@ -238,10 +238,10 @@ void ItemHandler::setMetadataSet(const QJsonObject &metadataSet) void ItemHandler::saveDownloadedFile(qtlib::NetworkResource *resource) { - QString itemKey = resource->id(); + auto itemKey = resource->id(); - QJsonObject itemMetadataSet = metadataSet(); - QJsonObject metadata = itemMetadataSet[itemKey].toObject(); + auto itemMetadataSet = metadataSet(); + auto metadata = itemMetadataSet[itemKey].toObject(); itemMetadataSet.remove(itemKey); setMetadataSet(itemMetadataSet); @@ -252,8 +252,8 @@ void ItemHandler::saveDownloadedFile(qtlib::NetworkResource *resource) result["message"] = tr("Saving"); emit saveStarted(result); - QString filename = metadata["filename"].toString(); - QString installType = metadata["install_type"].toString(); + auto filename = metadata["filename"].toString(); + auto installType = metadata["install_type"].toString(); qtlib::Dir destDir(configHandler_->getAppConfigInstallTypes()[installType].toObject()["destination"].toString()); destDir.make(); @@ -277,10 +277,10 @@ void ItemHandler::saveDownloadedFile(qtlib::NetworkResource *resource) void ItemHandler::installDownloadedFile(qtlib::NetworkResource *resource) { // Installation pre-process - QString itemKey = resource->id(); + auto itemKey = resource->id(); - QJsonObject itemMetadataSet = metadataSet(); - QJsonObject metadata = itemMetadataSet[itemKey].toObject(); + auto itemMetadataSet = metadataSet(); + auto metadata = itemMetadataSet[itemKey].toObject(); itemMetadataSet.remove(itemKey); setMetadataSet(itemMetadataSet); @@ -291,10 +291,10 @@ void ItemHandler::installDownloadedFile(qtlib::NetworkResource *resource) result["message"] = tr("Saving"); emit saveStarted(result); - QString filename = metadata["filename"].toString(); - QString installType = metadata["install_type"].toString(); + auto filename = metadata["filename"].toString(); + auto installType = metadata["install_type"].toString(); - QString prefix = configHandler_->getAppConfigApplication()["id"].toString() + "_" + filename; + auto prefix = configHandler_->getAppConfigApplication()["id"].toString() + "_" + filename; qtlib::Dir tempDir(qtlib::Dir::tempPath() + "/" + prefix); tempDir.make(); qtlib::Dir tempDestDir(tempDir.path() + "/dest"); @@ -392,7 +392,7 @@ void ItemHandler::installDownloadedFile(qtlib::NetworkResource *resource) destDir.make(); QJsonArray installedFiles; - for (const QFileInfo &fileInfo : tempDestDir.list()) { + for (const auto &fileInfo : tempDestDir.list()) { installedFiles.append(QJsonValue(fileInfo.fileName())); if (fileInfo.isDir()) { qtlib::Dir(fileInfo.filePath()).move(destDir.path() + "/" + fileInfo.fileName()); diff --git a/app/src/handlers/itemhandler.h b/app/src/handlers/itemhandler.h index 5f378c4dbc385704a2a7a5c69890b8b585e23f66..a780a7b1e7415c49f5d7de36236293ed7fc5221a 100644 --- a/app/src/handlers/itemhandler.h +++ b/app/src/handlers/itemhandler.h @@ -14,7 +14,7 @@ class ItemHandler : public QObject Q_OBJECT public: - explicit ItemHandler(ConfigHandler *configHandler, QObject *parent = 0); + explicit ItemHandler(ConfigHandler *configHandler, QObject *parent = nullptr); signals: void metadataSetChanged(); diff --git a/app/src/handlers/ocsapihandler.cpp b/app/src/handlers/ocsapihandler.cpp index 7a18191cce39f76aaad5159befb84ba7aa3087dc..eccfdd7fb6475adbd1773aea435db2481d46fb56 100644 --- a/app/src/handlers/ocsapihandler.cpp +++ b/app/src/handlers/ocsapihandler.cpp @@ -11,15 +11,15 @@ OcsApiHandler::OcsApiHandler(ConfigHandler *configHandler, QObject *parent) : QObject(parent), configHandler_(configHandler) {} -bool OcsApiHandler::addProviders(const QString &providerFileUrl) +bool OcsApiHandler::addProviders(const QString &providerFileUrl) const { - QJsonArray providers = qtlib::OcsApi::getProviderFile(QUrl(providerFileUrl)); + auto providers = qtlib::OcsApi::getProviderFile(QUrl(providerFileUrl)); if (!providers.isEmpty()) { - for (const QJsonValue &providerValue : providers) { - QJsonObject provider = providerValue.toObject(); + for (const auto &providerValue : providers) { + auto provider = providerValue.toObject(); if (provider.contains("location")) { // Use location (API base URL) as unique key - QString providerKey = provider["location"].toString(); + auto providerKey = provider["location"].toString(); if (configHandler_->setUsrConfigProvidersProvider(providerKey, provider)) { updateCategories(providerKey, true); } @@ -30,7 +30,7 @@ bool OcsApiHandler::addProviders(const QString &providerFileUrl) return false; } -bool OcsApiHandler::removeProvider(const QString &providerKey) +bool OcsApiHandler::removeProvider(const QString &providerKey) const { if (configHandler_->removeUsrConfigProvidersProvider(providerKey)) { configHandler_->removeUsrConfigCategoriesProvider(providerKey); @@ -39,11 +39,11 @@ bool OcsApiHandler::removeProvider(const QString &providerKey) return false; } -bool OcsApiHandler::updateAllCategories(bool force) +bool OcsApiHandler::updateAllCategories(bool force) const { - QJsonObject providers = configHandler_->getUsrConfigProviders(); + auto providers = configHandler_->getUsrConfigProviders(); if (!providers.isEmpty()) { - for (const QString &providerKey : providers.keys()) { + for (const auto &providerKey : providers.keys()) { updateCategories(providerKey, force); } return true; @@ -51,16 +51,16 @@ bool OcsApiHandler::updateAllCategories(bool force) return false; } -bool OcsApiHandler::updateCategories(const QString &providerKey, bool force) +bool OcsApiHandler::updateCategories(const QString &providerKey, bool force) const { - QJsonObject providers = configHandler_->getUsrConfigProviders(); + auto providers = configHandler_->getUsrConfigProviders(); if (!providers.contains(providerKey)) { return false; } - QString baseUrl = providers[providerKey].toObject()["location"].toString(); - QJsonObject response = qtlib::OcsApi(baseUrl, QUrl(baseUrl)).getContentCategories(); + auto baseUrl = providers[providerKey].toObject()["location"].toString(); + auto response = qtlib::OcsApi(baseUrl, QUrl(baseUrl)).getContentCategories(); if (!response.contains("data")) { return false; @@ -69,7 +69,7 @@ bool OcsApiHandler::updateCategories(const QString &providerKey, bool force) // Data type variation workaround, convert object to array QJsonArray responseData; if (response["data"].isObject()) { - for (const QJsonValue &dataValue : response["data"].toObject()) { + for (const auto &dataValue : response["data"].toObject()) { responseData.append(dataValue); } } @@ -77,17 +77,17 @@ bool OcsApiHandler::updateCategories(const QString &providerKey, bool force) responseData = response["data"].toArray(); } - QJsonObject installTypes = configHandler_->getAppConfigInstallTypes(); + auto installTypes = configHandler_->getAppConfigInstallTypes(); - QJsonObject categories = configHandler_->getUsrConfigCategories(); + auto categories = configHandler_->getUsrConfigCategories(); QJsonObject providerCategories; if (!force && categories.contains(providerKey)) { providerCategories = categories[providerKey].toObject(); } QJsonObject newProviderCategories; - for (const QJsonValue &dataValue : responseData) { - QJsonObject data = dataValue.toObject(); + for (const auto &dataValue : responseData) { + auto data = dataValue.toObject(); // Data type variation workaround, convert int to string QString id; @@ -99,9 +99,9 @@ bool OcsApiHandler::updateCategories(const QString &providerKey, bool force) } // Use category id as unique key - QString categoryKey = id; + auto categoryKey = id; - QString name = data["name"].toString(); + auto name = data["name"].toString(); // display_name: Not compatible to legacy OCS-API if (data.contains("display_name") && data["display_name"].toString() != "") { name = data["display_name"].toString(); @@ -113,7 +113,7 @@ bool OcsApiHandler::updateCategories(const QString &providerKey, bool force) parentId = data["parent_id"].toString(); } - QString installType = configHandler_->getAppConfigApplication()["options"].toObject()["default_install_type"].toString(); + auto installType = configHandler_->getAppConfigApplication()["options"].toObject()["default_install_type"].toString(); if (!force && providerCategories.contains(categoryKey)) { installType = providerCategories[categoryKey].toObject()["install_type"].toString(); } @@ -136,7 +136,7 @@ bool OcsApiHandler::updateCategories(const QString &providerKey, bool force) QJsonObject OcsApiHandler::getContents(const QString &providerKeys, const QString &categoryKeys, const QString &xdgTypes, const QString &packageTypes, - const QString &search, const QString &sortmode, int pagesize, int page) + const QString &search, const QString &sortmode, int pagesize, int page) const { QJsonObject responseSet; @@ -150,23 +150,23 @@ QJsonObject OcsApiHandler::getContents(const QString &providerKeys, const QStrin categoryKeyList = categoryKeys.split(","); } - QJsonObject providers = configHandler_->getUsrConfigProviders(); - QJsonObject categories = configHandler_->getUsrConfigCategories(); + auto providers = configHandler_->getUsrConfigProviders(); + auto categories = configHandler_->getUsrConfigCategories(); - for (const QString &providerKey : providers.keys()) { + for (const auto &providerKey : providers.keys()) { if (!providerKeyList.isEmpty() && !providerKeyList.contains(providerKey)) { continue; } QStringList categoryIdList; - QJsonObject providerCategories = categories[providerKey].toObject(); - for (const QString &categoryKey : providerCategories.keys()) { + auto providerCategories = categories[providerKey].toObject(); + for (const auto &categoryKey : providerCategories.keys()) { if (!categoryKeyList.isEmpty() && !categoryKeyList.contains(categoryKey)) { continue; } categoryIdList.append(providerCategories[categoryKey].toObject()["id"].toString()); } if (!categoryIdList.isEmpty()) { - QString baseUrl = providers[providerKey].toObject()["location"].toString(); + auto baseUrl = providers[providerKey].toObject()["location"].toString(); QUrlQuery query; // categories: Comma-separated list is not compatible to legacy OCS-API //query.addQueryItem("categories", categoryIdList.join(",")); @@ -192,12 +192,12 @@ QJsonObject OcsApiHandler::getContents(const QString &providerKeys, const QStrin return responseSet; } -QJsonObject OcsApiHandler::getContent(const QString &providerKey, const QString &contentId) +QJsonObject OcsApiHandler::getContent(const QString &providerKey, const QString &contentId) const { QJsonObject response; - QJsonObject providers = configHandler_->getUsrConfigProviders(); + auto providers = configHandler_->getUsrConfigProviders(); if (providers.contains(providerKey)) { - QString baseUrl = providers[providerKey].toObject()["location"].toString(); + auto baseUrl = providers[providerKey].toObject()["location"].toString(); response = qtlib::OcsApi(baseUrl, QUrl(baseUrl)).getContentData(contentId); } return response; diff --git a/app/src/handlers/ocsapihandler.h b/app/src/handlers/ocsapihandler.h index 4e4d3095e50f985c7c39f392eaccc85bdc719e5a..9e59f9ec51bf0d6924d76e5e6df773656cc313ff 100644 --- a/app/src/handlers/ocsapihandler.h +++ b/app/src/handlers/ocsapihandler.h @@ -10,17 +10,17 @@ class OcsApiHandler : public QObject Q_OBJECT public: - explicit OcsApiHandler(ConfigHandler *configHandler, QObject *parent = 0); + explicit OcsApiHandler(ConfigHandler *configHandler, QObject *parent = nullptr); public slots: - bool addProviders(const QString &providerFileUrl); - bool removeProvider(const QString &providerKey); - bool updateAllCategories(bool force = false); - bool updateCategories(const QString &providerKey, bool force = false); + bool addProviders(const QString &providerFileUrl) const; + bool removeProvider(const QString &providerKey) const; + bool updateAllCategories(bool force = false) const; + bool updateCategories(const QString &providerKey, bool force = false) const; QJsonObject getContents(const QString &providerKeys = "", const QString &categoryKeys = "", const QString &xdgTypes = "", const QString &packageTypes = "", - const QString &search = "", const QString &sortmode = "new", int pagesize = 25, int page = 0); - QJsonObject getContent(const QString &providerKey, const QString &contentId); + const QString &search = "", const QString &sortmode = "new", int pagesize = 25, int page = 0) const; + QJsonObject getContent(const QString &providerKey, const QString &contentId) const; private: ConfigHandler *configHandler_; diff --git a/app/src/handlers/systemhandler.cpp b/app/src/handlers/systemhandler.cpp index 2230d8d3c6352e192f27711674b0d04bab382531..13ff4a61984b4d915f347993c12d5fd55811492e 100644 --- a/app/src/handlers/systemhandler.cpp +++ b/app/src/handlers/systemhandler.cpp @@ -20,7 +20,7 @@ SystemHandler::SystemHandler(QObject *parent) : QObject(parent) {} -bool SystemHandler::isUnix() +bool SystemHandler::isUnix() const { #ifdef QTLIB_UNIX return true; @@ -28,7 +28,7 @@ bool SystemHandler::isUnix() return false; } -bool SystemHandler::isMobileDevice() +bool SystemHandler::isMobileDevice() const { #if defined(APP_MOBILE) return true; @@ -40,9 +40,9 @@ bool SystemHandler::isMobileDevice() return false; } -bool SystemHandler::openUrl(const QString &url) +bool SystemHandler::openUrl(const QString &url) const { - QString path = url; + auto path = url; path.replace("file://localhost", "", Qt::CaseInsensitive); path.replace("file://", "", Qt::CaseInsensitive); @@ -62,7 +62,7 @@ bool SystemHandler::openUrl(const QString &url) return QDesktopServices::openUrl(QUrl(url)); } -QString SystemHandler::desktopEnvironment() +QString SystemHandler::desktopEnvironment() const { QString desktop = "unknown"; QString currentDesktop = ""; @@ -89,9 +89,9 @@ QString SystemHandler::desktopEnvironment() return desktop; } -bool SystemHandler::isApplicableType(const QString &installType) +bool SystemHandler::isApplicableType(const QString &installType) const { - QString desktop = desktopEnvironment(); + auto desktop = desktopEnvironment(); if (installType == "wallpapers" && (desktop == "kde" || desktop == "gnome" || desktop == "xfce")) { @@ -114,7 +114,7 @@ bool SystemHandler::isApplicableType(const QString &installType) } #ifdef QTLIB_UNIX -bool SystemHandler::applyFile(const QString &path, const QString &installType) +bool SystemHandler::applyFile(const QString &path, const QString &installType) const { if (QFileInfo::exists(path) && isApplicableType(installType)) { if (installType == "wallpapers") { @@ -137,13 +137,13 @@ bool SystemHandler::applyFile(const QString &path, const QString &installType) #endif #ifdef QTLIB_UNIX -bool SystemHandler::applyWallpaper(const QString &path) +bool SystemHandler::applyWallpaper(const QString &path) const { - QString desktop = desktopEnvironment(); + auto desktop = desktopEnvironment(); if (desktop == "kde") { // plasma5.6+ - QDBusMessage message = QDBusMessage::createMethodCall("org.kde.plasmashell", "/PlasmaShell", "org.kde.PlasmaShell", "evaluateScript"); + auto message = QDBusMessage::createMethodCall("org.kde.plasmashell", "/PlasmaShell", "org.kde.PlasmaShell", "evaluateScript"); QVariantList arguments; QString script; @@ -158,7 +158,7 @@ bool SystemHandler::applyWallpaper(const QString &path) arguments << QVariant(script); message.setArguments(arguments); - QDBusMessage reply = QDBusConnection::sessionBus().call(message); + auto reply = QDBusConnection::sessionBus().call(message); if (reply.type() == QDBusMessage::ErrorMessage) { qWarning() << reply.errorMessage(); @@ -167,16 +167,15 @@ bool SystemHandler::applyWallpaper(const QString &path) return true; } else if (desktop == "gnome") { - QStringList arguments; // gnome3 - arguments << "set" << "org.gnome.desktop.background" << "picture-uri" << "file://" + path; + QStringList arguments{"set", "org.gnome.desktop.background", "picture-uri", "file://" + path}; return QProcess::startDetached("gsettings", arguments); // gnome2 - //arguments << "--type=string" << "--set" << "/desktop/gnome/background/picture_filename" << path; + //QStringList arguments{"--type=string", "--set", "/desktop/gnome/background/picture_filename", path}; //return QProcess::startDetached("gconftool-2", arguments); } else if (desktop == "xfce") { - QDBusMessage message = QDBusMessage::createMethodCall("org.xfce.Xfconf", "/org/xfce/Xfconf", "org.xfce.Xfconf", "SetProperty"); + auto message = QDBusMessage::createMethodCall("org.xfce.Xfconf", "/org/xfce/Xfconf", "org.xfce.Xfconf", "SetProperty"); QVariantList arguments; QString channelValue = "xfce4-desktop"; @@ -187,7 +186,7 @@ bool SystemHandler::applyWallpaper(const QString &path) arguments << QVariant(channelValue) << QVariant(propertyValue) << QVariant::fromValue(valueValue); message.setArguments(arguments); - QDBusMessage reply = QDBusConnection::sessionBus().call(message); + auto reply = QDBusConnection::sessionBus().call(message); if (reply.type() == QDBusMessage::ErrorMessage) { qWarning() << reply.errorMessage(); @@ -198,11 +197,11 @@ bool SystemHandler::applyWallpaper(const QString &path) return false; } -bool SystemHandler::applyIcon(const QString &path) +bool SystemHandler::applyIcon(const QString &path) const { qDebug() << path; - QString desktop = desktopEnvironment(); + auto desktop = desktopEnvironment(); if (desktop == "kde") { } @@ -213,11 +212,11 @@ bool SystemHandler::applyIcon(const QString &path) return false; } -bool SystemHandler::applyCursor(const QString &path) +bool SystemHandler::applyCursor(const QString &path) const { qDebug() << path; - QString desktop = desktopEnvironment(); + auto desktop = desktopEnvironment(); if (desktop == "kde") { } @@ -228,11 +227,11 @@ bool SystemHandler::applyCursor(const QString &path) return false; } -bool SystemHandler::applyWindowTheme(const QString &path) +bool SystemHandler::applyWindowTheme(const QString &path) const { qDebug() << path; - QString desktop = desktopEnvironment(); + auto desktop = desktopEnvironment(); if (desktop == "kde") { } diff --git a/app/src/handlers/systemhandler.h b/app/src/handlers/systemhandler.h index f291c8a89551809a8c0c0ab1d573906ff62405e0..b4697833b8a86be062fa31a0dbfe1e7132818153 100644 --- a/app/src/handlers/systemhandler.h +++ b/app/src/handlers/systemhandler.h @@ -7,25 +7,25 @@ class SystemHandler : public QObject Q_OBJECT public: - explicit SystemHandler(QObject *parent = 0); + explicit SystemHandler(QObject *parent = nullptr); public slots: - bool isUnix(); - bool isMobileDevice(); - bool openUrl(const QString &url); + bool isUnix() const; + bool isMobileDevice() const; + bool openUrl(const QString &url) const; - QString desktopEnvironment(); - bool isApplicableType(const QString &installType); + QString desktopEnvironment() const; + bool isApplicableType(const QString &installType) const; #ifdef QTLIB_UNIX - bool applyFile(const QString &path, const QString &installType); + bool applyFile(const QString &path, const QString &installType) const; #endif private: #ifdef QTLIB_UNIX - bool applyWallpaper(const QString &path); - bool applyIcon(const QString &path); - bool applyCursor(const QString &path); - bool applyWindowTheme(const QString &path); + bool applyWallpaper(const QString &path) const; + bool applyIcon(const QString &path) const; + bool applyCursor(const QString &path) const; + bool applyWindowTheme(const QString &path) const; #endif }; diff --git a/app/src/main.cpp b/app/src/main.cpp index 15bdaf5714e60d3df7f6697d3fcc068abcebafe4..f1df5336d391c7b127974af9c0117fd10a7559d9 100644 --- a/app/src/main.cpp +++ b/app/src/main.cpp @@ -15,8 +15,8 @@ int main(int argc, char *argv[]) // Init QGuiApplication app(argc, argv); // This is backend program, but need GUI module - 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()); @@ -42,10 +42,10 @@ int main(int argc, char *argv[]) clParser.process(app); - int port = clParser.value(clOptionPort).toInt(); + auto port = clParser.value(clOptionPort).toInt(); // Setup websocket server - WebSocketServer *wsServer = new WebSocketServer(configHandler, appConfigApplication["id"].toString(), port, &app); + auto *wsServer = new WebSocketServer(configHandler, appConfigApplication["id"].toString(), port, &app); QObject::connect(wsServer, &WebSocketServer::stopped, &app, &QCoreApplication::quit); if (wsServer->start()) { diff --git a/app/src/websockets/websocketserver.cpp b/app/src/websockets/websocketserver.cpp index 672bb7398abcadcfcdfc9887812f4eb2c56b0dc7..14e6dc320c8a7eaa222502f671a4dc345ad49852 100644 --- a/app/src/websockets/websocketserver.cpp +++ b/app/src/websockets/websocketserver.cpp @@ -54,7 +54,7 @@ void WebSocketServer::stop() wsServer_->close(); } -bool WebSocketServer::isError() +bool WebSocketServer::isError() const { if (wsServer_->error() != QWebSocketProtocol::CloseCodeNormal) { return true; @@ -62,19 +62,19 @@ bool WebSocketServer::isError() return false; } -QString WebSocketServer::errorString() +QString WebSocketServer::errorString() const { return wsServer_->errorString(); } -QUrl WebSocketServer::serverUrl() +QUrl WebSocketServer::serverUrl() const { return wsServer_->serverUrl(); } void WebSocketServer::wsNewConnection() { - QWebSocket *wsClient = wsServer_->nextPendingConnection(); + auto *wsClient = wsServer_->nextPendingConnection(); connect(wsClient, &QWebSocket::disconnected, this, &WebSocketServer::wsDisconnected); connect(wsClient, &QWebSocket::textMessageReceived, this, &WebSocketServer::wsTextMessageReceived); connect(wsClient, &QWebSocket::binaryMessageReceived, this, &WebSocketServer::wsBinaryMessageReceived); @@ -83,7 +83,7 @@ void WebSocketServer::wsNewConnection() void WebSocketServer::wsDisconnected() { - QWebSocket *wsClient = qobject_cast<QWebSocket *>(sender()); + auto *wsClient = qobject_cast<QWebSocket *>(sender()); if (wsClient) { wsClients_.removeAll(wsClient); wsClient->deleteLater(); @@ -92,11 +92,11 @@ void WebSocketServer::wsDisconnected() void WebSocketServer::wsTextMessageReceived(const QString &message) { - QWebSocket *wsClient = qobject_cast<QWebSocket *>(sender()); + auto *wsClient = qobject_cast<QWebSocket *>(sender()); if (wsClient) { qtlib::Json json(message.toUtf8()); if (json.isObject()) { - QJsonObject object = json.toObject(); + auto object = json.toObject(); receiveMessage(object["id"].toString(), object["func"].toString(), object["data"].toArray()); } } @@ -104,11 +104,11 @@ void WebSocketServer::wsTextMessageReceived(const QString &message) void WebSocketServer::wsBinaryMessageReceived(const QByteArray &message) { - QWebSocket *wsClient = qobject_cast<QWebSocket *>(sender()); + auto *wsClient = qobject_cast<QWebSocket *>(sender()); if (wsClient) { qtlib::Json json(message); if (json.isObject()) { - QJsonObject object = json.toObject(); + auto object = json.toObject(); receiveMessage(object["id"].toString(), object["func"].toString(), object["data"].toArray()); } } @@ -343,10 +343,10 @@ void WebSocketServer::sendMessage(const QString &id, const QString &func, const object["func"] = func; object["data"] = data; - QByteArray binaryMessage = qtlib::Json(object).toJson(); - QString textMessage = QString::fromUtf8(binaryMessage); + auto binaryMessage = qtlib::Json(object).toJson(); + auto textMessage = QString::fromUtf8(binaryMessage); - for (QWebSocket *wsClient : wsClients_) { + for (auto *wsClient : wsClients_) { wsClient->sendTextMessage(textMessage); //wsClient->sendBinaryMessage(binaryMessage); } diff --git a/app/src/websockets/websocketserver.h b/app/src/websockets/websocketserver.h index 6bcebf7c28fb7d6ee4987b04ff3a89ab378f0eff..350903a064f95bd72cbf2d98118eb8cb9d611fa2 100644 --- a/app/src/websockets/websocketserver.h +++ b/app/src/websockets/websocketserver.h @@ -18,7 +18,7 @@ class WebSocketServer : public QObject Q_OBJECT public: - explicit WebSocketServer(ConfigHandler *configHandler, const QString &serverName = "WebSocketServer", quint16 serverPort = 0, QObject *parent = 0); + explicit WebSocketServer(ConfigHandler *configHandler, const QString &serverName = "WebSocketServer", quint16 serverPort = 0, QObject *parent = nullptr); ~WebSocketServer(); signals: @@ -28,9 +28,9 @@ signals: public slots: bool start(); void stop(); - bool isError(); - QString errorString(); - QUrl serverUrl(); + bool isError() const; + QString errorString() const; + QUrl serverUrl() const; private slots: void wsNewConnection(); diff --git a/ocs-manager.pro b/ocs-manager.pro index 18d40c3b42b72d7ffa5a6383a0972d15984d101f..0a4378a294bc01de10736bdea736ce6750475baa 100644 --- a/ocs-manager.pro +++ b/ocs-manager.pro @@ -10,9 +10,7 @@ TARGET = ocs-manager TEMPLATE = app -CONFIG += \ - c++11 \ - console +CONFIG += console CONFIG -= app_bundle 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