diff options
| author | David Hallas <[email protected]> | 2019-03-23 09:16:17 +0100 |
|---|---|---|
| committer | David Hallas <[email protected]> | 2019-10-27 06:52:25 +0100 |
| commit | c3b914a7faed3a7c0195ae77b40204cbc8d31fe5 (patch) | |
| tree | f681dc6f550def5f5cfae9ee346d9fffa283ef1c | |
| parent | a5ce798f282b6cf9e153bba89f9caea0cec37da0 (diff) | |
Unmounting busy device doesn't tell who is blocking
Summary: Unmounting a busy device from the places panel doesn't tell which applications have open files blocking the unmount.
Test Plan:
Mount a USB stick using Dolphin
Open a file from the USB stick
Unmount the USB stick using Dolphin
Observe the new error message.
FEATURE: 189302
Reviewers: #dolphin, elvisangelaccio, ngraham, broulik, meven
Reviewed By: #dolphin, elvisangelaccio, meven
Subscribers: meven, davidedmundson, kfm-devel
Tags: #dolphin
Differential Revision: https://phabricator.kde.org/D19989
| -rw-r--r-- | CMakeLists.txt | 2 | ||||
| -rw-r--r-- | src/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | src/panels/places/placesitemmodel.cpp | 26 |
3 files changed, 27 insertions, 2 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 90c1df10e..88ccca256 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,7 +8,7 @@ set (KDE_APPLICATIONS_VERSION "${KDE_APPLICATIONS_VERSION_MAJOR}.${KDE_APPLICATI project(Dolphin VERSION ${KDE_APPLICATIONS_VERSION}) set(QT_MIN_VERSION "5.11.0") -set(KF5_MIN_VERSION "5.61.0") +set(KF5_MIN_VERSION "5.63.0") # ECM setup find_package(ECM ${KF5_MIN_VERSION} CONFIG REQUIRED) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 8bbb081cd..14701a1f4 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -274,6 +274,7 @@ add_library(dolphinstatic STATIC ${dolphinstatic_SRCS}) target_include_directories(dolphinstatic SYSTEM PRIVATE ${PHONON_INCLUDES}) target_link_libraries(dolphinstatic dolphinprivate + KF5::CoreAddons KF5::KCMUtils KF5::DBusAddons KF5::Notifications diff --git a/src/panels/places/placesitemmodel.cpp b/src/panels/places/placesitemmodel.cpp index e8636942b..c0cef9315 100644 --- a/src/panels/places/placesitemmodel.cpp +++ b/src/panels/places/placesitemmodel.cpp @@ -36,6 +36,8 @@ #include <KUrlMimeData> #include <Solid/DeviceNotifier> #include <Solid/OpticalDrive> +#include <KCoreAddons/KProcessList> +#include <KCoreAddons/KListOpenFilesJob> #include <QAction> #include <QIcon> @@ -474,7 +476,29 @@ void PlacesItemModel::updateItem(PlacesItem *item, const QModelIndex &index) void PlacesItemModel::slotStorageTearDownDone(Solid::ErrorType error, const QVariant& errorData) { if (error && errorData.isValid()) { - emit errorMessage(errorData.toString()); + if (error == Solid::ErrorType::DeviceBusy) { + KListOpenFilesJob* listOpenFilesJob = new KListOpenFilesJob(m_deviceToTearDown->filePath()); + connect(listOpenFilesJob, &KIO::Job::result, this, [this, listOpenFilesJob](KJob*) { + const KProcessList::KProcessInfoList blockingProcesses = listOpenFilesJob->processInfoList(); + QString errorString; + if (blockingProcesses.isEmpty()) { + errorString = i18n("One or more files on this device are open within an application."); + } else { + QStringList blockingApps; + for (const auto& process : blockingProcesses) { + blockingApps << process.name(); + } + blockingApps.removeDuplicates(); + errorString = xi18np("One or more files on this device are opened in application <application>\"%2\"</application>.", + "One or more files on this device are opened in following applications: <application>%2</application>.", + blockingApps.count(), blockingApps.join(i18nc("separator in list of apps blocking device unmount", ", "))); + } + emit errorMessage(errorString); + }); + listOpenFilesJob->start(); + } else { + emit errorMessage(errorData.toString()); + } } disconnect(m_deviceToTearDown, &Solid::StorageAccess::teardownDone, this, &PlacesItemModel::slotStorageTearDownDone); |
