diff options
Diffstat (limited to 'kmail/quotajobs.h')
-rw-r--r-- | kmail/quotajobs.h | 194 |
1 files changed, 194 insertions, 0 deletions
diff --git a/kmail/quotajobs.h b/kmail/quotajobs.h new file mode 100644 index 000000000..a73e3084a --- /dev/null +++ b/kmail/quotajobs.h @@ -0,0 +1,194 @@ +/** + * quotajobs.h + * + * Copyright (c) 2006 Till Adam <adam@kde.org> + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of this program with any edition of + * the Qt library by Trolltech AS, Norway (or with modified versions + * of Qt that use the same license as Qt), and distribute linked + * combinations including the two. You must obey the GNU General + * Public License in all respects for all of the code used other than + * Qt. If you modify this file, you may extend this exception to + * your version of the file, but you are not obligated to do so. If + * you do not wish to do so, delete this exception statement from + * your version. + */ + +#ifndef QUOTAJOBS_H +#define QUOTAJOBS_H + +#include <qvariant.h> + +#include <kio/job.h> +#include <klocale.h> +#include <qvaluevector.h> + +#include <math.h> + +#include "globalsettings.h" + +namespace KMail { + +// One quota entry consisting of a name, the quota root, +// the current value and the maximal value +class QuotaInfo { + public : + QuotaInfo() {} // for QValueVector + QuotaInfo( const QString& _name, const QString& _root, const QVariant& _current, const QVariant& _max ) + : mName( _name ), mRoot( _root ), mCurrent( _current ),mMax( _max ) {} + bool operator==( const QuotaInfo & other ) const { + return mName == other.mName && mRoot == other.mRoot && mMax == other.mMax && mCurrent == other.mCurrent; + } + bool operator!=( const QuotaInfo & other ) const { + return !(operator==(other) ); + } + bool isValid() const { return !mName.isEmpty(); } + bool isEmpty() const { return mName.isEmpty() || ( mRoot.isEmpty() && !mCurrent.isValid() && !mMax.isValid() ); } + + QString name() const { return mName; } + void setName( const QString& n ) { mName = n; } + QString root() const { return mRoot; } + void setRoot( const QString& r ) { mRoot = r; } + QVariant max() const { return mMax; } + void setMax( const QVariant& m ) { mMax = m; } + QVariant current() const { return mCurrent; } + void setCurrent( const QVariant& c ) { mCurrent = c; } + + QString toString() const { + if ( isValid() && !isEmpty() ) { + readConfig(); + int factor = static_cast<int> ( pow( 1000, mFactor ) ); + return i18n("%1 of %2 %3 used").arg( mCurrent.toInt() / factor ) + .arg( mMax.toInt() / factor ).arg( mUnits ); + } + return QString(); + } + + private: + void readConfig() const { + if( GlobalSettings::self()->quotaUnit() == GlobalSettings::EnumQuotaUnit::KB ) + { + mUnits = i18n("KB"); + mFactor = 0; + } + else if( GlobalSettings::self()->quotaUnit() == GlobalSettings::EnumQuotaUnit::MB ) + { + mUnits = i18n("MB"); + mFactor = 1; + } + else if( GlobalSettings::self()->quotaUnit() == GlobalSettings::EnumQuotaUnit::GB ) + { + mUnits = i18n("GB"); + mFactor = 2; + } + } + + QString mName; // e.g. STORAGE + QString mRoot; /// e.g. INBOX + QVariant mCurrent; + QVariant mMax; + mutable QString mUnits; //used by readConfig (const) privately and is modified + mutable int mFactor; +}; + +typedef QValueVector<QuotaInfo> QuotaInfoList; + +/** + * This namespace contains functions that return jobs for quota operations. + * + * The current implementation is tied to IMAP. + * If someone wants to extend this to other protocols, turn the namespace into a class + * and use virtual methods. + */ +namespace QuotaJobs { + +class GetQuotarootJob; +/** + * Get the quotaroots for a mailbox + * @param slave Slave object the job should be assigned to + * @param url URL for which to get the quotaroot + */ +GetQuotarootJob* getQuotaroot( KIO::Slave* slave, const KURL& url ); + +class GetStorageQuotaJob; +/** + * Get the storage quota for a mailbox, if there is one. + * @param slave Slave object the job should be assigned to + * @param url URL for which to get the storage quota + */ +GetStorageQuotaJob* getStorageQuota( KIO::Slave* slave, const KURL& url ); + +/// for getQuotaroot() +class GetQuotarootJob : public KIO::SimpleJob +{ + Q_OBJECT +public: + GetQuotarootJob( const KURL& url, const QByteArray &packedArgs, bool showProgressInfo ); + +signals: + /** Emitted when the server returns a (potentially empty) list of + * quota roots for the specified mailbox. + * @param roots List of quota roots for the mailbox + */ + void quotaRootResult( const QStringList& roots ); + + /** + * Emitted when the server returns a list of quota infos for the specified + * mailbox. This is an aggregate of all quotas for all applicable roots for + * the mailbox. It happens as a side effect of root listing. + * @param info List of quota infos for the mailbox + */ + void quotaInfoReceived( const QuotaInfoList& info ); + +protected slots: + void slotInfoMessage( KIO::Job*, const QString& ); +}; + +/// for getStorageQuota() +class GetStorageQuotaJob : public KIO::Job +{ + Q_OBJECT +public: + GetStorageQuotaJob( KIO::Slave* slave, const KURL& url ); + + /** Returns the storage quota info, if any, can be queried on result(). */ + QuotaInfo storageQuotaInfo() const; + +signals: + /** Emitted to indicate that storage quota information has + * been received. Is not emitted if there is no such info + * on the server, so users need to rely on the normal + * result() signal to be informed when the job is done. + */ + void storageQuotaResult( const QuotaInfo& info ); + + +protected slots: + void slotQuotarootResult( const QStringList& roots ); + void slotQuotaInfoReceived( const QuotaInfoList& roots ); +private: + QuotaInfo mStorageQuotaInfo; +}; + +} // QuotaJobs namespace + +} // KMail namespace + + +#endif /* QUOTAJOBS_H */ + |