void CoreInfoDlg::coreInfoAvailable() { ui.labelCoreVersion->setText(_coreInfo["quasselVersion"].toString()); ui.labelClientCount->setNum(_coreInfo["sessionConnectedClients"].toInt()); updateUptime(); startTimer(1000); }
CoreInfoDlg::CoreInfoDlg(QWidget* parent) : QDialog(parent) { ui.setupUi(this); // Listen for resynchronization events (pre-0.13 cores only) connect(Client::instance(), &Client::coreInfoResynchronized, this, &CoreInfoDlg::coreInfoResynchronized); // Update legacy core info for Quassel cores earlier than 0.13. This does nothing on modern // cores. refreshLegacyCoreInfo(); // Display existing core info, set up signal handlers coreInfoResynchronized(); // Warning icon ui.coreUnsupportedIcon->setPixmap(icon::get("dialog-warning").pixmap(16)); updateUptime(); startTimer(1000); }
void CoreInfoDlg::coreInfoChanged(const QVariantMap& coreInfo) { if (coreInfo.isEmpty()) { // We're missing data for some reason if (Client::isConnected()) { // Core info is entirely empty despite being connected. Something's probably wrong. ui.labelCoreVersion->setText(tr("Unknown")); ui.labelCoreVersionDate->setText(tr("Unknown")); } else { // We're disconnected. Mark as such. ui.labelCoreVersion->setText(tr("Disconnected from core")); ui.labelCoreVersionDate->setText(tr("Not available")); } ui.labelClientCount->setNum(0); // Don't return, allow the code below to remove any existing session widgets } else { ui.labelCoreVersion->setText(coreInfo["quasselVersion"].toString()); // "BuildDate" for compatibility if (coreInfo["quasselBuildDate"].toString().isEmpty()) { ui.labelCoreVersionDate->setText(QString("<i>%1</i>").arg(tr("Unknown date"))); } else { ui.labelCoreVersionDate->setText( tryFormatUnixEpoch(coreInfo["quasselBuildDate"].toString(), Qt::DateFormat::DefaultLocaleShortDate)); } 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, &CoreSessionWidget::disconnectClicked, this, &CoreInfoDlg::disconnectClicked); } } for (const auto& key : ids) { delete _widgets[key]; _widgets.remove(key); } ui.coreSessionScrollArea->setVisible(coreSessionSupported); // Hide the information bar when core sessions are supported or when disconnected ui.coreUnsupportedWidget->setVisible(!(coreSessionSupported || Client::isConnected() == false)); // Update uptime for immediate display, don't wait for the timer updateUptime(); }