]> cloud.milkyroute.net Git - dolphin.git/commitdiff
dolphintrash.cpp: Update trash dir on device changes
authorAkseli Lahtinen <akselmo@akselmo.dev>
Tue, 17 Sep 2024 09:28:49 +0000 (09:28 +0000)
committerMéven Car <meven@kde.org>
Tue, 17 Sep 2024 09:28:49 +0000 (09:28 +0000)
Make sure we update the trash directory when storage devices are added/changed.
This ensures that whenever a mounted device, for example
USB stick is mounted/unmounted, the contents are properly
updated in the trash folder as well.

Otherwise the trash folder and USB stick trash folder will get
out of sync, making the trash folder behavior unpredictable.

BUG:493247

src/trash/dolphintrash.cpp

index 0bb61ff28cdc5c044417e6ef3c3479f1406ccadb..8f57e6c00428ed3dd531a366146403fedbdb44ff 100644 (file)
@@ -12,6 +12,9 @@
 #include <KIO/DeleteOrTrashJob>
 #include <KLocalizedString>
 #include <KNotification>
 #include <KIO/DeleteOrTrashJob>
 #include <KLocalizedString>
 #include <KNotification>
+#include <Solid/Device>
+#include <Solid/DeviceNotifier>
+#include <Solid/StorageAccess>
 
 #include <QList>
 
 
 #include <QList>
 
@@ -29,6 +32,26 @@ Trash::Trash()
     };
     connect(m_trashDirLister, &KCoreDirLister::completed, this, trashDirContentChanged);
     connect(m_trashDirLister, &KDirLister::itemsDeleted, this, trashDirContentChanged);
     };
     connect(m_trashDirLister, &KCoreDirLister::completed, this, trashDirContentChanged);
     connect(m_trashDirLister, &KDirLister::itemsDeleted, this, trashDirContentChanged);
+
+    // Update trash directory when removable storage devices are changed to keep it in sync with the
+    // storage device .Trash-1000 folders
+    Solid::DeviceNotifier *notifier = Solid::DeviceNotifier::instance();
+    connect(notifier, &Solid::DeviceNotifier::deviceAdded, this, [this](const QString &device) {
+        const Solid::Device dev(device);
+        if (dev.isValid() && dev.is<Solid::StorageAccess>()) {
+            const Solid::StorageAccess *access = dev.as<Solid::StorageAccess>();
+            connect(access, &Solid::StorageAccess::accessibilityChanged, this, [this]() {
+                m_trashDirLister->updateDirectory(QUrl(QStringLiteral("trash:/")));
+            });
+        }
+    });
+    connect(notifier, &Solid::DeviceNotifier::deviceRemoved, this, [this](const QString &device) {
+        const Solid::Device dev(device);
+        if (dev.isValid() && dev.is<Solid::StorageAccess>()) {
+            m_trashDirLister->updateDirectory(QUrl(QStringLiteral("trash:/")));
+        }
+    });
+
     m_trashDirLister->openUrl(QUrl(QStringLiteral("trash:/")));
 }
 
     m_trashDirLister->openUrl(QUrl(QStringLiteral("trash:/")));
 }