X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fcoreinfodlg.cpp;h=299a94fa74ff87a15bbfacb0b408b65ae3735f21;hp=38628accb8b3a208f1f9627c6a65f10a60cc721b;hb=911f181e0e179eb51279c0880eb701a43163b8b5;hpb=a81619131cc9ddbd80f3528fc033e74d0e74cc66 diff --git a/src/qtui/coreinfodlg.cpp b/src/qtui/coreinfodlg.cpp index 38628acc..299a94fa 100644 --- a/src/qtui/coreinfodlg.cpp +++ b/src/qtui/coreinfodlg.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2016 by the Quassel Project * + * Copyright (C) 2005-2018 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -18,59 +18,105 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ -#include "coreinfodlg.h" +#include -#include +#include "coreinfodlg.h" #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()); + + // Warning icon + ui.coreUnsupportedIcon->setPixmap(QIcon::fromTheme("dialog-warning").pixmap(16)); + + 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()); - - for (const auto &peerData : _coreInfo["sessionConnectedClientData"].toList()) { - auto coreSessionWidget = new CoreSessionWidget(ui.coreSessionScrollContainer); - coreSessionWidget->setData(peerData.toMap()); - ui.coreSessionContainer->addWidget(coreSessionWidget); - connect(coreSessionWidget, SIGNAL(disconnectClicked(int)), this, SLOT(disconnectClicked(int))); +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; + auto ids = _widgets.keys(); + for (const auto &peerData : coreInfo["sessionConnectedClientData"].toList()) { + coreSessionSupported = true; + + 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; + // Add this to the end of the session list, but before the default layout stretch item. + // The layout stretch item should never be removed, so count should always be >= 1. + ui.coreSessionContainer->insertWidget(ui.coreSessionContainer->count() - 1, + coreSessionWidget, 0, Qt::AlignTop); + connect(coreSessionWidget, SIGNAL(disconnectClicked(int)), this, SLOT(disconnectClicked(int))); + } } - ui.coreSessionContainer->addStretch(1); + for (const auto &key : ids) { + delete _widgets[key]; + _widgets.remove(key); + } - updateUptime(); - startTimer(1000); + ui.coreSessionScrollArea->setVisible(coreSessionSupported); + + // Hide the information bar when core sessions are supported + ui.coreUnsupportedWidget->setVisible(!coreSessionSupported); } -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); } + +void CoreInfoDlg::on_coreUnsupportedDetails_clicked() +{ + QMessageBox::warning(this, + tr("Active sessions unsupported"), + QString("

%1


%2

" + ).arg(tr("Your Quassel core is too old to show active sessions"), + tr("You need a Quassel core v0.13.0 or newer to view and " + "disconnect other connected clients."))); +}