Browse Source

Use 'fail if exist' strategy on automatic move

Prevent existing files overwriting when torrent is moved automatically (e.g. when moved from incomplete to final save path).

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

19
src/base/bittorrent/sessionimpl.cpp

@ -298,6 +298,21 @@ namespace @@ -298,6 +298,21 @@ namespace
return {};
}
#endif
constexpr lt::move_flags_t toNative(const MoveStorageMode mode)
{
switch (mode)
{
default:
Q_ASSERT(false);
case MoveStorageMode::FailIfExist:
return lt::move_flags_t::fail_if_exist;
case MoveStorageMode::KeepExistingFiles:
return lt::move_flags_t::dont_replace;
case MoveStorageMode::Overwrite:
return lt::move_flags_t::always_replace_files;
}
}
}
struct BitTorrent::SessionImpl::ResumeSessionContext final : public QObject
@ -4690,9 +4705,7 @@ void SessionImpl::moveTorrentStorage(const MoveStorageJob &job) const @@ -4690,9 +4705,7 @@ void SessionImpl::moveTorrentStorage(const MoveStorageJob &job) const
const QString torrentName = (torrent ? torrent->name() : id.toString());
LogMsg(tr("Start moving torrent. Torrent: \"%1\". Destination: \"%2\"").arg(torrentName, job.path.toString()));
job.torrentHandle.move_storage(job.path.toString().toStdString()
, ((job.mode == MoveStorageMode::Overwrite)
? lt::move_flags_t::always_replace_files : lt::move_flags_t::dont_replace));
job.torrentHandle.move_storage(job.path.toString().toStdString(), toNative(job.mode));
}
void SessionImpl::handleMoveTorrentStorageJobFinished(const Path &newPath)

2
src/base/bittorrent/torrentimpl.cpp

@ -2166,7 +2166,7 @@ void TorrentImpl::adjustStorageLocation() @@ -2166,7 +2166,7 @@ void TorrentImpl::adjustStorageLocation()
const Path targetPath = ((isFinished || downloadPath.isEmpty()) ? savePath() : downloadPath);
if ((targetPath != actualStorageLocation()) || isMoveInProgress())
moveStorage(targetPath, MoveStorageMode::Overwrite);
moveStorage(targetPath, MoveStorageMode::FailIfExist);
}
lt::torrent_handle TorrentImpl::nativeHandle() const

1
src/base/bittorrent/torrentimpl.h

@ -63,6 +63,7 @@ namespace BitTorrent @@ -63,6 +63,7 @@ namespace BitTorrent
enum class MoveStorageMode
{
FailIfExist,
KeepExistingFiles,
Overwrite
};

Loading…
Cancel
Save