diff --git a/src/base/bittorrent/torrent.h b/src/base/bittorrent/torrent.h index 43937047e..71291a1ae 100644 --- a/src/base/bittorrent/torrent.h +++ b/src/base/bittorrent/torrent.h @@ -310,7 +310,7 @@ namespace BitTorrent virtual void removeUrlSeeds(const QVector &urlSeeds) = 0; virtual bool connectPeer(const PeerAddress &peerAddress) = 0; virtual void clearPeers() = 0; - virtual bool setMetadata(const TorrentInfo &torrentInfo) = 0; + virtual void setMetadata(const TorrentInfo &torrentInfo) = 0; virtual StopCondition stopCondition() const = 0; virtual void setStopCondition(StopCondition stopCondition) = 0; diff --git a/src/base/bittorrent/torrentimpl.cpp b/src/base/bittorrent/torrentimpl.cpp index a8e654d59..27ea8193d 100644 --- a/src/base/bittorrent/torrentimpl.cpp +++ b/src/base/bittorrent/torrentimpl.cpp @@ -2215,17 +2215,24 @@ lt::torrent_handle TorrentImpl::nativeHandle() const return m_nativeHandle; } -bool TorrentImpl::setMetadata(const TorrentInfo &torrentInfo) +void TorrentImpl::setMetadata(const TorrentInfo &torrentInfo) { if (hasMetadata()) - return false; + return; + m_session->invokeAsync([nativeHandle = m_nativeHandle, torrentInfo] + { + try + { #ifdef QBT_USES_LIBTORRENT2 - return m_nativeHandle.set_metadata(torrentInfo.nativeInfo()->info_section()); + nativeHandle.set_metadata(torrentInfo.nativeInfo()->info_section()); #else - const std::shared_ptr nativeInfo = torrentInfo.nativeInfo(); - return m_nativeHandle.set_metadata(lt::span(nativeInfo->metadata().get(), nativeInfo->metadata_size())); + const std::shared_ptr nativeInfo = torrentInfo.nativeInfo(); + nativeHandle.set_metadata(lt::span(nativeInfo->metadata().get(), nativeInfo->metadata_size())); #endif + } + catch (const std::exception &) {} + }); } Torrent::StopCondition TorrentImpl::stopCondition() const diff --git a/src/base/bittorrent/torrentimpl.h b/src/base/bittorrent/torrentimpl.h index 9e4fdf331..9cfae0ddf 100644 --- a/src/base/bittorrent/torrentimpl.h +++ b/src/base/bittorrent/torrentimpl.h @@ -227,7 +227,7 @@ namespace BitTorrent void removeUrlSeeds(const QVector &urlSeeds) override; bool connectPeer(const PeerAddress &peerAddress) override; void clearPeers() override; - bool setMetadata(const TorrentInfo &torrentInfo) override; + void setMetadata(const TorrentInfo &torrentInfo) override; StopCondition stopCondition() const override; void setStopCondition(StopCondition stopCondition) override;