X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fcoreinfodlg.cpp;h=299a94fa74ff87a15bbfacb0b408b65ae3735f21;hp=5d239956ba1f9cff2383c2a94a8705f450eaa5b6;hb=911f181e0e179eb51279c0880eb701a43163b8b5;hpb=9d54503555534a2c554f09a33df6afa33d6308ec diff --git a/src/qtui/coreinfodlg.cpp b/src/qtui/coreinfodlg.cpp index 5d239956..299a94fa 100644 --- a/src/qtui/coreinfodlg.cpp +++ b/src/qtui/coreinfodlg.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2014 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,43 +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" -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)); -void CoreInfoDlg::coreInfoAvailable() -{ - ui.labelCoreVersion->setText(_coreInfo["quasselVersion"].toString()); - ui.labelCoreBuildDate->setText(_coreInfo["quasselBuildDate"].toString()); - ui.labelClientCount->setNum(_coreInfo["sessionConnectedClients"].toInt()); updateUptime(); startTimer(1000); } -void CoreInfoDlg::updateUptime() -{ - QDateTime startTime = _coreInfo["startTime"].toDateTime(); +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))); + } + } - 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; + for (const auto &key : ids) { + delete _widgets[key]; + _widgets.remove(key); + } - 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); + ui.coreSessionScrollArea->setVisible(coreSessionSupported); + + // Hide the information bar when core sessions are supported + ui.coreUnsupportedWidget->setVisible(!coreSessionSupported); +} + + +void CoreInfoDlg::updateUptime() { + CoreInfo *coreInfo = Client::coreInfo(); + if (coreInfo) { + QDateTime startTime = coreInfo->at("startTime").toDateTime(); + + 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); + } +} + +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."))); }