#include #include "mail.hpp" #include "logger/logger_set.hpp" namespace smtp::file { // //Constructors // Mail::Mail( std::string const& path_file, checker::RegistratorMails const& registrator_errors ) : mPathFile( path_file ) , mRegistratorErrors( registrator_errors ) { } // //Public methods // manage::MailsSet Mail::Read() const { static const std::string METHOD_NAME = "Read mails"; std::ifstream mail_file{ mPathFile, std::fstream::in }; if ( !mail_file.is_open() ) { logger::LoggerSet::GetInstance()->LogError( METHOD_NAME, "Unable to open file to read " + mPathFile ); return {}; } auto result = ReadFile( mail_file ); mail_file.close(); return result; } bool Mail::Write( manage::MailsSet const& data ) const { static const std::string METHOD_NAME = "Write mails"; std::ofstream mail_file{ mPathFile, std::fstream::out | std::fstream::trunc }; if ( !mail_file.is_open() ) { logger::LoggerSet::GetInstance()->LogError( METHOD_NAME, "Unable to open file to write " + mPathFile ); return false; } auto result = WriteFile( mail_file, data ); mail_file.close(); return result; } // //Private methods // manage::MailsSet Mail::ReadFile( std::ifstream& mail_file ) const { std::string line{}; manage::MailsSet result; while ( std::getline( mail_file, line ) ) { if( mRegistratorErrors.Check( line ) ) { result.push_back( line ); } } return result; } bool Mail::WriteFile( std::ofstream& mail_file, manage::MailsSet const& data ) const { bool result = true; for( const auto& mail : data ) { if( mRegistratorErrors.Check( mail ) ) { mail_file << mail << "\n"; } else { result = false; } } return result; } }