diff --git a/kimap/getquotarootjob.cpp b/kimap/getquotarootjob.cpp index 4e8566471..d3142fdb7 100644 --- a/kimap/getquotarootjob.cpp +++ b/kimap/getquotarootjob.cpp @@ -1,135 +1,166 @@ /* Copyright (c) 2009 Andras Mantia This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "getquotarootjob.h" #include #include #include "quotajobbase_p.h" #include "message_p.h" #include "session_p.h" #include "rfccodecs.h" namespace KIMAP { class GetQuotaRootJobPrivate : public QuotaJobBasePrivate { public: GetQuotaRootJobPrivate( Session *session, const QString& name ) : QuotaJobBasePrivate(session, name) { } ~GetQuotaRootJobPrivate() { } QString mailBox; QList rootList; uint rootIndex; QMap< QByteArray, QMap > > quotas; }; } using namespace KIMAP; GetQuotaRootJob::GetQuotaRootJob( Session *session ) - : QuotaJobBase( *new QuotaJobBasePrivate(session, i18n("GetQuotaRoot")) ) + : QuotaJobBase( *new GetQuotaRootJobPrivate(session, i18n("GetQuotaRoot")) ) { } GetQuotaRootJob::~GetQuotaRootJob() { } void GetQuotaRootJob::doStart() { Q_D(GetQuotaRootJob); d->tag = d->sessionInternal()->sendCommand( "GETQUOTAROOT", '\"' + KIMAP::encodeImapFolderName( d->mailBox.toUtf8() ) + '\"'); } void GetQuotaRootJob::handleResponse(const Message &response) { Q_D(GetQuotaRootJob); if (handleErrorReplies(response) == NotHandled) { if ( response.content.size() >= 4 ) { if (response.content[1].toString() == "QUOTAROOT" ) { d->rootList.clear(); int i = 3; while ( i < response.content.size()) { d->rootList.append(response.content[i].toString()); i++; } d->rootIndex = 0; } else if (response.content[1].toString() == "QUOTA" ) { //TODO: check if we should use the roots in order it came in QUOTAROOT response or the root name from the QUOTA response itself d->quotas[ d->rootList[d->rootIndex] ] = d->readQuota(response.content[3]); d->rootIndex++; } } } } void GetQuotaRootJob::setMailBox(const QString& mailBox) { Q_D(GetQuotaRootJob); d->mailBox = mailBox; } QString GetQuotaRootJob::mailBox() const { Q_D(const GetQuotaRootJob); return d->mailBox; } QList GetQuotaRootJob::roots() const { Q_D(const GetQuotaRootJob); return d->rootList; } -qint64 GetQuotaRootJob::usage(const QByteArray& root, const QByteArray& resource) +qint64 GetQuotaRootJob::usage(const QByteArray &root, const QByteArray &resource) const { - Q_D(GetQuotaRootJob); + Q_D(const GetQuotaRootJob); QByteArray r = resource.toUpper(); if (d->quotas.contains(root) && d->quotas[root].contains(r)) { return d->quotas[root][r].first; } return -1; } -qint64 GetQuotaRootJob::limit(const QByteArray& root, const QByteArray& resource) +qint64 GetQuotaRootJob::limit(const QByteArray &root, const QByteArray &resource) const { - Q_D(GetQuotaRootJob); + Q_D(const GetQuotaRootJob); QByteArray r = resource.toUpper(); if (d->quotas.contains(root) && d->quotas[root].contains(r)) { return d->quotas[root][r].second; } return -1; } +QMap GetQuotaRootJob::allUsages(const QByteArray &root) const +{ + Q_D(const GetQuotaRootJob); + + QMap result; + + if (d->quotas.contains(root)) { + QMap< QByteArray, QPair > quota = d->quotas[root]; + foreach (const QByteArray &resource, quota.keys()) { + result[resource] = quota[resource].first; + } + } + + return result; +} + +QMap GetQuotaRootJob::allLimits(const QByteArray &root) const +{ + Q_D(const GetQuotaRootJob); + + QMap result; + + if (d->quotas.contains(root)) { + QMap< QByteArray, QPair > quota = d->quotas[root]; + foreach (const QByteArray &resource, quota.keys()) { + result[resource] = quota[resource].second; + } + } + + return result; +} #include "getquotarootjob.moc" diff --git a/kimap/getquotarootjob.h b/kimap/getquotarootjob.h index a5a3c0852..5017ea7c8 100644 --- a/kimap/getquotarootjob.h +++ b/kimap/getquotarootjob.h @@ -1,56 +1,59 @@ /* Copyright (c) 2009 Andras Mantia This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef KIMAP_GETQUOTAROOTJOB_H #define KIMAP_GETQUOTAROOTJOB_H #include "quotajobbase.h" namespace KIMAP { class Session; class Message; class GetQuotaRootJobPrivate; class KIMAP_EXPORT GetQuotaRootJob : public QuotaJobBase { Q_OBJECT Q_DECLARE_PRIVATE(GetQuotaRootJob) friend class SessionPrivate; public: explicit GetQuotaRootJob( Session *session ); virtual ~GetQuotaRootJob(); void setMailBox(const QString &mailBox); QString mailBox() const; QList roots() const; - qint64 usage(const QByteArray& root, const QByteArray& resource); - qint64 limit(const QByteArray& root, const QByteArray& resource); + qint64 usage(const QByteArray &root, const QByteArray &resource) const; + qint64 limit(const QByteArray &root, const QByteArray &resource) const; + + QMap allUsages(const QByteArray &root) const; + QMap allLimits(const QByteArray &root) const; protected: virtual void doStart(); virtual void handleResponse(const Message &response); }; } #endif