20 #include "getmetadatajob.h"
22 #include <KDE/KLocale>
25 #include "metadatajobbase_p.h"
26 #include "message_p.h"
27 #include "session_p.h"
32 class GetMetaDataJobPrivate :
public MetaDataJobBasePrivate
35 GetMetaDataJobPrivate( Session *session,
const QString& name ) : MetaDataJobBasePrivate(session, name), maxSize(-1), depth(
"0") { }
36 ~GetMetaDataJobPrivate() { }
40 QList<QByteArray> entries;
41 QList<QByteArray> attributes;
42 QMap<QString, QMap<QByteArray, QMap<QByteArray, QByteArray> > > metadata;
47 using namespace KIMAP;
49 GetMetaDataJob::GetMetaDataJob( Session *session )
50 :
MetaDataJobBase( *new GetMetaDataJobPrivate(session, i18n(
"GetMetaData")) )
54 GetMetaDataJob::~GetMetaDataJob()
58 void GetMetaDataJob::doStart()
61 QByteArray parameters;
62 parameters =
'\"' + KIMAP::encodeImapFolderName( d->mailBox.toUtf8() ) +
"\" ";
64 QByteArray command =
"GETMETADATA";
66 d->m_name = i18n(
"GetAnnotation");
67 command =
"GETANNOTATION";
68 if (d->entries.size() > 1)
70 Q_FOREACH(
const QByteArray &entry, d->entries) {
71 parameters +=
'\"' + entry +
"\" ";
73 if (d->entries.size() > 1)
74 parameters[parameters.length() -1 ] =
')';
76 parameters.truncate(parameters.length() -1);
80 if (d->attributes.size() > 1)
82 Q_FOREACH(
const QByteArray &attribute, d->attributes) {
83 parameters +=
'\"' + attribute +
"\" ";
85 if (d->attributes.size() > 1)
86 parameters[parameters.length() -1 ] =
')';
88 parameters.truncate(parameters.length() -1);
91 if (d->depth !=
"0") {
92 parameters +=
"(DEPTH " + d->depth;
94 if (d->maxSize != -1) {
95 parameters +=
"(MAXSIZE " + QByteArray::number(d->maxSize) +
')';
97 if (d->depth !=
"0") {
101 if (d->entries.size() > 1)
103 Q_FOREACH(
const QByteArray &entry, d->entries) {
104 parameters +=
'\"' + entry +
"\" ";
106 if (d->entries.size() > 1)
107 parameters[parameters.length() -1 ] =
')';
110 if (d->entries.isEmpty()) {
114 d->tags << d->sessionInternal()->sendCommand( command, parameters );
118 void GetMetaDataJob::handleResponse(
const Message &response )
125 if (handleErrorReplies(response) == NotHandled ) {
126 if ( response.content.size() >= 4 ) {
127 if (d->serverCapability ==
Annotatemore && response.content[1].toString() ==
"ANNOTATION" ) {
128 QString
mailBox = QString::fromUtf8( KIMAP::decodeImapFolderName( response.content[2].toString() ) );
131 while (i < response.content.size() - 1) {
132 QByteArray entry = response.content[i].toString();
133 QList<QByteArray> attributes = response.content[i + 1].toList();
135 while ( j < attributes.size() - 1) {
136 d->metadata[
mailBox][entry][attributes[j]] = attributes[j + 1];
142 if (d->serverCapability ==
Metadata && response.content[1].toString() ==
"METADATA" ) {
143 QString mailBox = QString::fromUtf8( KIMAP::decodeImapFolderName( response.content[2].toString() ) );
145 QList<QByteArray> entries = response.content[3].toList();
147 while ( i < entries.size() - 1) {
148 d->metadata[
mailBox][entries[i]][
""] = entries[i + 1];
159 if (d->serverCapability ==
Annotatemore && attribute.isNull())
160 qWarning() <<
"In ANNOTATEMORE mode an attribute must be specified with addEntry!";
161 d->entries.append(entry);
162 d->attributes.append(attribute);
181 d->depth =
"infinity";
191 QByteArray attr = attribute;
193 if (d->serverCapability ==
Metadata)
197 if (d->metadata.contains(mailBox)) {
198 if (d->metadata[mailBox].contains(entry)) {
199 result = d->metadata[
mailBox][entry].value(attr);
212 #include "getmetadatajob.moc"