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 outputLayoutItem = containerLayout->itemAt(1);
|
||||
auto outputContainer = (Wt::WContainerWidget*)outputLayoutItem->widget();
|
||||
outputContainer->clear();
|
||||
outputContainer->setOverflow(Wt::Overflow::Auto);
|
||||
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) {
|
||||
std::string writer = getChatLineWriter(line, conversation);
|
||||
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") {
|
||||
item = createTextElement(writer, (std::string)line["string"], outputContainer);
|
||||
item = createTextElement(writer, (std::string)line["string"], outputContainer, id);
|
||||
} else if ((std::string)line["type"] == "image") {
|
||||
item = createImageElement(line, writer, outputContainer);
|
||||
item = createImageElement(line, writer, outputContainer, id);
|
||||
} else {
|
||||
item = new Wt::WText("");
|
||||
}
|
||||
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);
|
||||
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) {
|
||||
@@ -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"];
|
||||
auto imageLineItem = outputContainer->addNew<Wt::WContainerWidget>();
|
||||
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()));
|
||||
image->setImageLink(Wt::WLink(imageResource));
|
||||
image->resize(Wt::WLength((int)imageDescription["width"], Wt::LengthUnit::Pixel), Wt::WLength((int)imageDescription["height"], Wt::LengthUnit::Pixel));
|
||||
imageLineItem->setAttributeValue("dummy", id);
|
||||
return imageLineItem;
|
||||
}
|
||||
|
||||
|
||||
@@ -182,8 +182,8 @@ private:
|
||||
std::string buildApiUrl(const std::string &userIP);
|
||||
std::string getUserIP();
|
||||
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 *createTextElement(const std::string &writer, const std::string &text, 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, std::string id);
|
||||
void createImprintContainer(Wt::WVBoxLayout *containerLayout);
|
||||
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);
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include <Wt/WAny.h>
|
||||
#include <Wt/Json/Array.h>
|
||||
#include <Wt/Json/Serializer.h>
|
||||
#include <Wt/Auth/HashFunction.h>
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <vector>
|
||||
@@ -643,12 +644,22 @@ Broadcast::Message::Message(std::string fromSessionId_, Wt::WString message_):
|
||||
fromSessionId(fromSessionId_),
|
||||
sendType("text"),
|
||||
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();
|
||||
}
|
||||
|
||||
Broadcast::Message::Message(std::string fromSessionId_, std::shared_ptr<Magick::Image> image_):
|
||||
fromSessionId(fromSessionId_),
|
||||
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();
|
||||
Magick::Blob imageBlob;
|
||||
image_->write(&imageBlob);
|
||||
@@ -665,6 +676,7 @@ Wt::Json::Object Broadcast::Message::json() {
|
||||
json["type"] = Wt::Json::Value(sendType);
|
||||
json["string"] = Wt::Json::Value(message);
|
||||
json["image"] = Wt::Json::Value(image);
|
||||
json["id"] = Wt::Json::Value(messageId);
|
||||
return json;
|
||||
}
|
||||
|
||||
|
||||
@@ -55,6 +55,7 @@ public:
|
||||
std::string sendType;
|
||||
Wt::WDateTime sendTime;
|
||||
Wt::WString message;
|
||||
Wt::WString messageId;
|
||||
Wt::Json::Object image;
|
||||
Wt::Json::Object json();
|
||||
void setNewSesionId(std::string oldSessionId, std::string newSessionId);
|
||||
|
||||
Reference in New Issue
Block a user