Skip to content
Snippets Groups Projects
confighandler.cpp 6.34 KiB
Newer Older
  • Learn to ignore specific revisions
  • akiraohgaki's avatar
    akiraohgaki committed
    #include "confighandler.h"
    
    #include <QStringList>
    
    #include "qtlib_dir.h"
    
    ConfigHandler::ConfigHandler(QObject *parent)
        : QObject(parent)
    {
        appConfig_ = qtlib::Config(":/configs");
        usrConfig_ = qtlib::Config(qtlib::Dir::genericConfigPath() + "/" + getAppConfigApplication()["id"].toString());
    }
    
    QJsonObject ConfigHandler::getAppConfigApplication()
    {
        if (appConfigApplication_.isEmpty()) {
            appConfigApplication_ = appConfig_.get("application");
        }
        return appConfigApplication_;
    }
    
    QJsonObject ConfigHandler::getAppConfigInstallTypes()
    {
        if (appConfigInstallTypes_.isEmpty()) {
            QJsonObject installTypes = appConfig_.get("install_types");
    
    akiraohgaki's avatar
    akiraohgaki committed
            for (const QString &key : installTypes.keys()) {
    
    akiraohgaki's avatar
    akiraohgaki committed
                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");
    
    akiraohgaki's avatar
    akiraohgaki committed
            for (const QString &key : installTypesAlias.keys()) {
    
    akiraohgaki's avatar
    akiraohgaki committed
                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()
    {
        return usrConfig_.get("application");
    }
    
    bool ConfigHandler::setUsrConfigApplication(const QJsonObject &object)
    {
        return usrConfig_.set("application", object);
    }
    
    QJsonObject ConfigHandler::getUsrConfigProviders()
    {
        return usrConfig_.get("providers");
    }
    
    bool ConfigHandler::setUsrConfigProviders(const QJsonObject &object)
    {
        return usrConfig_.set("providers", object);
    }
    
    QJsonObject ConfigHandler::getUsrConfigCategories()
    {
        return usrConfig_.get("categories");
    }
    
    bool ConfigHandler::setUsrConfigCategories(const QJsonObject &object)
    {
        return usrConfig_.set("categories", object);
    }
    
    QJsonObject ConfigHandler::getUsrConfigInstalledItems()
    {
        return usrConfig_.get("installed_items");
    }
    
    bool ConfigHandler::setUsrConfigInstalledItems(const QJsonObject &object)
    {
        return usrConfig_.set("installed_items", object);
    }
    
    bool ConfigHandler::setUsrConfigProvidersProvider(const QString &providerKey, const QJsonObject &object)
    {
        /* object format
        {
            "id": "example",
            "location": "https://example.com/ocs/v1/",
            "name": "Example",
            "icon": "https://example.com/icon.png",
            "termsofuse": "https://example.com/termsofuse",
            "register": "https://example.com/register",
            "_providerfile": "https://example.com/ocs/providers.xml"
        }
        */
        QJsonObject providers = getUsrConfigProviders();
        providers[providerKey] = object;
        return setUsrConfigProviders(providers);
    }
    
    bool ConfigHandler::removeUsrConfigProvidersProvider(const QString &providerKey)
    {
        QJsonObject providers = getUsrConfigProviders();
        providers.remove(providerKey);
        return setUsrConfigProviders(providers);
    }
    
    bool ConfigHandler::setUsrConfigCategoriesProvider(const QString &providerKey, const QJsonObject &object)
    {
        /* object format
        {
            "1": {
                "id": "1",
                "name": "Desktop Icons",
                "install_type": "icons"
            },
            "2": {
                "id": "2",
                "name": "Desktop Themes",
                "install_type": "themes"
            }
        }
        */
        QJsonObject categories = getUsrConfigCategories();
        categories[providerKey] = object;
        return setUsrConfigCategories(categories);
    }
    
    bool ConfigHandler::removeUsrConfigCategoriesProvider(const QString &providerKey)
    {
        QJsonObject categories = getUsrConfigCategories();
        categories.remove(providerKey);
        return setUsrConfigCategories(categories);
    }
    
    bool ConfigHandler::setUsrConfigCategoriesInstallType(const QString &providerKey, const QString &categoryKey, const QString &installType)
    {
        QJsonObject categories = getUsrConfigCategories();
        QJsonObject providerCategories;
        if (categories.contains(providerKey)) {
            providerCategories = categories[providerKey].toObject();
        }
        QJsonObject providerCategory;
        if (providerCategories.contains(categoryKey)) {
            providerCategory = providerCategories[categoryKey].toObject();
        }
        providerCategory["install_type"] = installType;
        providerCategories[categoryKey] = providerCategory;
        categories[providerKey] = providerCategories;
        return setUsrConfigCategories(categories);
    }
    
    bool ConfigHandler::setUsrConfigInstalledItemsItem(const QString &itemKey, const QJsonObject &object)
    {
        /* object format
        {
            "url": "http://example.com/downloads/123-1.tar.gz",
            "filename": "123-1.tar.gz",
            "install_type": "icons",
            "provider": "http://example.com/ocs/v1/",
            "content_id": "123",
            "files": [
                "iconset-light",
                "iconset-dark"
            ],
            "installed_at": 1483658977219
        }
        */
        QJsonObject installedItems = getUsrConfigInstalledItems();
        installedItems[itemKey] = object;
        return setUsrConfigInstalledItems(installedItems);
    }
    
    bool ConfigHandler::removeUsrConfigInstalledItemsItem(const QString &itemKey)
    {
        QJsonObject installedItems = getUsrConfigInstalledItems();
        installedItems.remove(itemKey);
        return setUsrConfigInstalledItems(installedItems);
    }
    
    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;
    }