Browse Source

Make meaning of "torrent root path" consistent

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

6
src/base/bittorrent/torrent.h

@ -125,8 +125,8 @@ namespace BitTorrent
virtual qlonglong wastedSize() const = 0; virtual qlonglong wastedSize() const = 0;
virtual QString currentTracker() const = 0; virtual QString currentTracker() const = 0;
// 1. savePath() - the path where all the files and subfolders of torrent are stored (as always). // 1. savePath() - the path where all the files and subfolders of torrent are stored.
// 2. rootPath() - absolute path of torrent file tree (save path + first item from 1st torrent file path). // 2. rootPath() - absolute path of torrent file tree (first common subfolder of torrent files); empty string if torrent has no root folder.
// 3. contentPath() - absolute path of torrent content (root path for multifile torrents, absolute file path for singlefile torrents). // 3. contentPath() - absolute path of torrent content (root path for multifile torrents, absolute file path for singlefile torrents).
// //
// These methods have 'actual' parameter (defaults to false) which allow to get actual or final path variant. // These methods have 'actual' parameter (defaults to false) which allow to get actual or final path variant.
@ -166,7 +166,7 @@ namespace BitTorrent
// | A | /home/user/torrents/torrentA | /home/user/torrents/torrentA | // | A | /home/user/torrents/torrentA | /home/user/torrents/torrentA |
// | A*| <empty> | /home/user/torrents | // | A*| <empty> | /home/user/torrents |
// | B | /home/user/torrents/torrentB | /home/user/torrents/torrentB/subdir1/file1 | // | B | /home/user/torrents/torrentB | /home/user/torrents/torrentB/subdir1/file1 |
// | C | /home/user/torrents/file1 | /home/user/torrents/file1 | // | C | <empty> | /home/user/torrents/file1 |
virtual QString savePath(bool actual = false) const = 0; virtual QString savePath(bool actual = false) const = 0;
virtual QString rootPath(bool actual = false) const = 0; virtual QString rootPath(bool actual = false) const = 0;

17
src/base/bittorrent/torrentimpl.cpp

@ -397,12 +397,11 @@ QString TorrentImpl::rootPath(bool actual) const
if (!hasMetadata()) if (!hasMetadata())
return {}; return {};
const QString firstFilePath = filePath(0); const QString relativeRootPath = m_torrentInfo.rootFolder();
const int slashIndex = firstFilePath.indexOf('/'); if (relativeRootPath.isEmpty())
if (slashIndex >= 0) return {};
return QDir(savePath(actual)).absoluteFilePath(firstFilePath.left(slashIndex));
else return QDir(savePath(actual)).absoluteFilePath(relativeRootPath);
return QDir(savePath(actual)).absoluteFilePath(firstFilePath);
} }
QString TorrentImpl::contentPath(const bool actual) const QString TorrentImpl::contentPath(const bool actual) const
@ -413,10 +412,8 @@ QString TorrentImpl::contentPath(const bool actual) const
if (filesCount() == 1) if (filesCount() == 1)
return QDir(savePath(actual)).absoluteFilePath(filePath(0)); return QDir(savePath(actual)).absoluteFilePath(filePath(0));
if (m_torrentInfo.hasRootFolder()) const QString rootPath = this->rootPath(actual);
return rootPath(actual); return (rootPath.isEmpty() ? savePath(actual) : rootPath);
return savePath(actual);
} }
bool TorrentImpl::isAutoTMMEnabled() const bool TorrentImpl::isAutoTMMEnabled() const

Loading…
Cancel
Save