Enhanced output

This commit is contained in:
Torsten Schulz
2024-02-18 12:34:51 +01:00
parent 5a7ddeacf7
commit 48d78d39a8
4 changed files with 29 additions and 8 deletions

View File

@@ -555,7 +555,6 @@ void App::updateOutputContainer(Wt::Json::Object conversation) {
auto containerLayout = (Wt::WVBoxLayout*)contentContainer_->layout(); auto containerLayout = (Wt::WVBoxLayout*)contentContainer_->layout();
auto outputLayoutItem = containerLayout->itemAt(1); auto outputLayoutItem = containerLayout->itemAt(1);
auto outputContainer = (Wt::WContainerWidget*)outputLayoutItem->widget(); auto outputContainer = (Wt::WContainerWidget*)outputLayoutItem->widget();
outputContainer->clear();
outputContainer->setOverflow(Wt::Overflow::Auto); outputContainer->setOverflow(Wt::Overflow::Auto);
renderChatLines(conversation, outputContainer); renderChatLines(conversation, outputContainer);
} }
@@ -574,20 +573,28 @@ void App::renderChatLines(Wt::Json::Object conversation, Wt::WContainerWidget* o
void App::renderChatLine(Wt::Json::Object &line, Wt::Json::Object conversation, Wt::WContainerWidget* outputContainer) { void App::renderChatLine(Wt::Json::Object &line, Wt::Json::Object conversation, Wt::WContainerWidget* outputContainer) {
std::string writer = getChatLineWriter(line, conversation); std::string writer = getChatLineWriter(line, conversation);
Wt::WWebWidget* item; Wt::WWebWidget* item;
auto id = (std::string)line["id"];
for (const auto widget: outputContainer->children()) {
if (widget->attributeValue("dummy") == id) {
return;
}
}
if ((std::string)line["type"] == "text") { if ((std::string)line["type"] == "text") {
item = createTextElement(writer, (std::string)line["string"], outputContainer); item = createTextElement(writer, (std::string)line["string"], outputContainer, id);
} else if ((std::string)line["type"] == "image") { } else if ((std::string)line["type"] == "image") {
item = createImageElement(line, writer, outputContainer); item = createImageElement(line, writer, outputContainer, id);
} else { } else {
item = new Wt::WText(""); item = new Wt::WText("");
} }
item->setInline(false); item->setInline(false);
} }
Wt::WWebWidget* App::createTextElement(const std::string& writer, const std::string& text, Wt::WContainerWidget* outputContainer) { Wt::WWebWidget* App::createTextElement(const std::string& writer, const std::string& text, Wt::WContainerWidget* outputContainer, std::string id) {
std::string outputText = replaceSmileys(text); std::string outputText = replaceSmileys(text);
Wt::WString output = Wt::WString("<b>{1}</b>: {2}").arg(writer).arg(outputText); Wt::WString output = Wt::WString("<b>{1}</b>: {2}").arg(writer).arg(outputText);
return outputContainer->addNew<Wt::WText>(output); auto line = outputContainer->addNew<Wt::WText>(output);
line->setAttributeValue("dummy", id);
return line;
} }
void App::createImprintContainer(Wt::WVBoxLayout *containerLayout) { void App::createImprintContainer(Wt::WVBoxLayout *containerLayout) {
@@ -637,7 +644,7 @@ void App::createImprintContainer(Wt::WVBoxLayout *containerLayout) {
}); });
} }
Wt::WWebWidget* App::createImageElement(Wt::Json::Object& line, const std::string& writer, Wt::WContainerWidget* outputContainer) { Wt::WWebWidget* App::createImageElement(Wt::Json::Object& line, const std::string& writer, Wt::WContainerWidget* outputContainer, std::string id) {
Wt::Json::Object imageDescription = line["image"]; Wt::Json::Object imageDescription = line["image"];
auto imageLineItem = outputContainer->addNew<Wt::WContainerWidget>(); auto imageLineItem = outputContainer->addNew<Wt::WContainerWidget>();
auto outputText = Wt::WString("<b>{1}:</b>&nbsp;").arg(writer); auto outputText = Wt::WString("<b>{1}:</b>&nbsp;").arg(writer);
@@ -649,6 +656,7 @@ Wt::WWebWidget* App::createImageElement(Wt::Json::Object& line, const std::strin
std::vector<unsigned char>(imageBlob.begin(), imageBlob.end())); std::vector<unsigned char>(imageBlob.begin(), imageBlob.end()));
image->setImageLink(Wt::WLink(imageResource)); image->setImageLink(Wt::WLink(imageResource));
image->resize(Wt::WLength((int)imageDescription["width"], Wt::LengthUnit::Pixel), Wt::WLength((int)imageDescription["height"], Wt::LengthUnit::Pixel)); image->resize(Wt::WLength((int)imageDescription["width"], Wt::LengthUnit::Pixel), Wt::WLength((int)imageDescription["height"], Wt::LengthUnit::Pixel));
imageLineItem->setAttributeValue("dummy", id);
return imageLineItem; return imageLineItem;
} }

View File

@@ -182,8 +182,8 @@ private:
std::string buildApiUrl(const std::string &userIP); std::string buildApiUrl(const std::string &userIP);
std::string getUserIP(); std::string getUserIP();
Magick::Image scaleImage(const Magick::Image &originalImage, int maxSize) const; Magick::Image scaleImage(const Magick::Image &originalImage, int maxSize) const;
Wt::WWebWidget *createImageElement(Wt::Json::Object &line, const std::string &writer, Wt::WContainerWidget *outputContainer); Wt::WWebWidget *createImageElement(Wt::Json::Object &line, const std::string &writer, Wt::WContainerWidget *outputContainer, std::string id);
Wt::WWebWidget *createTextElement(const std::string &writer, const std::string &text, Wt::WContainerWidget *outputContainer); Wt::WWebWidget *createTextElement(const std::string &writer, const std::string &text, Wt::WContainerWidget *outputContainer, std::string id);
void createImprintContainer(Wt::WVBoxLayout *containerLayout); void createImprintContainer(Wt::WVBoxLayout *containerLayout);
Wt::WContainerWidget *setupSearchButton(Wt::WVBoxLayout *contentLayout); Wt::WContainerWidget *setupSearchButton(Wt::WVBoxLayout *contentLayout);
void restoreSearchFields(Wt::WContainerWidget *searchResultContainer, Wt::WLineEdit *userNameEdit, Wt::WSpinBox *minAgeEdit, Wt::WSpinBox *maxAgeEdit, Wt::WContainerWidget *countryDropDownContainer, Wt::WContainerWidget *gendersDropDownContainer, Wt::WPushButton *countryOpenList, Wt::WPushButton *gendersOpenList); void restoreSearchFields(Wt::WContainerWidget *searchResultContainer, Wt::WLineEdit *userNameEdit, Wt::WSpinBox *minAgeEdit, Wt::WSpinBox *maxAgeEdit, Wt::WContainerWidget *countryDropDownContainer, Wt::WContainerWidget *gendersDropDownContainer, Wt::WPushButton *countryOpenList, Wt::WPushButton *gendersOpenList);

View File

@@ -3,6 +3,7 @@
#include <Wt/WAny.h> #include <Wt/WAny.h>
#include <Wt/Json/Array.h> #include <Wt/Json/Array.h>
#include <Wt/Json/Serializer.h> #include <Wt/Json/Serializer.h>
#include <Wt/Auth/HashFunction.h>
#include <iostream> #include <iostream>
#include <sstream> #include <sstream>
#include <vector> #include <vector>
@@ -643,12 +644,22 @@ Broadcast::Message::Message(std::string fromSessionId_, Wt::WString message_):
fromSessionId(fromSessionId_), fromSessionId(fromSessionId_),
sendType("text"), sendType("text"),
message(message_) { message(message_) {
auto timestamp = std::time(nullptr);
auto combinedString = std::to_string(timestamp) + fromSessionId_;
Wt::Auth::SHA1HashFunction hashObj;
auto hash = hashObj.compute(combinedString, "salt");
messageId = Wt::WString(hash);
sendTime = Wt::WDateTime::currentDateTime(); sendTime = Wt::WDateTime::currentDateTime();
} }
Broadcast::Message::Message(std::string fromSessionId_, std::shared_ptr<Magick::Image> image_): Broadcast::Message::Message(std::string fromSessionId_, std::shared_ptr<Magick::Image> image_):
fromSessionId(fromSessionId_), fromSessionId(fromSessionId_),
sendType("image") { sendType("image") {
auto timestamp = std::time(nullptr);
auto combinedString = std::to_string(timestamp) + fromSessionId_;
Wt::Auth::SHA1HashFunction hashObj;
auto hash = hashObj.compute(combinedString, "salt");
messageId = Wt::WString(hash);
sendTime = Wt::WDateTime::currentDateTime(); sendTime = Wt::WDateTime::currentDateTime();
Magick::Blob imageBlob; Magick::Blob imageBlob;
image_->write(&imageBlob); image_->write(&imageBlob);
@@ -665,6 +676,7 @@ Wt::Json::Object Broadcast::Message::json() {
json["type"] = Wt::Json::Value(sendType); json["type"] = Wt::Json::Value(sendType);
json["string"] = Wt::Json::Value(message); json["string"] = Wt::Json::Value(message);
json["image"] = Wt::Json::Value(image); json["image"] = Wt::Json::Value(image);
json["id"] = Wt::Json::Value(messageId);
return json; return json;
} }

View File

@@ -55,6 +55,7 @@ public:
std::string sendType; std::string sendType;
Wt::WDateTime sendTime; Wt::WDateTime sendTime;
Wt::WString message; Wt::WString message;
Wt::WString messageId;
Wt::Json::Object image; Wt::Json::Object image;
Wt::Json::Object json(); Wt::Json::Object json();
void setNewSesionId(std::string oldSessionId, std::string newSessionId); void setNewSesionId(std::string oldSessionId, std::string newSessionId);