changed to singular recipient

This commit is contained in:
Benedikt Galbavy 2023-11-17 13:46:44 +01:00
parent 8ac543e61d
commit a2b17e6dd6
5 changed files with 9 additions and 17 deletions

View File

@ -41,7 +41,7 @@ json mail::mailToJson()
jsonfile["id"] = this->id; jsonfile["id"] = this->id;
jsonfile["timestamp"] = this->timestamp; jsonfile["timestamp"] = this->timestamp;
jsonfile["sender"] = this->sender; jsonfile["sender"] = this->sender;
jsonfile["recipients"] = this->recipients; jsonfile["recipients"] = this->recipient;
jsonfile["subject"] = this->subject; jsonfile["subject"] = this->subject;
jsonfile["filename"] = this->filename; jsonfile["filename"] = this->filename;
jsonfile["deleted"] = this->deleted; jsonfile["deleted"] = this->deleted;

View File

@ -18,7 +18,7 @@ struct mail {
u_int id; u_int id;
int64_t timestamp; int64_t timestamp;
std::string sender; std::string sender;
std::vector<std::string> recipients; std::string recipient;
std::string subject; std::string subject;
bool deleted; bool deleted;

View File

@ -389,7 +389,7 @@ std::string cmdSEND(std::vector<std::string>& received)
user_handler::getInstance().getOrCreateUser(received.at(1))->sendMail( user_handler::getInstance().getOrCreateUser(received.at(1))->sendMail(
new struct mail(saveToFile(user_handler::getInstance().getSpoolDir()/"messages", received.at(4)), received.at(3)), new struct mail(saveToFile(user_handler::getInstance().getSpoolDir()/"messages", received.at(4)), received.at(3)),
{received.at(2)} received.at(2)
); );
return "OK\n"; // TODO: error handling return "OK\n"; // TODO: error handling

View File

@ -26,7 +26,7 @@ user::user(fs::path user_data_json) : m()
); );
mail->id = mail_json["id"]; mail->id = mail_json["id"];
mail->sender = mail_json["sender"]; mail->sender = mail_json["sender"];
mail->recipients = mail_json["recipients"].get<std::vector<std::string>>(); mail->recipient = mail_json["recipient"];
mail->deleted = mail_json["deleted"]; mail->deleted = mail_json["deleted"];
this->inbox.insert(mail); this->inbox.insert(mail);
@ -84,33 +84,25 @@ void user::addMail(mail* mail)
this->user_data["mails"]["received"][std::to_string(mail->id)] = mail->mailToJson(); this->user_data["mails"]["received"][std::to_string(mail->id)] = mail->mailToJson();
} }
void user::sendMail(mail* mail, std::vector<std::string> recipients) void user::sendMail(mail* mail, std::string recipient)
{ {
std::lock_guard<std::mutex> guard(this->m); std::lock_guard<std::mutex> guard(this->m);
std::vector<user*> users;
for ( auto& name : recipients) {
// TODO: error handling for non existing user
users.push_back(user_handler::getInstance().getOrCreateUser(name));
}
mail->sender = this->name; mail->sender = this->name;
mail->recipients = recipients; mail->recipient = recipient;
mail->id = this->sent.size(); mail->id = this->sent.size();
this->sent.insert(mail); this->sent.insert(mail);
this->user_data["mails"]["sent"][std::to_string(mail->id)] = mail->mailToJson(); this->user_data["mails"]["sent"][std::to_string(mail->id)] = mail->mailToJson();
for ( auto& user : users ) { user_handler::getInstance().getOrCreateUser(recipient)->addMail(mail);
user->addMail(mail);
}
} }
mail* user::getMail(u_int id) mail* user::getMail(u_int id)
{ {
maillist::iterator it = std::find_if(this->inbox.begin(), this->inbox.end(), [id](auto& i){ return (*i)(id); }); maillist::iterator it = std::find_if(this->inbox.begin(), this->inbox.end(), [id](auto& i){ return (*i)(id); });
return it == this->inbox.end() ? nullptr : (*it)->filename.empty() ? nullptr : *it; return it == this->inbox.end() ? nullptr : (*it)->filename.empty() ? nullptr : *it; // TODO: potentially not thread safe, research if iterator points to
} }
bool user::delMail(u_int id) bool user::delMail(u_int id)

View File

@ -22,7 +22,7 @@ public:
~user(); ~user();
void addMail(mail* mail); void addMail(mail* mail);
void sendMail(mail* mail, std::vector<std::string> recipients); void sendMail(mail* mail, std::string recipient);
mail* getMail(u_int id); mail* getMail(u_int id);
bool delMail(u_int id); bool delMail(u_int id);