diff --git a/src/base/bittorrent/session.cpp b/src/base/bittorrent/session.cpp index da4dda60f..152477247 100644 --- a/src/base/bittorrent/session.cpp +++ b/src/base/bittorrent/session.cpp @@ -4270,6 +4270,9 @@ void Session::handleAlert(const lt::alert *a) case lt::file_error_alert::alert_type: handleFileErrorAlert(static_cast(a)); break; + case lt::read_piece_alert::alert_type: + handleReadPieceAlert(static_cast(a)); + break; case lt::add_torrent_alert::alert_type: handleAddTorrentAlert(static_cast(a)); break; @@ -4388,6 +4391,15 @@ void Session::createTorrentHandle(const lt::torrent_handle &nativeHandle) // Torrent could have error just after adding to libtorrent if (torrent->hasError()) LogMsg(tr("Torrent errored. Torrent: \"%1\". Error: %2.").arg(torrent->name(), torrent->error()), Log::WARNING); + + // Check if file(s) exist when using seed mode + if (params.skipChecking && torrent->hasMetadata()) { +#if (LIBTORRENT_VERSION_NUM < 10200) + nativeHandle.read_piece(0); +#else + nativeHandle.read_piece(lt::piece_index_t(0)); +#endif + } } void Session::handleAddTorrentAlert(const lt::add_torrent_alert *p) @@ -4492,6 +4504,21 @@ void Session::handleFileErrorAlert(const lt::file_error_alert *p) m_recentErroredTorrentsTimer->start(); } +void Session::handleReadPieceAlert(const lt::read_piece_alert *p) const +{ +#if (LIBTORRENT_VERSION_NUM < 10200) + if (p->ec) { + p->handle.auto_managed(false); + p->handle.force_recheck(); + } +#else + if (p->error) { + p->handle.unset_flags(lt::torrent_flags::auto_managed); + p->handle.force_recheck(); + } +#endif +} + void Session::handlePortmapWarningAlert(const lt::portmap_error_alert *p) { LogMsg(tr("UPnP/NAT-PMP: Port mapping failure, message: %1").arg(QString::fromStdString(p->message())), Log::CRITICAL); diff --git a/src/base/bittorrent/session.h b/src/base/bittorrent/session.h index a139e9d95..259b6a688 100644 --- a/src/base/bittorrent/session.h +++ b/src/base/bittorrent/session.h @@ -567,6 +567,7 @@ namespace BitTorrent void handleStateUpdateAlert(const lt::state_update_alert *p); void handleMetadataReceivedAlert(const lt::metadata_received_alert *p); void handleFileErrorAlert(const lt::file_error_alert *p); + void handleReadPieceAlert(const lt::read_piece_alert *p) const; void handleTorrentRemovedAlert(const lt::torrent_removed_alert *p); void handleTorrentDeletedAlert(const lt::torrent_deleted_alert *p); void handleTorrentDeleteFailedAlert(const lt::torrent_delete_failed_alert *p);