From 0d46a108b81d829ff1a57bb59bdbf247d6313193 Mon Sep 17 00:00:00 2001 From: Chocobo1 Date: Sat, 18 Jun 2022 17:32:04 +0800 Subject: [PATCH] Revise Statistics class --- src/base/bittorrent/statistics.cpp | 44 +++++++++++++++++------------- src/base/bittorrent/statistics.h | 11 ++++---- 2 files changed, 30 insertions(+), 25 deletions(-) diff --git a/src/base/bittorrent/statistics.cpp b/src/base/bittorrent/statistics.cpp index 4b8b2ecc8..f755ec4c5 100644 --- a/src/base/bittorrent/statistics.cpp +++ b/src/base/bittorrent/statistics.cpp @@ -28,30 +28,34 @@ #include "statistics.h" -#include +#include + +#include #include "base/global.h" #include "base/bittorrent/session.h" #include "base/bittorrent/sessionstatus.h" #include "base/profile.h" -const qint64 SAVE_INTERVAL = 15 * 60; // seconds - +using namespace std::chrono_literals; using namespace BitTorrent; +const qint64 SAVE_INTERVAL = std::chrono::milliseconds(15min).count(); + Statistics::Statistics(Session *session) : QObject(session) , m_session(session) { load(); - connect(&m_timer, &QTimer::timeout, this, &Statistics::gather); - m_timer.start(60 * 1000); + m_lastUpdateTimer.start(); + + auto *timer = new QTimer(this); + connect(timer, &QTimer::timeout, this, &Statistics::gather); + timer->start(60s); } Statistics::~Statistics() { - if (m_dirty) - m_lastWrite = 0; save(); } @@ -79,23 +83,25 @@ void Statistics::gather() m_dirty = true; } - save(); + if (m_lastUpdateTimer.hasExpired(SAVE_INTERVAL)) + save(); } void Statistics::save() const { - const qint64 now = QDateTime::currentSecsSinceEpoch(); - - if (!m_dirty || ((now - m_lastWrite) < SAVE_INTERVAL)) + if (!m_dirty) return; - SettingsPtr s = Profile::instance()->applicationSettings(u"qBittorrent-data"_qs); - QVariantHash v; - v.insert(u"AlltimeDL"_qs, (m_alltimeDL + m_sessionDL)); - v.insert(u"AlltimeUL"_qs, (m_alltimeUL + m_sessionUL)); - s->setValue(u"Stats/AllStats"_qs, v); + const QVariantHash stats = + { + {u"AlltimeDL"_qs, (m_alltimeDL + m_sessionDL)}, + {u"AlltimeUL"_qs, (m_alltimeUL + m_sessionUL)} + }; + SettingsPtr settings = Profile::instance()->applicationSettings(u"qBittorrent-data"_qs); + settings->setValue(u"Stats/AllStats"_qs, stats); + + m_lastUpdateTimer.start(); m_dirty = false; - m_lastWrite = now; } void Statistics::load() @@ -103,6 +109,6 @@ void Statistics::load() const SettingsPtr s = Profile::instance()->applicationSettings(u"qBittorrent-data"_qs); const QVariantHash v = s->value(u"Stats/AllStats"_qs).toHash(); - m_alltimeDL = v[u"AlltimeDL"_qs].toULongLong(); - m_alltimeUL = v[u"AlltimeUL"_qs].toULongLong(); + m_alltimeDL = v[u"AlltimeDL"_qs].toLongLong(); + m_alltimeUL = v[u"AlltimeUL"_qs].toLongLong(); } diff --git a/src/base/bittorrent/statistics.h b/src/base/bittorrent/statistics.h index 0d045ecec..a8d716e55 100644 --- a/src/base/bittorrent/statistics.h +++ b/src/base/bittorrent/statistics.h @@ -28,8 +28,8 @@ #pragma once +#include #include -#include namespace BitTorrent { @@ -55,13 +55,12 @@ private: void save() const; void load(); - BitTorrent::Session *m_session; + BitTorrent::Session *m_session = nullptr; + mutable QElapsedTimer m_lastUpdateTimer; + mutable bool m_dirty = false; + qint64 m_alltimeUL = 0; qint64 m_alltimeDL = 0; qint64 m_sessionUL = 0; qint64 m_sessionDL = 0; - mutable qint64 m_lastWrite = 0; - mutable bool m_dirty = false; - - QTimer m_timer; };