• Skip to content
  • Skip to link menu
KDE 4.2 API Reference
  • KDE API Reference
  • kdepim
  • Sitemap
  • Contact Us
 

kmail

kmfolderimap.h

Go to the documentation of this file.
00001 /*
00002  * kmfolderimap.h
00003  *
00004  * Copyright (c) 2001 Kurt Granroth <granroth@kde.org>
00005  * Copyright (c) 2000-2002 Michael Haeckel <haeckel@kde.org>
00006  *
00007  * This file is based on kmacctimap.h by Michael Haeckel which is
00008  * based on popaccount.h by Don Sanders
00009  *
00010  * This program is free software; you can redistribute it and/or modify
00011  * it under the terms of the GNU General Public License as published by
00012  * the Free Software Foundation; version 2 of the License
00013  *
00014  * This program is distributed in the hope that it will be useful,
00015  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00016  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00017  * GNU General Public License for more details.
00018  *
00019  * You should have received a copy of the GNU General Public License along
00020  * with this program; if not, write to the Free Software Foundation, Inc.,
00021  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
00022  */
00023 
00024 #ifndef kmfolderimap_h
00025 #define kmfolderimap_h
00026 
00027 #include "kmacctimap.h"
00028 #include "kmfoldermbox.h"
00029 #include "kmmsgbase.h"
00030 
00031 #include <kio/job.h>
00032 #include <kio/global.h>
00033 
00034 #include <kstandarddirs.h>
00035 
00036 #include <QList>
00037 #include <q3intdict.h>
00038 #include <q3dict.h>
00039 
00040 template< typename T> class QList;
00041 
00042 class KMFolderImap;
00043 class KMSearchPattern;
00044 class KMMessage;
00045 namespace KMail {
00046   class FolderJob;
00047   class ImapJob;
00048   class AttachmentStrategy;
00049   class ImapAccountBase;
00050 }
00051 namespace KPIM {
00052   class ProgressItem;
00053 }
00054 using KMail::FolderJob;
00055 using KMail::ImapJob;
00056 using KMail::AttachmentStrategy;
00057 using KMail::ImapAccountBase;
00058 using KPIM::ProgressItem;
00059 using KPIM::MessageStatus;
00060 
00061 class KMMsgMetaData
00062 {
00063 public:
00064   KMMsgMetaData( const MessageStatus& aStatus)
00065     :mStatus(aStatus), mSerNum(0) {}
00066   KMMsgMetaData(const MessageStatus& aStatus, quint32 aSerNum)
00067     :mStatus(aStatus), mSerNum(aSerNum) {}
00068   ~KMMsgMetaData() {}
00069   const MessageStatus& status() const { return mStatus; }
00070   const MessageStatus& messageStatus() const { return mStatus; }
00071   quint32 serNum() const { return mSerNum; }
00072 private:
00073   MessageStatus mStatus;
00074   quint32 mSerNum;
00075 };
00076 
00077 
00078 
00079 class KMFolderImap : public KMFolderMbox
00080 {
00081   Q_OBJECT
00082   friend class ::KMail::ImapJob;
00083 public:
00084 
00085   static QString cacheLocation() {
00086      return KStandardDirs::locateLocal("data", "kmail/imap" );
00087   }
00088 
00089   enum imapState {
00090     imapNoInformation = 0,
00091     imapListingInProgress = 1,
00092     imapDownloadInProgress = 2,
00093     imapFinished = 3
00094   };
00095 
00096   virtual imapState getContentState() { return mContentState; }
00097   virtual void setContentState(imapState state) { mContentState = state; }
00098 
00099   virtual imapState getSubfolderState() { return mSubfolderState; }
00100   virtual void setSubfolderState(imapState state);
00101 
00105   explicit KMFolderImap(KMFolder* folder, const char* name=0);
00106   virtual ~KMFolderImap();
00107 
00109   virtual KMFolderType folderType() const { return KMFolderTypeImap; }
00110 
00111   virtual KMMessage* getMsg(int idx);
00113   void setImapPath( const QString &path );
00114   QString imapPath() const { return mImapPath; }
00115 
00117   ulong lastUid();
00118 
00120   void setUidValidity(const QString &validity) { mUidValidity = validity; }
00121   QString uidValidity() { return mUidValidity; }
00122 
00124   void setAccount(KMAcctImap *acct);
00125   KMAcctImap* account() const;
00126 
00128   virtual void removeMsg(int i, bool quiet = false);
00129   virtual void removeMsg(const QList<KMMessage*>& msgList, bool quiet = false);
00130 
00131   virtual int rename( const QString& newName, KMFolderDir *aParent = 0 );
00132 
00134   virtual void remove();
00135 
00137   bool autoExpunge();
00138 
00140   virtual void writeConfig();
00141 
00143   virtual void readConfig();
00144 
00150   virtual bool listDirectory();
00151 
00155   void getFolder(bool force = false);
00156 
00160   void getAndCheckFolder(bool force = false);
00161 
00169 void createFolder(const QString &name,
00170 const QString& imapPath = QString(), bool askUser = true);
00171 
00175 void deleteMessage(KMMessage * msg);
00176 void deleteMessage(const QList<KMMessage*>& msgList);
00177 
00182 virtual void setStatus(int idx, const MessageStatus& status, bool toggle);
00183 
00187   virtual void setStatus(QList<int>& _ids, const MessageStatus& status, bool toggle);
00188 
00190 static QStringList makeSets( QList<ulong>&, bool sort = true);
00191 static QStringList makeSets(const QStringList&, bool sort = true);
00192 
00194 static QList<KMMessage*> splitMessageList(const QString& set,
00195                       QList<KMMessage*>& msgList);
00196 
00198 void getUids(QList<int>& ids, QList<ulong>& uids);
00199 
00201 void getUids(const QList<KMMessage*>& msgList, QList<ulong>& uids);
00202 
00206 void expungeFolder(KMFolderImap * aFolder, bool quiet);
00207 
00208 virtual int compact( bool ) { expungeFolder(this, false); return 0; }
00209 
00213 void sendFolderComplete(bool success)
00214 { emit folderComplete(this, success); }
00215 
00220 bool processNewMail(bool interactive);
00221 
00226 void setSelected(bool selected) { mIsSelected = selected; }
00227 bool isSelected() { return mIsSelected; }
00228 
00232 static QString encodeFileName(const QString &);
00233 static QString decodeFileName(const QString &);
00234 
00238   static QString statusToFlags( const KPIM::MessageStatus &status, int supportedFalgs);
00239 
00243 virtual QString fileName() const {
00244 return encodeFileName( KMFolderMbox::fileName() ); }
00245 
00249 ulong serNumForUID( ulong uid );
00250 
00255 void saveMsgMetaData( KMMessage* msg, ulong uid = 0 );
00256 
00260 static QList<ulong> splitSets(const QString&);
00261 
00262 virtual void ignoreJobsForMessage( KMMessage* );
00263 
00267 bool includeInMailCheck() { return mCheckMail; }
00268 void setIncludeInMailCheck( bool check );
00269 
00271 virtual int create();
00272 
00274 virtual bool isAutoExpire() const { return false; }
00275 
00276 void setCheckingValidity( bool val ) { mCheckingValidity = val; }
00277 
00279   virtual void reallyDoClose();
00280 
00282 KMFolder* trashFolder() const;
00283 
00289 void setAlreadyRemoved(bool removed);
00290 
00292 bool isReadOnly() const { return KMFolderMbox::isReadOnly() || mReadOnly; }
00293 
00298 unsigned int userRights() const { return mUserRights; }
00299 bool canDeleteMessages() const;
00300 
00302 void setUserRights( unsigned int userRights );
00303 
00309 virtual void search( const KMSearchPattern* );
00310 virtual void search( const KMSearchPattern*, quint32 serNum );
00311 
00313 virtual bool isMoveable() const;
00314 
00316 void initializeFrom( KMFolderImap* parent, const QString &path, const QString &mimeType );
00317 
00319   int permanentFlags() const { return mPermanentFlags; }
00320 
00321 signals:
00322 void folderComplete(KMFolderImap *folder, bool success);
00323 
00327 void deleted(KMFolderImap*);
00328 
00332 void directoryListingFinished(KMFolderImap*);
00333 
00339 void folderCreationResult( const QString &name, bool success );
00340 
00341 public slots:
00343 virtual void addMsgQuiet(KMMessage *);
00344 virtual void addMsgQuiet(QList<KMMessage*>);
00345 
00352 virtual int addMsg(KMMessage* msg, int* index_return = 0);
00353 virtual int addMsg(QList<KMMessage*>&, QList<int>& index_return);
00354 
00356 void copyMsg(QList<KMMessage*>& msgList/*, KMFolder* parent*/);
00357 
00358 
00361 virtual KMMessage* take(int idx);
00362 virtual void take(const QList<KMMessage*>&);
00363 
00367 void slotSimpleData(KIO::Job * job, const QByteArray & data);
00368 
00373   static void flagsToStatus(KMMsgBase *msg, int flags, bool newMsg = true, int supportedFalgs = 31 );
00374 
00378 void slotCopyMsgResult( KMail::FolderJob* job );
00379 
00384   static void seenFlagToStatus( KMMsgBase *msg, int flags, bool newMsg = true );
00385 
00389 void slotSearchDone( QList<quint32> serNums,
00390            const KMSearchPattern* pattern,
00391            bool complete );
00392 
00396 void slotSearchDone( quint32 serNum, const KMSearchPattern* pattern, bool matches );
00397 
00402   void slotListResult( const QStringList&, const QStringList&,
00403       const QStringList&, const QStringList&, const ImapAccountBase::jobData& );
00404 
00409   void slotCheckNamespace( const QStringList&, const QStringList&,
00410       const QStringList&, const QStringList&, const ImapAccountBase::jobData& );
00411 
00412 protected:
00413   virtual FolderJob* doCreateJob( KMMessage *msg, FolderJob::JobType jt,
00414                                   KMFolder *folder, const QString &partSpecifier,
00415                                   const AttachmentStrategy *as ) const;
00416   virtual FolderJob* doCreateJob( QList<KMMessage*>& msgList, const QString& sets,
00417                                   FolderJob::JobType jt, KMFolder *folder ) const;
00418 
00419   void getMessagesResult(KIO::Job * job, bool lastSet);
00420 
00424   virtual int expungeContents();
00425 
00426   void setChildrenState( const QString &attributes );
00427 
00429   void initInbox();
00430 
00432   KMFolderImap* findParent( const QString& path, const QString& name );
00433 
00435   void checkFolders( const QStringList& folderNames, const QString& ns );
00436 
00437   void finishMailCheck( const char *func, imapState state );
00438 
00439 protected slots:
00440 
00444   void checkValidity();
00445   void slotCheckValidityResult(KJob * job);
00446 
00450   void reallyGetFolder(const QString &startUid = QString());
00451 
00455   void slotListFolderResult(KJob * job);
00456   void slotListFolderEntries(KIO::Job * job, const KIO::UDSEntryList & uds);
00457 
00461   void slotGetMessagesResult(KJob * job);
00462   void slotGetLastMessagesResult(KJob * job);
00463   void slotGetMessagesData(KIO::Job * job, const QByteArray & data);
00464 
00471   void rememberSerialNumber( const KMMessage *msg );
00472 
00476   void slotCreateFolderResult(KJob * job);
00477 
00481   void slotRemoveFolderResult(KJob *job);
00482 
00486   void slotStatResult(KJob *job);
00487 
00492   void slotCompleteMailCheckProgress();
00493 
00497   void slotProcessNewMail( int errorCode, const QString& errorMsg );
00498 
00504   void slotCreatePendingFolders( int errorCode, const QString& errorMsg );
00505 
00509   void slotListNamespaces();
00510 
00511 protected:
00512   QString     mImapPath;
00513   ulong       mLastUid;
00514   imapState   mContentState, mSubfolderState;
00515   bool        mIsSelected;
00516   bool        mCheckFlags;
00517   bool        mReadOnly;
00518   bool        mCheckMail;
00519   mutable QPointer<KMAcctImap> mAccount;
00520   // the current uidvalidity
00521   QString mUidValidity;
00522   unsigned int mUserRights;
00523 
00524 private:
00525   // if we're checking validity currently
00526   bool        mCheckingValidity;
00527   // uid - metadata cache
00528   Q3IntDict<KMMsgMetaData> mUidMetaDataMap;
00529   // msgidMD5 - status map
00530   Q3Dict<KMMsgMetaData> mMetaDataMap;
00531   // if the folder should be deleted without server roundtrip
00532   bool        mAlreadyRemoved;
00533   // the progress for mailchecks
00534   QPointer<ProgressItem> mMailCheckProgressItem;
00535   // the progress for listings
00536   ProgressItem *mListDirProgressItem;
00537   // the progress for addMsg
00538   ProgressItem *mAddMessageProgressItem;
00539   // to-be-added folders
00540   QStringList mFoldersPendingCreation;
00541   QStringList owners;
00542 
00543   // push all flags to the server instead of just the changed once
00544   // when doing a flag change the next time
00545   // this is needed for migrating local flags from the time where we didn't
00546   // have the ability to store them on the server
00547   bool mUploadAllFlags;
00548 
00549   // PERMANENTFLAGS part of SELECT response, needed to determine if custom flags can be
00550   // stored on the server
00551   int mPermanentFlags;
00552 };
00553 
00554 #endif // kmfolderimap_h

kmail

Skip menu "kmail"
  • Main Page
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

kdepim

Skip menu "kdepim"
  • akonadi
  •   clients
  •   kabc
  •   kcal
  •   kcm
  • akregator
  • console
  •   kabcclient
  •   konsolekalendar
  • kaddressbook
  • kalarm
  •   lib
  • kdgantt
  • kdgantt1
  • kjots
  • kleopatra
  • kmail
  • kmobiletools
  • knode
  • knotes
  • kontact
  • kontactinterfaces
  • korganizer
  •   korgac
  • kpilot
  • ktimetracker
  • libkdepim
  • libkholidays
  • libkleo
  • libkpgp
  • maildir
Generated for kdepim by doxygen 1.5.4
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal