mirror of
https://github.com/qbittorrent/qBittorrent
synced 2025-07-16 02:03:07 -07:00
Ratio calculation improvement: make usage of new all_time_upload and all_time_download variables in torrent_status.
This commit is contained in:
parent
c536f24d55
commit
82706141cf
5 changed files with 27 additions and 89 deletions
|
@ -644,7 +644,7 @@ void GUI::closeEvent(QCloseEvent *e) {
|
||||||
writeSettings();
|
writeSettings();
|
||||||
// Do some BT related saving
|
// Do some BT related saving
|
||||||
BTSession->saveDHTEntry();
|
BTSession->saveDHTEntry();
|
||||||
BTSession->saveFastResumeAndRatioData();
|
BTSession->saveFastResumeData();
|
||||||
// Accept exit
|
// Accept exit
|
||||||
e->accept();
|
e->accept();
|
||||||
qApp->exit();
|
qApp->exit();
|
||||||
|
|
|
@ -620,8 +620,6 @@ void bittorrent::deleteTorrent(QString hash, bool permanent) {
|
||||||
}
|
}
|
||||||
// Remove tracker errors
|
// Remove tracker errors
|
||||||
trackersErrors.remove(hash);
|
trackersErrors.remove(hash);
|
||||||
// Remove it from ratio table
|
|
||||||
ratioData.remove(hash);
|
|
||||||
int index = finishedTorrents.indexOf(hash);
|
int index = finishedTorrents.indexOf(hash);
|
||||||
if(index != -1) {
|
if(index != -1) {
|
||||||
finishedTorrents.removeAt(index);
|
finishedTorrents.removeAt(index);
|
||||||
|
@ -742,7 +740,7 @@ void bittorrent::setFinishedTorrent(QString hash) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Save fast resume data
|
// Save fast resume data
|
||||||
saveFastResumeAndRatioData(hash);
|
saveFastResumeData(hash);
|
||||||
//emit torrentSwitchedtoFinished(hash);
|
//emit torrentSwitchedtoFinished(hash);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -754,7 +752,7 @@ bool bittorrent::pauseTorrent(QString hash) {
|
||||||
h.pause();
|
h.pause();
|
||||||
change = true;
|
change = true;
|
||||||
// Save fast resume data
|
// Save fast resume data
|
||||||
saveFastResumeAndRatioData(hash);
|
saveFastResumeData(hash);
|
||||||
if(queueingEnabled) {
|
if(queueingEnabled) {
|
||||||
updateDownloadQueue();
|
updateDownloadQueue();
|
||||||
updateUploadQueue();
|
updateUploadQueue();
|
||||||
|
@ -988,8 +986,6 @@ void bittorrent::addTorrent(QString path, bool fromScanDir, QString from_url, bo
|
||||||
loadWebSeeds(hash);
|
loadWebSeeds(hash);
|
||||||
// Load speed limit from hard drive
|
// Load speed limit from hard drive
|
||||||
loadTorrentSpeedLimits(hash);
|
loadTorrentSpeedLimits(hash);
|
||||||
// Load ratio data
|
|
||||||
loadDownloadUploadForTorrent(hash);
|
|
||||||
// Load trackers
|
// Load trackers
|
||||||
bool loaded_trackers = loadTrackerFile(hash);
|
bool loaded_trackers = loadTrackerFile(hash);
|
||||||
// Doing this to order trackers well
|
// Doing this to order trackers well
|
||||||
|
@ -1265,35 +1261,6 @@ void bittorrent::loadFilesPriorities(QTorrentHandle &h) {
|
||||||
h.prioritize_files(v);
|
h.prioritize_files(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
void bittorrent::loadDownloadUploadForTorrent(QString hash) {
|
|
||||||
QDir torrentBackup(misc::qBittorrentPath() + "BT_backup");
|
|
||||||
// Checking if torrentBackup Dir exists
|
|
||||||
// create it if it is not
|
|
||||||
if(! torrentBackup.exists()) {
|
|
||||||
torrentBackup.mkpath(torrentBackup.path());
|
|
||||||
}
|
|
||||||
// qDebug("Loading ratio data for %s", hash.toUtf8().data());
|
|
||||||
QFile ratio_file(torrentBackup.path()+QDir::separator()+ hash + ".ratio");
|
|
||||||
if(!ratio_file.exists() || !ratio_file.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
QByteArray data = ratio_file.readAll();
|
|
||||||
QList<QByteArray> data_list = data.split(' ');
|
|
||||||
if(data_list.size() != 2) {
|
|
||||||
std::cerr << "Corrupted ratio file for torrent: " << hash.toStdString() << '\n';
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
QPair<size_type,size_type> downUp;
|
|
||||||
downUp.first = (size_type)data_list.at(0).toLongLong();
|
|
||||||
downUp.second = (size_type)data_list.at(1).toLongLong();
|
|
||||||
if(downUp.first < 0 || downUp.second < 0) {
|
|
||||||
qDebug("** Overflow in ratio!!! fixing...");
|
|
||||||
downUp.first = 0;
|
|
||||||
downUp.second = 0;
|
|
||||||
}
|
|
||||||
ratioData[hash] = downUp;
|
|
||||||
}
|
|
||||||
|
|
||||||
float bittorrent::getUncheckedTorrentProgress(QString hash) const {
|
float bittorrent::getUncheckedTorrentProgress(QString hash) const {
|
||||||
QFile paused_file(misc::qBittorrentPath()+"BT_backup"+QDir::separator()+hash+".paused");
|
QFile paused_file(misc::qBittorrentPath()+"BT_backup"+QDir::separator()+hash+".paused");
|
||||||
paused_file.open(QIODevice::ReadOnly | QIODevice::Text);
|
paused_file.open(QIODevice::ReadOnly | QIODevice::Text);
|
||||||
|
@ -1314,59 +1281,24 @@ float bittorrent::getUncheckedTorrentProgress(QString hash) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
float bittorrent::getRealRatio(QString hash) const{
|
float bittorrent::getRealRatio(QString hash) const{
|
||||||
QPair<size_type,size_type> downUpInfo = ratioData.value(hash, QPair<size_type,size_type>(0,0));
|
|
||||||
size_type download = downUpInfo.first;
|
|
||||||
size_type upload = downUpInfo.second;
|
|
||||||
QTorrentHandle h = getTorrentHandle(hash);
|
QTorrentHandle h = getTorrentHandle(hash);
|
||||||
download += h.total_payload_download();
|
Q_ASSERT(h.all_time_download() >= 0);
|
||||||
Q_ASSERT(download >= 0);
|
Q_ASSERT(h.all_time_upload() >= 0);
|
||||||
upload += h.total_payload_upload();
|
if(h.all_time_download() == 0) {
|
||||||
Q_ASSERT(upload >= 0);
|
if(h.all_time_upload() == 0)
|
||||||
if(download == 0){
|
return 1.;
|
||||||
if(upload == 0)
|
return 10.;
|
||||||
return 1.;
|
|
||||||
return 10.;
|
|
||||||
}
|
}
|
||||||
float ratio = (double)upload / (double)download;
|
float ratio = (float)h.all_time_upload()/(float)h.all_time_download();
|
||||||
Q_ASSERT(ratio >= 0.);
|
Q_ASSERT(ratio >= 0.);
|
||||||
if(ratio > 10.)
|
if(ratio > 10.)
|
||||||
ratio = 10.;
|
ratio = 10.;
|
||||||
return ratio;
|
return ratio;
|
||||||
}
|
}
|
||||||
|
|
||||||
// To remember share ratio or a torrent, we must save current
|
|
||||||
// total_upload and total_upload and reload them on startup
|
|
||||||
void bittorrent::saveDownloadUploadForTorrent(QString hash) {
|
|
||||||
qDebug("Saving ratio data for torrent %s", hash.toUtf8().data());
|
|
||||||
QDir torrentBackup(misc::qBittorrentPath() + QString::fromUtf8("BT_backup"));
|
|
||||||
// Checking if torrentBackup Dir exists
|
|
||||||
// create it if it is not
|
|
||||||
if(! torrentBackup.exists()) {
|
|
||||||
torrentBackup.mkpath(torrentBackup.path());
|
|
||||||
}
|
|
||||||
QTorrentHandle h = getTorrentHandle(hash);
|
|
||||||
if(!h.is_valid()) {
|
|
||||||
qDebug("/!\\ Error: Invalid handle");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
QPair<size_type,size_type> ratioInfo = ratioData.value(hash, QPair<size_type, size_type>(0,0));
|
|
||||||
size_type download = h.total_payload_download();
|
|
||||||
download += ratioInfo.first;
|
|
||||||
size_type upload = h.total_payload_upload();
|
|
||||||
upload += ratioInfo.second;
|
|
||||||
Q_ASSERT(download >= 0 && upload >= 0);
|
|
||||||
QFile ratio_file(torrentBackup.path()+QDir::separator()+ hash + QString::fromUtf8(".ratio"));
|
|
||||||
if(!ratio_file.open(QIODevice::WriteOnly | QIODevice::Text)) {
|
|
||||||
std::cerr << "Couldn't save ratio data for torrent: " << hash.toStdString() << '\n';
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
ratio_file.write(misc::toQByteArray(download) + QByteArray(" ") + misc::toQByteArray(upload));
|
|
||||||
ratio_file.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Only save fast resume data for unfinished and unpaused torrents (Optimization)
|
// Only save fast resume data for unfinished and unpaused torrents (Optimization)
|
||||||
// Called periodically and on exit
|
// Called periodically and on exit
|
||||||
void bittorrent::saveFastResumeAndRatioData() {
|
void bittorrent::saveFastResumeData() {
|
||||||
QString hash;
|
QString hash;
|
||||||
QStringList hashes = getUnfinishedTorrents();
|
QStringList hashes = getUnfinishedTorrents();
|
||||||
foreach(hash, hashes) {
|
foreach(hash, hashes) {
|
||||||
|
@ -1379,7 +1311,7 @@ void bittorrent::saveFastResumeAndRatioData() {
|
||||||
// Do not need to save fast resume data for paused torrents
|
// Do not need to save fast resume data for paused torrents
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
saveFastResumeAndRatioData(hash);
|
saveFastResumeData(hash);
|
||||||
}
|
}
|
||||||
hashes = getFinishedTorrents();
|
hashes = getFinishedTorrents();
|
||||||
foreach(hash, hashes) {
|
foreach(hash, hashes) {
|
||||||
|
@ -1392,7 +1324,6 @@ void bittorrent::saveFastResumeAndRatioData() {
|
||||||
// Do not need to save ratio data for paused torrents
|
// Do not need to save ratio data for paused torrents
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
saveDownloadUploadForTorrent(hash);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1421,7 +1352,7 @@ void bittorrent::addPeerBanMessage(QString ip, bool from_ipfilter) {
|
||||||
peerBanMessages.append(QString::fromUtf8("<font color='grey'>")+ QTime::currentTime().toString(QString::fromUtf8("hh:mm:ss")) + QString::fromUtf8("</font> - ")+tr("<font color='red'>%1</font> <i>was banned due to corrupt pieces</i>", "x.y.z.w was banned").arg(ip));
|
peerBanMessages.append(QString::fromUtf8("<font color='grey'>")+ QTime::currentTime().toString(QString::fromUtf8("hh:mm:ss")) + QString::fromUtf8("</font> - ")+tr("<font color='red'>%1</font> <i>was banned due to corrupt pieces</i>", "x.y.z.w was banned").arg(ip));
|
||||||
}
|
}
|
||||||
|
|
||||||
void bittorrent::saveFastResumeAndRatioData(QString hash) {
|
void bittorrent::saveFastResumeData(QString hash) {
|
||||||
QString file;
|
QString file;
|
||||||
QDir torrentBackup(misc::qBittorrentPath() + "BT_backup");
|
QDir torrentBackup(misc::qBittorrentPath() + "BT_backup");
|
||||||
// Checking if torrentBackup Dir exists
|
// Checking if torrentBackup Dir exists
|
||||||
|
@ -1442,8 +1373,6 @@ void bittorrent::saveFastResumeAndRatioData(QString hash) {
|
||||||
// Write fast resume data
|
// Write fast resume data
|
||||||
h.save_resume_data();
|
h.save_resume_data();
|
||||||
}
|
}
|
||||||
// Save ratio data
|
|
||||||
saveDownloadUploadForTorrent(hash);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -56,7 +56,6 @@ class bittorrent : public QObject {
|
||||||
QString defaultSavePath;
|
QString defaultSavePath;
|
||||||
QHash<QString, QDateTime> TorrentsStartTime;
|
QHash<QString, QDateTime> TorrentsStartTime;
|
||||||
QHash<QString, size_type> TorrentsStartData;
|
QHash<QString, size_type> TorrentsStartData;
|
||||||
QHash<QString, QPair<size_type,size_type> > ratioData;
|
|
||||||
QHash<QString, QHash<QString, QString> > trackersErrors;
|
QHash<QString, QHash<QString, QString> > trackersErrors;
|
||||||
QStringList consoleMessages;
|
QStringList consoleMessages;
|
||||||
QStringList peerBanMessages;
|
QStringList peerBanMessages;
|
||||||
|
@ -133,8 +132,8 @@ class bittorrent : public QObject {
|
||||||
void resumeAllTorrents();
|
void resumeAllTorrents();
|
||||||
void saveDHTEntry();
|
void saveDHTEntry();
|
||||||
void preAllocateAllFiles(bool b);
|
void preAllocateAllFiles(bool b);
|
||||||
void saveFastResumeAndRatioData();
|
void saveFastResumeData();
|
||||||
void saveFastResumeAndRatioData(QString hash);
|
void saveFastResumeData(QString hash);
|
||||||
void enableDirectoryScanning(QString scan_dir);
|
void enableDirectoryScanning(QString scan_dir);
|
||||||
void disableDirectoryScanning();
|
void disableDirectoryScanning();
|
||||||
void enablePeerExchange();
|
void enablePeerExchange();
|
||||||
|
@ -144,8 +143,6 @@ class bittorrent : public QObject {
|
||||||
void resumeUnfinishedTorrents();
|
void resumeUnfinishedTorrents();
|
||||||
void saveTorrentSpeedLimits(QString hash);
|
void saveTorrentSpeedLimits(QString hash);
|
||||||
void loadTorrentSpeedLimits(QString hash);
|
void loadTorrentSpeedLimits(QString hash);
|
||||||
void saveDownloadUploadForTorrent(QString hash);
|
|
||||||
void loadDownloadUploadForTorrent(QString hash);
|
|
||||||
void handleDownloadFailure(QString url, QString reason);
|
void handleDownloadFailure(QString url, QString reason);
|
||||||
void loadWebSeeds(QString fileHash);
|
void loadWebSeeds(QString fileHash);
|
||||||
void updateDownloadQueue();
|
void updateDownloadQueue();
|
||||||
|
|
|
@ -232,6 +232,16 @@ void QTorrentHandle::file_progress(std::vector<size_type>& fp) {
|
||||||
return h.file_progress(fp);
|
return h.file_progress(fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_type QTorrentHandle::all_time_download() {
|
||||||
|
Q_ASSERT(h.is_valid());
|
||||||
|
return h.status().all_time_download;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_type QTorrentHandle::all_time_upload() {
|
||||||
|
Q_ASSERT(h.is_valid());
|
||||||
|
return h.status().all_time_upload;
|
||||||
|
}
|
||||||
|
|
||||||
size_type QTorrentHandle::total_payload_download() {
|
size_type QTorrentHandle::total_payload_download() {
|
||||||
Q_ASSERT(h.is_valid());
|
Q_ASSERT(h.is_valid());
|
||||||
return h.status().total_payload_download;
|
return h.status().total_payload_download;
|
||||||
|
|
|
@ -87,6 +87,8 @@ class QTorrentHandle {
|
||||||
void file_progress(std::vector<size_type>& fp);
|
void file_progress(std::vector<size_type>& fp);
|
||||||
size_type total_payload_download();
|
size_type total_payload_download();
|
||||||
size_type total_payload_upload();
|
size_type total_payload_upload();
|
||||||
|
size_type all_time_upload();
|
||||||
|
size_type all_time_download();
|
||||||
QStringList files_path() const;
|
QStringList files_path() const;
|
||||||
int num_uploads() const;
|
int num_uploads() const;
|
||||||
bool is_seed() const;
|
bool is_seed() const;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue