diff --git a/src/base/bittorrent/sessionimpl.cpp b/src/base/bittorrent/sessionimpl.cpp index 478ee59cc..04888a2c6 100644 --- a/src/base/bittorrent/sessionimpl.cpp +++ b/src/base/bittorrent/sessionimpl.cpp @@ -2444,6 +2444,12 @@ void SessionImpl::handleTorrentSaveResumeDataRequested(const TorrentImpl *torren ++m_numResumeData; } +void SessionImpl::handleTorrentSaveResumeDataFailed(const TorrentImpl *torrent) +{ + Q_UNUSED(torrent); + --m_numResumeData; +} + QVector SessionImpl::torrents() const { QVector result; @@ -2904,16 +2910,12 @@ void SessionImpl::saveResumeData() bool hasWantedAlert = false; for (const lt::alert *a : alerts) { - switch (a->type()) + if (const int alertType = a->type(); + (alertType == lt::save_resume_data_alert::alert_type) + || (alertType == lt::save_resume_data_failed_alert::alert_type)) { - case lt::save_resume_data_failed_alert::alert_type: - hasWantedAlert = true; - --m_numResumeData; - break; - case lt::save_resume_data_alert::alert_type: hasWantedAlert = true; - dispatchTorrentAlert(static_cast(a)); - break; + handleAlert(a); } } diff --git a/src/base/bittorrent/sessionimpl.h b/src/base/bittorrent/sessionimpl.h index 0d105a395..c09ef72fe 100644 --- a/src/base/bittorrent/sessionimpl.h +++ b/src/base/bittorrent/sessionimpl.h @@ -410,6 +410,7 @@ namespace BitTorrent // Torrent interface void handleTorrentNeedSaveResumeData(const TorrentImpl *torrent); void handleTorrentSaveResumeDataRequested(const TorrentImpl *torrent); + void handleTorrentSaveResumeDataFailed(const TorrentImpl *torrent); void handleTorrentShareLimitChanged(TorrentImpl *const torrent); void handleTorrentNameChanged(TorrentImpl *const torrent); void handleTorrentSavePathChanged(TorrentImpl *const torrent); diff --git a/src/base/bittorrent/torrentimpl.cpp b/src/base/bittorrent/torrentimpl.cpp index 94d65587b..d79c45df6 100644 --- a/src/base/bittorrent/torrentimpl.cpp +++ b/src/base/bittorrent/torrentimpl.cpp @@ -1949,8 +1949,13 @@ void TorrentImpl::prepareResumeData(const lt::add_torrent_params ¶ms) void TorrentImpl::handleSaveResumeDataFailedAlert(const lt::save_resume_data_failed_alert *p) { - Q_UNUSED(p); - Q_ASSERT_X(false, Q_FUNC_INFO, "This point should be unreachable since libtorrent 1.2.11"); + if (p->error != lt::errors::resume_data_not_modified) + { + LogMsg(tr("Generate resume data failed. Torrent: \"%1\". Reason: \"%2\"") + .arg(name(), QString::fromLocal8Bit(p->error.message().c_str())), Log::CRITICAL); + } + + m_session->handleTorrentSaveResumeDataFailed(this); } void TorrentImpl::handleFastResumeRejectedAlert(const lt::fastresume_rejected_alert *p)