Fix default save path for magnet. Closes #4105.

This commit is contained in:
Vladimir Golovnev (Glassez) 2015-11-14 09:38:01 +03:00
parent 84f6a82d98
commit e183c12bed
4 changed files with 40 additions and 40 deletions

View file

@ -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 &params)
// 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 &params)
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 &params)
{
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;
}

View file

@ -321,6 +321,8 @@ namespace BitTorrent
void dispatchAlerts(std::auto_ptr<libtorrent::alert> alertPtr);
void getPendingAlerts(QVector<libtorrent::alert *> &out, ulong time = 0);
AddTorrentData addDataFromParams(const AddTorrentParams &params);
// BitTorrent
libtorrent::session *m_nativeSession;

View file

@ -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

View file

@ -97,9 +97,6 @@ namespace BitTorrent
QVector<int> filePriorities;
// for resumed torrents
qreal ratioLimit;
AddTorrentData();
AddTorrentData(const AddTorrentParams &in);
};
struct TrackerInfo