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