From 91a38193f5feec9c7852ba3ccf09b773574a98cf Mon Sep 17 00:00:00 2001 From: "Vladimir Golovnev (Glassez)" Date: Wed, 26 Apr 2017 13:15:37 +0300 Subject: [PATCH] Remove torrent temp folder when torrent is deleted --- src/base/bittorrent/session.cpp | 18 ++++++++++++------ src/base/utils/fs.cpp | 12 +++++++----- src/base/utils/fs.h | 2 +- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/base/bittorrent/session.cpp b/src/base/bittorrent/session.cpp index f0a45f003..51cf84d17 100644 --- a/src/base/bittorrent/session.cpp +++ b/src/base/bittorrent/session.cpp @@ -1391,7 +1391,14 @@ bool Session::deleteTorrent(const QString &hash, bool deleteLocalFiles) // Remove it from session if (deleteLocalFiles) { - m_savePathsToRemove[torrent->hash()] = torrent->rootPath(true); + if (torrent->savePath(true) == torrentTempPath(torrent->hash())) { + m_savePathsToRemove[torrent->hash()] = torrent->savePath(true); + } + else { + QString rootPath = torrent->rootPath(true); + if (!rootPath.isEmpty()) + m_savePathsToRemove[torrent->hash()] = rootPath; + } m_nativeSession->remove_torrent(torrent->nativeHandle(), libt::session::delete_files); } else { @@ -3363,17 +3370,16 @@ void Session::handleTorrentRemovedAlert(libt::torrent_removed_alert *p) void Session::handleTorrentDeletedAlert(libt::torrent_deleted_alert *p) { - m_savePathsToRemove.remove(p->info_hash); + const QString path = m_savePathsToRemove.take(p->info_hash); + if (path == torrentTempPath(p->info_hash)) + Utils::Fs::smartRemoveEmptyFolderTree(path); } void Session::handleTorrentDeleteFailedAlert(libt::torrent_delete_failed_alert *p) { // libtorrent won't delete the directory if it contains files not listed in the torrent, // so we remove the directory ourselves - if (m_savePathsToRemove.contains(p->info_hash)) { - QString path = m_savePathsToRemove.take(p->info_hash); - Utils::Fs::smartRemoveEmptyFolderTree(path); - } + Utils::Fs::smartRemoveEmptyFolderTree(m_savePathsToRemove.take(p->info_hash)); } void Session::handleMetadataReceivedAlert(libt::metadata_received_alert *p) diff --git a/src/base/utils/fs.cpp b/src/base/utils/fs.cpp index a3733c2b5..5ed079539 100644 --- a/src/base/utils/fs.cpp +++ b/src/base/utils/fs.cpp @@ -119,7 +119,7 @@ QString Utils::Fs::folderName(const QString& file_path) */ bool Utils::Fs::smartRemoveEmptyFolderTree(const QString& path) { - if (!QDir(path).exists()) + if (path.isEmpty() || !QDir(path).exists()) return false; static const QStringList deleteFilesList = { @@ -180,12 +180,14 @@ bool Utils::Fs::forceRemove(const QString& file_path) * Removes directory and its content recursively. * */ -void Utils::Fs::removeDirRecursive(const QString& dirName) +void Utils::Fs::removeDirRecursive(const QString &path) { +if (path.isEmpty()) + return; #ifdef QBT_USES_QT5 - QDir(dirName).removeRecursively(); + QDir(path).removeRecursively(); #else - QDir dir(dirName); + QDir dir(path); if (!dir.exists()) return; @@ -198,7 +200,7 @@ void Utils::Fs::removeDirRecursive(const QString& dirName) else forceRemove(info.absoluteFilePath()); } - dir.rmdir(dirName); + dir.rmdir(path); #endif } diff --git a/src/base/utils/fs.h b/src/base/utils/fs.h index 3ee9fec5a..c1d3ef344 100644 --- a/src/base/utils/fs.h +++ b/src/base/utils/fs.h @@ -58,7 +58,7 @@ namespace Utils bool smartRemoveEmptyFolderTree(const QString& path); bool forceRemove(const QString& file_path); - void removeDirRecursive(const QString& dirName); + void removeDirRecursive(const QString& path); /* Ported from Qt4 to drop dependency on QtGui */ QString QDesktopServicesDataLocation();