┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/trash/dolphintrash.cpp
diff options
context:
space:
mode:
authorRoman Inflianskas <[email protected]>2018-03-03 19:44:56 +0300
committerRoman Inflianskas <[email protected]>2018-03-11 17:32:33 +0300
commitf16fbcba4e9ed3cd48cb2c1a40c01daf1d511f4b (patch)
tree2dd71c3a19bb24ff82fc7d655f42c5040294a520 /src/trash/dolphintrash.cpp
parent0c9343d614872b88da59a7c1a18d19c8df83739f (diff)
Add Trash (empty, isEmpty, emptinessChanged)
Summary: Add `Trash` class to handle all trash operations. Reviewers: elvisangelaccio, markg, ngraham Reviewed By: elvisangelaccio, markg, ngraham Subscribers: ngraham, markg, rkflx, elvisangelaccio, #dolphin Differential Revision: https://phabricator.kde.org/D11012
Diffstat (limited to 'src/trash/dolphintrash.cpp')
-rw-r--r--src/trash/dolphintrash.cpp81
1 files changed, 81 insertions, 0 deletions
diff --git a/src/trash/dolphintrash.cpp b/src/trash/dolphintrash.cpp
new file mode 100644
index 000000000..10d9badf5
--- /dev/null
+++ b/src/trash/dolphintrash.cpp
@@ -0,0 +1,81 @@
+/***************************************************************************
+ * Copyright (C) 2012 by Peter Penz <[email protected]> *
+ * Copyright (C) 2018 by Roman Inflianskas <[email protected]> *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
+ ***************************************************************************/
+
+#include "dolphintrash.h"
+
+#include <KIO/JobUiDelegate>
+#include <KJobWidgets>
+#include <QList>
+#include <KNotification>
+#include <KConfig>
+#include <KConfigGroup>
+
+
+Trash::Trash()
+ : m_trashDirLister(new KDirLister())
+{
+ // The trash icon must always be updated dependent on whether
+ // the trash is empty or not. We use a KDirLister that automatically
+ // watches for changes if the number of items has been changed.
+ m_trashDirLister->setAutoErrorHandlingEnabled(false, nullptr);
+ m_trashDirLister->setDelayedMimeTypes(true);
+ auto trashDirContentChanged = [this]() {
+ bool isTrashEmpty = m_trashDirLister->items().isEmpty();
+ emit emptinessChanged(isTrashEmpty);
+ };
+ connect(m_trashDirLister, static_cast<void(KDirLister::*)()>(&KDirLister::completed), trashDirContentChanged);
+ m_trashDirLister->openUrl(QStringLiteral("trash:/"));
+}
+
+Trash::~Trash()
+{
+ delete m_trashDirLister;
+}
+
+Trash &Trash::instance()
+{
+ static Trash result;
+ return result;
+}
+
+KIO::Job *Trash::empty(QWidget *window)
+{
+ 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);
+ // as long as KIO doesn't do this, do it ourselves
+ connect(job, &KIO::Job::result, [](){
+ KNotification::event(QStringLiteral("Trash: emptied"), QString(), QPixmap(), nullptr, KNotification::DefaultEvent);
+ });
+ return job;
+ }
+ return nullptr;
+}
+
+bool Trash::isEmpty()
+{
+ KConfig trashConfig(QStringLiteral("trashrc"), KConfig::SimpleConfig);
+ return (trashConfig.group("Status").readEntry("Empty", true));
+}
+