Browse Source

Merge pull request #6262 from evsh/resume-fixes

Resume fixes
adaptive-webui-19844
sledgehammer999 8 years ago committed by GitHub
parent
commit
b88b7d4af7
  1. 21
      src/base/bittorrent/session.cpp
  2. 2
      src/base/bittorrent/session.h
  3. 5
      src/base/bittorrent/torrenthandle.cpp
  4. 2
      src/base/bittorrent/torrenthandle.h

21
src/base/bittorrent/session.cpp

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

2
src/base/bittorrent/session.h

@ -467,7 +467,7 @@ namespace BitTorrent
void updateRatioTimer(); void updateRatioTimer();
void exportTorrentFile(TorrentHandle *const torrent, TorrentExportFolder folder = TorrentExportFolder::Regular); void exportTorrentFile(TorrentHandle *const torrent, TorrentExportFolder folder = TorrentExportFolder::Regular);
void saveTorrentResumeData(TorrentHandle *const torrent); void saveTorrentResumeData(TorrentHandle *const torrent, bool finalSave = false);
void handleAlert(libtorrent::alert *a); void handleAlert(libtorrent::alert *a);
void dispatchTorrentAlert(libtorrent::alert *a); void dispatchTorrentAlert(libtorrent::alert *a);

5
src/base/bittorrent/torrenthandle.cpp

@ -485,8 +485,11 @@ bool TorrentHandle::needSaveResumeData() const
SAFE_RETURN(bool, need_save_resume_data, false); SAFE_RETURN(bool, need_save_resume_data, false);
} }
void TorrentHandle::saveResumeData() void TorrentHandle::saveResumeData(bool updateStatus)
{ {
if (updateStatus) // to update queue_position, see discussion in PR #6154
this->updateStatus();
SAFE_CALL(save_resume_data); SAFE_CALL(save_resume_data);
m_needSaveResumeData = false; m_needSaveResumeData = false;
} }

2
src/base/bittorrent/torrenthandle.h

@ -351,7 +351,7 @@ namespace BitTorrent
void handleTempPathChanged(); void handleTempPathChanged();
void handleCategorySavePathChanged(); void handleCategorySavePathChanged();
void handleAppendExtensionToggled(); void handleAppendExtensionToggled();
void saveResumeData(); void saveResumeData(bool updateStatus = false);
private: private:
typedef boost::function<void ()> EventTrigger; typedef boost::function<void ()> EventTrigger;

Loading…
Cancel
Save