Added some usefull informations for users

Fixed bug with auto logout
This commit is contained in:
Torsten Schulz
2024-02-15 14:01:09 +01:00
parent 5c79b70501
commit f1488eeb59
5 changed files with 93 additions and 2 deletions

View File

@@ -36,6 +36,7 @@
#include <Wt/WSlider.h>
#include <Wt/WGridLayout.h>
#include <Wt/WCheckBox.h>
#include <Wt/WTimer.h>
App::App(const Wt::WEnvironment &env, Broadcast &server):
Wt::WApplication(env),
@@ -786,6 +787,8 @@ void App::createMenu() {
addSearchButton();
addInboxButton();
addHistoryButton();
addLoginTimeView();
addTimeoutView();
}
void App::addLeaveButton() {
@@ -833,6 +836,7 @@ void App::addInboxButton() {
}
void App::showSearchWindow() {
setActivity();
auto contentLayout = resetSearchFields();
auto userNameField = setupNameSearchField(contentLayout);
auto ageSearchFields = setupSearchFields(contentLayout);
@@ -975,6 +979,7 @@ void App::removeUserFromSearch(Wt::Json::Object) {
}
void App::requestHistory() {
setActivity();
server_.sendHistory(sessionId());
}
@@ -1000,6 +1005,51 @@ void App::showHistory(Wt::Json::Object broadcast) {
triggerUpdate();
}
void App::connectionTimedOut() {
showLogin();
triggerUpdate();
}
void App::addLoginTimeView() {
auto loggedinTimeWidget = menuContainer_->addNew<Wt::WText>();
loggedinTimeWidget->setStyleClass("menu-info-text");
auto loginTimer = root()->addChild(std::make_unique<Wt::WTimer>());
loginTimer->setInterval(std::chrono::seconds(1));
auto loggedInRefresh = [=, this]() {
auto currentLoginSeconds = currentlyLoggedInSeconds();
int hours = currentLoginSeconds / 3600;
int minutes = (currentLoginSeconds % 3600) / 60;
std::stringstream elapsedTimeStream;
elapsedTimeStream << std::setw(2) << std::setfill('0') << hours << ":"
<< std::setw(2) << std::setfill('0') << minutes << " h";
std::string elapsedTimeString = elapsedTimeStream.str();
loggedinTimeWidget->setText(Wt::WString("In chat for {1}").arg(elapsedTimeString));
};
loginTimer->timeout().connect(loggedInRefresh);
loggedInRefresh();
loginTimer->start();
}
void App::addTimeoutView() {
auto timeoutRemainingWidget = menuContainer_->addNew<Wt::WText>();
timeoutRemainingWidget->setStyleClass("menu-info-text");
auto timeoutRemainingTimer = root()->addChild(std::make_unique<Wt::WTimer>());
timeoutRemainingTimer->setInterval(std::chrono::milliseconds(500));
auto timeoutRemainingRefresh = [=, this]() {
auto remainingLoginSeconds = remainingSecondsToTimeout();
int minutes = remainingLoginSeconds / 60;
int seconds = (remainingLoginSeconds % 60);
std::stringstream remainingTimeStream;
remainingTimeStream << std::setw(2) << std::setfill('0') << minutes << ":"
<< std::setw(2) << std::setfill('0') << seconds << " m";
std::string elapsedTimeString = remainingTimeStream.str();
timeoutRemainingWidget->setText(Wt::WString("Remaining time before logout is {1}").arg(elapsedTimeString));
};
timeoutRemainingTimer->timeout().connect(timeoutRemainingRefresh);
timeoutRemainingRefresh();
timeoutRemainingTimer->start();
}
void App::itemChanged(Wt::WCheckBox *item, Wt::WContainerWidget *dropDownContainer, Wt::WPushButton *openButton, std::unordered_set<std::string> *saveItems) {
saveItems->clear();
bool unselect = (item->text() == "All" && item->isChecked());
@@ -1093,6 +1143,7 @@ void App::showSearch(Wt::Json::Object broadcast) {
}
void App::openInbox() {
setActivity();
currentConversationWith_ = "";
contentContainer_->clear();
contentContainer_->addNew<Wt::WText>("<h2>Inbox</h2>");
@@ -1128,6 +1179,8 @@ void App::incomingBroadcast() {
removeUserFromSearch(broadcast);
} else if (broadcast["type"] == "history") {
showHistory(broadcast);
} else if (broadcast["type"] == "timedout") {
connectionTimedOut();
}
}
}
@@ -1136,6 +1189,7 @@ void App::startChat() {
createMenu();
contentContainer_->clear();
contentContainer_->addNew<Wt::WText>(Wt::WString::tr("introduction"), Wt::TextFormat::UnsafeXHTML);
setLoggedIn();
}
void App::createUserListContainer(Wt::WHBoxLayout *layout) {