1 /*
2     SPDX-FileCopyrightText: 2009 Kevin Ottens <ervin@kde.org>
3 
4     SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6 
7 #include "capabilitiesjob.h"
8 
9 #include <KLocalizedString>
10 
11 #include "job_p.h"
12 #include "response_p.h"
13 #include "session_p.h"
14 
15 namespace KIMAP
16 {
17 class CapabilitiesJobPrivate : public JobPrivate
18 {
19 public:
CapabilitiesJobPrivate(Session * session,const QString & name)20     CapabilitiesJobPrivate(Session *session, const QString &name)
21         : JobPrivate(session, name)
22     {
23     }
~CapabilitiesJobPrivate()24     ~CapabilitiesJobPrivate()
25     {
26     }
27 
28     QStringList capabilities;
29 };
30 }
31 
32 using namespace KIMAP;
33 
CapabilitiesJob(Session * session)34 CapabilitiesJob::CapabilitiesJob(Session *session)
35     : Job(*new CapabilitiesJobPrivate(session, i18n("Capabilities")))
36 {
37 }
38 
~CapabilitiesJob()39 CapabilitiesJob::~CapabilitiesJob()
40 {
41 }
42 
capabilities() const43 QStringList CapabilitiesJob::capabilities() const
44 {
45     Q_D(const CapabilitiesJob);
46     return d->capabilities;
47 }
48 
doStart()49 void CapabilitiesJob::doStart()
50 {
51     Q_D(CapabilitiesJob);
52     d->tags << d->sessionInternal()->sendCommand("CAPABILITY");
53 }
54 
handleResponse(const Response & response)55 void CapabilitiesJob::handleResponse(const Response &response)
56 {
57     Q_D(CapabilitiesJob);
58     if (handleErrorReplies(response) == NotHandled) {
59         const int responseSize(response.content.size());
60         if (responseSize >= 2 && response.content[1].toString() == "CAPABILITY") {
61             for (int i = 2; i < responseSize; ++i) {
62                 d->capabilities << QLatin1String(response.content[i].toString().toUpper());
63             }
64             Q_EMIT capabilitiesReceived(d->capabilities);
65         }
66     }
67 }
68