24 #ifndef __KMAIL_IMAPACCOUNTBASE_H__
25 #define __KMAIL_IMAPACCOUNTBASE_H__
29 #include "networkaccount.h"
32 #include <tqguardedptr.h>
33 #include <kio/global.h>
42 template <
typename T>
class TQValueVector;
55 typedef TQValueVector<KMail::ACLListEntry> ACLList;
57 class AttachmentStrategy;
59 class ImapAccountBase :
public KMail::NetworkAccount {
63 ImapAccountBase(
AccountManager * parent,
const TQString & name, uint
id );
65 virtual ~ImapAccountBase();
71 virtual void pseudoAssign(
const KMAccount * a );
75 bool autoExpunge()
const {
return mAutoExpunge; }
76 virtual void setAutoExpunge(
bool expunge );
79 bool hiddenFolders()
const {
return mHiddenFolders; }
80 virtual void setHiddenFolders(
bool show );
83 bool onlySubscribedFolders()
const {
return mOnlySubscribedFolders; }
84 virtual void setOnlySubscribedFolders(
bool show );
87 bool onlyLocallySubscribedFolders()
const {
return mOnlyLocallySubscribedFolders; }
88 virtual void setOnlyLocallySubscribedFolders(
bool show );
92 bool loadOnDemand()
const {
return mLoadOnDemand; }
93 virtual void setLoadOnDemand(
bool load );
96 bool listOnlyOpenFolders()
const {
return mListOnlyOpenFolders; }
97 virtual void setListOnlyOpenFolders(
bool only );
100 virtual KIO::MetaData slaveConfig()
const;
102 virtual void readConfig( KConfig& config );
103 virtual void writeConfig( KConfig& config );
108 enum ConnectionState { Error = 0, Connected, Connecting };
114 ListSubscribedNoCheck,
116 ListFolderOnlySubscribed
125 ConnectionState makeConnection();
128 enum imapNamespace { PersonalNS=0, OtherUsersNS=1, SharedNS=2 };
131 typedef TQMap<imapNamespace, TQStringList> nsMap;
134 typedef TQMap<TQString, TQString> namespaceDelim;
137 typedef TQMap<imapNamespace, namespaceDelim> nsDelimMap;
145 jobData() : url(TQString()), parent(0), current(0), total(1), done(0), offset(0), progressItem(0),
146 onlySubscribed(
false), quiet(
false), cancellable(
false) {}
149 int _total = 1,
int _done = 0,
bool _quiet =
false,
150 bool _cancelable =
false )
151 : url(_url), parent(_parent), current(0), total(_total), done(_done), offset(0),
152 progressItem(0), quiet(_quiet), cancellable(_cancelable) {}
156 TQString curNamespace;
161 TQPtrList<KMMessage> msgList;
162 int total, done, offset;
163 KPIM::ProgressItem *progressItem;
164 bool onlySubscribed, quiet, cancellable;
167 typedef TQMap<KIO::Job *, jobData>::Iterator JobIterator;
171 void insertJob( KIO::Job* job,
const jobData& data ) {
172 mapJobData.insert( job, data );
177 JobIterator findJob( KIO::Job* job ) {
return mapJobData.
find( job ); }
178 JobIterator jobsEnd() {
return mapJobData.end(); }
183 void removeJob( JobIterator& it );
185 void removeJob( KIO::Job* job );
194 void changeSubscription(
bool subscribe,
const TQString& imapPath,
bool quiet =
false );
200 bool locallySubscribedTo(
const TQString& imapPath );
206 void changeLocalSubscription(
const TQString& imapPath,
bool subscribe );
228 void getStorageQuotaInfo(
KMFolder* folder,
const TQString& imapPath );
234 void setImapStatus(
KMFolder* folder,
const TQString& path,
const TQCString& flags );
240 void setImapSeenStatus(
KMFolder* folder,
const TQString& path,
bool seen );
245 void slaveDied() { mSlave = 0; killAllJobs(); }
250 void killAllJobs(
bool disconnectSlave=
false ) = 0;
255 virtual void cancelMailCheck();
260 enum FolderListType { Single, Recursive };
261 void processNewMailInFolder(
KMFolder* folder, FolderListType type = Single );
266 bool checkingSingleFolder() {
return mCheckingSingleFolder; }
272 void postProcessNewMail(
bool setStatusMsg =
true );
278 bool checkingMail(
KMFolder *folder );
280 bool checkingMail() {
return NetworkAccount::checkingMail(); }
285 void handleBodyStructure( TQDataStream & stream,
KMMessage * msg,
286 const AttachmentStrategy *as );
291 virtual void setFolder(
KMFolder*,
bool addAccount =
false);
297 bool hasACLSupport()
const {
return mACLSupport; }
303 bool hasAnnotationSupport()
const {
return mAnnotationSupport; }
308 void setHasNoAnnotationSupport() { mAnnotationSupport =
false; }
314 bool hasQuotaSupport()
const {
return mQuotaSupport; }
319 void setHasNoQuotaSupport() { mQuotaSupport =
false; }
325 bool handleJobError( KIO::Job* job,
const TQString& context,
bool abortSync =
false );
335 KPIM::ProgressItem* listDirProgressItem();
341 virtual unsigned int folderCount()
const;
346 nsMap namespaces()
const {
return mNamespaces; }
351 virtual void setNamespaces( nsMap map )
352 { mNamespaces = map; }
358 nsDelimMap namespacesWithDelimiter();
368 TQString addPathToNamespace(
const TQString& ns );
373 TQString delimiterForNamespace(
const TQString& prefix );
383 namespaceDelim namespaceToDelimiter()
const
384 {
return mNamespaceToDelimiter; }
389 void setNamespaceToDelimiter( namespaceDelim map )
390 { mNamespaceToDelimiter = map; }
395 bool isNamespaceFolder( TQString& name );
400 bool hasCapability(
const TQString& capa ) {
401 return mCapabilities.contains( capa ); }
408 TQString createImapPath(
FolderStorage* parent,
const TQString& folderName );
413 TQString createImapPath(
const TQString& parent,
const TQString& folderName );
421 void getNamespaces();
428 void slotSubscriptionResult(KIO::Job * job);
431 virtual void slotCheckQueuedFolders();
434 void slotSchedulerSlaveConnected(KIO::Slave *aSlave);
436 void slotSchedulerSlaveError(KIO::Slave *aSlave,
int,
const TQString &errorMsg);
441 void slotSetStatusResult(KIO::Job * job);
444 void slotGetUserRightsResult( KIO::Job* _job );
447 void slotGetACLResult( KIO::Job* _job );
450 void slotGetStorageQuotaInfoResult( KIO::Job* _job );
455 void slotNoopTimeout();
459 void slotIdleTimeout();
464 void slotAbortRequested( KPIM::ProgressItem* );
469 void slotSimpleResult(KIO::Job * job);
472 void slotNamespaceResult( KIO::Job*,
const TQString& str );
477 void slotSaveNamespaces(
const ImapAccountBase::nsDelimMap& map );
482 void slotCapabilitiesResult( KIO::Job*,
const TQString& result );
502 virtual bool handleError(
int error,
const TQString &errorMsg, KIO::Job* job,
const TQString& context,
bool abortSync =
false );
505 bool handlePutError( KIO::Job* job, jobData& jd,
KMFolder* folder );
507 virtual TQString protocol()
const;
508 virtual unsigned short int defaultPort()
const;
513 void constructParts( TQDataStream & stream,
int count, KMMessagePart* parentKMPart,
514 DwBodyPart * parent,
const DwMessage * dwmsg );
517 void migratePrefix();
520 TQStringList locallyBlacklistedFolders()
const;
521 void localBlacklistFromStringList(
const TQStringList & );
522 TQString prettifyQuotaError(
const TQString& _error, KIO::Job * job );
525 TQPtrList<TQGuardedPtr<KMFolder> > mOpenFolders;
526 TQStringList mSubfolderNames, mSubfolderPaths,
527 mSubfolderMimeTypes, mSubfolderAttributes;
528 TQMap<KIO::Job *, jobData> mapJobData;
533 int mTotal, mCountUnread, mCountLastUnread;
534 TQMap<TQString, int> mUnreadBeforeCheck;
535 bool mAutoExpunge : 1;
536 bool mHiddenFolders : 1;
537 bool mOnlySubscribedFolders : 1;
538 bool mOnlyLocallySubscribedFolders : 1;
539 bool mLoadOnDemand : 1;
540 bool mListOnlyOpenFolders : 1;
541 bool mProgressEnabled : 1;
543 bool mErrorDialogIsActive : 1;
544 bool mPasswordDialogIsActive : 1;
545 bool mACLSupport : 1;
546 bool mAnnotationSupport : 1;
547 bool mQuotaSupport : 1;
548 bool mSlaveConnected : 1;
549 bool mSlaveConnectionError : 1;
550 bool mCheckingSingleFolder : 1;
553 TQValueList<TQGuardedPtr<KMFolder> > mMailCheckFolders;
555 TQValueList<TQGuardedPtr<KMFolder> > mFoldersQueuedForChecking;
557 TQPtrList<KMMessagePart> mBodyPartList;
561 TQGuardedPtr<KPIM::ProgressItem> mListDirProgressItem;
567 namespaceDelim mNamespaceToDelimiter;
573 TQStringList mCapabilities;
575 std::set<TQString> mLocalSubscriptionBlackList;
584 void connectionResult(
int errorCode,
const TQString& errorMsg );
590 void subscriptionChanged(
const TQString& imapPath,
bool subscribed);
596 void subscriptionChangeFailed(
const TQString &errorMessage );
603 void imapStatusChanged(
KMFolder*,
const TQString& imapPath,
bool cont );
611 void receivedUserRights(
KMFolder* folder );
620 void receivedACL(
KMFolder* folder, KIO::Job* job,
const KMail::ACLList& entries );
630 void receivedStorageQuotaInfo(
KMFolder* folder, KIO::Job* job,
const KMail::QuotaInfo& entries );
635 void namespacesFetched(
const ImapAccountBase::nsDelimMap& );
640 void namespacesFetched();
646 #endif // __KMAIL_IMAPACCOUNTBASE_H__