CalendarSupport

kcalprefs.cpp
1/*
2 SPDX-FileCopyrightText: 2001, 2003 Cornelius Schumacher <schumacher@kde.org>
3 SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
4
5 SPDX-License-Identifier: GPL-2.0-or-later WITH Qt-Commercial-exception-1.0
6*/
7
8#include "kcalprefs.h"
9#include "calendarsupport_debug.h"
10#include "identitymanager.h"
11
12#include <Akonadi/TagAttribute>
13#include <Akonadi/TagCache>
14#include <Akonadi/TagModifyJob>
15
16#include <KMime/HeaderParsing>
17
18#include <KEmailAddress>
19#include <KIdentityManagementCore/Identity>
20
21#include <KEMailSettings>
22
23using namespace CalendarSupport;
24
25Q_GLOBAL_STATIC(KCalPrefs, globalPrefs)
26
27class CalendarSupport::KCalPrefsPrivate
28{
29public:
30 KCalPrefsPrivate()
31 : mDefaultCategoryColor(QColor(151, 235, 121))
32 {
33 }
34
35 ~KCalPrefsPrivate() = default;
36
37 Akonadi::Collection::Id mDefaultCalendarId{-1};
38
39 const QColor mDefaultCategoryColor;
40 QDateTime mDayBegins;
41};
42
43KCalPrefs::KCalPrefs()
44 : d(new KCalPrefsPrivate())
45{
47}
48
49KCalPrefs::~KCalPrefs() = default;
50
51KCalPrefs *KCalPrefs::instance()
52{
53 static bool firstCall = true;
54
55 if (firstCall) {
56 firstCall = false;
57 globalPrefs->load();
58 }
59
60 return globalPrefs;
61}
62
63void KCalPrefs::usrSetDefaults()
64{
65 // Default should be set a bit smarter, respecting username and locale
66 // settings for example.
67
68 KEMailSettings settings;
69 QString tmp = settings.getSetting(KEMailSettings::RealName);
70 if (!tmp.isEmpty()) {
71 setUserName(tmp);
72 }
73 tmp = settings.getSetting(KEMailSettings::EmailAddress);
74 if (!tmp.isEmpty()) {
75 setUserEmail(tmp);
76 }
77 fillMailDefaults();
78
80}
81
82Akonadi::Collection::Id KCalPrefs::defaultCalendarId() const
83{
84 return d->mDefaultCalendarId;
85}
86
87void KCalPrefs::setDefaultCalendarId(Akonadi::Collection::Id id)
88{
89 d->mDefaultCalendarId = id;
90}
91
92void KCalPrefs::fillMailDefaults()
93{
94 userEmailItem()->swapDefault();
95 QString defEmail = userEmailItem()->value();
96 userEmailItem()->swapDefault();
97
98 if (userEmail() == defEmail) {
99 // No korg settings - but maybe there's a kcontrol[/kmail] setting available
100 KEMailSettings settings;
101 if (!settings.getSetting(KEMailSettings::EmailAddress).isEmpty()) {
102 mEmailControlCenter = true;
103 }
104 }
105}
106
107void KCalPrefs::usrRead()
108{
109 KConfigGroup generalConfig(config(), QStringLiteral("General"));
110
111 KConfigGroup defaultCalendarConfig(config(), QStringLiteral("Calendar"));
112 d->mDefaultCalendarId = defaultCalendarConfig.readEntry("Default Calendar", -1);
113
114#if 0
115 config()->setGroup("FreeBusy");
116 if (mRememberRetrievePw) {
117 d->mRetrievePassword
118 = KStringHandler::obscure(config()->readEntry("Retrieve Server Password"));
119 }
120#endif
121
123 fillMailDefaults();
124}
125
126bool KCalPrefs::usrSave()
127{
128 KConfigGroup generalConfig(config(), QStringLiteral("General"));
129
130#if 0
131 if (mRememberRetrievePw) {
132 config()->writeEntry("Retrieve Server Password",
133 KStringHandler::obscure(d->mRetrievePassword));
134 } else {
135 config()->deleteEntry("Retrieve Server Password");
136 }
137#endif
138
139 KConfigGroup defaultCalendarConfig(config(), QStringLiteral("Calendar"));
140 defaultCalendarConfig.writeEntry("Default Calendar", defaultCalendarId());
141
143}
144
145QString KCalPrefs::fullName()
146{
147 QString tusername;
148 if (mEmailControlCenter) {
149 KEMailSettings settings;
150 tusername = settings.getSetting(KEMailSettings::RealName);
151 } else {
152 tusername = userName();
153 }
154
155 // Quote the username as it might contain commas and other quotable chars.
156 tusername = KEmailAddress::quoteNameIfNecessary(tusername);
157
158 QString tname;
159 QString temail;
160 // ignore the return value from extractEmailAddressAndName() because
161 // it will always be false since tusername does not contain "@domain".
162 KEmailAddress::extractEmailAddressAndName(tusername, temail, tname);
163 return tname;
164}
165
166QString KCalPrefs::email()
167{
168 if (mEmailControlCenter) {
169 KEMailSettings settings;
170 return settings.getSetting(KEMailSettings::EmailAddress);
171 } else {
172 return userEmail();
173 }
174}
175
176QStringList KCalPrefs::allEmails()
177{
178 // Grab emails from the email identities
179 QStringList lst = CalendarSupport::identityManager()->allEmails();
180 // Add emails configured in korganizer
181 lst += mAdditionalMails;
182 // Add the email entered as the userEmail here
183 lst += email();
184
185 // Warning, this list could contain duplicates.
186 return lst;
187}
188
189QStringList KCalPrefs::fullEmails()
190{
191 QStringList fullEmails;
192
193 // Grab emails from the email identities
194 KIdentityManagementCore::IdentityManager *idmanager = CalendarSupport::identityManager();
195 QStringList lst = idmanager->identities();
196
197 fullEmails.reserve(1 + mAdditionalMails.count() + lst.count());
198 // The user name and email from the config dialog:
199 fullEmails << QStringLiteral("%1 <%2>").arg(fullName(), email());
200
202 KIdentityManagementCore::IdentityManager::ConstIterator it1;
203 KIdentityManagementCore::IdentityManager::ConstIterator end1(idmanager->end());
204 for (it1 = idmanager->begin(); it1 != end1; ++it1) {
205 fullEmails << (*it1).fullEmailAddr();
206 }
207 // Add emails configured in korganizer
208 lst = mAdditionalMails;
209 for (it = lst.begin(); it != lst.end(); ++it) {
210 fullEmails << QStringLiteral("%1 <%2>").arg(fullName(), *it);
211 }
212
213 // Warning, this list could contain duplicates.
214 return fullEmails;
215}
216
217bool KCalPrefs::thatIsMe(const QString &_email)
218{
219 // NOTE: this method is called for every created agenda view item,
220 // so we need to keep performance in mind
221
222 /* identityManager()->thatIsMe() is quite expensive since it does parsing of
223 _email in a way which is unnecessarily complex for what we can have here,
224 so we do that ourselves. This makes sense since this
225
226 if ( Akonadi::identityManager()->thatIsMe( _email ) ) {
227 return true;
228 }
229 */
230
231 // in case email contains a full name, strip it out.
232 // the below is the simpler but slower version of the following code:
233 // const QString email = CalendarSupport::getEmailAddress( _email );
234 const QByteArray tmp = _email.toUtf8();
235 const char *cursor = tmp.constData();
236 const char *end = tmp.data() + tmp.length();
237 KMime::Types::Mailbox mbox;
238 KMime::HeaderParsing::parseMailbox(cursor, end, mbox);
239 const QString email = mbox.addrSpec().asString();
240
241 if (this->email() == email) {
242 return true;
243 }
244
245 CalendarSupport::IdentityManager::ConstIterator it;
246 CalendarSupport::IdentityManager::ConstIterator endId(CalendarSupport::identityManager()->end());
247 for (it = CalendarSupport::identityManager()->begin(); it != endId; ++it) {
248 if ((*it).matchesEmailAddress(email)) {
249 return true;
250 }
251 }
252
253 if (mAdditionalMails.contains(email)) {
254 return true;
255 }
256
257 return false;
258}
259
260void KCalPrefs::setDayBegins(const QDateTime &dateTime)
261{
262 d->mDayBegins = dateTime;
263}
264
265QDateTime KCalPrefs::dayBegins() const
266{
267 return d->mDayBegins;
268}
269
270#include "moc_kcalprefs.cpp"
static TagCache * instance()
virtual void usrSetDefaults()
virtual bool usrSave()
virtual void usrRead()
QString getSetting(KEMailSettings::Setting s) const
KCODECS_EXPORT QString quoteNameIfNecessary(const QString &str)
KCODECS_EXPORT bool extractEmailAddressAndName(const QString &aStr, QString &mail, QString &name)
const QList< QKeySequence > & begin()
const QList< QKeySequence > & end()
KCOREADDONS_EXPORT QString obscure(const QString &str)
const char * constData() const const
char * data()
qsizetype length() const const
typedef Iterator
iterator begin()
qsizetype count() const const
iterator end()
void reserve(qsizetype size)
bool isEmpty() const const
QByteArray toUtf8() const const
This file is part of the KDE documentation.
Documentation copyright © 1996-2025 The KDE developers.
Generated on Fri May 2 2025 11:57:32 by doxygen 1.13.2 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.