Browse Source

Use uniform way to export .torrent files

PR #17013.
adaptive-webui-19844
Vladimir Golovnev 3 years ago committed by GitHub
parent
commit
a048ea668f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 36
      src/base/bittorrent/session.cpp
  2. 2
      src/base/bittorrent/session.h
  3. 2
      src/base/bittorrent/torrentimpl.cpp

36
src/base/bittorrent/session.cpp

@ -2473,12 +2473,12 @@ bool Session::downloadMetadata(const MagnetUri &magnetUri)
return true; return true;
} }
void Session::exportTorrentFile(const TorrentInfo &torrentInfo, const Path &folderPath, const QString &baseName) void Session::exportTorrentFile(const Torrent *torrent, const Path &folderPath)
{ {
if (!folderPath.exists() && !Utils::Fs::mkpath(folderPath)) if (!folderPath.exists() && !Utils::Fs::mkpath(folderPath))
return; return;
const QString validName = Utils::Fs::toValidFileName(baseName); const QString validName = Utils::Fs::toValidFileName(torrent->name());
QString torrentExportFilename = u"%1.torrent"_qs.arg(validName); QString torrentExportFilename = u"%1.torrent"_qs.arg(validName);
Path newTorrentPath = folderPath / Path(torrentExportFilename); Path newTorrentPath = folderPath / Path(torrentExportFilename);
int counter = 0; int counter = 0;
@ -2489,11 +2489,11 @@ void Session::exportTorrentFile(const TorrentInfo &torrentInfo, const Path &fold
newTorrentPath = folderPath / Path(torrentExportFilename); newTorrentPath = folderPath / Path(torrentExportFilename);
} }
const nonstd::expected<void, QString> result = torrentInfo.saveToFile(newTorrentPath); const nonstd::expected<void, QString> result = torrent->exportToFile(newTorrentPath);
if (!result) if (!result)
{ {
LogMsg(tr("Failed to export torrent. Torrent: \"%1\". Destination: \"%2\". Reason: \"%3\"") LogMsg(tr("Failed to export torrent. Torrent: \"%1\". Destination: \"%2\". Reason: \"%3\"")
.arg(torrentInfo.name(), newTorrentPath.toString(), result.error()), Log::WARNING); .arg(torrent->name(), newTorrentPath.toString(), result.error()), Log::WARNING);
} }
} }
@ -4151,17 +4151,8 @@ void Session::handleTorrentUrlSeedsRemoved(TorrentImpl *const torrent, const QVe
void Session::handleTorrentMetadataReceived(TorrentImpl *const torrent) void Session::handleTorrentMetadataReceived(TorrentImpl *const torrent)
{ {
// Copy the torrent file to the export folder
if (!torrentExportDirectory().isEmpty()) if (!torrentExportDirectory().isEmpty())
{ exportTorrentFile(torrent, torrentExportDirectory());
#ifdef QBT_USES_LIBTORRENT2
const std::shared_ptr<lt::torrent_info> completeTorrentInfo = torrent->nativeHandle().torrent_file_with_hashes();
const TorrentInfo torrentInfo {*(completeTorrentInfo ? completeTorrentInfo : torrent->nativeHandle().torrent_file())};
#else
const TorrentInfo torrentInfo {*torrent->nativeHandle().torrent_file()};
#endif
exportTorrentFile(torrentInfo, torrentExportDirectory(), torrent->name());
}
emit torrentMetadataReceived(torrent); emit torrentMetadataReceived(torrent);
} }
@ -4211,17 +4202,8 @@ void Session::handleTorrentFinished(TorrentImpl *const torrent)
} }
} }
// Move .torrent file to another folder
if (!finishedTorrentExportDirectory().isEmpty()) if (!finishedTorrentExportDirectory().isEmpty())
{ exportTorrentFile(torrent, finishedTorrentExportDirectory());
#ifdef QBT_USES_LIBTORRENT2
const std::shared_ptr<lt::torrent_info> completeTorrentInfo = torrent->nativeHandle().torrent_file_with_hashes();
const TorrentInfo torrentInfo {*(completeTorrentInfo ? completeTorrentInfo : torrent->nativeHandle().torrent_file())};
#else
const TorrentInfo torrentInfo {*torrent->nativeHandle().torrent_file()};
#endif
exportTorrentFile(torrentInfo, finishedTorrentExportDirectory(), torrent->name());
}
if (!hasUnfinishedTorrents()) if (!hasUnfinishedTorrents())
emit allTorrentsFinished(); emit allTorrentsFinished();
@ -4929,12 +4911,8 @@ void Session::createTorrent(const lt::torrent_handle &nativeHandle)
// The following is useless for newly added magnet // The following is useless for newly added magnet
if (hasMetadata) if (hasMetadata)
{ {
// Copy the torrent file to the export folder
if (!torrentExportDirectory().isEmpty()) if (!torrentExportDirectory().isEmpty())
{ exportTorrentFile(torrent, torrentExportDirectory());
const TorrentInfo torrentInfo {*params.ltAddTorrentParams.ti};
exportTorrentFile(torrentInfo, torrentExportDirectory(), torrent->name());
}
} }
} }

2
src/base/bittorrent/session.h

@ -626,7 +626,7 @@ namespace BitTorrent
bool addTorrent_impl(const std::variant<MagnetUri, TorrentInfo> &source, const AddTorrentParams &addTorrentParams); bool addTorrent_impl(const std::variant<MagnetUri, TorrentInfo> &source, const AddTorrentParams &addTorrentParams);
void updateSeedingLimitTimer(); void updateSeedingLimitTimer();
void exportTorrentFile(const TorrentInfo &torrentInfo, const Path &folderPath, const QString &baseName); void exportTorrentFile(const Torrent *torrent, const Path &folderPath);
void handleAlert(const lt::alert *a); void handleAlert(const lt::alert *a);
void dispatchTorrentAlert(const lt::alert *a); void dispatchTorrentAlert(const lt::alert *a);

2
src/base/bittorrent/torrentimpl.cpp

@ -2269,7 +2269,7 @@ nonstd::expected<lt::entry, QString> TorrentImpl::exportTorrent() const
{ {
#ifdef QBT_USES_LIBTORRENT2 #ifdef QBT_USES_LIBTORRENT2
const std::shared_ptr<lt::torrent_info> completeTorrentInfo = m_nativeHandle.torrent_file_with_hashes(); const std::shared_ptr<lt::torrent_info> completeTorrentInfo = m_nativeHandle.torrent_file_with_hashes();
const std::shared_ptr<lt::torrent_info> torrentInfo = {completeTorrentInfo ? completeTorrentInfo : info().nativeInfo()}; const std::shared_ptr<lt::torrent_info> torrentInfo = (completeTorrentInfo ? completeTorrentInfo : info().nativeInfo());
#else #else
const std::shared_ptr<lt::torrent_info> torrentInfo = info().nativeInfo(); const std::shared_ptr<lt::torrent_info> torrentInfo = info().nativeInfo();
#endif #endif

Loading…
Cancel
Save