7#include "namespacejob.h"
9#include "kimap_debug.h"
10#include <KLocalizedString>
12#include "imapstreamparser.h"
15#include "response_p.h"
21class NamespaceJobPrivate :
public JobPrivate
24 NamespaceJobPrivate(Session *session,
const QString &name)
25 : JobPrivate(session,
name)
28 ~NamespaceJobPrivate()
32 QList<MailBoxDescriptor> processNamespaceList(
const QList<QByteArray> &namespaceList)
34 QList<MailBoxDescriptor> result;
36 for (
const QByteArray &namespaceItem : namespaceList) {
37 ImapStreamParser parser(
nullptr);
38 parser.setData(namespaceItem);
41 QList<QByteArray> parts = parser.readParenthesizedList();
42 if (parts.
size() < 2) {
45 MailBoxDescriptor descriptor;
47 descriptor.separator = QLatin1Char(parts[1][0]);
50 }
catch (
const KIMAP::ImapParserException &e) {
51 qCWarning(KIMAP_LOG) <<
"The stream parser raised an exception during namespace list parsing:" << e.what();
52 qCWarning(KIMAP_LOG) <<
"namespacelist:" << namespaceList;
59 QList<MailBoxDescriptor> personalNamespaces;
60 QList<MailBoxDescriptor> userNamespaces;
61 QList<MailBoxDescriptor> sharedNamespaces;
67NamespaceJob::NamespaceJob(
Session *session)
68 : Job(*new NamespaceJobPrivate(session,
i18n(
"Namespace")))
72NamespaceJob::~NamespaceJob()
76QList<MailBoxDescriptor> NamespaceJob::personalNamespaces()
const
78 Q_D(
const NamespaceJob);
79 return d->personalNamespaces;
82QList<MailBoxDescriptor> NamespaceJob::userNamespaces()
const
84 Q_D(
const NamespaceJob);
85 return d->userNamespaces;
88QList<MailBoxDescriptor> NamespaceJob::sharedNamespaces()
const
90 Q_D(
const NamespaceJob);
91 return d->sharedNamespaces;
94bool NamespaceJob::containsEmptyNamespace()
const
96 Q_D(
const NamespaceJob);
97 const QList<MailBoxDescriptor> completeList = d->personalNamespaces + d->userNamespaces + d->sharedNamespaces;
99 for (
const MailBoxDescriptor &descriptor : completeList) {
100 if (descriptor.name.isEmpty()) {
108void NamespaceJob::doStart()
111 d->tags << d->sessionInternal()->sendCommand(
"NAMESPACE");
114void NamespaceJob::handleResponse(
const Response &response)
117 if (handleErrorReplies(response) == NotHandled) {
118 if (response.content.size() >= 5 && response.content[1].toString() ==
"NAMESPACE") {
120 d->personalNamespaces = d->processNamespaceList(response.content[2].toList());
123 d->userNamespaces = d->processNamespaceList(response.content[3].toList());
126 d->sharedNamespaces = d->processNamespaceList(response.content[4].toList());
131#include "moc_namespacejob.cpp"
QString i18n(const char *text, const TYPE &arg...)
QString name(const QVariant &location)
qsizetype size() const const
QString fromUtf8(QByteArrayView str)
This file is part of the IMAP support library and defines the RfcCodecs class.
KIMAP_EXPORT QByteArray decodeImapFolderName(const QByteArray &inSrc)
Converts an UTF-7 encoded IMAP mailbox to a QByteArray.