9#include <KLocalizedString>
13#include "response_p.h"
19class ListJobPrivate :
public JobPrivate
22 ListJobPrivate(ListJob *job, Session *session,
const QString &name)
23 : JobPrivate(session,
name)
25 , option(ListJob::NoOption)
34 if (pendingDescriptors.isEmpty()) {
38 Q_EMIT q->mailBoxesReceived(pendingDescriptors, pendingFlags);
40 pendingDescriptors.clear();
46 ListJob::Option option;
47 QList<MailBoxDescriptor> namespaces;
50 QTimer emitPendingsTimer;
51 QList<MailBoxDescriptor> pendingDescriptors;
52 QList<QList<QByteArray>> pendingFlags;
58ListJob::ListJob(
Session *session)
59 : Job(*new ListJobPrivate(this, session,
i18n(
"List")))
71void ListJob::setIncludeUnsubscribed(
bool include)
75 d->option = ListJob::IncludeUnsubscribed;
77 d->option = ListJob::NoOption;
81bool ListJob::isIncludeUnsubscribed()
const
84 return (d->option == ListJob::IncludeUnsubscribed);
87void ListJob::setOption(Option option)
93ListJob::Option ListJob::option()
const
99void ListJob::setQueriedNamespaces(
const QList<MailBoxDescriptor> &namespaces)
102 d->namespaces = namespaces;
105QList<MailBoxDescriptor> ListJob::queriedNamespaces()
const
108 return d->namespaces;
111QList<MailBoxDescriptor> ListJob::mailBoxes()
const
113 return QList<MailBoxDescriptor>();
116QMap<MailBoxDescriptor, QList<QByteArray>> ListJob::flags()
const
118 return QMap<MailBoxDescriptor, QList<QByteArray>>();
121void ListJob::doStart()
126 case IncludeUnsubscribed:
129 case IncludeFolderRoleFlags:
130 d->command =
"XLIST";
136 d->emitPendingsTimer.start(100);
138 if (d->namespaces.isEmpty()) {
139 d->tags << d->sessionInternal()->sendCommand(d->command,
"\"\" *");
141 for (
const MailBoxDescriptor &descriptor : std::as_const(d->namespaces)) {
142 QString parameters = QStringLiteral(
"\"\" \"%1\"");
144 if (descriptor.name.endsWith(descriptor.separator)) {
147 d->tags << d->sessionInternal()->sendCommand(d->command, parameters.
arg(name).
toUtf8());
150 d->tags << d->sessionInternal()->sendCommand(d->command, parameters.
arg(descriptor.name + QLatin1Char(
'*')).toUtf8());
155void ListJob::handleResponse(
const Response &response)
161 if (!response.content.isEmpty() && d->tags.size() == 1 && d->tags.contains(response.content.first().toString())) {
162 d->emitPendingsTimer.stop();
166 if (handleErrorReplies(response) == NotHandled) {
167 if (response.content.size() >= 5 && response.content[1].toString() == d->command) {
168 QList<QByteArray> flags = response.content[2].toList();
169 for (QList<QByteArray>::iterator it = flags.begin(), itEnd = flags.end(); it != itEnd; ++it) {
172 QByteArray separator = response.content[3].toString();
179 Q_ASSERT(separator.
size() == 1);
181 for (
int i = 4; i < response.content.size(); i++) {
182 fullName += response.content[i].toString() +
' ';
188 MailBoxDescriptor mailBoxDescriptor;
189 mailBoxDescriptor.separator = QLatin1Char(separator[0]);
191 convertInboxName(mailBoxDescriptor);
193 d->pendingDescriptors << mailBoxDescriptor;
194 d->pendingFlags << flags;
199void ListJob::convertInboxName(KIMAP::MailBoxDescriptor &descriptor)
202 QStringList pathParts = descriptor.name.
split(descriptor.separator);
205 descriptor.name = QStringLiteral(
"INBOX");
207 descriptor.name += descriptor.separator + pathParts.
join(descriptor.separator);
211#include "moc_listjob.cpp"
QString i18n(const char *text, const TYPE &arg...)
QString fullName(const PartType &type)
QString name(StandardAction id)
bool isEmpty() const const
qsizetype size() const const
bool isEmpty() const const
void removeAt(qsizetype i)
QString arg(Args &&... args) const const
QString fromUtf8(QByteArrayView str)
QStringList split(QChar sep, Qt::SplitBehavior behavior, Qt::CaseSensitivity cs) const const
QByteArray toUtf8() const const
QString join(QChar separator) const const
QFuture< ArgsType< Signal > > connect(Sender *sender, Signal signal)
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.
KIMAP_EXPORT QByteArray encodeImapFolderName(const QByteArray &src)
Converts an Unicode IMAP mailbox to a QByteArray which can be used in IMAP communication.