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