From 9ef86f499753853c3751aee7da54d186837a5161 Mon Sep 17 00:00:00 2001 From: Janne Koschinski Date: Mon, 28 Aug 2017 00:52:32 +0200 Subject: [PATCH] Implement a basic UI for showing connected clients --- src/common/internalpeer.cpp | 9 ++ src/common/internalpeer.h | 3 + src/common/peer.h | 4 + src/common/remotepeer.cpp | 16 +++ src/common/remotepeer.h | 3 + src/common/signalproxy.cpp | 6 +- src/qtui/CMakeLists.txt | 2 + src/qtui/coreinfodlg.cpp | 16 +-- src/qtui/coresessionwidget.cpp | 33 ++++++ src/qtui/coresessionwidget.h | 25 ++++ src/qtui/ui/coreinfodlg.ui | 161 +++++++++++++++---------- src/qtui/ui/coresessionwidget.ui | 198 +++++++++++++++++++++++++++++++ 12 files changed, 403 insertions(+), 73 deletions(-) create mode 100644 src/qtui/coresessionwidget.cpp create mode 100644 src/qtui/coresessionwidget.h create mode 100644 src/qtui/ui/coresessionwidget.ui diff --git a/src/common/internalpeer.cpp b/src/common/internalpeer.cpp index 04031b8c..b724dc01 100644 --- a/src/common/internalpeer.cpp +++ b/src/common/internalpeer.cpp @@ -58,6 +58,15 @@ QString InternalPeer::description() const return tr("internal connection"); } +QString InternalPeer::address() const +{ + return tr("internal connection"); +} + +quint16 InternalPeer::port() const +{ + return 0; +} bool InternalPeer::isOpen() const { diff --git a/src/common/internalpeer.h b/src/common/internalpeer.h index d63332cf..e7f1ca13 100644 --- a/src/common/internalpeer.h +++ b/src/common/internalpeer.h @@ -45,6 +45,9 @@ public: Protocol::Type protocol() const { return Protocol::InternalProtocol; } QString description() const; + virtual QString address() const; + virtual quint16 port() const; + SignalProxy *signalProxy() const; void setSignalProxy(SignalProxy *proxy); diff --git a/src/common/peer.h b/src/common/peer.h index 8c17811d..32ee0b5f 100644 --- a/src/common/peer.h +++ b/src/common/peer.h @@ -50,8 +50,12 @@ public: virtual int lag() const = 0; + virtual QString address() const = 0; + virtual quint16 port() const = 0; + int _id = -1; + QDateTime _connectedSince; QString _buildDate; QString _clientVersion; diff --git a/src/common/remotepeer.cpp b/src/common/remotepeer.cpp index 01b3962d..60c8b63d 100644 --- a/src/common/remotepeer.cpp +++ b/src/common/remotepeer.cpp @@ -91,6 +91,22 @@ QString RemotePeer::description() const return QString(); } +QString RemotePeer::address() const +{ + if (socket()) + return socket()->peerAddress().toString(); + + return QString(); +} + +quint16 RemotePeer::port() const +{ + if (socket()) + return socket()->peerPort(); + + return 0; +} + ::SignalProxy *RemotePeer::signalProxy() const { diff --git a/src/common/remotepeer.h b/src/common/remotepeer.h index 0ce64937..400abdc1 100644 --- a/src/common/remotepeer.h +++ b/src/common/remotepeer.h @@ -49,6 +49,9 @@ public: virtual QString description() const; virtual quint16 enabledFeatures() const { return 0; } + virtual QString address() const; + virtual quint16 port() const; + bool isOpen() const; bool isSecure() const; bool isLocal() const; diff --git a/src/common/signalproxy.cpp b/src/common/signalproxy.cpp index 45f3b50a..68ac6fbc 100644 --- a/src/common/signalproxy.cpp +++ b/src/common/signalproxy.cpp @@ -290,6 +290,7 @@ bool SignalProxy::addPeer(Peer *peer) if (peer->_id < 0) { peer->_id = nextPeerId(); + peer->_connectedSince = QDateTime::currentDateTimeUtc(); } _peers.insert(peer); @@ -821,9 +822,10 @@ QVariantList SignalProxy::peerData() { for (auto peer : _peers) { QVariantMap data; data["id"] = peer->_id; - data["buildData"] = peer->_buildDate; data["clientVersion"] = peer->_clientVersion; - data["description"] = peer->description(); + data["clientVersionDate"] = peer->_buildDate; + data["remoteAddress"] = peer->address(); + data["connectedSince"] = peer->_connectedSince; data["secure"] = peer->isSecure(); result << data; } diff --git a/src/qtui/CMakeLists.txt b/src/qtui/CMakeLists.txt index 319e0d78..91b05077 100644 --- a/src/qtui/CMakeLists.txt +++ b/src/qtui/CMakeLists.txt @@ -22,6 +22,7 @@ set(SOURCES coreconnectdlg.cpp coreconnectionstatuswidget.cpp coreinfodlg.cpp + coresessionwidget.cpp debugbufferviewoverlay.cpp debugconsole.cpp debuglogwidget.cpp @@ -66,6 +67,7 @@ set(FORMS coreconfigwizardsyncpage.ui coreconnectauthdlg.ui coreconnectionstatuswidget.ui + coresessionwidget.ui coreinfodlg.ui debugbufferviewoverlay.ui debugconsole.ui diff --git a/src/qtui/coreinfodlg.cpp b/src/qtui/coreinfodlg.cpp index 030d1d09..20baccee 100644 --- a/src/qtui/coreinfodlg.cpp +++ b/src/qtui/coreinfodlg.cpp @@ -24,6 +24,8 @@ #include "client.h" #include "signalproxy.h" +#include "bufferwidget.h" +#include "coresessionwidget.h" CoreInfoDlg::CoreInfoDlg(QWidget *parent) : QDialog(parent), @@ -41,21 +43,15 @@ void CoreInfoDlg::coreInfoAvailable() ui.labelCoreVersionDate->setText(_coreInfo["quasselBuildDate"].toString()); // "BuildDate" for compatibility ui.labelClientCount->setNum(_coreInfo["sessionConnectedClients"].toInt()); - /* qWarning() << _coreInfo["sessionConnectedClientData"]; - int lastPeerId = -1; - QMap lastPeerData; for (const auto &peerData : _coreInfo["sessionConnectedClientData"].toList()) { - lastPeerData = peerData.toMap(); - lastPeerId = lastPeerData["id"].toInt(); + auto coreSessionWidget = new CoreSessionWidget(ui.coreSessionScrollContainer); + coreSessionWidget->setData(peerData.toMap()); + ui.coreSessionContainer->addWidget(coreSessionWidget); } - if (lastPeerId != -1) { - qWarning() << "Kicking client " << lastPeerId; - Client::kickClient(lastPeerId); - } - */ + ui.coreSessionContainer->addStretch(1); updateUptime(); startTimer(1000); diff --git a/src/qtui/coresessionwidget.cpp b/src/qtui/coresessionwidget.cpp new file mode 100644 index 00000000..2cce1459 --- /dev/null +++ b/src/qtui/coresessionwidget.cpp @@ -0,0 +1,33 @@ +#include "coresessionwidget.h" +#include +#include +#include +#include +#include +#include + + +CoreSessionWidget::CoreSessionWidget(QWidget *parent) + : QWidget(parent) +{ + ui.setupUi(this); + layout()->setContentsMargins(0, 0, 0, 0); + layout()->setSpacing(0); +} + +void CoreSessionWidget::setData(QMap map) +{ + QLabel *iconSecure = ui.iconSecure; + QPushButton *disconnectButton = ui.disconnectButton; + + ui.labelRemoteAddress->setText(map["remoteAddress"].toString()); + ui.labelLocation->setText(map["location"].toString()); + ui.labelClient->setText(map["clientVersion"].toString()); + ui.labelVersionDate->setText(map["clientVersionDate"].toString()); + ui.labelUptime + ->setText(map["connectedSince"].toDateTime().toLocalTime().toString(Qt::DateFormat::SystemLocaleShortDate)); + if (map["location"].toString().isEmpty()) { + ui.labelLocation->hide(); + ui.labelLocationTitle->hide(); + } +} diff --git a/src/qtui/coresessionwidget.h b/src/qtui/coresessionwidget.h new file mode 100644 index 00000000..763c6137 --- /dev/null +++ b/src/qtui/coresessionwidget.h @@ -0,0 +1,25 @@ +// +// Created by kuschku on 27.08.17. +// + +#ifndef CORESESSIONWIDGET_H +#define CORESESSIONWIDGET_H + +#include +#include +#include + +class CoreSessionWidget: public QWidget +{ +Q_OBJECT + +public: + explicit CoreSessionWidget(QWidget *); + + void setData(QMap); + +private: + Ui::CoreSessionWidget ui; +}; + +#endif //CORESESSIONWIDGET_H diff --git a/src/qtui/ui/coreinfodlg.ui b/src/qtui/ui/coreinfodlg.ui index 3e76d349..778f0ecb 100644 --- a/src/qtui/ui/coreinfodlg.ui +++ b/src/qtui/ui/coreinfodlg.ui @@ -1,93 +1,145 @@ - + + CoreInfoDlg - - + + 0 0 - 282 - 126 + 566 + 349 - + Core Information - + - - - - + + + + Version: - - - - <core version> + + + + <core version> - - - + + + Uptime: - - - + + + Connected Clients: - - - - <connected clients> + + + + <connected clients> - - - - <core uptime> + + + + <core uptime> - - - + + + Version date: - - - - <version date> + + + + <version date> - - - - + + + + 0 + 0 + + + + true + + + Qt::AlignHCenter|Qt::AlignTop + + + + + 0 + 0 + 550 + 193 + + + + + 0 + 0 + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + + + + Close - - - + + + Qt::Horizontal - + 40 20 @@ -95,12 +147,12 @@ - - - + + + Qt::Horizontal - + 40 20 @@ -110,19 +162,6 @@ - - - - Qt::Vertical - - - - 20 - 0 - - - - diff --git a/src/qtui/ui/coresessionwidget.ui b/src/qtui/ui/coresessionwidget.ui new file mode 100644 index 00000000..83096f2b --- /dev/null +++ b/src/qtui/ui/coresessionwidget.ui @@ -0,0 +1,198 @@ + + + CoreSessionWidget + + + + 0 + 0 + 509 + 204 + + + + + 0 + 0 + + + + + 480 + 0 + + + + + 16777215 + 16777215 + + + + + + + + + + + + 13 + 75 + true + + + + 86.103.223.212 + + + + + + + + 0 + 0 + + + + + 32 + 32 + + + + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + Qt::NoTextInteraction + + + + + + + + + + + color: rgb(119, 119, 119); + + + Client: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + v0.13-pre (0.12.0+372 git-12df418) + + + + + + + color: rgb(119, 119, 119); + + + Location: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Kiel, Germany + + + + + + + Sun Aug 27 04:29:53 2017 + + + + + + + color: rgb(119, 119, 119); + + + Version Date: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Sun Aug 27 15:03:10 2017 + + + + + + + color: rgb(119, 119, 119); + + + Connected Since: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + End Session + + + + + + + + + + + Qt::Horizontal + + + + + + + + -- 2.20.1