kmkernel.h
00001 // -*- mode: C++; c-file-style: "gnu" -*- 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 // ### The mContextMenuShown flag is necessary to work around bug# 56693 00363 // ### (kmail freeze with the complete desktop while pinentry-qt appears) 00364 // ### FIXME: Once the encryption support is asynchron this can be removed 00365 // ### again. 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 // temporary mainwin 00499 KMMainWin *mWin; 00500 MailServiceImpl *mMailService; 00501 00502 // the time of the last change of the unread or total count of a folder; 00503 // this can be queried via DCOP in order to determine whether the counts 00504 // need to be updated (e.g. in the Summary in Kontact) 00505 int mTimeOfLastMessageCountChange; 00506 00507 // true if the context menu of KMFolderTree or KMHeaders is shown 00508 // this is necessary to know in order to prevent a dead lock between the 00509 // context menus and the pinentry program 00510 bool mContextMenuShown; 00511 00512 TQValueList<const KSystemTray*> systemTrayApplets; 00513 TQValueList<const TQTextCodec*> mNonAsciiCompatibleCodecs; 00514 00515 /* Weaver */ 00516 KPIM::ThreadWeaver::Weaver *the_weaver; 00517 KPIM::ThreadWeaver::WeaverThreadLogger *the_weaverLogger; 00518 00519 KWallet::Wallet *mWallet; 00520 00521 // variables used by dcopAddMessage() 00522 TQStringList mAddMessageMsgIds; 00523 TQString mAddMessageLastFolder; 00524 KMFolder *mAddMsgCurrentFolder; 00525 }; 00526 00527 #endif