23 #include <KDE/KLocale>
26 #include "message_p.h"
27 #include "session_p.h"
31 class StoreJobPrivate :
public JobPrivate
34 StoreJobPrivate( Session *session,
const QString& name ) : JobPrivate( session, name ) { }
35 ~StoreJobPrivate() { }
39 StoreJob::StoreMode mode;
42 QMap<int, MessageFlags> resultingFlags;
46 using namespace KIMAP;
48 StoreJob::StoreJob( Session *session )
49 : Job( *new StoreJobPrivate(session, i18n(
"Store")) )
60 void StoreJob::setSequenceSet(
const ImapSet &
set )
66 ImapSet StoreJob::sequenceSet()
const
72 void StoreJob::setUidBased(
bool uidBased)
75 d->uidBased = uidBased;
78 bool StoreJob::isUidBased()
const
84 void StoreJob::setFlags(
const MessageFlags &flags )
90 MessageFlags StoreJob::flags()
const
96 void StoreJob::setMode( StoreMode mode )
102 StoreJob::StoreMode StoreJob::mode()
const
108 QMap<int, MessageFlags> StoreJob::resultingFlags()
const
111 return d->resultingFlags;
114 void StoreJob::doStart()
118 QByteArray parameters = d->set.toImapSequenceSet()+
' ';
122 parameters+=
"FLAGS";
125 parameters+=
"+FLAGS";
128 parameters+=
"-FLAGS";
133 foreach (
const QByteArray &flag, d->flags ) {
134 parameters+=flag+
' ';
136 if (!d->flags.isEmpty()) parameters.chop(1);
139 kDebug() << parameters;
141 QByteArray command =
"STORE";
143 command =
"UID "+command;
146 d->tags << d->sessionInternal()->sendCommand( command, parameters );
149 void StoreJob::handleResponse(
const Message &response )
153 if (handleErrorReplies(response) == NotHandled ) {
154 if ( response.content.size() == 4
155 && response.content[2].toString()==
"FETCH"
156 && response.content[3].type()==Message::Part::List ) {
158 int id = response.content[1].toString().toInt();
160 bool uidFound =
false;
161 QList<QByteArray> resultingFlags;
163 QList<QByteArray> content = response.content[3].toList();
165 for ( QList<QByteArray>::ConstIterator it = content.constBegin();
166 it!=content.constEnd(); ++it ) {
167 QByteArray str = *it;
170 if ( str==
"FLAGS" ) {
171 if ( (*it).startsWith(
'(') && (*it).endsWith(
')') ) {
172 QByteArray str = *it;
175 resultingFlags = str.split(
' ');
177 resultingFlags << *it;
179 }
else if ( str==
"UID" ) {
180 uid = it->toLongLong(&uidFound);
184 if ( !d->uidBased ) {
185 d->resultingFlags[id] = resultingFlags;
186 }
else if ( uidFound ) {
187 d->resultingFlags[uid] = resultingFlags;
189 kWarning() <<
"We asked for UID but the server didn't give it back, resultingFlags not stored.";
195 #include "storejob.moc"