00001
00002
00003 #ifndef _KMCONTROL
00004 #define _KMCONTROL
00005
00006 #include <tqobject.h>
00007 #include <tqstring.h>
00008 #include <tqguardedptr.h>
00009 #include <weaver.h>
00010 #include <weaverlogger.h>
00011
00012 #include <kconfig.h>
00013 #include <kdeversion.h>
00014 #include <kimproxy.h>
00015 #include <kdepimmacros.h>
00016
00017 #include "kmailIface.h"
00018 #include "kmmsgbase.h"
00019 #include "globalsettings.h"
00020
00021 #define kmkernel KMKernel::self()
00022 #define kmconfig KMKernel::config()
00023
00024 namespace KIO {
00025 class Job;
00026 }
00027 namespace KWallet {
00028 class Wallet;
00029 }
00030
00035 namespace KMail {
00036 class MailServiceImpl;
00037 class UndoStack;
00038 class JobScheduler;
00039 class MessageSender;
00040 class AccountManager;
00041 }
00042 namespace KPIM { class ProgressDialog; }
00043 using KMail::MailServiceImpl;
00044 using KMail::AccountManager;
00045 using KMail::UndoStack;
00046 using KMail::JobScheduler;
00047 using KPIM::ProgressDialog;
00048 class KMMsgIndex;
00049 class TQLabel;
00050 class KMFolder;
00051 class KMFolderMgr;
00052 class KMFilterMgr;
00053 class KMFilterActionDict;
00054 class KMSender;
00055 namespace KPIM {
00056 class Identity;
00057 class IdentityManager;
00058 }
00059 class KMKernel;
00060 class KProcess;
00061 class KProgressDialog;
00062 class KInstance;
00063 class TQTimer;
00064 class KProgress;
00065 class KPassivePopup;
00066 class KMMainWin;
00067 class KMainWindow;
00068 class KMailICalIfaceImpl;
00069 class KMReaderWin;
00070 class KSystemTray;
00071 class KMMainWidget;
00072 class ConfigureDialog;
00073
00083 class KDE_EXPORT KMKernel : public TQObject, virtual public KMailIface
00084 {
00085 Q_OBJECT
00086 TQ_OBJECT
00087
00088 public:
00089 KMKernel (TQObject *parent=0, const char *name=0);
00090 ~KMKernel ();
00091
00094 void checkMail ();
00095 TQStringList accounts();
00096 void checkAccount (const TQString &account);
00098 int openComposer (const TQString &to, const TQString &cc, const TQString &bcc,
00099 const TQString &subject, const TQString &body, int hidden,
00100 const KURL &messageFile, const KURL::List &attachURLs,
00101 const QCStringList &customHeaders);
00103 int openComposer (const TQString &to, const TQString &cc, const TQString &bcc,
00104 const TQString &subject, const TQString &body, int hidden,
00105 const KURL &messageFile, const KURL::List &attachURLs)
00106 {
00107 QCStringList noCustomHeaders;
00108 return openComposer(to, cc, bcc, subject, body, hidden, messageFile, attachURLs, noCustomHeaders);
00109 }
00111 int openComposer (const TQString &to, const TQString &cc, const TQString &bcc,
00112 const TQString &subject, const TQString &body, int hidden,
00113 const KURL &messageFile, const KURL& attachURL)
00114 {
00115 return openComposer(to, cc, bcc, subject, body, hidden, messageFile, KURL::List(attachURL));
00116 }
00118 int openComposer (const TQString &to, const TQString &cc, const TQString &bcc,
00119 const TQString &subject, const TQString &body, int hidden,
00120 const KURL &messageFile)
00121 {
00122 return openComposer(to, cc, bcc, subject, body, hidden, messageFile, KURL::List());
00123 }
00127 int openComposer (const TQString &to, const TQString &cc,
00128 const TQString &bcc, const TQString &subject,
00129 const TQString &body, int hidden,
00130 const TQString &attachName,
00131 const TQCString &attachCte,
00132 const TQCString &attachData,
00133 const TQCString &attachType,
00134 const TQCString &attachSubType,
00135 const TQCString &attachParamAttr,
00136 const TQString &attachParamValue,
00137 const TQCString &attachContDisp);
00138
00142 int openComposer (const TQString &to, const TQString &cc,
00143 const TQString &bcc, const TQString &subject,
00144 const TQString &body, int hidden,
00145 const TQString &attachName,
00146 const TQCString &attachCte,
00147 const TQCString &attachData,
00148 const TQCString &attachType,
00149 const TQCString &attachSubType,
00150 const TQCString &attachParamAttr,
00151 const TQString &attachParamValue,
00152 const TQCString &attachContDisp,
00153 const TQCString &attachCharset);
00154
00155 int openComposer (const TQString &to, const TQString &cc,
00156 const TQString &bcc, const TQString &subject,
00157 const TQString &body, int hidden,
00158 const TQString &attachName,
00159 const TQCString &attachCte,
00160 const TQCString &attachData,
00161 const TQCString &attachType,
00162 const TQCString &attachSubType,
00163 const TQCString &attachParamAttr,
00164 const TQString &attachParamValue,
00165 const TQCString &attachContDisp,
00166 const TQCString &attachCharset,
00167 unsigned int identity);
00168
00169 DCOPRef openComposer(const TQString &to, const TQString &cc,
00170 const TQString &bcc, const TQString &subject,
00171 const TQString &body,bool hidden);
00172
00175 void setDefaultTransport( const TQString & transport );
00176
00178 DCOPRef newMessage(const TQString &to,
00179 const TQString &cc,
00180 const TQString &bcc,
00181 bool hidden,
00182 bool useFolderId,
00183 const KURL &messageFile,
00184 const KURL &attachURL);
00185
00186 int sendCertificate( const TQString& to, const TQByteArray& certData );
00187
00188 void openReader() { openReader( false ); }
00189
00190 int dcopAddMessage(const TQString & foldername, const TQString & messagefile,
00191 const TQString & MsgStatusFlags = TQString());
00192 int dcopAddMessage(const TQString & foldername, const KURL & messagefile,
00193 const TQString & MsgStatusFlags = TQString());
00194 void dcopResetAddMessage();
00196 int dcopAddMessage_fastImport(const TQString & foldername, const TQString & messagefile,
00197 const TQString & MsgStatusFlags = TQString());
00198 int dcopAddMessage_fastImport(const TQString & foldername, const KURL & messagefile,
00199 const TQString & MsgStatusFlags = TQString());
00200 void showImportArchiveDialog();
00201
00202 TQStringList folderList() const;
00203 DCOPRef getFolder( const TQString& vpath );
00204 void selectFolder( TQString folder );
00205 int timeOfLastMessageCountChange() const;
00206 virtual bool showMail( TQ_UINT32 serialNumber, TQString messageId );
00207 virtual TQString getFrom( TQ_UINT32 serialNumber );
00208 virtual TQString debugScheduler();
00209 virtual TQString debugSernum( TQ_UINT32 serialNumber );
00210 int viewMessage( const KURL & messageFile );
00211
00216 virtual void pauseBackgroundJobs();
00217
00222 virtual void resumeBackgroundJobs();
00223
00228 void stopNetworkJobs();
00229
00234 void resumeNetworkJobs();
00235
00241 static bool askToGoOnline();
00242
00247 static bool isOffline();
00248
00251 static KMKernel *self() { return mySelf; }
00252 static KConfig *config();
00253
00254 void init();
00255 void readConfig();
00256 void cleanupImapFolders();
00257 void recreateCorruptIndexFiles();
00258 void testDir(const char *_name);
00259 void recoverDeadLetters();
00260 void initFolders(KConfig* cfg);
00261 void closeAllKMailWindows();
00262 void cleanup(void);
00263 void quit();
00269 bool transferMail( TQString & destinationDir );
00270 void ungrabPtrKb(void);
00271 void kmailMsgHandler(TQtMsgType aType, const char* aMsg);
00272 bool doSessionManagement();
00273 bool firstInstance() { return the_firstInstance; }
00274 void setFirstInstance(bool value) { the_firstInstance = value; }
00275 void action (bool mailto, bool check, const TQString &to, const TQString &cc,
00276 const TQString &bcc, const TQString &subj, const TQString &body,
00277 const KURL &messageFile, const KURL::List &attach,
00278 const QCStringList &customHeaders);
00279 void byteArrayToRemoteFile(const TQByteArray&, const KURL&,
00280 bool overwrite = FALSE);
00281 bool folderIsDraftOrOutbox( const KMFolder * );
00282 bool folderIsDrafts( const KMFolder * );
00283 bool folderIsTemplates( const KMFolder * );
00284 bool folderIsTrash( KMFolder * );
00288 bool folderIsSentMailFolder( const KMFolder * );
00292 KMFolder* findFolderById( const TQString& idString );
00293
00294 KInstance *xmlGuiInstance() { return mXmlGuiInstance; }
00295 void setXmlGuiInstance( KInstance *instance ) { mXmlGuiInstance = instance; }
00296
00297 KMFolder *inboxFolder() { return the_inboxFolder; }
00298 KMFolder *outboxFolder() { return the_outboxFolder; }
00299 KMFolder *sentFolder() { return the_sentFolder; }
00300 KMFolder *trashFolder() { return the_trashFolder; }
00301 KMFolder *draftsFolder() { return the_draftsFolder; }
00302 KMFolder *templatesFolder() { return the_templatesFolder; }
00303
00304 KMFolderMgr *folderMgr() { return the_folderMgr; }
00305 KMFolderMgr *imapFolderMgr() { return the_imapFolderMgr; }
00306 KMFolderMgr *dimapFolderMgr() { return the_dimapFolderMgr; }
00307 KMFolderMgr *searchFolderMgr() { return the_searchFolderMgr; }
00308 UndoStack *undoStack() { return the_undoStack; }
00309 AccountManager *acctMgr() { return the_acctMgr; }
00310 KMFilterMgr *filterMgr() { return the_filterMgr; }
00311 KMFilterMgr *popFilterMgr() { return the_popFilterMgr; }
00312 KMFilterActionDict *filterActionDict() { return the_filterActionDict; }
00313 KMail::MessageSender *msgSender();
00314 KMMsgIndex *msgIndex();
00315
00316 KPIM::ThreadWeaver::Weaver *weaver() { return the_weaver; }
00318 KPIM::IdentityManager *identityManager();
00319
00320 JobScheduler* jobScheduler() { return mJobScheduler; }
00321
00323 void compactAllFolders();
00325 void expireAllFoldersNow();
00326
00327 KMailICalIfaceImpl& iCalIface();
00328
00329 bool firstStart() { return the_firstStart; }
00330 TQString previousVersion() { return the_previousVersion; }
00331 bool startingUp() { return the_startingUp; }
00332 void setStartingUp (bool flag) { the_startingUp = flag; }
00333 bool shuttingDown() { return the_shuttingDown; }
00334 void setShuttingDown(bool flag) { the_shuttingDown = flag; }
00335 void serverReady (bool flag) { the_server_is_ready = flag; }
00336
00340 static TQString localDataPath();
00341
00346 bool haveSystemTrayApplet();
00347
00348 bool registerSystemTrayApplet( const KSystemTray* );
00349 bool unregisterSystemTrayApplet( const KSystemTray* );
00350
00352 bool handleCommandLine( bool noArgsOpensReader );
00353 void emergencyExit( const TQString& reason );
00354
00356 unsigned long getNextMsgSerNum();
00357 TQTextCodec *networkCodec() { return netCodec; }
00358
00360 KMainWindow* mainWin();
00361
00362
00363
00364
00365
00366 void setContextMenuShown( bool flag ) { mContextMenuShown = flag; }
00367 bool contextMenuShown() const { return mContextMenuShown; }
00368
00373 ::KIMProxy* imProxy();
00374
00379 bool mailCheckAborted() const;
00383 void enableMailCheck();
00389 void abortMailCheck();
00390
00391 bool canQueryClose();
00392
00396 void messageCountChanged();
00397
00399 KWallet::Wallet *wallet();
00400
00402 KMMainWidget *getKMMainWidget();
00403
00405 TQValueList< TQGuardedPtr<KMFolder> > allFolders();
00406
00407 void raise();
00408
00409 void loadProfile( const TQString& path );
00410
00411 void saveToProfile( const TQString& path ) const;
00412
00413 bool isCodecAsciiCompatible( const TQTextCodec *codec );
00414 public slots:
00415
00417 void dumpDeadLetters();
00418
00424 void slotRequestConfigSync();
00425
00427 void slotEmptyTrash();
00428
00429 void slotShowConfigurationDialog();
00430 void slotRunBackgroundTasks();
00431
00432 void slotConfigChanged();
00433
00434 protected slots:
00435 void slotDataReq(KIO::Job*,TQByteArray&);
00436 void slotResult(KIO::Job*);
00437
00438 signals:
00439 void configChanged();
00440 void folderRemoved( KMFolder* aFolder );
00441 void onlineStatusChanged( GlobalSettings::EnumNetworkState::type );
00442
00443 private:
00444 void openReader( bool onlyCheck );
00445 KMMsgStatus strToStatus(const TQString &flags);
00446 KMFolder *currentFolder();
00447
00448 KMFolder *the_inboxFolder;
00449 KMFolder *the_outboxFolder;
00450 KMFolder *the_sentFolder;
00451 KMFolder *the_trashFolder;
00452 KMFolder *the_draftsFolder;
00453 KMFolder *the_templatesFolder;
00454
00455 KMFolderMgr *the_folderMgr;
00456 KMFolderMgr *the_imapFolderMgr;
00457 KMFolderMgr *the_dimapFolderMgr;
00458 KMFolderMgr *the_searchFolderMgr;
00459 UndoStack *the_undoStack;
00460 AccountManager *the_acctMgr;
00461 KMFilterMgr *the_filterMgr;
00462 KMFilterMgr *the_popFilterMgr;
00463 KMFilterActionDict *the_filterActionDict;
00464 mutable KPIM::IdentityManager *mIdentityManager;
00465 KMSender *the_msgSender;
00466 KMMsgIndex *the_msgIndex;
00467 struct putData
00468 {
00469 KURL url;
00470 TQByteArray data;
00471 int offset;
00472 };
00473 TQMap<KIO::Job *, putData> mPutJobs;
00476 TQString the_previousVersion;
00478 bool the_firstStart;
00480 bool the_startingUp;
00482 bool the_shuttingDown;
00484 bool the_server_is_ready;
00486 bool closed_by_user;
00487 bool the_firstInstance;
00488 bool mMailCheckAborted;
00489 static KMKernel *mySelf;
00490 KSharedConfig::Ptr mConfig;
00491 TQTextCodec *netCodec;
00492 KInstance* mXmlGuiInstance;
00493 ConfigureDialog *mConfigureDialog;
00494
00495 TQTimer *mBackgroundTasksTimer;
00496 KMailICalIfaceImpl* mICalIface;
00497 JobScheduler* mJobScheduler;
00498
00499 KMMainWin *mWin;
00500 MailServiceImpl *mMailService;
00501
00502
00503
00504
00505 int mTimeOfLastMessageCountChange;
00506
00507
00508
00509
00510 bool mContextMenuShown;
00511
00512 TQValueList<const KSystemTray*> systemTrayApplets;
00513 TQValueList<const TQTextCodec*> mNonAsciiCompatibleCodecs;
00514
00515
00516 KPIM::ThreadWeaver::Weaver *the_weaver;
00517 KPIM::ThreadWeaver::WeaverThreadLogger *the_weaverLogger;
00518
00519 KWallet::Wallet *mWallet;
00520
00521
00522 TQStringList mAddMessageMsgIds;
00523 TQString mAddMessageLastFolder;
00524 KMFolder *mAddMsgCurrentFolder;
00525 };
00526
00527 #endif