Browse Source

Merge pull request #8955 from glassez/initial-rename

Rename torrent if content was initially renamed. Closes #8910
adaptive-webui-19844
Vladimir Golovnev 7 years ago committed by GitHub
parent
commit
1b14706b08
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 18
      src/base/bittorrent/session.cpp
  2. 21
      src/base/bittorrent/torrentinfo.cpp
  3. 1
      src/base/bittorrent/torrentinfo.h

18
src/base/bittorrent/session.cpp

@ -2149,12 +2149,26 @@ bool Session::addTorrent_impl(AddTorrentData addData, const MagnetUri &magnetUri
p = magnetUri.addTorrentParams(); p = magnetUri.addTorrentParams();
} }
else if (torrentInfo.isValid()) { else if (torrentInfo.isValid()) {
if (!addData.resumed && !addData.hasRootFolder) if (!addData.resumed) {
if (!addData.hasRootFolder)
torrentInfo.stripRootFolder(); torrentInfo.stripRootFolder();
// Metadata // Metadata
if (!addData.resumed && !addData.hasSeedStatus) if (!addData.hasSeedStatus)
findIncompleteFiles(torrentInfo, savePath); findIncompleteFiles(torrentInfo, savePath);
// if torrent name wasn't explicitly set we handle the case of
// initial renaming of torrent content and rename torrent accordingly
if (addData.name.isEmpty()) {
QString contentName = torrentInfo.rootFolder();
if (contentName.isEmpty() && (torrentInfo.filesCount() == 1))
contentName = torrentInfo.fileName(0);
if (!contentName.isEmpty() && (contentName != torrentInfo.name()))
addData.name = contentName;
}
}
p.ti = torrentInfo.nativeInfo(); p.ti = torrentInfo.nativeInfo();
hash = torrentInfo.hash(); hash = torrentInfo.hash();
} }

21
src/base/bittorrent/torrentinfo.cpp

@ -362,24 +362,29 @@ int BitTorrent::TorrentInfo::fileIndex(const QString& fileName) const
return -1; return -1;
} }
bool TorrentInfo::hasRootFolder() const QString TorrentInfo::rootFolder() const
{ {
QString testRootFolder; QString rootFolder;
for (int i = 0; i < filesCount(); ++i) { for (int i = 0; i < filesCount(); ++i) {
const QString filePath = this->filePath(i); const QString filePath = this->filePath(i);
if (QDir::isAbsolutePath(filePath)) continue; if (QDir::isAbsolutePath(filePath)) continue;
const auto filePathElements = filePath.splitRef('/'); const auto filePathElements = filePath.splitRef('/');
// if at least one file has no root folder, no common root folder exists // if at least one file has no root folder, no common root folder exists
if (filePathElements.count() <= 1) return false; if (filePathElements.count() <= 1) return "";
if (rootFolder.isEmpty())
rootFolder = filePathElements.at(0).toString();
else if (rootFolder != filePathElements.at(0))
return "";
}
if (testRootFolder.isEmpty()) return rootFolder;
testRootFolder = filePathElements.at(0).toString();
else if (testRootFolder != filePathElements.at(0))
return false;
} }
return true; bool TorrentInfo::hasRootFolder() const
{
return !rootFolder().isEmpty();
} }
void TorrentInfo::stripRootFolder() void TorrentInfo::stripRootFolder()

1
src/base/bittorrent/torrentinfo.h

@ -104,6 +104,7 @@ namespace BitTorrent
void renameFile(uint index, const QString &newPath); void renameFile(uint index, const QString &newPath);
QString rootFolder() const;
bool hasRootFolder() const; bool hasRootFolder() const;
void stripRootFolder(); void stripRootFolder();

Loading…
Cancel
Save