diff options
author | eportnov <eportnov@ibs.ru> | 2022-09-13 15:03:29 +0300 |
---|---|---|
committer | eportnov <eportnov@ibs.ru> | 2022-09-13 15:03:29 +0300 |
commit | bab12f829beb53feb6f48db7a0ef33574740989c (patch) | |
tree | b99540f810072b746d033d6cd8d06aabb75afcad /src/managment/mail.cpp | |
parent | a58088ec7a45bb86b155a8ef9514b35b0ba8d1c9 (diff) | |
parent | e8aeea36e6b48e18d27f9d7857cd29524cc8aa1f (diff) | |
download | obmc-sila-smtp-bab12f829beb53feb6f48db7a0ef33574740989c.tar.xz |
Merge branch 'bugfix/write_file'
Diffstat (limited to 'src/managment/mail.cpp')
-rw-r--r-- | src/managment/mail.cpp | 57 |
1 files changed, 52 insertions, 5 deletions
diff --git a/src/managment/mail.cpp b/src/managment/mail.cpp index e43a68c..70c5375 100644 --- a/src/managment/mail.cpp +++ b/src/managment/mail.cpp @@ -1,25 +1,72 @@ +#include <algorithm> + #include "mail.hpp" namespace smtp::manage { - Mail::Mail( file::Mail const& file_reader) + Mail::Mail( file::Mail const& file_reader ) + : mFileReader( file_reader ) { - mMails = file_reader.Read(); + mMails = mFileReader.Read(); + mMails.sort(); } - std::list<std::string> Mail::GetMailToSend() const + MailsSet Mail::GetMailToSend() const { return mMails; } - bool Mail::AddMailToSend() + bool Mail::AddMailsToSend( MailsSet const& mails_to_add ) + { + auto merged_mails = GetMergedMails( mails_to_add ); + + auto result = mFileReader.Write( merged_mails ); + if( result ) + { + mMails = merged_mails; + } + return result; + } + + bool Mail::DeleteMailToSend( MailsSet const& mail_to_send ) { + auto mails_to_delete = GetItersectionMails( mail_to_send ); + auto result_set_after_delete = GetSetAfterDelete( mails_to_delete ); + auto result_of_delete = mFileReader.Write( result_set_after_delete ); + if(result_of_delete) + { + mMails = result_set_after_delete; + } + return result_of_delete; + } + MailsSet Mail::GetMergedMails( MailsSet const& mails_to_add ) + { + auto result = mails_to_add; + result.merge( mMails ); + return result; } - bool Mail::DeleteMailToSend( std::string const& mail_to_send) + MailsSet Mail::GetItersectionMails( MailsSet const& mail_to_send ) const { + MailsSet result; + auto sorted_mail_to_send = mail_to_send; + sorted_mail_to_send.sort(); + std::set_intersection( mMails.cbegin(), mMails.cend(), + sorted_mail_to_send.cbegin(), sorted_mail_to_send.cend(), + std::back_inserter( result )); + return result; + } + + MailsSet Mail::GetSetAfterDelete( MailsSet const& result_set_after_delete) + { + auto result = mMails; + for(const auto& element_to_delete : result_set_after_delete) + { + result.remove( element_to_delete ); + } + return result; } } |