#include "dolphintrash.h"
-#include <QList>
-#include <KNotification>
#include <KConfig>
#include <KConfigGroup>
+#include <KIO/DeleteOrTrashJob>
#include <KLocalizedString>
+#include <KNotification>
+#include <Solid/Device>
+#include <Solid/DeviceNotifier>
+#include <Solid/StorageAccess>
-#include <kio_version.h>
-#if KIO_VERSION >= QT_VERSION_CHECK(5, 100, 0)
-#include <KIO/DeleteOrTrashJob>
-#else
-#include <KIO/JobUiDelegate>
-#include <KJobWidgets>
-#endif
+#include <QList>
Trash::Trash()
: m_trashDirLister(new KDirLister())
};
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:/")));
}
i18n("Trash Emptied"),
i18n("The Trash was emptied."),
QStringLiteral("user-trash"),
- nullptr,
KNotification::DefaultEvent);
}
void Trash::empty(QWidget *window)
{
-#if KIO_VERSION >= QT_VERSION_CHECK(5, 100, 0)
using Iface = KIO::AskUserActionInterface;
auto *emptyJob = new KIO::DeleteOrTrashJob(QList<QUrl>{}, Iface::EmptyTrash, Iface::DefaultConfirmation, window);
QObject::connect(emptyJob, &KIO::Job::result, notifyEmptied);
emptyJob->start();
-#else
- KIO::JobUiDelegate uiDelegate;
- uiDelegate.setWindow(window);
- bool confirmed = uiDelegate.askDeleteConfirmation(QList<QUrl>(), KIO::JobUiDelegate::EmptyTrash, KIO::JobUiDelegate::DefaultConfirmation);
- if (confirmed) {
- KIO::Job* job = KIO::emptyTrash();
- KJobWidgets::setWindow(job, window);
- job->uiDelegate()->setAutoErrorHandlingEnabled(true);
- QObject::connect(emptyJob, &KIO::Job::result, notifyEmptied);
- }
-#endif
}
bool Trash::isEmpty()
{
KConfig trashConfig(QStringLiteral("trashrc"), KConfig::SimpleConfig);
- return (trashConfig.group("Status").readEntry("Empty", true));
+ return (trashConfig.group(QStringLiteral("Status")).readEntry("Empty", true));
}
+#include "moc_dolphintrash.cpp"