[PATCH] applets/devicenotifier: fix pointless mount action
authorNate Graham <nate@kde.org>
Thu, 15 May 2025 21:30:30 +0000 (15:30 -0600)
committerAurélien COUDERC <coucouf@debian.org>
Tue, 20 May 2025 06:31:26 +0000 (08:31 +0200)
BUG: 503999

Audio CD and blank CD/DVD/BD does not have storage access.
So check this before add mount action for them.

(cherry picked from commit 683b8c3d71781c4e821cd2f9ac93eb4f157bb6ea)

Co-authored-by: Bohdan Onofriichuk <bogdan.onofriuchuk@gmail.com>
Gbp-Pq: Name upstream_60859fa9_applets-devicenotifier-fix-pointless-mount-action.patch

applets/devicenotifier/plugin/actions/mountaction.cpp
applets/devicenotifier/plugin/actions/mountaction.h

index 4df5c982042593275a86b7b6209d82604d221c96..88d3d89819142817eb85f8529581d8fb5d7b578a 100644 (file)
@@ -18,6 +18,8 @@
 MountAction::MountAction(const QString &udi, QObject *parent)
     : ActionInterface(udi, parent)
     , m_stateMonitor(DevicesStateMonitor::instance())
+    , m_supportsMTP(false)
+    , m_hasStorageAccess(false)
 {
     Solid::Device device(udi);
 
@@ -39,6 +41,15 @@ MountAction::MountAction(const QString &udi, QObject *parent)
 
     m_supportsMTP = supportedProtocols.contains(QLatin1String("mtp"));
 
+    // It's possible for there to be no StorageAccess (e.g. MTP devices don't have one)
+    if (device.is<Solid::StorageAccess>()) {
+        Solid::StorageAccess *access = device.as<Solid::StorageAccess>();
+        if (access) {
+            qCDebug(APPLETS::DEVICENOTIFIER) << "Mount action: have storage access";
+            m_hasStorageAccess = true;
+        }
+    }
+
     connect(m_stateMonitor.get(), &DevicesStateMonitor::stateChanged, this, &MountAction::updateIsValid);
 }
 
@@ -67,7 +78,7 @@ void MountAction::triggered()
 
 bool MountAction::isValid() const
 {
-    return m_stateMonitor->isRemovable(m_udi) && !m_stateMonitor->isMounted(m_udi) && !m_supportsMTP;
+    return m_hasStorageAccess && m_stateMonitor->isRemovable(m_udi) && !m_stateMonitor->isMounted(m_udi) && !m_supportsMTP;
 }
 
 void MountAction::updateIsValid(const QString &udi)
index c7f744f18397fe1f808158489086f811766ce73d..a76ee2f5b04a45d62bbfa11c7acc9e8f613bf6b8 100644 (file)
@@ -33,6 +33,7 @@ private Q_SLOTS:
 
 private:
     bool m_supportsMTP;
+    bool m_hasStorageAccess;
 
     std::shared_ptr<DevicesStateMonitor> m_stateMonitor;
 };