20 #include "getquotarootjob.h"
22 #include <KDE/KLocale>
25 #include "quotajobbase_p.h"
26 #include "message_p.h"
27 #include "session_p.h"
32 class GetQuotaRootJobPrivate :
public QuotaJobBasePrivate
35 GetQuotaRootJobPrivate( Session *session,
const QString& name ) : QuotaJobBasePrivate( session, name ) { }
36 ~GetQuotaRootJobPrivate() { }
39 QList<QByteArray> rootList;
40 QMap< QByteArray, QMap<QByteArray, QPair<qint64, qint64> > > quotas;
44 using namespace KIMAP;
46 GetQuotaRootJob::GetQuotaRootJob( Session *session )
47 :
QuotaJobBase( *new GetQuotaRootJobPrivate( session, i18n(
"GetQuotaRoot" ) ) )
51 GetQuotaRootJob::~GetQuotaRootJob()
55 void GetQuotaRootJob::doStart()
58 d->tags << d->sessionInternal()->sendCommand(
"GETQUOTAROOT",
'\"' + KIMAP::encodeImapFolderName( d->mailBox.toUtf8() ) +
'\"' );
61 void GetQuotaRootJob::handleResponse(
const Message &response)
64 if ( handleErrorReplies( response ) == NotHandled ) {
65 if ( response.content.size() >= 3 ) {
66 if ( response.content[1].toString() ==
"QUOTAROOT" ) {
70 if ( response.content.size() == 3 ) {
71 d->rootList.append(
"" );
74 while ( i < response.content.size() ) {
75 d->rootList.append( response.content[i].toString() );
79 }
else if ( response.content[1].toString() ==
"QUOTA" ) {
81 int quotaContentIndex = 3;
83 if ( response.content.size() == 3 ) {
84 quotaContentIndex = 2;
86 rootName = response.content[2].toString();
89 const QMap<QByteArray, QPair<qint64, qint64> >& quota = d->readQuota(response.content[quotaContentIndex]);
90 if ( d->quotas.contains( rootName ) ) {
91 d->quotas[ rootName ].unite( quota );
93 d->quotas[ rootName ] = quota;
121 QByteArray r = resource.toUpper();
123 if ( d->quotas.contains( root ) && d->quotas[root].contains( r ) ) {
124 return d->quotas[root][r].first;
133 QByteArray r = resource.toUpper();
135 if ( d->quotas.contains( root ) && d->quotas[root].contains( r ) ) {
136 return d->quotas[root][r].second;
145 QMap<QByteArray, qint64> result;
147 if ( d->quotas.contains( root ) ) {
148 const QMap< QByteArray, QPair<qint64, qint64> > quota = d->quotas[root];
149 QMapIterator<QByteArray, QPair<qint64, qint64> > it( quota );
150 while ( it.hasNext() ) {
152 result[it.key()] = it.value().first;
162 QMap<QByteArray, qint64> result;
164 if ( d->quotas.contains( root ) ) {
165 const QMap< QByteArray, QPair<qint64, qint64> > quota = d->quotas[root];
166 QMapIterator<QByteArray, QPair<qint64, qint64> > it( quota );
167 while ( it.hasNext() ) {
169 result[it.key()] = it.value().second;