KIMAP
9 #include "kimap_debug.h"
10 #include <KLocalizedString>
13 #include "response_p.h"
14 #include "session_p.h"
18 class StoreJobPrivate :
public JobPrivate
21 StoreJobPrivate(Session *session,
const QString &name)
22 : JobPrivate(session,
name)
34 case StoreJob::SetFlags:
37 case StoreJob::AppendFlags:
38 parameters +=
"+" + param;
40 case StoreJob::RemoveFlags:
41 parameters +=
"-" + param;
47 parameters += flag +
' ';
49 if (!flags.isEmpty()) {
59 StoreJob::StoreMode mode;
67 using namespace KIMAP;
69 StoreJob::StoreJob(Session *session)
70 : Job(*new StoreJobPrivate(session,
i18n(
"Store")))
81 void StoreJob::setSequenceSet(
const ImapSet &set)
87 ImapSet StoreJob::sequenceSet()
const
93 void StoreJob::setUidBased(
bool uidBased)
96 d->uidBased = uidBased;
99 bool StoreJob::isUidBased()
const
117 void StoreJob::setGMLabels(
const MessageFlags &gmLabels)
120 d->gmLabels = gmLabels;
129 void StoreJob::setMode(StoreMode mode)
135 StoreJob::StoreMode StoreJob::mode()
const
144 return d->resultingFlags;
147 void StoreJob::doStart()
151 if (d->set.isEmpty()) {
152 qCWarning(KIMAP_LOG) <<
"Empty uid set passed to store job";
153 setError(KJob::UserDefinedError);
154 setErrorText(QStringLiteral(
"Empty uid set passed to store job"));
160 QByteArray parameters = d->set.toImapSequenceSet() +
' ';
162 if (!d->flags.isEmpty()) {
163 parameters += d->addFlags(
"FLAGS", d->flags);
165 if (!d->gmLabels.isEmpty()) {
166 if (!d->flags.isEmpty()) {
169 parameters += d->addFlags(
"X-GM-LABELS", d->gmLabels);
172 qCDebug(KIMAP_LOG) << parameters;
176 command =
"UID " + command;
179 d->tags << d->sessionInternal()->sendCommand(command, parameters);
182 void StoreJob::handleResponse(
const Response &response)
186 if (handleErrorReplies(response) == NotHandled) {
187 if (response.content.size() == 4 && response.content[2].toString() ==
"FETCH" && response.content[3].type() == Response::Part::List) {
188 int id = response.content[1].toString().toInt();
190 bool uidFound =
false;
199 if (str ==
"FLAGS") {
200 if ((*it).startsWith(
'(') && (*it).endsWith(
')')) {
204 resultingFlags = str.
split(
' ');
206 resultingFlags << *it;
208 }
else if (str ==
"UID") {
209 uid = it->toLongLong(&uidFound);
214 d->resultingFlags[id] = resultingFlags;
215 }
else if (uidFound) {
216 d->resultingFlags[uid] = resultingFlags;
218 qCWarning(KIMAP_LOG) <<
"We asked for UID but the server didn't give it back, resultingFlags not stored.";
224 #include "moc_storejob.cpp"
QList< QByteArray > split(char sep) const const
QList::const_iterator constBegin() const const
QByteArray & remove(int pos, int len)
QString i18n(const char *text, const TYPE &arg...)
Represents a set of natural numbers (1->∞) in a as compact as possible form.
QList::const_iterator constEnd() const const
const char * name(StandardAction id)
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Sun Dec 3 2023 03:51:44 by
doxygen 1.8.17 written
by
Dimitri van Heesch, © 1997-2006
KDE's Doxygen guidelines are available online.