mirror of
https://github.com/qbittorrent/qBittorrent.git
synced 2024-12-09 07:40:19 +08:00
Improved ETA calculation
This commit is contained in:
parent
611b9424ee
commit
9bde00b7de
@ -21,14 +21,13 @@
|
||||
|
||||
#include <QDir>
|
||||
#include <QTime>
|
||||
#include <QTimer>
|
||||
#include <QString>
|
||||
|
||||
#include "bittorrent.h"
|
||||
#include "misc.h"
|
||||
#include "downloadThread.h"
|
||||
|
||||
#define ETAS_MAX_VALUES 5
|
||||
#define ETAS_MAX_VALUES 8
|
||||
|
||||
// Main constructor
|
||||
bittorrent::bittorrent(){
|
||||
@ -45,9 +44,10 @@ bittorrent::bittorrent(){
|
||||
DHTEnabled = false;
|
||||
// Enabling metadata plugin
|
||||
s->add_extension(&create_metadata_plugin);
|
||||
timerAlerts = new QTimer(this);
|
||||
connect(timerAlerts, SIGNAL(timeout()), this, SLOT(readAlerts()));
|
||||
timerAlerts->start(3000);
|
||||
connect(&timerAlerts, SIGNAL(timeout()), this, SLOT(readAlerts()));
|
||||
timerAlerts.start(3000);
|
||||
connect(&ETARefresher, SIGNAL(timeout()), this, SLOT(updateETAs()));
|
||||
ETARefresher.start(6000);
|
||||
// To download from urls
|
||||
downloader = new downloadThread(this);
|
||||
connect(downloader, SIGNAL(downloadFinished(const QString&, const QString&, int, const QString&)), this, SLOT(processDownloadedFile(const QString&, const QString&, int, const QString&)));
|
||||
@ -56,7 +56,6 @@ bittorrent::bittorrent(){
|
||||
// Main destructor
|
||||
bittorrent::~bittorrent(){
|
||||
disableDirectoryScanning();
|
||||
delete timerAlerts;
|
||||
delete downloader;
|
||||
delete s;
|
||||
}
|
||||
@ -74,20 +73,19 @@ void bittorrent::updateETAs(){
|
||||
QString hash = QString(misc::toString(h.info_hash()).c_str());
|
||||
QList<long> listEtas = ETAstats.value(hash, QList<long>());
|
||||
if(listEtas.size() == ETAS_MAX_VALUES){
|
||||
listEtas.removeFirst();
|
||||
}
|
||||
torrent_status torrentStatus = h.status();
|
||||
torrent_info ti = h.get_torrent_info();
|
||||
if(torrentStatus.download_payload_rate != 0){
|
||||
listEtas << (long)((ti.total_size()-torrentStatus.total_done)/(double)torrentStatus.download_payload_rate);
|
||||
ETAstats[hash] = listEtas;
|
||||
long moy = 0;
|
||||
long val;
|
||||
foreach(val, listEtas){
|
||||
moy += val;
|
||||
}
|
||||
ETAs[hash] = (long) ((double)moy/(double)ETAS_MAX_VALUES);
|
||||
ETAstats[hash] = QList<long>();
|
||||
}else{
|
||||
torrent_status torrentStatus = h.status();
|
||||
torrent_info ti = h.get_torrent_info();
|
||||
if(torrentStatus.download_payload_rate != 0){
|
||||
listEtas << (long)((ti.total_size()-torrentStatus.total_done)/(double)torrentStatus.download_payload_rate);
|
||||
ETAstats[hash] = listEtas;
|
||||
}
|
||||
ETAs[hash] = (long) ((double)moy/(double)listEtas.size());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -710,8 +708,6 @@ void bittorrent::readAlerts(){
|
||||
}
|
||||
a = s->pop_alert();
|
||||
}
|
||||
// ETAs
|
||||
updateETAs();
|
||||
}
|
||||
|
||||
void bittorrent::reloadTorrent(const torrent_handle &h, bool compact_mode){
|
||||
|
@ -22,6 +22,7 @@
|
||||
#define __BITTORRENT_H__
|
||||
|
||||
#include <QHash>
|
||||
#include <QTimer>
|
||||
|
||||
#include <libtorrent/entry.hpp>
|
||||
#include <libtorrent/bencode.hpp>
|
||||
@ -40,9 +41,6 @@
|
||||
|
||||
#include "deleteThread.h"
|
||||
|
||||
class QTimer;
|
||||
class QString;
|
||||
|
||||
using namespace libtorrent;
|
||||
|
||||
class downloadThread;
|
||||
@ -55,7 +53,7 @@ class bittorrent : public QObject{
|
||||
bool DHTEnabled;
|
||||
QString scan_dir;
|
||||
QTimer *timerScan;
|
||||
QTimer *timerAlerts;
|
||||
QTimer timerAlerts;
|
||||
downloadThread *downloader;
|
||||
QStringList supported_preview_extensions;
|
||||
QString defaultSavePath;
|
||||
@ -63,6 +61,7 @@ class bittorrent : public QObject{
|
||||
QStringList torrentsUnchecked;
|
||||
QHash<QString, QList<long> > ETAstats;
|
||||
QHash<QString, long> ETAs;
|
||||
QTimer ETARefresher;
|
||||
|
||||
protected:
|
||||
QString getSavePath(const QString& hash);
|
||||
|
Loading…
Reference in New Issue
Block a user