|
|
@ -1858,7 +1858,7 @@ void Session::generateResumeData(bool final) |
|
|
|
if (torrent->isChecking() || torrent->hasError()) continue; |
|
|
|
if (torrent->isChecking() || torrent->hasError()) continue; |
|
|
|
if (!final && !torrent->needSaveResumeData()) continue; |
|
|
|
if (!final && !torrent->needSaveResumeData()) continue; |
|
|
|
|
|
|
|
|
|
|
|
saveTorrentResumeData(torrent); |
|
|
|
saveTorrentResumeData(torrent, final); |
|
|
|
qDebug("Saving fastresume data for %s", qPrintable(torrent->name())); |
|
|
|
qDebug("Saving fastresume data for %s", qPrintable(torrent->name())); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -2782,9 +2782,9 @@ void Session::handleTorrentRatioLimitChanged(TorrentHandle *const torrent) |
|
|
|
updateRatioTimer(); |
|
|
|
updateRatioTimer(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void Session::saveTorrentResumeData(TorrentHandle *const torrent) |
|
|
|
void Session::saveTorrentResumeData(TorrentHandle *const torrent, bool finalSave) |
|
|
|
{ |
|
|
|
{ |
|
|
|
torrent->saveResumeData(); |
|
|
|
torrent->saveResumeData(finalSave); |
|
|
|
++m_numResumeData; |
|
|
|
++m_numResumeData; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -3077,6 +3077,7 @@ void Session::startUpTorrents() |
|
|
|
// Resume downloads
|
|
|
|
// Resume downloads
|
|
|
|
QMap<int, TorrentResumeData> queuedResumeData; |
|
|
|
QMap<int, TorrentResumeData> queuedResumeData; |
|
|
|
int nextQueuePosition = 1; |
|
|
|
int nextQueuePosition = 1; |
|
|
|
|
|
|
|
int numOfRemappedFiles = 0; |
|
|
|
QRegExp rx(QLatin1String("^([A-Fa-f0-9]{40})\\.fastresume$")); |
|
|
|
QRegExp rx(QLatin1String("^([A-Fa-f0-9]{40})\\.fastresume$")); |
|
|
|
foreach (const QString &fastresumeName, fastresumes) { |
|
|
|
foreach (const QString &fastresumeName, fastresumes) { |
|
|
|
if (rx.indexIn(fastresumeName) == -1) continue; |
|
|
|
if (rx.indexIn(fastresumeName) == -1) continue; |
|
|
@ -3100,11 +3101,23 @@ void Session::startUpTorrents() |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
else { |
|
|
|
else { |
|
|
|
queuedResumeData[queuePosition] = { hash, magnetUri, resumeData, data }; |
|
|
|
int q = queuePosition; |
|
|
|
|
|
|
|
for(; queuedResumeData.contains(q); ++q) { |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (q != queuePosition) { |
|
|
|
|
|
|
|
++numOfRemappedFiles; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
queuedResumeData[q] = { hash, magnetUri, resumeData, data }; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (numOfRemappedFiles > 0) { |
|
|
|
|
|
|
|
logger->addMessage( |
|
|
|
|
|
|
|
QString(tr("Queue positions were corrected in %1 resume files")).arg(numOfRemappedFiles), |
|
|
|
|
|
|
|
Log::CRITICAL); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// starting up downloading torrents (queue position > 0)
|
|
|
|
// starting up downloading torrents (queue position > 0)
|
|
|
|
foreach (const TorrentResumeData &torrentResumeData, queuedResumeData) |
|
|
|
foreach (const TorrentResumeData &torrentResumeData, queuedResumeData) |
|
|
|
startupTorrent(torrentResumeData); |
|
|
|
startupTorrent(torrentResumeData); |
|
|
|