23 #include <KDE/KLocalizedString>
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
68 Q_D(
const StoreJob );
72 void StoreJob::setUidBased(
bool uidBased)
75 d->uidBased = uidBased;
78 bool StoreJob::isUidBased()
const
80 Q_D(
const StoreJob );
84 void StoreJob::setFlags(
const MessageFlags &flags )
90 MessageFlags StoreJob::flags()
const
92 Q_D(
const StoreJob );
96 void StoreJob::setMode( StoreMode mode )
102 StoreJob::StoreMode StoreJob::mode()
const
104 Q_D(
const StoreJob );
108 QMap<int, MessageFlags> StoreJob::resultingFlags()
const
110 Q_D(
const StoreJob );
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() ) {
137 parameters.chop( 1 );
141 kDebug() << parameters;
143 QByteArray command =
"STORE";
145 command =
"UID "+command;
148 d->tags << d->sessionInternal()->sendCommand( command, parameters );
151 void StoreJob::handleResponse(
const Message &response )
155 if ( handleErrorReplies( response ) == NotHandled ) {
156 if ( response.content.size() == 4 &&
157 response.content[2].toString() ==
"FETCH" &&
158 response.content[3].type() == Message::Part::List ) {
160 int id = response.content[1].toString().toInt();
162 bool uidFound =
false;
163 QList<QByteArray> resultingFlags;
165 QList<QByteArray> content = response.content[3].toList();
167 for ( QList<QByteArray>::ConstIterator it = content.constBegin();
168 it != content.constEnd(); ++it ) {
169 QByteArray str = *it;
172 if ( str ==
"FLAGS" ) {
173 if ( ( *it ).startsWith(
'(' ) && ( *it ).endsWith(
')' ) ) {
174 QByteArray str = *it;
177 resultingFlags = str.split(
' ' );
179 resultingFlags << *it;
181 }
else if ( str ==
"UID" ) {
182 uid = it->toLongLong( &uidFound );
186 if ( !d->uidBased ) {
187 d->resultingFlags[id] = resultingFlags;
188 }
else if ( uidFound ) {
189 d->resultingFlags[uid] = resultingFlags;
191 kWarning() <<
"We asked for UID but the server didn't give it back, resultingFlags not stored.";
Represents a set of natural numbers (1-> ) in a as compact as possible form.