You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdepim/kmail/quotajobs.h

195 lines
6.2 KiB

/**
* 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., 51 Franklin Street, Fifth Floor, 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 */