1 /*
2 SPDX-FileCopyrightText: 2010-2021 Laurent Montel <montel@kde.org>
3
4 SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6
7 #include "restoreldapsettingsjob.h"
8 #include <KConfig>
9 #include <KLDAP/LdapClientSearchConfig>
10 #include <KLDAP/LdapClientSearchConfigReadConfigJob>
11 #include <KLDAP/LdapClientSearchConfigWriteConfigJob>
12 #include <QDebug>
13
RestoreLdapSettingsJob(QObject * parent)14 RestoreLdapSettingsJob::RestoreLdapSettingsJob(QObject *parent)
15 : QObject(parent)
16 {
17 }
18
~RestoreLdapSettingsJob()19 RestoreLdapSettingsJob::~RestoreLdapSettingsJob()
20 {
21 }
22
start()23 void RestoreLdapSettingsJob::start()
24 {
25 if (!canStart()) {
26 deleteLater();
27 qWarning() << "Impossible to start RestoreLdapSettingsJob";
28 Q_EMIT restoreDone();
29 return;
30 }
31 restore();
32 }
33
slotConfigSelectedHostLoaded(const KLDAP::LdapServer & server)34 void RestoreLdapSettingsJob::slotConfigSelectedHostLoaded(const KLDAP::LdapServer &server)
35 {
36 mSelHosts.append(server);
37 mCurrentIndex++;
38 loadNextSelectHostSettings();
39 }
40
loadNextSelectHostSettings()41 void RestoreLdapSettingsJob::loadNextSelectHostSettings()
42 {
43 if (mCurrentIndex < mNumSelHosts) {
44 if (mCurrentIndex != mEntry) {
45 auto job = new KLDAP::LdapClientSearchConfigReadConfigJob(this);
46 connect(job, &KLDAP::LdapClientSearchConfigReadConfigJob::configLoaded, this, &RestoreLdapSettingsJob::slotConfigSelectedHostLoaded);
47 job->setActive(true);
48 job->setConfig(mCurrentGroup);
49 job->setServerIndex(mCurrentIndex);
50 job->start();
51 } else {
52 mCurrentIndex++;
53 loadNextSelectHostSettings();
54 }
55 } else {
56 // Reset index;
57 mCurrentIndex = 0;
58 loadNextHostSettings();
59 }
60 }
61
slotConfigHostLoaded(const KLDAP::LdapServer & server)62 void RestoreLdapSettingsJob::slotConfigHostLoaded(const KLDAP::LdapServer &server)
63 {
64 mHosts.append(server);
65 mCurrentIndex++;
66 loadNextHostSettings();
67 }
68
loadNextHostSettings()69 void RestoreLdapSettingsJob::loadNextHostSettings()
70 {
71 if (mCurrentIndex < mNumHosts) {
72 auto job = new KLDAP::LdapClientSearchConfigReadConfigJob(this);
73 connect(job, &KLDAP::LdapClientSearchConfigReadConfigJob::configLoaded, this, &RestoreLdapSettingsJob::slotConfigHostLoaded);
74 job->setActive(false);
75 job->setConfig(mCurrentGroup);
76 job->setServerIndex(mCurrentIndex);
77 job->start();
78 } else {
79 saveLdapSettings();
80 }
81 }
82
restore()83 void RestoreLdapSettingsJob::restore()
84 {
85 if (mEntry >= 0) {
86 mCurrentGroup = mConfig->group(QStringLiteral("LDAP"));
87 mNumSelHosts = mCurrentGroup.readEntry(QStringLiteral("NumSelectedHosts"), 0);
88 mNumHosts = mCurrentGroup.readEntry(QStringLiteral("NumHosts"), 0);
89 loadNextSelectHostSettings();
90 } else {
91 restoreSettingsDone();
92 }
93 }
94
restoreSettingsDone()95 void RestoreLdapSettingsJob::restoreSettingsDone()
96 {
97 Q_EMIT restoreDone();
98 deleteLater();
99 }
100
saveNextSelectHostSettings()101 void RestoreLdapSettingsJob::saveNextSelectHostSettings()
102 {
103 if (mCurrentIndex < mNumSelHosts - 1) {
104 auto job = new KLDAP::LdapClientSearchConfigWriteConfigJob(this);
105 connect(job, &KLDAP::LdapClientSearchConfigWriteConfigJob::configSaved, this, &RestoreLdapSettingsJob::saveNextSelectHostSettings);
106 job->setActive(true);
107 job->setConfig(mCurrentGroup);
108 job->setServer(mSelHosts.at(mCurrentIndex));
109 job->setServerIndex(mCurrentIndex);
110 job->start();
111 } else {
112 mCurrentIndex = 0;
113 saveNextHostSettings();
114 }
115 }
116
saveNextHostSettings()117 void RestoreLdapSettingsJob::saveNextHostSettings()
118 {
119 if (mCurrentIndex < mNumHosts) {
120 auto job = new KLDAP::LdapClientSearchConfigWriteConfigJob(this);
121 connect(job, &KLDAP::LdapClientSearchConfigWriteConfigJob::configSaved, this, &RestoreLdapSettingsJob::saveNextHostSettings);
122 job->setActive(false);
123 job->setConfig(mCurrentGroup);
124 job->setServer(mHosts.at(mCurrentIndex));
125 job->setServerIndex(mCurrentIndex);
126 job->start();
127 } else {
128 mCurrentGroup.writeEntry(QStringLiteral("NumSelectedHosts"), mNumSelHosts - 1);
129 mCurrentGroup.writeEntry(QStringLiteral("NumHosts"), mNumHosts);
130 mConfig->sync();
131 restoreSettingsDone();
132 }
133 }
134
saveLdapSettings()135 void RestoreLdapSettingsJob::saveLdapSettings()
136 {
137 mConfig->deleteGroup(QStringLiteral("LDAP"));
138 mCurrentGroup = KConfigGroup(mConfig, QStringLiteral("LDAP"));
139
140 mCurrentIndex = 0;
141 saveNextSelectHostSettings();
142 }
143
entry() const144 int RestoreLdapSettingsJob::entry() const
145 {
146 return mEntry;
147 }
148
setEntry(int entry)149 void RestoreLdapSettingsJob::setEntry(int entry)
150 {
151 mEntry = entry;
152 }
153
config() const154 KConfig *RestoreLdapSettingsJob::config() const
155 {
156 return mConfig;
157 }
158
setConfig(KConfig * config)159 void RestoreLdapSettingsJob::setConfig(KConfig *config)
160 {
161 mConfig = config;
162 }
163
canStart() const164 bool RestoreLdapSettingsJob::canStart() const
165 {
166 return (mConfig != nullptr) && (mEntry != -1);
167 }
168