From e183c12bedd9bb2d38a17f62f08ab9672bfb7a34 Mon Sep 17 00:00:00 2001 From: "Vladimir Golovnev (Glassez)" Date: Sat, 14 Nov 2015 09:38:01 +0300 Subject: [PATCH] Fix default save path for magnet. Closes #4105. --- src/core/bittorrent/session.cpp | 51 +++++++++++++++++++-------- src/core/bittorrent/session.h | 2 ++ src/core/bittorrent/torrenthandle.cpp | 24 ++----------- src/core/bittorrent/torrenthandle.h | 3 -- 4 files changed, 40 insertions(+), 40 deletions(-) diff --git a/src/core/bittorrent/session.cpp b/src/core/bittorrent/session.cpp index 281dbddac..44fc924b1 100644 --- a/src/core/bittorrent/session.cpp +++ b/src/core/bittorrent/session.cpp @@ -755,7 +755,7 @@ void Session::handleDownloadFailed(const QString &url, const QString &reason) void Session::handleRedirectedToMagnet(const QString &url, const QString &magnetUri) { - addTorrent_impl(m_downloadedTorrents.take(url), MagnetUri(magnetUri)); + addTorrent_impl(addDataFromParams(m_downloadedTorrents.take(url)), MagnetUri(magnetUri)); } void Session::switchToAlternativeMode(bool alternative) @@ -767,7 +767,7 @@ void Session::switchToAlternativeMode(bool alternative) void Session::handleDownloadFinished(const QString &url, const QString &filePath) { emit downloadFromUrlFinished(url); - addTorrent_impl(m_downloadedTorrents.take(url), MagnetUri(), TorrentInfo::loadFromFile(filePath)); + addTorrent_impl(addDataFromParams(m_downloadedTorrents.take(url)), MagnetUri(), TorrentInfo::loadFromFile(filePath)); Utils::Fs::forceRemove(filePath); // remove temporary file } @@ -1001,7 +1001,7 @@ bool Session::addTorrent(QString source, const AddTorrentParams ¶ms) // use common 2nd step of torrent addition libt::add_torrent_alert *alert = new libt::add_torrent_alert(handle, libt::add_torrent_params(), libt::error_code()); - m_addingTorrents.insert(hash, AddTorrentData(params)); + m_addingTorrents.insert(hash, addDataFromParams(params)); handleAddTorrentAlert(alert); delete alert; return true; @@ -1022,10 +1022,10 @@ bool Session::addTorrent(QString source, const AddTorrentParams ¶ms) m_downloadedTorrents[handler->url()] = params; } else if (source.startsWith("magnet:", Qt::CaseInsensitive)) { - return addTorrent_impl(params, MagnetUri(source)); + return addTorrent_impl(addDataFromParams(params), MagnetUri(source)); } else { - return addTorrent_impl(params, MagnetUri(), TorrentInfo::loadFromFile(source)); + return addTorrent_impl(addDataFromParams(params), MagnetUri(), TorrentInfo::loadFromFile(source)); } return false; @@ -1035,7 +1035,7 @@ bool Session::addTorrent(const TorrentInfo &torrentInfo, const AddTorrentParams { if (!torrentInfo.isValid()) return false; - return addTorrent_impl(params, MagnetUri(), torrentInfo); + return addTorrent_impl(addDataFromParams(params), MagnetUri(), torrentInfo); } // Add a torrent to the BitTorrent session @@ -1111,15 +1111,6 @@ bool Session::addTorrent_impl(AddTorrentData addData, const MagnetUri &magnetUri p.max_connections = pref->getMaxConnecsPerTorrent(); p.max_uploads = pref->getMaxUploadsPerTorrent(); - if (addData.savePath.isEmpty()) { - addData.savePath = m_defaultSavePath; - if (m_appendLabelToSavePath && !addData.label.isEmpty()) - addData.savePath += QString("%1/").arg(addData.label); - } - else if (!addData.savePath.endsWith("/")) { - addData.savePath += "/"; - } - QString savePath; // Set actual save path (e.g. temporary folder) if (isTempPathEnabled() && !addData.disableTempPath && !addData.hasSeedStatus) @@ -2490,3 +2481,33 @@ void torrentQueuePositionBottom(const libt::torrent_handle &handle) qDebug() << Q_FUNC_INFO << " fails: " << exc.what(); } } + +AddTorrentData Session::addDataFromParams(const AddTorrentParams ¶ms) +{ + AddTorrentData data; + + data.resumed = false; + data.name = params.name; + data.label = params.label; + data.savePath = params.savePath; + data.disableTempPath = params.disableTempPath; + data.sequential = params.sequential; + data.hasSeedStatus = params.skipChecking; // do not react on 'torrent_finished_alert' when skipping + data.skipChecking = params.skipChecking; + data.addForced = params.addForced; + data.addPaused = params.addPaused; + data.filePriorities = params.filePriorities; + data.ratioLimit = params.ignoreShareRatio ? TorrentHandle::NO_RATIO_LIMIT : TorrentHandle::USE_GLOBAL_RATIO; + + // normalize save path + if (data.savePath.isEmpty()) { + data.savePath = m_defaultSavePath; + if (m_appendLabelToSavePath && !data.label.isEmpty()) + data.savePath += QString("%1/").arg(data.label); + } + else if (!data.savePath.endsWith("/")) { + data.savePath += "/"; + } + + return data; +} diff --git a/src/core/bittorrent/session.h b/src/core/bittorrent/session.h index 33ed8a5d2..4b22415ae 100644 --- a/src/core/bittorrent/session.h +++ b/src/core/bittorrent/session.h @@ -321,6 +321,8 @@ namespace BitTorrent void dispatchAlerts(std::auto_ptr alertPtr); void getPendingAlerts(QVector &out, ulong time = 0); + AddTorrentData addDataFromParams(const AddTorrentParams ¶ms); + // BitTorrent libtorrent::session *m_nativeSession; diff --git a/src/core/bittorrent/torrenthandle.cpp b/src/core/bittorrent/torrenthandle.cpp index 9af65834b..65c62202b 100644 --- a/src/core/bittorrent/torrenthandle.cpp +++ b/src/core/bittorrent/torrenthandle.cpp @@ -122,26 +122,6 @@ TorrentState::operator int() const return m_value; } -// AddTorrentData - -AddTorrentData::AddTorrentData() {} - -AddTorrentData::AddTorrentData(const AddTorrentParams &in) - : resumed(false) - , name(in.name) - , label(in.label) - , savePath(in.savePath) - , disableTempPath(in.disableTempPath) - , sequential(in.sequential) - , hasSeedStatus(in.skipChecking) // do not react on 'torrent_finished_alert' when skipping - , skipChecking(in.skipChecking) - , addForced(in.addForced) - , addPaused(in.addPaused) - , filePriorities(in.filePriorities) - , ratioLimit(in.ignoreShareRatio ? TorrentHandle::NO_RATIO_LIMIT : TorrentHandle::USE_GLOBAL_RATIO) -{ -} - // TorrentHandle #define SAFE_CALL(func, ...) \ @@ -892,12 +872,12 @@ int TorrentHandle::leechsCount() const int TorrentHandle::totalSeedsCount() const { - return m_nativeStatus.list_seeds; + return m_nativeStatus.list_seeds; } int TorrentHandle::totalPeersCount() const { - return m_nativeStatus.list_peers; + return m_nativeStatus.list_peers; } int TorrentHandle::totalLeechersCount() const diff --git a/src/core/bittorrent/torrenthandle.h b/src/core/bittorrent/torrenthandle.h index ced4ee598..19dad1384 100644 --- a/src/core/bittorrent/torrenthandle.h +++ b/src/core/bittorrent/torrenthandle.h @@ -97,9 +97,6 @@ namespace BitTorrent QVector filePriorities; // for resumed torrents qreal ratioLimit; - - AddTorrentData(); - AddTorrentData(const AddTorrentParams &in); }; struct TrackerInfo