Improved ETA calculation

This commit is contained in:
Christophe Dumez 2007-06-29 16:49:45 +00:00
parent 611b9424ee
commit 9bde00b7de
2 changed files with 16 additions and 21 deletions

View File

@ -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){

View File

@ -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);