void UserInformation::update(const MumbleProto::UserStats &msg) { bRequested = false; bool showcon = false; ClientUser *cu = ClientUser::get(uiSession); if (cu) setWindowTitle(cu->qsName); if (msg.certificates_size() > 0) { showcon = true; qlCerts.clear(); for (int i=0;i<msg.certificates_size(); ++i) { const std::string &s = msg.certificates(i); QList<QSslCertificate> certs = QSslCertificate::fromData(QByteArray(s.data(), s.length()), QSsl::Der); qlCerts <<certs; } if (! qlCerts.isEmpty()) { qpbCertificate->setEnabled(true); const QSslCertificate &cert = qlCerts.last(); const QMultiMap<QSsl::AlternateNameEntryType, QString> &alts = cert.alternateSubjectNames(); if (alts.contains(QSsl::EmailEntry)) qlCertificate->setText(QStringList(alts.values(QSsl::EmailEntry)).join(tr(", "))); else qlCertificate->setText(decode_utf8_qssl_string(cert.subjectInfo(QSslCertificate::CommonName))); if (msg.strong_certificate()) { QFont f = qfCertificateFont; f.setBold(true); qlCertificate->setFont(f); } else { qlCertificate->setFont(qfCertificateFont); } } else { qpbCertificate->setEnabled(false); qlCertificate->setText(QString()); } } if (msg.has_address()) { showcon = true; HostAddress ha(msg.address()); qlAddress->setText(ha.toString()); } if (msg.has_version()) { showcon = true; const MumbleProto::Version &mpv = msg.version(); unsigned int v = mpv.version(); unsigned int major = (v >> 16) & 0xFFFF; unsigned int minor = (v >> 8) & 0xFF; unsigned int patch = (v & 0xFF); qlVersion->setText(tr("%1.%2.%3 (%4)").arg(major).arg(minor).arg(patch).arg(u8(mpv.release()))); qlOS->setText(tr("%1 (%2)").arg(u8(mpv.os())).arg(u8(mpv.os_version()))); }
void UserInformation::update(const MumbleProto::UserStats &msg) { bRequested = false; bool showcon = false; ClientUser *cu = ClientUser::get(uiSession); if (cu) setWindowTitle(cu->qsName); if (msg.certificates_size() > 0) { showcon = true; qlCerts.clear(); for (int i=0;i<msg.certificates_size(); ++i) { const std::string &s = msg.certificates(i); QList<QSslCertificate> certs = QSslCertificate::fromData(QByteArray(s.data(), s.length()), QSsl::Der); qlCerts <<certs; } if (! qlCerts.isEmpty()) { qpbCertificate->setEnabled(true); const QSslCertificate &cert = qlCerts.last(); const QMultiMap<QSsl::AlternateNameEntryType, QString> &alts = cert.alternateSubjectNames(); if (alts.contains(QSsl::EmailEntry)) qlCertificate->setText(QStringList(alts.values(QSsl::EmailEntry)).join(tr(", "))); else qlCertificate->setText(decode_utf8_qssl_string(cert.subjectInfo(QSslCertificate::CommonName))); if (msg.strong_certificate()) { QFont f = qfCertificateFont; f.setBold(true); qlCertificate->setFont(f); } else { qlCertificate->setFont(qfCertificateFont); } } else { qpbCertificate->setEnabled(false); qlCertificate->setText(QString()); } } if (msg.has_address()) { showcon = true; HostAddress ha(msg.address()); qlAddress->setText(ha.toString()); } if (msg.has_version()) { showcon = true; const MumbleProto::Version &mpv = msg.version(); qlVersion->setText(tr("%1 (%2)").arg(MumbleVersion::toString(mpv.version())).arg(u8(mpv.release()))); qlOS->setText(tr("%1 (%2)").arg(u8(mpv.os())).arg(u8(mpv.os_version()))); } if (msg.celt_versions_size() > 0) { QStringList qsl; for (int i=0;i<msg.celt_versions_size(); ++i) { int v = msg.celt_versions(i); CELTCodec *cc = g.qmCodecs.value(v); if (cc) qsl << cc->version(); else qsl << QString::number(v, 16); } qlCELT->setText(qsl.join(tr(", "))); } if (msg.has_opus()) { qlOpus->setText(msg.opus() ? tr("Supported") : tr("Not Supported")); } if (showcon) qgbConnection->setVisible(true); qlTCPCount->setText(QString::number(msg.tcp_packets())); qlUDPCount->setText(QString::number(msg.udp_packets())); qlTCPAvg->setText(QString::number(msg.tcp_ping_avg(), 'f', 2)); qlUDPAvg->setText(QString::number(msg.udp_ping_avg(), 'f', 2)); qlTCPVar->setText(QString::number(msg.tcp_ping_var() > 0.0f ? sqrtf(msg.tcp_ping_var()) : 0.0f, 'f', 2)); qlUDPVar->setText(QString::number(msg.udp_ping_var() > 0.0f ? sqrtf(msg.udp_ping_var()) : 0.0f, 'f', 2)); if (msg.has_from_client() && msg.has_from_server()) { qgbUDP->setVisible(true); const MumbleProto::UserStats_Stats &from = msg.from_client(); qlFromGood->setText(QString::number(from.good())); qlFromLate->setText(QString::number(from.late())); qlFromLost->setText(QString::number(from.lost())); qlFromResync->setText(QString::number(from.resync())); const MumbleProto::UserStats_Stats &to = msg.from_server(); qlToGood->setText(QString::number(to.good())); qlToLate->setText(QString::number(to.late())); qlToLost->setText(QString::number(to.lost())); qlToResync->setText(QString::number(to.resync())); quint32 allFromPackets = from.good() + from.late() + from.lost(); qlFromLatePercent->setText(QString::number(allFromPackets > 0 ? from.late() * 100.0f / allFromPackets : 0.f, 'f', 2)); qlFromLostPercent->setText(QString::number(allFromPackets > 0 ? from.lost() * 100.0f / allFromPackets : 0.f, 'f', 2)); quint32 allToPackets = to.good() + to.late() + to.lost(); qlToLatePercent->setText(QString::number(allToPackets > 0 ? to.late() * 100.0f / allToPackets : 0.f, 'f', 2)); qlToLostPercent->setText(QString::number(allToPackets > 0 ? to.lost() * 100.0f / allToPackets : 0.f, 'f', 2)); } else { qgbUDP->setVisible(false); } if (msg.has_onlinesecs()) { if (msg.has_idlesecs()) qlTime->setText(tr("%1 online (%2 idle)").arg(secsToString(msg.onlinesecs()), secsToString(msg.idlesecs()))); else qlTime->setText(tr("%1 online").arg(secsToString(msg.onlinesecs()))); } if (msg.has_bandwidth()) { qlBandwidth->setVisible(true); qliBandwidth->setVisible(true); qlBandwidth->setText(tr("%1 kbit/s").arg(msg.bandwidth() / 125.0f, 0, 'f', 1)); } else { qlBandwidth->setVisible(false); qliBandwidth->setVisible(false); qlBandwidth->setText(QString()); } }