kmail

kmkernel.h
1 // -*- mode: C++; c-file-style: "gnu" -*-
2 
3 #ifndef _KMCONTROL
4 #define _KMCONTROL
5 
6 #include <tqobject.h>
7 #include <tqstring.h>
8 #include <tqguardedptr.h>
9 #include <weaver.h>
10 #include <weaverlogger.h>
11 
12 #include <kconfig.h>
13 #include <kdeversion.h>
14 #include <kimproxy.h>
15 #include <kdepimmacros.h>
16 
17 #include "kmailIface.h"
18 #include "kmmsgbase.h"
19 #include "globalsettings.h"
20 
21 #define kmkernel KMKernel::self()
22 #define kmconfig KMKernel::config()
23 
24 namespace KIO {
25  class Job;
26 }
27 namespace KWallet {
28  class Wallet;
29 }
30 
35 namespace KMail {
36  class MailServiceImpl;
37  class UndoStack;
38  class JobScheduler;
39  class MessageSender;
40  class AccountManager;
41 }
42 namespace KPIM { class ProgressDialog; }
43 using KMail::MailServiceImpl;
45 using KMail::UndoStack;
47 using KPIM::ProgressDialog;
48 class KMMsgIndex;
49 class TQLabel;
50 class KMFolder;
51 class KMFolderMgr;
52 class KMFilterMgr;
53 class KMFilterActionDict;
54 class KMSender;
55 namespace KPIM {
56  class Identity;
57  class IdentityManager;
58 }
59 class KMKernel;
60 class KProcess;
61 class KProgressDialog;
62 class KInstance;
63 class TQTimer;
64 class KProgress;
65 class KPassivePopup;
66 class KMMainWin;
67 class KMainWindow;
68 class KMailICalIfaceImpl;
69 class KMReaderWin;
70 class KSystemTray;
71 class KMMainWidget;
72 class ConfigureDialog;
73 
83 class KDE_EXPORT KMKernel : public TQObject, virtual public KMailIface
84 {
85  Q_OBJECT
86  TQ_OBJECT
87 
88 public:
89  KMKernel (TQObject *parent=0, const char *name=0);
90  ~KMKernel ();
91 
94  void checkMail ();
95  TQStringList accounts();
96  void checkAccount (const TQString &account);
98  int openComposer (const TQString &to, const TQString &cc, const TQString &bcc,
99  const TQString &subject, const TQString &body, int hidden,
100  const KURL &messageFile, const KURL::List &attachURLs,
101  const QCStringList &customHeaders);
103  int openComposer (const TQString &to, const TQString &cc, const TQString &bcc,
104  const TQString &subject, const TQString &body, int hidden,
105  const KURL &messageFile, const KURL::List &attachURLs)
106  {
107  QCStringList noCustomHeaders;
108  return openComposer(to, cc, bcc, subject, body, hidden, messageFile, attachURLs, noCustomHeaders);
109  }
111  int openComposer (const TQString &to, const TQString &cc, const TQString &bcc,
112  const TQString &subject, const TQString &body, int hidden,
113  const KURL &messageFile, const KURL& attachURL)
114  {
115  return openComposer(to, cc, bcc, subject, body, hidden, messageFile, KURL::List(attachURL));
116  }
118  int openComposer (const TQString &to, const TQString &cc, const TQString &bcc,
119  const TQString &subject, const TQString &body, int hidden,
120  const KURL &messageFile)
121  {
122  return openComposer(to, cc, bcc, subject, body, hidden, messageFile, KURL::List());
123  }
127  int openComposer (const TQString &to, const TQString &cc,
128  const TQString &bcc, const TQString &subject,
129  const TQString &body, int hidden,
130  const TQString &attachName,
131  const TQCString &attachCte,
132  const TQCString &attachData,
133  const TQCString &attachType,
134  const TQCString &attachSubType,
135  const TQCString &attachParamAttr,
136  const TQString &attachParamValue,
137  const TQCString &attachContDisp);
138 
142  int openComposer (const TQString &to, const TQString &cc,
143  const TQString &bcc, const TQString &subject,
144  const TQString &body, int hidden,
145  const TQString &attachName,
146  const TQCString &attachCte,
147  const TQCString &attachData,
148  const TQCString &attachType,
149  const TQCString &attachSubType,
150  const TQCString &attachParamAttr,
151  const TQString &attachParamValue,
152  const TQCString &attachContDisp,
153  const TQCString &attachCharset);
154 
155  int openComposer (const TQString &to, const TQString &cc,
156  const TQString &bcc, const TQString &subject,
157  const TQString &body, int hidden,
158  const TQString &attachName,
159  const TQCString &attachCte,
160  const TQCString &attachData,
161  const TQCString &attachType,
162  const TQCString &attachSubType,
163  const TQCString &attachParamAttr,
164  const TQString &attachParamValue,
165  const TQCString &attachContDisp,
166  const TQCString &attachCharset,
167  unsigned int identity);
168 
169  DCOPRef openComposer(const TQString &to, const TQString &cc,
170  const TQString &bcc, const TQString &subject,
171  const TQString &body,bool hidden);
172 
175  void setDefaultTransport( const TQString & transport );
176 
178  DCOPRef newMessage(const TQString &to,
179  const TQString &cc,
180  const TQString &bcc,
181  bool hidden,
182  bool useFolderId,
183  const KURL &messageFile,
184  const KURL &attachURL);
185 
186  int sendCertificate( const TQString& to, const TQByteArray& certData );
187 
188  void openReader() { openReader( false ); }
189 
190  int dcopAddMessage(const TQString & foldername, const TQString & messagefile,
191  const TQString & MsgStatusFlags = TQString());
192  int dcopAddMessage(const TQString & foldername, const KURL & messagefile,
193  const TQString & MsgStatusFlags = TQString());
194  void dcopResetAddMessage();
196  int dcopAddMessage_fastImport(const TQString & foldername, const TQString & messagefile,
197  const TQString & MsgStatusFlags = TQString());
198  int dcopAddMessage_fastImport(const TQString & foldername, const KURL & messagefile,
199  const TQString & MsgStatusFlags = TQString());
200  void showImportArchiveDialog();
201 
202  TQStringList folderList() const;
203  DCOPRef getFolder( const TQString& vpath );
204  void selectFolder( TQString folder );
205  int timeOfLastMessageCountChange() const;
206  virtual bool showMail( TQ_UINT32 serialNumber, TQString messageId );
207  virtual TQString getFrom( TQ_UINT32 serialNumber );
208  virtual TQString debugScheduler();
209  virtual TQString debugSernum( TQ_UINT32 serialNumber );
210  int viewMessage( const KURL & messageFile );
211 
216  virtual void pauseBackgroundJobs();
217 
222  virtual void resumeBackgroundJobs();
223 
228  void stopNetworkJobs();
229 
234  void resumeNetworkJobs();
235 
241  static bool askToGoOnline();
242 
247  static bool isOffline();
248 
251  static KMKernel *self() { return mySelf; }
252  static KConfig *config();
253 
254  void init();
255  void readConfig();
256  void cleanupImapFolders();
257  void recreateCorruptIndexFiles();
258  void testDir(const char *_name);
259  void recoverDeadLetters();
260  void initFolders(KConfig* cfg);
261  void closeAllKMailWindows();
262  void cleanup(void);
263  void quit();
269  bool transferMail( TQString & destinationDir );
270  void ungrabPtrKb(void);
271  void kmailMsgHandler(TQtMsgType aType, const char* aMsg);
272  bool doSessionManagement();
273  bool firstInstance() { return the_firstInstance; }
274  void setFirstInstance(bool value) { the_firstInstance = value; }
275  void action (bool mailto, bool check, const TQString &to, const TQString &cc,
276  const TQString &bcc, const TQString &subj, const TQString &body,
277  const KURL &messageFile, const KURL::List &attach,
278  const QCStringList &customHeaders);
279  void byteArrayToRemoteFile(const TQByteArray&, const KURL&,
280  bool overwrite = FALSE);
281  bool folderIsDraftOrOutbox( const KMFolder * );
282  bool folderIsDrafts( const KMFolder * );
283  bool folderIsTemplates( const KMFolder * );
284  bool folderIsTrash( KMFolder * );
288  bool folderIsSentMailFolder( const KMFolder * );
292  KMFolder* findFolderById( const TQString& idString );
293 
294  KInstance *xmlGuiInstance() { return mXmlGuiInstance; }
295  void setXmlGuiInstance( KInstance *instance ) { mXmlGuiInstance = instance; }
296 
297  KMFolder *inboxFolder() { return the_inboxFolder; }
298  KMFolder *outboxFolder() { return the_outboxFolder; }
299  KMFolder *sentFolder() { return the_sentFolder; }
300  KMFolder *trashFolder() { return the_trashFolder; }
301  KMFolder *draftsFolder() { return the_draftsFolder; }
302  KMFolder *templatesFolder() { return the_templatesFolder; }
303 
304  KMFolderMgr *folderMgr() { return the_folderMgr; }
305  KMFolderMgr *imapFolderMgr() { return the_imapFolderMgr; }
306  KMFolderMgr *dimapFolderMgr() { return the_dimapFolderMgr; }
307  KMFolderMgr *searchFolderMgr() { return the_searchFolderMgr; }
308  UndoStack *undoStack() { return the_undoStack; }
309  AccountManager *acctMgr() { return the_acctMgr; }
310  KMFilterMgr *filterMgr() { return the_filterMgr; }
311  KMFilterMgr *popFilterMgr() { return the_popFilterMgr; }
312  KMFilterActionDict *filterActionDict() { return the_filterActionDict; }
313  KMail::MessageSender *msgSender();
314  KMMsgIndex *msgIndex();
315 
316  KPIM::ThreadWeaver::Weaver *weaver() { return the_weaver; }
318  KPIM::IdentityManager *identityManager();
319 
320  JobScheduler* jobScheduler() { return mJobScheduler; }
321 
323  void compactAllFolders();
325  void expireAllFoldersNow();
326 
327  KMailICalIfaceImpl& iCalIface();
328 
329  bool firstStart() { return the_firstStart; }
330  TQString previousVersion() { return the_previousVersion; }
331  bool startingUp() { return the_startingUp; }
332  void setStartingUp (bool flag) { the_startingUp = flag; }
333  bool shuttingDown() { return the_shuttingDown; }
334  void setShuttingDown(bool flag) { the_shuttingDown = flag; }
335  void serverReady (bool flag) { the_server_is_ready = flag; }
336 
340  static TQString localDataPath();
341 
346  bool haveSystemTrayApplet();
347 
348  bool registerSystemTrayApplet( const KSystemTray* );
349  bool unregisterSystemTrayApplet( const KSystemTray* );
350 
352  bool handleCommandLine( bool noArgsOpensReader );
353  void emergencyExit( const TQString& reason );
354 
356  unsigned long getNextMsgSerNum();
357  TQTextCodec *networkCodec() { return netCodec; }
358 
360  KMainWindow* mainWin();
361 
362  // ### The mContextMenuShown flag is necessary to work around bug# 56693
363  // ### (kmail freeze with the complete desktop while pinentry-qt appears)
364  // ### FIXME: Once the encryption support is asynchron this can be removed
365  // ### again.
366  void setContextMenuShown( bool flag ) { mContextMenuShown = flag; }
367  bool contextMenuShown() const { return mContextMenuShown; }
368 
373  ::KIMProxy* imProxy();
374 
379  bool mailCheckAborted() const;
383  void enableMailCheck();
389  void abortMailCheck();
390 
391  bool canQueryClose();
392 
396  void messageCountChanged();
397 
399  KWallet::Wallet *wallet();
400 
402  KMMainWidget *getKMMainWidget();
403 
405  TQValueList< TQGuardedPtr<KMFolder> > allFolders();
406 
407  void raise();
408 
409  void loadProfile( const TQString& path );
410 
411  void saveToProfile( const TQString& path ) const;
412 
413  bool isCodecAsciiCompatible( const TQTextCodec *codec );
414 public slots:
415 
417  void dumpDeadLetters();
418 
424  void slotRequestConfigSync();
425 
427  void slotEmptyTrash();
428 
429  void slotShowConfigurationDialog();
430  void slotRunBackgroundTasks();
431 
432  void slotConfigChanged();
433 
434 protected slots:
435  void slotDataReq(KIO::Job*,TQByteArray&);
436  void slotResult(KIO::Job*);
437 
438 signals:
439  void configChanged();
440  void folderRemoved( KMFolder* aFolder );
441  void onlineStatusChanged( GlobalSettings::EnumNetworkState::type );
442 
443 private:
444  void openReader( bool onlyCheck );
445  KMMsgStatus strToStatus(const TQString &flags);
446  KMFolder *currentFolder();
447 
448  KMFolder *the_inboxFolder;
449  KMFolder *the_outboxFolder;
450  KMFolder *the_sentFolder;
451  KMFolder *the_trashFolder;
452  KMFolder *the_draftsFolder;
453  KMFolder *the_templatesFolder;
454 
455  KMFolderMgr *the_folderMgr;
456  KMFolderMgr *the_imapFolderMgr;
457  KMFolderMgr *the_dimapFolderMgr;
458  KMFolderMgr *the_searchFolderMgr;
459  UndoStack *the_undoStack;
460  AccountManager *the_acctMgr;
461  KMFilterMgr *the_filterMgr;
462  KMFilterMgr *the_popFilterMgr;
463  KMFilterActionDict *the_filterActionDict;
464  mutable KPIM::IdentityManager *mIdentityManager;
465  KMSender *the_msgSender;
466  KMMsgIndex *the_msgIndex;
467  struct putData
468  {
469  KURL url;
470  TQByteArray data;
471  int offset;
472  };
473  TQMap<KIO::Job *, putData> mPutJobs;
476  TQString the_previousVersion;
478  bool the_firstStart;
480  bool the_startingUp;
482  bool the_shuttingDown;
484  bool the_server_is_ready;
486  bool closed_by_user;
487  bool the_firstInstance;
488  bool mMailCheckAborted;
489  static KMKernel *mySelf;
490  KSharedConfig::Ptr mConfig;
491  TQTextCodec *netCodec;
492  KInstance* mXmlGuiInstance;
493  ConfigureDialog *mConfigureDialog;
494 
495  TQTimer *mBackgroundTasksTimer;
496  KMailICalIfaceImpl* mICalIface;
497  JobScheduler* mJobScheduler;
498  // temporary mainwin
499  KMMainWin *mWin;
500  MailServiceImpl *mMailService;
501 
502  // the time of the last change of the unread or total count of a folder;
503  // this can be queried via DCOP in order to determine whether the counts
504  // need to be updated (e.g. in the Summary in Kontact)
505  int mTimeOfLastMessageCountChange;
506 
507  // true if the context menu of KMFolderTree or KMHeaders is shown
508  // this is necessary to know in order to prevent a dead lock between the
509  // context menus and the pinentry program
510  bool mContextMenuShown;
511 
512  TQValueList<const KSystemTray*> systemTrayApplets;
513  TQValueList<const TQTextCodec*> mNonAsciiCompatibleCodecs;
514 
515  /* Weaver */
516  KPIM::ThreadWeaver::Weaver *the_weaver;
517  KPIM::ThreadWeaver::WeaverThreadLogger *the_weaverLogger;
518 
519  KWallet::Wallet *mWallet;
520 
521  // variables used by dcopAddMessage()
522  TQStringList mAddMessageMsgIds;
523  TQString mAddMessageLastFolder;
524  KMFolder *mAddMsgCurrentFolder;
525 };
526 
527 #endif