Enhanced output
This commit is contained in:
20
src/app.cpp
20
src/app.cpp
@@ -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> ").arg(writer);
|
auto outputText = Wt::WString("<b>{1}:</b> ").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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user