Distinguish unknown traffic from zero traffic

This commit is contained in:
Martchus 2017-01-14 00:58:24 +01:00
parent d923d8efff
commit 2a5137184a
3 changed files with 26 additions and 18 deletions

View File

@ -55,10 +55,10 @@ SyncthingConnection::SyncthingConnection(const QString &syncthingUrl, const QByt
m_reconnecting(false),
m_lastEventId(0),
m_autoReconnectTries(0),
m_totalIncomingTraffic(0),
m_totalOutgoingTraffic(0),
m_totalIncomingRate(0),
m_totalOutgoingRate(0),
m_totalIncomingTraffic(unknownTraffic),
m_totalOutgoingTraffic(unknownTraffic),
m_totalIncomingRate(0.0),
m_totalOutgoingRate(0.0),
m_configReply(nullptr),
m_statusReply(nullptr),
m_connectionsReply(nullptr),
@ -210,8 +210,8 @@ void SyncthingConnection::continueReconnecting()
m_lastEventId = 0;
m_configDir.clear();
m_myId.clear();
m_totalIncomingTraffic = 0;
m_totalOutgoingTraffic = 0;
m_totalIncomingTraffic = unknownTraffic;
m_totalOutgoingTraffic = unknownTraffic;
m_totalIncomingRate = 0.0;
m_totalOutgoingRate = 0.0;
m_unreadNotifications = false;
@ -897,15 +897,19 @@ void SyncthingConnection::readConnections()
const QJsonObject totalObj(replyObj.value(QStringLiteral("total")).toObject());
// read traffic, the conversion to double is neccassary because toInt() doesn't work for high values
const uint64 totalIncomingTraffic = static_cast<uint64>(totalObj.value(QStringLiteral("inBytesTotal")).toDouble(0.0));
const uint64 totalOutgoingTraffic = static_cast<uint64>(totalObj.value(QStringLiteral("outBytesTotal")).toDouble(0.0));
const QJsonValue totalIncomingTrafficValue(totalObj.value(QStringLiteral("inBytesTotal")));
const QJsonValue totalOutgoingTrafficValue(totalObj.value(QStringLiteral("outBytesTotal")));
const uint64 totalIncomingTraffic = totalIncomingTrafficValue.isDouble()
? static_cast<uint64>(totalIncomingTrafficValue.toDouble(0.0)) : unknownTraffic;
const uint64 totalOutgoingTraffic = totalOutgoingTrafficValue.isDouble()
? static_cast<uint64>(totalOutgoingTrafficValue.toDouble(0.0)) : unknownTraffic;
double transferTime;
if(!m_lastConnectionsUpdate.isNull() && ((transferTime = (DateTime::gmtNow() - m_lastConnectionsUpdate).totalSeconds()) != 0.0)) {
m_totalIncomingRate = (totalIncomingTraffic - m_totalIncomingTraffic) * 0.008 / transferTime,
m_totalOutgoingRate = (totalOutgoingTraffic - m_totalOutgoingTraffic) * 0.008 / transferTime;
} else {
m_totalIncomingRate = m_totalOutgoingRate = 0.0;
}
const bool hasDelta = !m_lastConnectionsUpdate.isNull()
&& ((transferTime = (DateTime::gmtNow() - m_lastConnectionsUpdate).totalSeconds()) != 0.0);
m_totalIncomingRate = (hasDelta && totalIncomingTraffic != unknownTraffic && m_totalIncomingTraffic != unknownTraffic)
? (totalIncomingTraffic - m_totalIncomingTraffic) * 0.008 / transferTime : 0.0;
m_totalOutgoingRate = (hasDelta && totalOutgoingTraffic != unknownTraffic && m_totalOutgoingRate != unknownTraffic)
? (totalOutgoingTraffic - m_totalOutgoingTraffic) * 0.008 / transferTime : 0.0;
emit trafficChanged(m_totalIncomingTraffic = totalIncomingTraffic, m_totalOutgoingTraffic = totalOutgoingTraffic);
// read connection status

View File

@ -11,6 +11,7 @@
#include <functional>
#include <vector>
#include <limits>
QT_FORWARD_DECLARE_CLASS(QNetworkAccessManager)
QT_FORWARD_DECLARE_CLASS(QNetworkReply)
@ -102,6 +103,7 @@ public:
uint64 totalOutgoingTraffic() const;
double totalIncomingRate() const;
double totalOutgoingRate() const;
static constexpr uint64 unknownTraffic = std::numeric_limits<uint64>::max();
const std::vector<SyncthingDir> &dirInfo() const;
const std::vector<SyncthingDev> &devInfo() const;
QMetaObject::Connection requestQrCode(const QString &text, std::function<void (const QByteArray &)> callback);

View File

@ -481,18 +481,20 @@ void TrayWidget::updateTraffic()
static const QString unknownStr(tr("unknown"));
if(m_connection.isConnected()) {
if(m_connection.totalIncomingRate() != 0.0) {
m_ui->inTrafficLabel->setText(m_connection.totalIncomingTraffic() != 0
m_ui->inTrafficLabel->setText(m_connection.totalIncomingTraffic() != SyncthingConnection::unknownTraffic
? QStringLiteral("%1 (%2)").arg(QString::fromUtf8(bitrateToString(m_connection.totalIncomingRate(), true).data()), QString::fromUtf8(dataSizeToString(m_connection.totalIncomingTraffic()).data()))
: QString::fromUtf8(bitrateToString(m_connection.totalIncomingRate(), true).data()));
} else {
m_ui->inTrafficLabel->setText(m_connection.totalIncomingTraffic() != 0 ? QString::fromUtf8(dataSizeToString(m_connection.totalIncomingTraffic()).data()) : unknownStr);
m_ui->inTrafficLabel->setText(m_connection.totalIncomingTraffic() != SyncthingConnection::unknownTraffic
? QString::fromUtf8(dataSizeToString(m_connection.totalIncomingTraffic()).data()) : unknownStr);
}
if(m_connection.totalOutgoingRate() != 0.0) {
m_ui->outTrafficLabel->setText(m_connection.totalIncomingTraffic() != 0
m_ui->outTrafficLabel->setText(m_connection.totalIncomingTraffic() != SyncthingConnection::unknownTraffic
? QStringLiteral("%1 (%2)").arg(QString::fromUtf8(bitrateToString(m_connection.totalOutgoingRate(), true).data()), QString::fromUtf8(dataSizeToString(m_connection.totalOutgoingTraffic()).data()))
: QString::fromUtf8(bitrateToString(m_connection.totalOutgoingRate(), true).data()));
} else {
m_ui->outTrafficLabel->setText(m_connection.totalOutgoingTraffic() != 0 ? QString::fromUtf8(dataSizeToString(m_connection.totalOutgoingTraffic()).data()) : unknownStr);
m_ui->outTrafficLabel->setText(m_connection.totalOutgoingTraffic() != SyncthingConnection::unknownTraffic
? QString::fromUtf8(dataSizeToString(m_connection.totalOutgoingTraffic()).data()) : unknownStr);
}
} else {
m_ui->inTrafficLabel->setText(unknownStr);