From 1e45b7f50baa00675287e0e143d7e78975f130a9 Mon Sep 17 00:00:00 2001 From: "Vladimir Golovnev (Glassez)" Date: Tue, 15 Feb 2022 09:31:35 +0300 Subject: [PATCH] Add fast way of removing suggested extension --- src/base/bittorrent/customstorage.cpp | 2 +- src/base/bittorrent/torrentimpl.cpp | 6 ++---- src/base/path.cpp | 10 ++++++++-- src/base/path.h | 1 + 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/base/bittorrent/customstorage.cpp b/src/base/bittorrent/customstorage.cpp index e6c24785b..9466db666 100644 --- a/src/base/bittorrent/customstorage.cpp +++ b/src/base/bittorrent/customstorage.cpp @@ -209,7 +209,7 @@ void CustomDiskIOThread::handleCompleteFiles(lt::storage_index_t storage, const { const Path incompleteFilePath = savePath / filePath; Path completeFilePath = incompleteFilePath; - completeFilePath.removeExtension(); + completeFilePath.removeExtension(QB_EXT); if (completeFilePath.exists()) { Utils::Fs::removeFile(incompleteFilePath); diff --git a/src/base/bittorrent/torrentimpl.cpp b/src/base/bittorrent/torrentimpl.cpp index e90574808..c53af8777 100644 --- a/src/base/bittorrent/torrentimpl.cpp +++ b/src/base/bittorrent/torrentimpl.cpp @@ -294,8 +294,7 @@ TorrentImpl::TorrentImpl(Session *session, lt::session *nativeSession m_indexMap[nativeIndex] = i; Path filePath {fileStorage.file_path(nativeIndex)}; - if (filePath.hasExtension(QB_EXT)) - filePath.removeExtension(); + filePath.removeExtension(QB_EXT); m_filePaths.append(filePath); const auto priority = LT::fromNative(filePriorities[LT::toUnderlyingType(nativeIndex)]); @@ -1511,8 +1510,7 @@ void TorrentImpl::endReceivedMetadataHandling(const Path &savePath, const PathLi Path filePath = fileNames.at(i); p.renamed_files[nativeIndex] = filePath.toString().toStdString(); - if (filePath.hasExtension(QB_EXT)) - filePath.removeExtension(); + filePath.removeExtension(QB_EXT); m_filePaths.append(filePath); const auto priority = LT::fromNative(filePriorities[LT::toUnderlyingType(nativeIndex)]); diff --git a/src/base/path.cpp b/src/base/path.cpp index 248fafb45..292163c98 100644 --- a/src/base/path.cpp +++ b/src/base/path.cpp @@ -149,13 +149,13 @@ QString Path::extension() const const int slashIndex = m_pathStr.lastIndexOf(QLatin1Char('/')); const auto filename = QStringView(m_pathStr).mid(slashIndex + 1); - const int dotIndex = filename.lastIndexOf(QLatin1Char('.')); + const int dotIndex = filename.lastIndexOf(QLatin1Char('.'), -2); return ((dotIndex == -1) ? QString() : filename.mid(dotIndex).toString()); } bool Path::hasExtension(const QString &ext) const { - Q_ASSERT(ext.startsWith(QLatin1Char('.'))); + Q_ASSERT(ext.startsWith(QLatin1Char('.')) && (ext.size() >= 2)); return m_pathStr.endsWith(ext, Qt::CaseInsensitive); } @@ -183,6 +183,12 @@ void Path::removeExtension() m_pathStr.chop(extension().size()); } +void Path::removeExtension(const QString &ext) +{ + if (hasExtension(ext)) + m_pathStr.chop(ext.size()); +} + QString Path::data() const { return m_pathStr; diff --git a/src/base/path.h b/src/base/path.h index 0a4d7c1f8..1abef4e02 100644 --- a/src/base/path.h +++ b/src/base/path.h @@ -58,6 +58,7 @@ public: QString extension() const; bool hasExtension(const QString &ext) const; void removeExtension(); + void removeExtension(const QString &ext); bool hasAncestor(const Path &other) const; Path relativePathOf(const Path &childPath) const;