/*! * * Copyright (c) 2021-2024 Diality Inc. - All Rights Reserved. * \copyright * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * \file MSettings.cpp * \author (last) Behrouz NematiPour * \date (last) 27-May-2023 * \author (original) Behrouz NematiPour * \date (original) 29-Mar-2021 * */ #include "MSettings.h" // Qt #include // Project #include "StorageGlobals.h" // name spaces using namespace Storage; /*! * \brief MSettings::MSettings * \details The constructor * \param parent */ MSettings::MSettings(QObject *parent) : QObject(parent) { } /*! * \brief MSettings::keys * \details returns all keys in a group * \param vGroup - the group to look for all the keys * \return list of the keys in QString for the group vGroup */ QStringList MSettings::keys(const QString &vCategory, const QString &vGroup) { const QMutexLocker locker(&_mutex); QStringList mKeys; TKeyValues keyValues = _settings[vCategory][vGroup]; for (const auto &keyValue: keyValues ) { mKeys += keyValue.key(); } return mKeys; } QString MSettings::key(const QString &vCategory, const QString &vGroup, uint vIndex) { QStringList mKeys = keys(vCategory, vGroup); QString mKey = "[Unknown %1]"; if ( vIndex < (unsigned)mKeys.count() ) { mKey = mKeys [vIndex]; } else { mKey = mKey.arg(vIndex); } return mKey; } /*! * \brief MSettings::values * \details returns all values in a group * \param vGroup - the group to look for all the values * \return list of the values in QString for the group vGroup */ QVariantList MSettings::values(const QString &vCategory, const QString &vGroup) { QMutexLocker locker(&_mutex); QVariantList mValues; TKeyValues keyValues = _settings[vCategory][vGroup]; for (const auto &keyValue: keyValues ) { mValues += keyValue.val(); } return mValues; } /*! * \brief MSettings::value * \details returns value of a key for the given group * \param vGroup - the group to look for the value * \param vKey - the key to look for the value * \return the values in QString for the group vGroup */ QVariant MSettings::value(const QString &vCategory, const QString &vGroup, const QString &vKey) { QMutexLocker locker(&_mutex); TKeyValues mKeyValues = _settings[vCategory][vGroup]; for (const auto &keyValue: mKeyValues ) { if ( vKey == keyValue.key() ) return keyValue.val(); } return QVariant(); } /*! * \brief MSettings::groups * \details The groups where have been read from the location vLocation * \param vLocation - The location to look for the group(s) * \return the groups in QString */ QStringList MSettings::groups(const QString &vCategory) { QMutexLocker locker(&_mutex); return _settings[vCategory].keys(); } /*! * \brief MSettings::categorys * \details The list of all the categories in the setting * \return the categories in QStringList */ QStringList MSettings::categorys() { QMutexLocker locker(&_mutex); return _settings.keys(); } /*! * \brief MSettings::add * \details The function to be used to add elements in the settings * \param vGroup - the group of the settings * \param vKey - the key to be added under the group vGroup * \param vValue - the value of the key to be added under group vGroup for the key vKey */ void MSettings::add(const QString &vCategory, const QString &vGroup, const QString &vKey, const QVariant &vValue, bool vEnableDuplicateKeys) { QMutexLocker locker(&_mutex); if ( vEnableDuplicateKeys ) { _settings[vCategory][vGroup] += TKeyValue (vKey, vValue); } else { TKeyValue keyValue (vKey, vValue); TKeyValues keyValues = _settings[vCategory][vGroup]; int index = keyValues.indexOf(keyValue); if ( index >= 0 ) { _settings[vCategory][vGroup].replace( index, keyValue ); } else { _settings[vCategory][vGroup] += keyValue; } } } /*! * \brief MSettings::remove * \details The function to be used to remove elements in the settings * \param vGroup - the group of the settings * \param vKey - the key to be removed under the group vGroup * \param vValue - the value of the key to be removed under group vGroup for the key vKey */ void MSettings::remove (const QString &vCategory, const QString &vGroup, const QString &vKey, const QVariant &vValue) { TKeyValue keyValue (vKey, vValue); int index = _settings[vCategory][vGroup].indexOf(keyValue); _settings[vCategory][vGroup].removeAt(index); } QString MSettings::systemLocale () { return value(Storage::Settings_Category_Locale, "Localization", "Locale" ).toString(); } QString MSettings::systemLanguage () { return value(Storage::Settings_Category_Locale, "Localization", "Language" ).toString(); } /********** The common helper functions **********/ /*! * \brief Settings::getDatetimeFormat * \details Get the date time format * \return The String output of the data/time format. */ void MSettings::datetimeFormat() { QString category = Storage::Settings_Category_SettingsSystem; QVariant dateFotmat = _Settings.value(category, "Date", "Format"); QVariant timeFotmat = _Settings.value(category, "Time", "Format"); if (dateFotmat.isValid() && timeFotmat.isValid()) { _dateFormat = dateFotmat.toString(); _timeFormat = timeFotmat.toString(); _datetimeFormat = _dateFormat + " " + _timeFormat; } }