diff options
Diffstat (limited to 'src/management/mail.cpp')
-rw-r--r-- | src/management/mail.cpp | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/src/management/mail.cpp b/src/management/mail.cpp index 5c3c276..738c150 100644 --- a/src/management/mail.cpp +++ b/src/management/mail.cpp @@ -4,12 +4,19 @@ namespace smtp::manage { + // + //Constructors + // Mail::Mail( file::Mail const& file_reader ) : mFileReader( file_reader ) { mMails = mFileReader.Read(); } + + // + //Public methods + // MailsSet Mail::GetMailToSend() const { return mMails; @@ -17,13 +24,10 @@ namespace smtp::manage bool Mail::AddMailsToSend( MailsSet const& mails_to_add ) { - auto merged_mails = GetMergedMails( mails_to_add ); + auto merged_mails = GetMergedMails( mails_to_add ); auto result = mFileReader.Write( merged_mails ); - if( result ) - { - mMails = merged_mails; - } + mMails = mFileReader.Read(); return result; } @@ -32,6 +36,7 @@ namespace smtp::manage auto mails_to_delete = GetItersectionMails( mail_to_send ); auto result_set_after_delete = GetMailsAfterDelete( mails_to_delete ); auto result_of_delete = mFileReader.Write( result_set_after_delete ); + if( result_of_delete ) { mMails = result_set_after_delete; @@ -39,10 +44,19 @@ namespace smtp::manage return result_of_delete; } + // + //Private methods + // MailsSet Mail::GetMergedMails( MailsSet const& mails_to_add ) { - auto result = mails_to_add; - result.merge( mMails ); + MailsSet result; + auto sorted_mail_to_add = mails_to_add; + sorted_mail_to_add.sort(); + mMails.sort(); + + std::set_union( mMails.cbegin(), mMails.cend(), + sorted_mail_to_add.cbegin(), sorted_mail_to_add.cend(), + std::back_inserter( result )); return result; } |