diff options
author | eportnov <eportnov@ibs.ru> | 2022-09-13 15:03:25 +0300 |
---|---|---|
committer | eportnov <eportnov@ibs.ru> | 2022-09-13 15:03:25 +0300 |
commit | e8aeea36e6b48e18d27f9d7857cd29524cc8aa1f (patch) | |
tree | b99540f810072b746d033d6cd8d06aabb75afcad /src/managment | |
parent | a58088ec7a45bb86b155a8ef9514b35b0ba8d1c9 (diff) | |
download | obmc-sila-smtp-e8aeea36e6b48e18d27f9d7857cd29524cc8aa1f.tar.xz |
add writing filesbugfix/write_file
Diffstat (limited to 'src/managment')
-rw-r--r-- | src/managment/builder/settings.cpp | 2 | ||||
-rw-r--r-- | src/managment/general.hpp | 21 | ||||
-rw-r--r-- | src/managment/mail.cpp | 57 | ||||
-rw-r--r-- | src/managment/mail.hpp | 17 | ||||
-rw-r--r-- | src/managment/settings.cpp | 5 | ||||
-rw-r--r-- | src/managment/settings.hpp | 7 |
6 files changed, 92 insertions, 17 deletions
diff --git a/src/managment/builder/settings.cpp b/src/managment/builder/settings.cpp index fa9fcea..bfa8fb2 100644 --- a/src/managment/builder/settings.cpp +++ b/src/managment/builder/settings.cpp @@ -12,7 +12,7 @@ namespace smtp::manage::builder file::Settings Settings::GetFileSettings() const { static const std::string PATH = {"/home/eportnov/work/openbmc/build/cp2-5422/workspace/sources/smtp/settings.txt"}; - return file::Settings{PATH, {},{}}; + return file::Settings{PATH}; } } diff --git a/src/managment/general.hpp b/src/managment/general.hpp new file mode 100644 index 0000000..ed1a789 --- /dev/null +++ b/src/managment/general.hpp @@ -0,0 +1,21 @@ +#pragma once + +#include <unordered_map> +#include <string> +#include <list> + +namespace smtp::manage +{ + using SettingsFileDataType = std::unordered_map<std::string, std::string>; + using MailsSet = std::list<std::string>; + + struct SettingsFields + { + bool is_need_auth; + bool is_need_ssl; + std::string username; + std::string password; + std::string host; + std::string port; + }; +} 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; } } diff --git a/src/managment/mail.hpp b/src/managment/mail.hpp index 5e14831..644a477 100644 --- a/src/managment/mail.hpp +++ b/src/managment/mail.hpp @@ -1,23 +1,28 @@ #pragma once -#include <list> +#include <set> #include <string> #include "file/mail.hpp" namespace smtp::manage { + class Mail { public: - explicit Mail( file::Mail const& file_reader); + explicit Mail( file::Mail const& file_reader ); ~Mail() = default; - std::list<std::string> GetMailToSend() const; - bool AddMailToSend(); - bool DeleteMailToSend( std::string const& mail_to_send ); + MailsSet GetMailToSend() const; + bool AddMailsToSend( MailsSet const& mails ); + bool DeleteMailToSend(MailsSet const&mail_to_send ); private: - std::list<std::string> mMails; + MailsSet GetMergedMails( MailsSet const& mails_to_add ); + MailsSet GetItersectionMails( MailsSet const& mail_to_send ) const; + MailsSet GetSetAfterDelete( MailsSet const& result_set_after_delete); + MailsSet mMails; + file::Mail mFileReader; }; } diff --git a/src/managment/settings.cpp b/src/managment/settings.cpp index 72396f8..1f597c2 100644 --- a/src/managment/settings.cpp +++ b/src/managment/settings.cpp @@ -3,13 +3,14 @@ namespace smtp::manage { Settings::Settings( file::Settings const& file_reader ) + : mFileReader( file_reader ) { mSettingsFields = file_reader.Read(); } - bool Settings::SetSettings( file::SettingsFields const& settings_fields ) + bool Settings::SetSettings( manage::SettingsFields const& settings_fields )const { - + return mFileReader.Write( settings_fields ); } bool Settings::IsNeedAuth() const noexcept diff --git a/src/managment/settings.hpp b/src/managment/settings.hpp index ff40dc6..ff78af6 100644 --- a/src/managment/settings.hpp +++ b/src/managment/settings.hpp @@ -3,7 +3,7 @@ #include <string> #include "file/settings.hpp" - +#include "managment/general.hpp" namespace smtp::manage { class Settings @@ -12,7 +12,7 @@ namespace smtp::manage explicit Settings( file::Settings const& file_reader ); ~Settings() = default; - bool SetSettings( file::SettingsFields const& settings_fields ); + bool SetSettings( manage::SettingsFields const& settings_fields ) const; bool IsNeedAuth() const noexcept; bool IsNeedSsl() const noexcept; @@ -22,6 +22,7 @@ namespace smtp::manage std::string GetHost() const; std::string GetPort() const; private: - file::SettingsFields mSettingsFields; + file::Settings mFileReader; + manage::SettingsFields mSettingsFields; }; } |