Index: sources/storage/Settings.cpp =================================================================== diff -u -rb794e2e09c4a06e6faaa722f2dc35f50e5f2e8e0 -rd9b9df9b23da89b4c27f4672ff6e7f570adcc48a --- sources/storage/Settings.cpp (.../Settings.cpp) (revision b794e2e09c4a06e6faaa722f2dc35f50e5f2e8e0) +++ sources/storage/Settings.cpp (.../Settings.cpp) (revision d9b9df9b23da89b4c27f4672ff6e7f570adcc48a) @@ -29,85 +29,65 @@ #include "Settings.h" -bool Settings::exists(const QString &vSettingFile) -{ - int err = Settings::Settings_Error::eError_None; - if (! QFileInfo::exists(vSettingFile)) { - err = Settings::Settings_Error::eError_SettingNotExists; - LOG_DEBUG(errorMessage(err).arg(vSettingFile)); - return false; - } - return true; -} - /*! - * \brief Settings::fileName - * \details returns the conf file by the settings information provided. - * \param vCategory - the settings file category - * \param vLocale - the settings file locale - * \return QString configuration/settings file name - */ -QString Settings::fileName(const QString &vCategory, const QString &vLocale) { - return QString("%1%2%4.%3").arg(Storage::Settings_Path()).arg(vCategory).arg(_settingsExt).arg(vLocale.trimmed().isEmpty() ? "" : _settingsLocalSeparator + vLocale); -} - -/*! - * \brief Settings::doRead - * \details Reads all the configuration files + * \brief Settings::readCategory + * \details Reads, parses and adds the read value to the settins. + * \param vCategory - the category of the configuration file to read. * \return non-zero, error value on error, and zero on success. */ -int Settings::read() +int Settings::readCategory(Category_Enum vCategory) { int err = Settings::Settings_Error::eError_None; + QString msg; QFileInfo mSettingFile; QString mCategory; - for ( quint8 i = 0; i <= _categoryCount; i++ ) { - mCategory = category(static_cast(i)); - switch (i) { // NOTE: don't use default case - case eSettingsSystem : - case eMessagesUnhandled : - mSettingFile.setFile(fileName(mCategory, "")); - // FALLTHROUGH - break; - case eInstructions : - case eConfigurationsDataList : - case eAlarms : - case eEvents : - case eRejects : - case eGenericConfirm : - mSettingFile.setFile(fileName(mCategory, _Settings.systemLocale())); - // FALLTHROUGH - break; - } + QString mFileName; + Detail mDetail; - if (! exists(mSettingFile.absoluteFilePath())) continue; // error handling is done in exists(), so just continue. - QFile file(mSettingFile.absoluteFilePath()); - if (! file.open(QIODevice::ReadOnly | QIODevice::Text)) { - err = Settings::Settings_Error::eError_Read; - LOG_APPED_PO(errorMessage(err).arg(Storage::Settings_Path())); - return err; - } + mCategory = category(vCategory); + mFileName = fileName(vCategory); + qDebug() << mCategory << mFileName; + mSettingFile.setFile(mFileName); + QFile mFile(mSettingFile.absoluteFilePath()); + if (! mFile.exists() ) { err = Settings::Settings_Error::eError_SettingNotExists ; msg = errorMessage(err, mSettingFile.fileName ()) ; goto lOut; } + if (! mFile.open(QIODevice::ReadOnly | QIODevice::Text) ) { err = Settings::Settings_Error::eError_Read ; msg = errorMessage(err, Storage::Settings_Path()) ; goto lOut; } - Detail detail; - detail.content = file.readAll().trimmed(); - if (detail.content.isEmpty()) { - //TODO Do not error out for now, the list of the config files which can be empty or not needs to be defined. - // err = Settings::Settings_Error::eError_Empty; - LOG_APPED_PO(errorMessage(Settings::Settings_Error::eError_Empty).arg(mSettingFile.fileName())); - continue; - } + mDetail.content = mFile.readAll().trimmed(); + if (mDetail.content.isEmpty() ) { err = Settings::Settings_Error::eError_Empty ; msg = errorMessage(err, mSettingFile.fileName ()) ; goto lOut; } - detail.location = mSettingFile.absolutePath() + "/"; - detail.category = mCategory; + mDetail.location = mSettingFile.absolutePath() + "/"; + mDetail.category = mCategory; - if ( ! parse(detail) ) { - LOG_DEBUG( (QString("Configuration file '%1' failed to load").arg(mSettingFile.fileName())) ); - } - else { - LOG_DEBUG( (QString("Configuration file '%1' successfully loaded").arg(mSettingFile.fileName())) ); - } + if ( ! parse(mDetail) ) { err = Settings::Settings_Error::eError_Parse ; msg = errorMessage(err, mSettingFile.fileName ()) ; goto lOut; } + else { msg = errorMessage(err, mSettingFile.fileName ()) ; } + +lOut: + LOG_APPED_PO( msg ); + return err; +} + +/*! + * \brief Settings::readConfigurations + * \details Reads all the configuration files + * \return non-zero, error value on error, and zero on success. + */ +int Settings::readConfigurations() +{ + int err = Settings::Settings_Error::eError_None; + for ( quint8 i = 0; i <= _configurationsCount; i++ ) { + readCategory(static_cast(i)); } + return err; +} +/*! + * \brief Settings::readLocale + * \return + */ +int Settings::readLocale() +{ + int err = Settings_Error::eError_None; + err = readCategory(eConfigurationsLocale); return err; } @@ -194,47 +174,42 @@ * \details Writes the setting in the configuration files * \return */ -int Settings::saveSystem(const QString &vGroup, const QString &vKey, const QString &vValue) +int Settings::save(const QString &vGroup, const QString &vKey, const QString &vValue, Category_Enum vCategory) { // qDebug() << vCategory // << vGroup // << vKey // << vValue; - QString mCategory = Storage::Settings_Category_SettingsSystem; - QString mFileName = fileName(mCategory, ""); + + int err = Settings_Error::eError_None; + QString msg; + QString mCategory; + QString mPath; + QString mFileName; QString mContent; - int err = Settings_Error::eError_None; + + if ( ! isCategoryWritable(vCategory) ) { err = Settings_Error::eError_Not_Writable ; msg = errorMessage(err ); goto lOut; } + + mCategory = category(vCategory); + mFileName = fileName(vCategory); // -------------------------------------------------------------------------------------------------------------- //Note: the configuration files which can be saved, are like settings and should not have duplicate values. // as an example the Alarm volume can't have two separate duplicate entry in the settings. // -------------------------------------------------------------------------------------------------------------- _Settings.add(mCategory, vGroup, vKey, vValue, false); - QString mPath = QFileInfo(mFileName).absolutePath(); - if ( mPath.trimmed().isEmpty() ) { - err = Settings_Error::eError_PathEmpty; - LOG_DEBUG(errorMessage(err)); - return err; - } - - if ( ! FileHandler::makeFolder(mPath) ) { - err = Settings_Error::eError_MkDir; - LOG_DEBUG(errorMessage(err).arg(mPath)); - return err; - } - - for ( const auto &group : _Settings.groups(mCategory) ) { + mPath = QFileInfo(mFileName).absolutePath(); + if ( mPath.trimmed().isEmpty() ) { err = Settings_Error::eError_PathEmpty ; msg = errorMessage(err ); goto lOut; } + if ( ! FileHandler::makeFolder(mPath) ) { err = Settings_Error::eError_MkDir ; msg = errorMessage(err, mPath ); goto lOut; } + for ( const auto &group : _Settings.groups(mCategory) ) { mContent += QString("\n[%1]\n").arg(group); for ( const auto &key : _Settings.keys(mCategory, group) ) { mContent += QString("%1 = %2\n").arg(key).arg(_Settings.value(mCategory, group, key).toString()); } } + if ( ! FileHandler::write(mFileName,mContent, false) ) { err = Settings_Error::eError_Write ; msg = errorMessage(err, mFileName ); goto lOut; } - if ( ! FileHandler::write(mFileName,mContent, false) ) { - err = Settings_Error::eError_Write; - LOG_DEBUG(errorMessage(err).arg(mFileName)); - return err; - } - +lOut: + if ( err ) LOG_DEBUG( msg ); return err; } @@ -256,71 +231,47 @@ lstExclude << QFileInfo( src + Storage::Settings_Category_SettingsSystem ).absolutePath(); } - if ( ! Settings ::configurationsPOST(loc )) { err = Settings_Error::eError_Remove; msg = errorMessage(err ); LOG_DEBUG(msg); goto lOut; } - if ( ! FileHandler ::makeFolder ( dst )) { err = Settings_Error::eError_Copy ; msg = errorMessage(err ); LOG_DEBUG(msg); goto lOut; } + if ( ! Settings ::configurationsPOST(loc )) { err = Settings_Error::eError_Remove; msg = errorMessage(err ); goto lOut; } + if ( ! FileHandler ::makeFolder ( dst )) { err = Settings_Error::eError_Copy ; msg = errorMessage(err ); goto lOut; } for( QString dir : FileHandler::subFolders(src)) { QString sub = src + dir; if ( ! lstExclude.contains( sub ) ) { - if ( FileHandler ::copyFolder (sub, dst )) { err = Settings_Error::eError_MkDir ; msg = errorMessage(err, dir); LOG_DEBUG(msg); goto lOut; } + if ( FileHandler ::copyFolder (sub, dst )) { err = Settings_Error::eError_MkDir ; msg = errorMessage(err, dir); goto lOut; } } - if ( FileHandler ::removeFolder (sub )) { err = Settings_Error::eError_POST ; msg = errorMessage(err, dir); LOG_DEBUG(msg); goto lOut; } + if ( FileHandler ::removeFolder (sub )) { err = Settings_Error::eError_POST ; msg = errorMessage(err, dir); goto lOut; } } Storage::Settings_Secured(); lOut: + if ( err ) LOG_DEBUG ( msg ); if ( vMessage ) { *vMessage = msg; } return err; } /*! - * \brief Settings::loadTranslation + * \brief Settings::loadTranslation * \return */ -int Settings::loadTranslation() +int Settings::loadTranslation(QTranslator &vTranslator) { int err = Settings_Error::eError_None; - QString qmFile; + QString msg; + QString translationFile; bool ok = true; -// QString mCategory = Storage::Settings_Category_SettingsSystem; -// QString mLanguage = ""; -// mLanguage = _Settings.value(mCategory, "Localization", "Language").toString(); -// if ( mLanguage.isEmpty() ) { -// qDebug() << __FUNCTION__ << ":" << __LINE__ << "-------------Could Not Find the Language"; -// } -// else { -// qDebug() << __FUNCTION__ << ":" << __LINE__ << "-------------mLanguage:" << mLanguage; -// } -// QLocale::setDefault(QLocale::German); - - QString locale = _Settings.systemLocale(); - if( locale.isEmpty()) { - err = Settings_Error::eError_No_SettingsLocale; - qDebug() << __FUNCTION__ << ":" << __LINE__ << "-------------Could Not Find the Language"; - LOG_DEBUG(errorMessage(err)); -// goto lOut; - } + if( locale.isEmpty() ) { err = Settings_Error::eError_No_SettingsLocale ; msg = errorMessage(err ); goto lOut; } - qmFile = QString("%1%2%4.%3") - .arg(Storage::Settings_Path()) - .arg(Storage::Settings_Category_Translation) - .arg("qm") - .arg(_settingsLocalSeparator + QString("es")); // locale); + translationFile = fileName(eTranslation); + ok = vTranslator.load(translationFile); - qDebug() << __FUNCTION__ << ":" << __LINE__ << "-------------qmFile:" << qmFile; + if ( ! ok ) { err = Settings_Error::eError_TranslationNotExists ; msg = errorMessage(err, translationFile ); goto lOut; } + else { msg = errorMessage(err, translationFile ); } - ok = _translator.load(qmFile); - if ( ! ok) { - qDebug() << __FUNCTION__ << ":" << __LINE__ << "-------------FAILED"; - err = Settings_Error::eError_SettingNotExists; - goto lOut; - } + QCoreApplication::installTranslator(&vTranslator); - QApplication::installTranslator(&_translator); - lOut: - + LOG_APPED_PO( msg ); return err; }