Added some usefull informations for users
Fixed bug with auto logout
This commit is contained in:
54
src/app.cpp
54
src/app.cpp
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user