/*! * * Copyright (c) 2019-2020 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 Settings.cpp * \author (last) Behrouz NematiPour * \date (last) 16-Oct-2020 * \author (original) Behrouz NematiPour * \date (original) 17-Jul-2020 * */ // Qt #include #include #include // Project #include "StorageGlobals.h" #include "FileHandler.h" #include "MSettings.h" #include "Logger.h" // namespace using namespace Storage; #include "Settings.h" bool Settings::isValid(const QString &vSettingFile) { if (! QFileInfo::exists(vSettingFile)) { LOG_DEBUG("Setting file " + vSettingFile + " does not exist."); return false; } return true; } /*! * \brief Settings::doRead - reads all the configuration files in the home folder * \details */ int Settings::read() { QStringList fileFilter = QStringList() << QString("*.%1").arg(_settingsExt); QFileInfoList settingFiles = FileHandler::find (Storage::Settings_Path_Name, fileFilter); QStringList settingFolders = FileHandler::subFolders(Storage::Settings_Path_Name); if ( ! settingFolders.count() ) { LOG_DEBUG(QObject::tr("No setting folder in the %1").arg(Storage::Settings_Path_Name)); return 1; // TODO : Define an error enum when completed } for ( QString &settingFolder : settingFolders ) { QString folder = settingFolder.prepend(Storage::Settings_Path_Name); settingFiles += FileHandler::find(folder, fileFilter); } if ( ! settingFiles.count() ) { LOG_DEBUG(QObject::tr("No setting files in the %1").arg(Storage::Settings_Path_Name)); return 2; // TODO : Define an error enum when completed } QList details; for (const auto &settingFile: settingFiles) { if (! isValid(settingFile.absoluteFilePath())) continue; QFile file(settingFile.absoluteFilePath()); if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { Detail detail; detail.content = file.readAll().trimmed(); if (detail.content.isEmpty()) continue; detail.location = settingFile.absolutePath() + "/"; detail.category = QString(detail.location + settingFile.baseName()).remove(Storage::Settings_Path_Name); details += detail; } } for (const auto &detail : details) { QString group = ""; QStringList lines = detail.content.split('\n'); for (QString line : lines) { // ignore empty lines if ( line.trimmed().isEmpty() ) continue; // remove comments int commentPosition = line.indexOf('#'); if ( commentPosition == 0 ) continue; // comment line if ( commentPosition > 0 ) // inline comment line.truncate(commentPosition); if (line.contains("[") && line.contains("]")) { line.replace("[","").replace("]", ""); group = line.trimmed(); } else { if ( group.isEmpty() ) { continue; } else { line = line.trimmed(); if ( ! line.isEmpty() ) { QString key = ""; QString value = ""; if ( line.contains('=') ) { QStringList keyValue = line.split('='); key = keyValue[0].trimmed(); value = keyValue[1].trimmed(); } else { key = line; } _Settings.add(group, key, QVariant(value), detail.location, detail.category); // DEBUG: qDebug() << group << key << value << location << category; } } } // qDebug() << group << line; } } return 0; }