summaryrefslogtreecommitdiff
path: root/src/management/mail.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/management/mail.cpp')
-rw-r--r--src/management/mail.cpp28
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;
}