#include #include "settings.hpp" #include "management/logger.hpp" namespace smtp::file { // //Constructors // Settings::Settings( std::string const& path_file, checker::RegistratorSettings const& registrator_errors ) : mPathFile( path_file ) , mRegistratorErrors( registrator_errors ) { } // //Public methods // manage::SettingsFields Settings::Read() const { auto parsed_store = GetParsedStore(); return converter::Full{}.Convert( parsed_store ); } bool Settings::Write( manage::SettingsFields const& settings_fields ) const { auto parsed_data = converter::Full{}.Convert( settings_fields ); return mRegistratorErrors.Check( parsed_data ) && SetParsedData( parsed_data ); } // //Private methods // manage::SettingsFileDataType Settings::GetParsedStore() const { std::ifstream settings_file{ mPathFile, std::fstream::in }; if ( !settings_file.is_open() ) { manage::Logger::LogError( "Unable to open file to read " + mPathFile ); return {}; } auto result = GetDataFromFile( settings_file ); settings_file.close(); return mRegistratorErrors.Check(result) ? result : manage::SettingsFileDataType{}; } manage::SettingsFileDataType Settings::GetDataFromFile( std::ifstream& settings_file ) const { std::string line{}; manage::SettingsFileDataType result; while ( std::getline( settings_file, line ) ) { auto parsed_data = parser::Settings{}.Parse( line ); result.insert( parsed_data ); } return result; } bool Settings::SetParsedData( manage::SettingsFileDataType const& parsed_data ) const { std::ofstream settings_file{ mPathFile, std::fstream::out | std::fstream::trunc }; if ( !settings_file.is_open() ) { manage::Logger::LogError( "Unable to open file to write " + mPathFile ); return false; } for( const auto& data : parsed_data ) { auto line = BuildParam( data ); settings_file << line << "\n"; } settings_file.close(); return true; } std::string Settings::BuildParam( std::pair const& data) const { std::string result; result += data.first; result += '='; result += data.second; return result; } }