diff --git a/src/qtlibtorrent/qtorrenthandle.cpp b/src/qtlibtorrent/qtorrenthandle.cpp index 658810086..1deb7cd36 100644 --- a/src/qtlibtorrent/qtorrenthandle.cpp +++ b/src/qtlibtorrent/qtorrenthandle.cpp @@ -551,6 +551,18 @@ QString QTorrentHandle::firstFileSavePath() const { return fsave_path; } +QString QTorrentHandle::root_path() const +{ + if (num_files() < 2) + return save_path(); + QString first_filepath = filepath_at(0); + const int slashIndex = first_filepath.indexOf(QRegExp("[/\\\\]")); + QString root_folder; + if (slashIndex >= 0) + return QDir(save_path()).absoluteFilePath(first_filepath.left(slashIndex)); + return save_path(); +} + bool QTorrentHandle::has_error() const { #if LIBTORRENT_VERSION_MINOR > 15 torrent_status st = torrent_handle::status(0x0); diff --git a/src/transferlistwidget.cpp b/src/transferlistwidget.cpp index 851e3f6b9..a5f10db1a 100644 --- a/src/transferlistwidget.cpp +++ b/src/transferlistwidget.cpp @@ -402,16 +402,16 @@ void TransferListWidget::hidePriorityColumn(bool hide) { } void TransferListWidget::openSelectedTorrentsFolder() const { - QStringList pathsList; + QSet pathsList; const QStringList hashes = getSelectedTorrentsHashes(); foreach (const QString &hash, hashes) { const QTorrentHandle h = BTSession->getTorrentHandle(hash); if (h.is_valid()) { - const QString savePath = h.save_path(); - qDebug("Opening path at %s", qPrintable(savePath)); - if (!pathsList.contains(savePath)) { - pathsList.append(savePath); - QDesktopServices::openUrl(QUrl::fromLocalFile(savePath)); + QString rootFolder = h.root_path(); + qDebug("Opening path at %s", qPrintable(rootFolder)); + if (!pathsList.contains(rootFolder)) { + pathsList.insert(rootFolder); + QDesktopServices::openUrl(QUrl::fromLocalFile(rootFolder)); } } }