File indexing completed on 2025-03-09 03:59:04

0001 /* ============================================================
0002  *
0003  * This file is a part of digiKam project
0004  * https://www.digikam.org
0005  *
0006  * Date        : 2020-07-26
0007  * Description : System settings container.
0008  *
0009  * SPDX-FileCopyrightText: 2020-2023 by Maik Qualmann <metzpinguin at gmail dot com>
0010  *
0011  * SPDX-License-Identifier: GPL-2.0-or-later
0012  *
0013  * ============================================================ */
0014 
0015 #include "systemsettings.h"
0016 
0017 // Qt includes
0018 
0019 #include <QDir>
0020 #include <QSettings>
0021 #include <QStandardPaths>
0022 #include <QNetworkProxy>
0023 
0024 // Local includes
0025 
0026 #include "digikam_debug.h"
0027 #include "digikam_config.h"
0028 
0029 namespace Digikam
0030 {
0031 
0032 SystemSettings::SystemSettings(const QString& name)
0033 {
0034     if (!name.isEmpty())
0035     {
0036         m_path = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation) +
0037                  QDir::separator() + name + QLatin1String("_systemrc");
0038     }
0039 
0040     readSettings();
0041 }
0042 
0043 SystemSettings::~SystemSettings()
0044 {
0045 }
0046 
0047 void SystemSettings::readSettings()
0048 {
0049     if (m_path.isEmpty())
0050     {
0051         return;
0052     }
0053 
0054     QSettings settings(m_path, QSettings::IniFormat);
0055 
0056     settings.beginGroup(QLatin1String("System"));
0057 
0058 #if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
0059 
0060     #ifdef Q_OS_LINUX
0061 
0062     useHighDpiScaling    = settings.value(QLatin1String("useHighDpiScaling"), true).toBool();
0063     useHighDpiPixmaps    = settings.value(QLatin1String("useHighDpiPixmaps"), true).toBool();
0064 
0065     #else
0066 
0067     useHighDpiScaling    = settings.value(QLatin1String("useHighDpiScaling"), false).toBool();
0068     useHighDpiPixmaps    = settings.value(QLatin1String("useHighDpiPixmaps"), false).toBool();
0069 
0070     #endif
0071 
0072 #endif
0073 
0074     if (settings.contains(QLatin1String("disableFaceEngine")))
0075     {
0076         bool oldSetting  = settings.value(QLatin1String("disableFaceEngine"), false).toBool();
0077         enableFaceEngine = !oldSetting;
0078     }
0079     else
0080     {
0081         enableFaceEngine = settings.value(QLatin1String("enableFaceEngine"),  true).toBool();
0082     }
0083 
0084     enableAesthetic      = settings.value(QLatin1String("enableAesthetic"),   true).toBool();
0085     enableAutoTags       = settings.value(QLatin1String("enableAutoTags"),    true).toBool();
0086     softwareOpenGL       = settings.value(QLatin1String("softwareOpenGL"),    false).toBool();
0087     enableLogging        = settings.value(QLatin1String("enableLogging"),     false).toBool();
0088     disableOpenCL        = settings.value(QLatin1String("disableOpenCL"),     true).toBool();
0089 
0090     // Proxy Settings
0091 
0092     proxyUrl             = settings.value(QLatin1String("proxyUrl"),          QString()).toString();
0093     proxyPort            = settings.value(QLatin1String("proxyPort"),         8080).toInt();
0094     proxyUser            = settings.value(QLatin1String("proxyUser"),         QString()).toString();
0095     proxyPass            = settings.value(QLatin1String("proxyPass"),         QString()).toString();
0096     proxyType            = settings.value(QLatin1String("proxyType"),         HttpProxy).toInt();
0097     proxyAuth            = settings.value(QLatin1String("proxyAuth"),         false).toBool();
0098     settings.endGroup();
0099 
0100     QNetworkProxy proxy;
0101 
0102     // Make sure that no proxy is used for an empty string or the default value:
0103 
0104     if (proxyUrl.isEmpty() || (proxyUrl == QLatin1String("http://")))
0105     {
0106         proxy.setType(QNetworkProxy::NoProxy);
0107     }
0108     else
0109     {
0110         if      (proxyType == Socks5Proxy)
0111         {
0112             proxy.setType(QNetworkProxy::Socks5Proxy);
0113         }
0114         else if (proxyType == HttpProxy)
0115         {
0116             proxy.setType(QNetworkProxy::HttpProxy);
0117         }
0118         else
0119         {
0120             qCDebug(DIGIKAM_GENERAL_LOG) << "Unknown proxy type! Using Http Proxy instead.";
0121             proxy.setType(QNetworkProxy::HttpProxy);
0122         }
0123     }
0124 
0125     proxy.setHostName(proxyUrl);
0126     proxy.setPort(proxyPort);
0127 
0128     if (proxyAuth)
0129     {
0130         proxy.setUser(proxyUser);
0131         proxy.setPassword(proxyPass);
0132     }
0133 
0134     QNetworkProxy::setApplicationProxy(proxy);
0135 }
0136 
0137 void SystemSettings::saveSettings()
0138 {
0139     if (m_path.isEmpty())
0140     {
0141         return;
0142     }
0143 
0144     QSettings settings(m_path, QSettings::IniFormat);
0145 
0146     settings.beginGroup(QLatin1String("System"));
0147 
0148 #if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
0149 
0150     settings.setValue(QLatin1String("useHighDpiScaling"), useHighDpiScaling);
0151     settings.setValue(QLatin1String("useHighDpiPixmaps"), useHighDpiPixmaps);
0152 
0153 #endif
0154 
0155     settings.setValue(QLatin1String("enableFaceEngine"),  enableFaceEngine);
0156     settings.setValue(QLatin1String("enableAesthetic"),   enableAesthetic);
0157     settings.setValue(QLatin1String("enableAutoTags"),    enableAutoTags);
0158     settings.setValue(QLatin1String("softwareOpenGL"),    softwareOpenGL);
0159     settings.setValue(QLatin1String("enableLogging"),     enableLogging);
0160     settings.setValue(QLatin1String("disableOpenCL"),     disableOpenCL);
0161 
0162     if (settings.contains(QLatin1String("disableFaceEngine")))
0163     {
0164         settings.remove(QLatin1String("disableFaceEngine"));
0165     }
0166 
0167     settings.setValue(QLatin1String("proxyUrl"),          proxyUrl);
0168     settings.setValue(QLatin1String("proxyPort"),         proxyPort);
0169     settings.setValue(QLatin1String("proxyType"),         proxyType);
0170 
0171     if (proxyAuth)
0172     {
0173         settings.setValue(QLatin1String("proxyAuth"),     true);
0174         settings.setValue(QLatin1String("proxyUser"),     proxyUser);
0175         settings.setValue(QLatin1String("proxyPass"),     proxyPass);
0176     }
0177     else
0178     {
0179         settings.setValue(QLatin1String("proxyAuth"),     false);
0180     }
0181 
0182     settings.endGroup();
0183 }
0184 
0185 } // namespace Digikam