SettingsDialog: Add Identified column to session table

This commit is contained in:
tt2468 2021-04-30 11:24:09 -07:00
parent 997dc40d6c
commit 04f7b33755
5 changed files with 38 additions and 10 deletions

View File

@ -12,6 +12,7 @@ OBSWebSocket.Settings.DebugEnableHoverText="Changing this requires the WebSocket
OBSWebSocket.SessionTable.RemoteAddressColumnTitle="Remote Address" OBSWebSocket.SessionTable.RemoteAddressColumnTitle="Remote Address"
OBSWebSocket.SessionTable.SessionDurationColumnTitle="Session Duration" OBSWebSocket.SessionTable.SessionDurationColumnTitle="Session Duration"
OBSWebSocket.SessionTable.MessagesInOutColumnTitle="Messages In/Out" OBSWebSocket.SessionTable.MessagesInOutColumnTitle="Messages In/Out"
OBSWebSocket.SessionTable.IdentifiedTitle="Identified"
OBSWebSocket.SessionTable.KickButtonColumnTitle="Kick?" OBSWebSocket.SessionTable.KickButtonColumnTitle="Kick?"
OBSWebSocket.SessionTable.KickButtonText="Kick" OBSWebSocket.SessionTable.KickButtonText="Kick"

View File

@ -180,8 +180,9 @@ std::vector<WebSocketServer::WebSocketSessionState> WebSocketServer::GetWebSocke
uint64_t incomingMessages = session->IncomingMessages(); uint64_t incomingMessages = session->IncomingMessages();
uint64_t outgoingMessages = session->OutgoingMessages(); uint64_t outgoingMessages = session->OutgoingMessages();
std::string remoteAddress = session->RemoteAddress(); std::string remoteAddress = session->RemoteAddress();
bool isIdentified = session->IsIdentified();
webSocketSessions.emplace_back(WebSocketSessionState{hdl, remoteAddress, connectedAt, incomingMessages, outgoingMessages}); webSocketSessions.emplace_back(WebSocketSessionState{hdl, remoteAddress, connectedAt, incomingMessages, outgoingMessages, isIdentified});
} }
lock.unlock(); lock.unlock();
@ -276,8 +277,8 @@ void WebSocketServer::onOpen(websocketpp::connection_hdl hdl)
helloMessage["messageType"] = "Hello"; helloMessage["messageType"] = "Hello";
helloMessage["obsWebSocketVersion"] = OBS_WEBSOCKET_VERSION; helloMessage["obsWebSocketVersion"] = OBS_WEBSOCKET_VERSION;
helloMessage["rpcVersion"] = OBS_WEBSOCKET_RPC_VERSION; helloMessage["rpcVersion"] = OBS_WEBSOCKET_RPC_VERSION;
helloMessage["availableRequests"] = WebSocketProtocol::GetRequestList(); //helloMessage["availableRequests"] = WebSocketProtocol::GetRequestList();
helloMessage["availableEvents"] = WebSocketProtocol::GetEventList(); //helloMessage["availableEvents"] = WebSocketProtocol::GetEventList();
if (AuthenticationRequired) { if (AuthenticationRequired) {
std::string sessionChallenge = Utils::Crypto::GenerateSalt(); std::string sessionChallenge = Utils::Crypto::GenerateSalt();
session->SetChallenge(sessionChallenge); session->SetChallenge(sessionChallenge);
@ -323,6 +324,7 @@ void WebSocketServer::onClose(websocketpp::connection_hdl hdl)
state.connectedAt = connectedAt; state.connectedAt = connectedAt;
state.incomingMessages = incomingMessages; state.incomingMessages = incomingMessages;
state.outgoingMessages = outgoingMessages; state.outgoingMessages = outgoingMessages;
state.isIdentified = isIdentified;
// Emit signals // Emit signals
emit ClientDisconnected(state, conn->get_local_close_code()); emit ClientDisconnected(state, conn->get_local_close_code());

View File

@ -58,6 +58,7 @@ class WebSocketServer : QObject
uint64_t connectedAt; uint64_t connectedAt;
uint64_t incomingMessages; uint64_t incomingMessages;
uint64_t outgoingMessages; uint64_t outgoingMessages;
bool isIdentified;
}; };
WebSocketServer(); WebSocketServer();

View File

@ -4,6 +4,8 @@
#include <QClipboard> #include <QClipboard>
#include <QDateTime> #include <QDateTime>
#include <QTime> #include <QTime>
#include <QPixmap>
#include <QIcon>
#include "SettingsDialog.h" #include "SettingsDialog.h"
#include "../obs-websocket.h" #include "../obs-websocket.h"
@ -18,7 +20,8 @@ SettingsDialog::SettingsDialog(QWidget* parent) :
sessionTableTimer(new QTimer) sessionTableTimer(new QTimer)
{ {
ui->setupUi(this); ui->setupUi(this);
ui->websocketSessionTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Fixed); ui->websocketSessionTable->horizontalHeader()->resizeSection(3, 100);
ui->websocketSessionTable->horizontalHeader()->resizeSection(4, 100);
connect(ui->buttonBox, &QDialogButtonBox::accepted, connect(ui->buttonBox, &QDialogButtonBox::accepted,
this, &SettingsDialog::FormAccepted); this, &SettingsDialog::FormAccepted);
@ -91,9 +94,16 @@ void SettingsDialog::FillSessionTable()
auto webSocketSessions = webSocketServer->GetWebSocketSessions(); auto webSocketSessions = webSocketServer->GetWebSocketSessions();
size_t rowCount = webSocketSessions.size(); size_t rowCount = webSocketSessions.size();
// Manually setting the pixmap size *might* break with highdpi. Not sure though
QIcon checkIcon = style()->standardIcon(QStyle::SP_DialogOkButton);
QPixmap checkIconPixmap = checkIcon.pixmap(QSize(25, 25));
QIcon crossIcon = style()->standardIcon(QStyle::SP_DialogCancelButton);
QPixmap crossIconPixmap = crossIcon.pixmap(QSize(25, 25));
obs_frontend_push_ui_translation(obs_module_get_string); obs_frontend_push_ui_translation(obs_module_get_string);
QString kickButtonText = QObject::tr("OBSWebSocket.SessionTable.KickButtonText"); QString kickButtonText = QObject::tr("OBSWebSocket.SessionTable.KickButtonText");
obs_frontend_pop_ui_translation(); obs_frontend_pop_ui_translation();
ui->websocketSessionTable->setRowCount(rowCount); ui->websocketSessionTable->setRowCount(rowCount);
size_t i = 0; size_t i = 0;
for (auto session : webSocketSessions) { for (auto session : webSocketSessions) {
@ -107,6 +117,15 @@ void SettingsDialog::FillSessionTable()
QTableWidgetItem *statsItem = new QTableWidgetItem(QString("%1/%2").arg(session.incomingMessages).arg(session.outgoingMessages)); QTableWidgetItem *statsItem = new QTableWidgetItem(QString("%1/%2").arg(session.incomingMessages).arg(session.outgoingMessages));
ui->websocketSessionTable->setItem(i, 2, statsItem); ui->websocketSessionTable->setItem(i, 2, statsItem);
QLabel *identifiedLabel = new QLabel();
identifiedLabel->setAlignment(Qt::AlignCenter);
if (session.isIdentified) {
identifiedLabel->setPixmap(checkIconPixmap);
} else {
identifiedLabel->setPixmap(crossIconPixmap);
}
ui->websocketSessionTable->setCellWidget(i, 3, identifiedLabel);
QPushButton *invalidateButton = new QPushButton(kickButtonText, this); QPushButton *invalidateButton = new QPushButton(kickButtonText, this);
QWidget *invalidateButtonWidget = new QWidget(); QWidget *invalidateButtonWidget = new QWidget();
QHBoxLayout *invalidateButtonLayout = new QHBoxLayout(invalidateButtonWidget); QHBoxLayout *invalidateButtonLayout = new QHBoxLayout(invalidateButtonWidget);
@ -114,7 +133,7 @@ void SettingsDialog::FillSessionTable()
invalidateButtonLayout->setAlignment(Qt::AlignCenter); invalidateButtonLayout->setAlignment(Qt::AlignCenter);
invalidateButtonLayout->setContentsMargins(0, 0, 0, 0); invalidateButtonLayout->setContentsMargins(0, 0, 0, 0);
invalidateButtonWidget->setLayout(invalidateButtonLayout); invalidateButtonWidget->setLayout(invalidateButtonLayout);
ui->websocketSessionTable->setCellWidget(i, 3, invalidateButtonWidget); ui->websocketSessionTable->setCellWidget(i, 4, invalidateButtonWidget);
connect(invalidateButton, &QPushButton::clicked, [=]() { connect(invalidateButton, &QPushButton::clicked, [=]() {
webSocketServer->InvalidateSession(session.hdl); webSocketServer->InvalidateSession(session.hdl);
}); });

View File

@ -6,19 +6,19 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>600</width> <width>675</width>
<height>437</height> <height>437</height>
</rect> </rect>
</property> </property>
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>600</width> <width>675</width>
<height>437</height> <height>0</height>
</size> </size>
</property> </property>
<property name="maximumSize"> <property name="maximumSize">
<size> <size>
<width>600</width> <width>675</width>
<height>16777215</height> <height>16777215</height>
</size> </size>
</property> </property>
@ -156,7 +156,7 @@
<bool>false</bool> <bool>false</bool>
</property> </property>
<attribute name="horizontalHeaderMinimumSectionSize"> <attribute name="horizontalHeaderMinimumSectionSize">
<number>135</number> <number>100</number>
</attribute> </attribute>
<attribute name="horizontalHeaderDefaultSectionSize"> <attribute name="horizontalHeaderDefaultSectionSize">
<number>135</number> <number>135</number>
@ -182,6 +182,11 @@
<string>OBSWebSocket.SessionTable.MessagesInOutColumnTitle</string> <string>OBSWebSocket.SessionTable.MessagesInOutColumnTitle</string>
</property> </property>
</column> </column>
<column>
<property name="text">
<string>OBSWebSocket.SessionTable.IdentifiedTitle</string>
</property>
</column>
<column> <column>
<property name="text"> <property name="text">
<string>OBSWebSocket.SessionTable.KickButtonColumnTitle</string> <string>OBSWebSocket.SessionTable.KickButtonColumnTitle</string>