1 /*
2  * This file is part of KMail.
3  *
4  * SPDX-FileCopyrightText: 2010 KDAB
5  * SPDX-FileContributor: Tobias Koenig <tokoe@kde.org>
6  *
7  * SPDX-License-Identifier: GPL-2.0-or-later
8  */
9 
10 #pragma once
11 
12 #include "messagecomposer_export.h"
13 
14 #include <KJob>
15 
16 #include <QMap>
17 #include <QStringList>
18 
19 namespace MessageComposer
20 {
21 /**
22  * @short A job to expand aliases to email addresses.
23  *
24  * Expands aliases (distribution lists and nick names) and appends a
25  * domain part to all email addresses which are missing the domain part.
26  */
27 class MESSAGECOMPOSER_EXPORT AliasesExpandJob : public KJob
28 {
29     Q_OBJECT
30 
31 public:
32     /**
33      * Creates a new aliases expand job.
34      *
35      * @param recipients The comma separated list of recipient.
36      * @param defaultDomain The default domain that shall be used when expanding aliases.
37      * @param parent The parent object.
38      */
39     AliasesExpandJob(const QString &recipients, const QString &defaultDomain, QObject *parent = nullptr);
40 
41     /**
42      * Destroys the aliases expand job.
43      */
44     ~AliasesExpandJob() override;
45 
46     /**
47      * Starts the job.
48      */
49     void start() override;
50 
51     /**
52      * Returns the expanded email addresses.
53      */
54     Q_REQUIRED_RESULT QString addresses() const;
55 
56     /**
57      * Returns the list of distribution lists that resolved to an empty member list.
58      */
59     Q_REQUIRED_RESULT QStringList emptyDistributionLists() const;
60 
61     Q_REQUIRED_RESULT QStringList emailAddressOnly() const;
62 
63 private Q_SLOTS:
64     void slotDistributionListExpansionDone(KJob *);
65     void slotNicknameExpansionDone(KJob *);
66 
67 private:
68     void finishExpansion();
69 
70     QStringList mEmailAddressOnly;
71 
72     QStringList mRecipients;
73     QString mDefaultDomain;
74 
75     QString mEmailAddresses;
76     QStringList mEmptyDistributionLists;
77 
78     uint mDistributionListExpansionJobs = 0;
79     uint mNicknameExpansionJobs = 0;
80 
81     struct DistributionListExpansionResult {
82         QString addresses;
83         bool isEmpty = false;
84     };
85     QMap<QString, DistributionListExpansionResult> mDistListExpansionResults;
86     QMap<QString, QString> mNicknameExpansionResults;
87 };
88 }
89 
90