File indexing completed on 2024-05-12 05:10:50

0001 /*
0002   SPDX-FileCopyrightText: 2004 Reinhold Kainhofer <reinhold@kainhofer.com>
0003   SPDX-FileCopyrightText: 2010-2012 Sérgio Martins <iamsergio@gmail.com>
0004 
0005   SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 
0008 #include "utils_p.h"
0009 #include "akonadicalendar_debug.h"
0010 #include <Akonadi/CollectionDialog>
0011 #include <KEMailSettings>
0012 #include <KEmailAddress>
0013 #include <KIdentityManagementCore/Identity>
0014 #include <KIdentityManagementCore/Utils>
0015 #include <KMime/HeaderParsing>
0016 
0017 #include <QPointer>
0018 #include <QWidget>
0019 
0020 using namespace Akonadi::CalendarUtils;
0021 
0022 Akonadi::Collection
0023 Akonadi::CalendarUtils::selectCollection(QWidget *parent, int &dialogCode, const QStringList &mimeTypes, const Akonadi::Collection &defaultCollection)
0024 {
0025     QPointer<Akonadi::CollectionDialog> dlg(new Akonadi::CollectionDialog(parent));
0026 
0027     qCDebug(AKONADICALENDAR_LOG) << "selecting collections with mimeType in " << mimeTypes;
0028 
0029     dlg->changeCollectionDialogOptions(Akonadi::CollectionDialog::KeepTreeExpanded);
0030     dlg->setMimeTypeFilter(mimeTypes);
0031     dlg->setAccessRightsFilter(Akonadi::Collection::CanCreateItem);
0032     if (defaultCollection.isValid()) {
0033         dlg->setDefaultCollection(defaultCollection);
0034     }
0035     Akonadi::Collection collection;
0036 
0037     // FIXME: don't use exec.
0038     dialogCode = dlg->exec();
0039     if (dialogCode == QDialog::Accepted) {
0040         collection = dlg->selectedCollection();
0041 
0042         if (!collection.isValid()) {
0043             qCWarning(AKONADICALENDAR_LOG) << "An invalid collection was selected!";
0044         }
0045     }
0046     delete dlg;
0047 
0048     return collection;
0049 }
0050 
0051 QString Akonadi::CalendarUtils::fullName()
0052 {
0053     KEMailSettings settings;
0054     QString tusername = settings.getSetting(KEMailSettings::RealName);
0055 
0056     // Quote the username as it might contain commas and other quotable chars.
0057     tusername = KEmailAddress::quoteNameIfNecessary(tusername);
0058 
0059     QString tname;
0060     QString temail;
0061     // ignore the return value from extractEmailAddressAndName() because
0062     // it will always be false since tusername does not contain "@domain".
0063     KEmailAddress::extractEmailAddressAndName(tusername, temail, tname);
0064     return tname;
0065 }
0066 
0067 QString Akonadi::CalendarUtils::email()
0068 {
0069     KEMailSettings emailSettings;
0070     return emailSettings.getSetting(KEMailSettings::EmailAddress);
0071 }
0072 
0073 bool Akonadi::CalendarUtils::thatIsMe(const KCalendarCore::Attendee &attendee)
0074 {
0075     return KIdentityManagementCore::thatIsMe(attendee.email());
0076 }
0077 
0078 bool Akonadi::CalendarUtils::thatIsMe(const QString &_email)
0079 {
0080     const QByteArray tmp = _email.toUtf8();
0081     const char *cursor = tmp.constData();
0082     const char *end = tmp.data() + tmp.length();
0083     KMime::Types::Mailbox mbox;
0084     KMime::HeaderParsing::parseMailbox(cursor, end, mbox);
0085     const QString email = mbox.addrSpec().asString();
0086 
0087     return KIdentityManagementCore::thatIsMe(email);
0088 }
0089 
0090 QStringList Akonadi::CalendarUtils::allEmails()
0091 {
0092     QStringList emails;
0093     const QSet<QString> &allEmails = KIdentityManagementCore::allEmails();
0094     emails.reserve(allEmails.count());
0095     for (const QString &email : allEmails) {
0096         emails.append(email);
0097     }
0098     return emails;
0099 }