1 /*
2 SPDX-FileCopyrightText: 2003-2005 Ralf Hoelzer <ralf@well.com>
3
4 SPDX-License-Identifier: LGPL-2.1-or-later
5 */
6
7 #include "sweeper.h"
8
9 #include "privacyaction.h"
10 #include "privacyfunctions.h"
11 #include "sweeperadaptor.h"
12
13 #include <KActionCollection>
14 #include <KConfig>
15 #include <KMessageBox>
16 #include <KSharedConfig>
17 #include <KStandardAction>
18 #include <QDBusConnection>
19
Sweeper(bool automatic)20 Sweeper::Sweeper(bool automatic)
21 : KXmlGuiWindow(nullptr)
22 , m_generalCLI(new QTreeWidgetItem(QStringList(i18nc("General system content", "General"))))
23 , m_webbrowsingCLI(new QTreeWidgetItem(QStringList(i18nc("Web browsing content", "Web Browsing"))))
24 , m_privacyConfGroup(KSharedConfig::openConfig(QStringLiteral("kprivacyrc"), KConfig::NoGlobals), "Cleaning")
25 , m_automatic(automatic)
26 {
27 auto mainWidget = new QWidget(this);
28 ui.setupUi(mainWidget);
29 setCentralWidget(mainWidget);
30
31 QTreeWidget *sw = ui.privacyListView;
32
33 KStandardAction::quit(this, &Sweeper::close, actionCollection());
34
35 createGUI(QStringLiteral("sweeperui.rc"));
36
37 setAutoSaveSettings();
38
39 sw->addTopLevelItem(m_generalCLI);
40 sw->addTopLevelItem(m_webbrowsingCLI);
41
42 m_generalCLI->setExpanded(true);
43 m_webbrowsingCLI->setExpanded(true);
44
45 this->InitActions();
46
47
48 connect(ui.cleanupButton, &QPushButton::clicked, this, &Sweeper::cleanup);
49 connect(ui.selectAllButton, &QPushButton::clicked, this, &Sweeper::selectAll);
50 connect(ui.selectNoneButton, &QPushButton::clicked, this, &Sweeper::selectNone);
51
52 new KsweeperAdaptor(this);
53 QDBusConnection::sessionBus().registerObject(QStringLiteral("/ksweeper"), this);
54
55 load();
56
57 if(automatic) {
58 cleanup();
59 close();
60 }
61 }
62
63
~Sweeper()64 Sweeper::~Sweeper()
65 {
66 save();
67 }
68
69
load()70 void Sweeper::load()
71 {
72 for (auto &&act: checklist) {
73 act->setCheckState(0, m_privacyConfGroup.readEntry(act->configKey(), true) ? Qt::Checked : Qt::Unchecked);
74 }
75 }
76
save()77 void Sweeper::save()
78 {
79 for (auto &&act: checklist) {
80 m_privacyConfGroup.writeEntry(act->configKey(), act->checkState(0) == Qt::Checked);
81 }
82
83 m_privacyConfGroup.sync();
84 }
85
selectAll()86 void Sweeper::selectAll()
87 {
88 for (auto &&act: checklist) {
89 act->setCheckState(0, Qt::Checked);
90 }
91 }
92
selectNone()93 void Sweeper::selectNone()
94 {
95 for (auto &&act: checklist) {
96 act->setCheckState(0, Qt::Unchecked);
97 }
98 }
99
cleanup()100 void Sweeper::cleanup()
101 {
102 if (!m_automatic) {
103 if (KMessageBox::warningContinueCancel(this, i18n("You are deleting data that is potentially valuable to you. Are you sure?")) != KMessageBox::Continue) {
104 return;
105 }
106 }
107
108 ui.statusTextEdit->clear();
109 ui.statusTextEdit->setText(i18n("Starting cleanup..."));
110
111 for (auto &&act: checklist) {
112 if(act->checkState(0) == Qt::Checked) {
113 QString statusText = i18n("Clearing %1...", act->text(0));
114 ui.statusTextEdit->append(statusText);
115
116 // actions return whether they were successful
117 if(!act->action()) {
118 QString errorText = i18n("Clearing of %1 failed: %2", act->text(0), act->getErrMsg());
119 ui.statusTextEdit->append(errorText);
120 }
121 }
122 }
123
124 ui.statusTextEdit->append(i18n("Clean up finished."));
125 }
126
InitActions()127 void Sweeper::InitActions() {
128 // store all entries in a list for easy access later on
129 if (QDBusConnection::sessionBus().interface()->isServiceRegistered(QStringLiteral("org.kde.klipper"))) {
130 checklist.append(new ClearSavedClipboardContentsAction(m_generalCLI));
131 }
132 checklist.append(new ClearRecentDocumentsAction(m_generalCLI));
133 checklist.append(new ClearRunCommandHistoryAction(m_generalCLI));
134 if (QDBusConnection::sessionBus().interface()->isServiceRegistered(QStringLiteral("org.kde.ActivityManager"))) {
135 checklist.append( new ClearRecentApplicationAction( m_generalCLI ) );
136 }
137 checklist.append(new ClearThumbnailsAction(m_generalCLI));
138
139 checklist.append(new ClearAllCookiesAction(m_webbrowsingCLI));
140 checklist.append(new ClearFaviconsAction(m_webbrowsingCLI));
141 checklist.append(new ClearWebHistoryAction(m_webbrowsingCLI));
142 checklist.append(new ClearWebCacheAction(m_webbrowsingCLI));
143 checklist.append(new ClearFormCompletionAction(m_webbrowsingCLI));
144 checklist.append(new ClearAllCookiesPoliciesAction(m_webbrowsingCLI));
145
146 ui.privacyListView->resizeColumnToContents(0);
147 }
148
149 // kate: tab-width 3; indent-mode cstyle; replace-tabs true;
150