X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fcoreinfodlg.cpp;h=e5eb7f4c62bd8ab8ca2b211eb57025e7a602c421;hp=35528803845d624386e731bb11280d389f8c44e9;hb=bd5414d8bfe2be18ba051d4bbf936e9ead0cdf66;hpb=7fe7ca0631d2e8327351806947a1e030eb203cf7 diff --git a/src/qtui/coreinfodlg.cpp b/src/qtui/coreinfodlg.cpp index 35528803..e5eb7f4c 100644 --- a/src/qtui/coreinfodlg.cpp +++ b/src/qtui/coreinfodlg.cpp @@ -20,62 +20,83 @@ #include "coreinfodlg.h" -#include - #include "client.h" -#include "signalproxy.h" #include "bufferwidget.h" -#include "coresessionwidget.h" -CoreInfoDlg::CoreInfoDlg(QWidget *parent) - : QDialog(parent), - _coreInfo(this) -{ +CoreInfoDlg::CoreInfoDlg(QWidget *parent) : QDialog(parent) { ui.setupUi(this); - connect(&_coreInfo, SIGNAL(initDone()), this, SLOT(coreInfoAvailable())); - Client::signalProxy()->synchronize(&_coreInfo); + CoreInfo *coreInfo = Client::coreInfo(); + connect(coreInfo, SIGNAL(coreDataChanged(const QVariantMap &)), this, SLOT(coreInfoChanged(const QVariantMap &))); + + coreInfoChanged(coreInfo->coreData()); + + updateUptime(); + startTimer(1000); } -void CoreInfoDlg::coreInfoAvailable() -{ - ui.labelCoreVersion->setText(_coreInfo["quasselVersion"].toString()); - ui.labelCoreVersionDate->setText(_coreInfo["quasselBuildDate"].toString()); // "BuildDate" for compatibility - ui.labelClientCount->setNum(_coreInfo["sessionConnectedClients"].toInt()); +void CoreInfoDlg::coreInfoChanged(const QVariantMap &coreInfo) { + ui.labelCoreVersion->setText(coreInfo["quasselVersion"].toString()); + ui.labelCoreVersionDate->setText(coreInfo["quasselBuildDate"].toString()); // "BuildDate" for compatibility + ui.labelClientCount->setNum(coreInfo["sessionConnectedClients"].toInt()); auto coreSessionSupported = false; - for (const auto &peerData : _coreInfo["sessionConnectedClientData"].toList()) { + auto ids = _widgets.keys(); + for (const auto &peerData : coreInfo["sessionConnectedClientData"].toList()) { coreSessionSupported = true; - auto coreSessionWidget = new CoreSessionWidget(ui.coreSessionScrollContainer); - coreSessionWidget->setData(peerData.toMap()); - ui.coreSessionContainer->addWidget(coreSessionWidget); - connect(coreSessionWidget, SIGNAL(disconnectClicked(int)), this, SLOT(disconnectClicked(int))); + auto peerMap = peerData.toMap(); + int peerId = peerMap["id"].toInt(); + + ids.removeAll(peerId); + + bool isNew = false; + CoreSessionWidget *coreSessionWidget = _widgets[peerId]; + if (coreSessionWidget == nullptr) { + coreSessionWidget = new CoreSessionWidget(ui.coreSessionScrollContainer); + isNew = true; + } + coreSessionWidget->setData(peerMap); + if (isNew) { + _widgets[peerId] = coreSessionWidget; + ui.coreSessionContainer->addWidget(coreSessionWidget); + connect(coreSessionWidget, SIGNAL(disconnectClicked(int)), this, SLOT(disconnectClicked(int))); + } } - ui.coreSessionScrollArea->setVisible(coreSessionSupported); + for (const auto &key : ids) { + delete _widgets[key]; + _widgets.remove(key); + } + ui.coreSessionScrollArea->setVisible(coreSessionSupported); ui.coreSessionContainer->addStretch(1); - - updateUptime(); - startTimer(1000); } -void CoreInfoDlg::updateUptime() -{ - QDateTime startTime = _coreInfo["startTime"].toDateTime(); +void CoreInfoDlg::updateUptime() { + CoreInfo *coreInfo = Client::coreInfo(); + if (coreInfo) { + QDateTime startTime = coreInfo->at("startTime").toDateTime(); - int uptime = startTime.secsTo(QDateTime::currentDateTime().toUTC()); - int updays = uptime / 86400; uptime %= 86400; - int uphours = uptime / 3600; uptime %= 3600; - int upmins = uptime / 60; uptime %= 60; + int64_t uptime = startTime.secsTo(QDateTime::currentDateTime().toUTC()); + int64_t updays = uptime / 86400; + uptime %= 86400; + int64_t uphours = uptime / 3600; + uptime %= 3600; + int64_t upmins = uptime / 60; + uptime %= 60; - QString uptimeText = tr("%n Day(s)", "", updays) - + tr(" %1:%2:%3 (since %4)").arg(uphours, 2, 10, QChar('0')).arg(upmins, 2, 10, QChar('0')).arg(uptime, 2, 10, QChar('0')).arg(startTime.toLocalTime().toString(Qt::TextDate)); - ui.labelUptime->setText(uptimeText); + QString uptimeText = tr("%n Day(s)", "", updays) + + tr(" %1:%2:%3 (since %4)") + .arg(uphours, 2, 10, QChar('0')) + .arg(upmins, 2, 10, QChar('0')) + .arg(uptime, 2, 10, QChar('0')) + .arg(startTime.toLocalTime().toString(Qt::TextDate)); + ui.labelUptime->setText(uptimeText); + } } -void CoreInfoDlg::disconnectClicked(int peerId) -{ + +void CoreInfoDlg::disconnectClicked(int peerId) { Client::kickClient(peerId); }