mirror of
https://github.com/d47081/qBittorrent.git
synced 2025-03-13 05:41:17 +00:00
Revise Statistics class
This commit is contained in:
parent
8114c11d58
commit
0d46a108b8
@ -28,30 +28,34 @@
|
||||
|
||||
#include "statistics.h"
|
||||
|
||||
#include <QDateTime>
|
||||
#include <chrono>
|
||||
|
||||
#include <QTimer>
|
||||
|
||||
#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();
|
||||
}
|
||||
|
@ -28,8 +28,8 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <QElapsedTimer>
|
||||
#include <QObject>
|
||||
#include <QTimer>
|
||||
|
||||
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;
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user