1 /*
2 SPDX-FileCopyrightText: 2012-2021 Laurent Montel <montel@kde.org>
3
4 SPDX-License-Identifier: GPL-2.0-or-later
5 */
6 #include "abstractsettings.h"
7 #include "abstractdisplayinfo.h"
8
9 #include <KIdentityManagement/Identity>
10 #include <KIdentityManagement/IdentityManager>
11 #include <MailTransport/TransportManager>
12
13 #include <KLocalizedString>
14
15 #include <Akonadi/AgentInstanceCreateJob>
16 #include <Akonadi/AgentManager>
17 #include <Akonadi/AgentType>
18
19 #include <QMetaMethod>
20
21 using namespace Akonadi;
22
AbstractSettings()23 AbstractSettings::AbstractSettings()
24 {
25 mManager = KIdentityManagement::IdentityManager::self();
26 mKmailConfig = KSharedConfig::openConfig(QStringLiteral("kmail2rc"));
27 }
28
~AbstractSettings()29 AbstractSettings::~AbstractSettings()
30 {
31 syncKmailConfig();
32 }
33
createIdentity(QString & name)34 KIdentityManagement::Identity *AbstractSettings::createIdentity(QString &name)
35 {
36 name = uniqueIdentityName(name);
37 KIdentityManagement::Identity *identity = &mManager->newFromScratch(name);
38 addImportInfo(i18n("Setting up identity..."));
39 return identity;
40 }
41
storeIdentity(KIdentityManagement::Identity * identity)42 void AbstractSettings::storeIdentity(KIdentityManagement::Identity *identity)
43 {
44 mManager->setAsDefault(identity->uoid());
45 mManager->commit();
46 addImportInfo(i18n("Identity set up."));
47 }
48
uniqueIdentityName(const QString & name)49 QString AbstractSettings::uniqueIdentityName(const QString &name)
50 {
51 QString newName(name);
52 int i = 0;
53 while (!mManager->isUnique(newName)) {
54 newName = QStringLiteral("%1_%2").arg(name).arg(i);
55 ++i;
56 }
57 return newName;
58 }
59
createTransport()60 MailTransport::Transport *AbstractSettings::createTransport()
61 {
62 MailTransport::Transport *mt = MailTransport::TransportManager::self()->createTransport();
63 addImportInfo(i18n("Setting up transport..."));
64 return mt;
65 }
66
storeTransport(MailTransport::Transport * mt,bool isDefault)67 void AbstractSettings::storeTransport(MailTransport::Transport *mt, bool isDefault)
68 {
69 mt->forceUniqueName();
70 mt->save();
71 MailTransport::TransportManager::self()->addTransport(mt);
72 if (isDefault) {
73 MailTransport::TransportManager::self()->setDefaultTransport(mt->id());
74 }
75 addImportInfo(i18n("Transport set up."));
76 }
77
addImportInfo(const QString & log)78 void AbstractSettings::addImportInfo(const QString &log)
79 {
80 Q_ASSERT_X(mAbstractDisplayInfo, __FUNCTION__, "mAbstractDisplayInfo is not setting");
81 if (mAbstractDisplayInfo) {
82 mAbstractDisplayInfo->settingsImportInfo(log);
83 }
84 }
85
addImportError(const QString & log)86 void AbstractSettings::addImportError(const QString &log)
87 {
88 Q_ASSERT_X(mAbstractDisplayInfo, __FUNCTION__, "mAbstractDisplayInfo is not setting");
89 if (mAbstractDisplayInfo) {
90 mAbstractDisplayInfo->settingsImportError(log);
91 }
92 }
93
addCheckMailOnStartup(const QString & agentIdentifyName,bool loginAtStartup)94 void AbstractSettings::addCheckMailOnStartup(const QString &agentIdentifyName, bool loginAtStartup)
95 {
96 if (agentIdentifyName.isEmpty()) {
97 return;
98 }
99 const QString groupName = QStringLiteral("Resource %1").arg(agentIdentifyName);
100 addKmailConfig(groupName, QStringLiteral("CheckOnStartup"), loginAtStartup);
101 }
102
addToManualCheck(const QString & agentIdentifyName,bool manualCheck)103 void AbstractSettings::addToManualCheck(const QString &agentIdentifyName, bool manualCheck)
104 {
105 if (agentIdentifyName.isEmpty()) {
106 return;
107 }
108 const QString groupName = QStringLiteral("Resource %1").arg(agentIdentifyName);
109 addKmailConfig(groupName, QStringLiteral("IncludeInManualChecks"), manualCheck);
110 }
111
addComposerHeaderGroup(const QString & groupName,const QString & name,const QString & value)112 void AbstractSettings::addComposerHeaderGroup(const QString &groupName, const QString &name, const QString &value)
113 {
114 KConfigGroup group = mKmailConfig->group(groupName);
115 group.writeEntry(QStringLiteral("name"), name);
116 group.writeEntry(QStringLiteral("value"), value);
117 }
118
addKmailConfig(const QString & groupName,const QString & key,const QString & value)119 void AbstractSettings::addKmailConfig(const QString &groupName, const QString &key, const QString &value)
120 {
121 KConfigGroup group = mKmailConfig->group(groupName);
122 group.writeEntry(key, value);
123 }
124
addKmailConfig(const QString & groupName,const QString & key,bool value)125 void AbstractSettings::addKmailConfig(const QString &groupName, const QString &key, bool value)
126 {
127 KConfigGroup group = mKmailConfig->group(groupName);
128 group.writeEntry(key, value);
129 }
130
addKmailConfig(const QString & groupName,const QString & key,int value)131 void AbstractSettings::addKmailConfig(const QString &groupName, const QString &key, int value)
132 {
133 KConfigGroup group = mKmailConfig->group(groupName);
134 group.writeEntry(key, value);
135 }
136
syncKmailConfig()137 void AbstractSettings::syncKmailConfig()
138 {
139 mKmailConfig->sync();
140 }
141
readKmailSettings(const QString & groupName,const QString & key)142 int AbstractSettings::readKmailSettings(const QString &groupName, const QString &key)
143 {
144 KConfigGroup group = mKmailConfig->group(groupName);
145 int value = group.readEntry(key, -1);
146 return value;
147 }
148