#include "../include/Message.hpp" #include "../include/StringView.hpp" using namespace std; namespace dchat { Message::Message(User *_user) : user(_user) { } Message::~Message() { for(MessagePart *messagePart : messageParts) { delete messagePart; } } void Message::addText(const string &text, bool newLine) { messageParts.push_back(new MessagePartText(text, newLine)); } void Message::addEmoji(const string &url, bool newLine) { messageParts.push_back(new MessagePartEmoji(url, newLine)); } vector& Message::getParts() { return messageParts; } StringView getNextNewLine(const StringView &str) { for(usize i = 0; i < str.size; ++i) { if(str[i] == '\n') return StringView(str.data, i); } return StringView(); } Message* Message::buildFromString(User *user, const std::string &str) { Message *message = new Message(user); usize strOffset = 0; while(strOffset < str.size()) { usize foundIndex = str.find('\n', strOffset); usize lineEnd = foundIndex; if(foundIndex == string::npos) lineEnd = str.size(); message->addText(str.substr(strOffset, lineEnd - strOffset), foundIndex != string::npos); if(foundIndex == string::npos) break; else strOffset = lineEnd + 1; } return message; } }