mirror of
https://invent.kde.org/system/dolphin
synced 2024-07-04 17:30:55 +00:00
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
This commit is contained in:
parent
a5ce798f28
commit
c3b914a7fa
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue
Block a user