kmail

kmkernel.h
1 #ifndef _KMCONTROL
2 #define _KMCONTROL
3 
4 #include <tqobject.h>
5 #include <tqstring.h>
6 #include <tqguardedptr.h>
7 #include <weaver.h>
8 #include <weaverlogger.h>
9 
10 #include <tdemacros.h>
11 #include <tdeconfig.h>
12 #include <tdeimproxy.h>
13 #include <tdemacros.h>
14 
15 #ifdef __TDE_HAVE_TDEHWLIB
16 # include <tdenetworkconnections.h>
17 #else
18 namespace TDENetworkConnectionStatus {
19  enum TDENetworkConnectionStatus {
20  };
21 }
22 #endif
23 
24 #include "kmailIface.h"
25 #include "kmmsgbase.h"
26 #include "globalsettings.h"
27 
28 #define kmkernel KMKernel::self()
29 #define kmconfig KMKernel::config()
30 
31 namespace TDEIO {
32  class Job;
33 }
34 namespace TDEWallet {
35  class Wallet;
36 }
37 
42 namespace KMail {
43  class MailServiceImpl;
44  class UndoStack;
45  class JobScheduler;
46  class MessageSender;
47  class AccountManager;
48 }
49 namespace KPIM { class ProgressDialog; }
50 using KMail::MailServiceImpl;
52 using KMail::UndoStack;
54 using KPIM::ProgressDialog;
55 class KMMsgIndex;
56 class TQLabel;
57 class KMFolder;
58 class KMFolderMgr;
59 class KMFilterMgr;
60 class KMFilterActionDict;
61 class KMSender;
62 namespace KPIM {
63  class Identity;
64  class IdentityManager;
65 }
66 class KMKernel;
67 class TDEProcess;
68 class KProgressDialog;
69 class TDEInstance;
70 class TQTimer;
71 class KProgress;
72 class KPassivePopup;
73 class KMMainWin;
74 class TDEMainWindow;
75 class KMailICalIfaceImpl;
76 class KMReaderWin;
77 class KSystemTray;
78 class KMMainWidget;
79 class ConfigureDialog;
80 
90 class TDE_EXPORT KMKernel : public TQObject, virtual public KMailIface
91 {
92  TQ_OBJECT
93 
94 
95 public:
96  KMKernel (TQObject *parent=0, const char *name=0);
97  ~KMKernel ();
98 
101  void checkMail ();
102  TQStringList accounts();
103  void checkAccount (const TQString &account);
105  int openComposer (const TQString &to, const TQString &cc, const TQString &bcc,
106  const TQString &subject, const TQString &body, int hidden,
107  const KURL &messageFile, const KURL::List &attachURLs,
108  const QCStringList &customHeaders);
110  int openComposer (const TQString &to, const TQString &cc, const TQString &bcc,
111  const TQString &subject, const TQString &body, int hidden,
112  const KURL &messageFile, const KURL::List &attachURLs)
113  {
114  QCStringList noCustomHeaders;
115  return openComposer(to, cc, bcc, subject, body, hidden, messageFile, attachURLs, noCustomHeaders);
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, const KURL& attachURL)
121  {
122  return openComposer(to, cc, bcc, subject, body, hidden, messageFile, KURL::List(attachURL));
123  }
125  int openComposer (const TQString &to, const TQString &cc, const TQString &bcc,
126  const TQString &subject, const TQString &body, int hidden,
127  const KURL &messageFile)
128  {
129  return openComposer(to, cc, bcc, subject, body, hidden, messageFile, KURL::List());
130  }
134  int openComposer (const TQString &to, const TQString &cc,
135  const TQString &bcc, const TQString &subject,
136  const TQString &body, int hidden,
137  const TQString &attachName,
138  const TQCString &attachCte,
139  const TQCString &attachData,
140  const TQCString &attachType,
141  const TQCString &attachSubType,
142  const TQCString &attachParamAttr,
143  const TQString &attachParamValue,
144  const TQCString &attachContDisp);
145 
149  int openComposer (const TQString &to, const TQString &cc,
150  const TQString &bcc, const TQString &subject,
151  const TQString &body, int hidden,
152  const TQString &attachName,
153  const TQCString &attachCte,
154  const TQCString &attachData,
155  const TQCString &attachType,
156  const TQCString &attachSubType,
157  const TQCString &attachParamAttr,
158  const TQString &attachParamValue,
159  const TQCString &attachContDisp,
160  const TQCString &attachCharset);
161 
162  int openComposer (const TQString &to, const TQString &cc,
163  const TQString &bcc, const TQString &subject,
164  const TQString &body, int hidden,
165  const TQString &attachName,
166  const TQCString &attachCte,
167  const TQCString &attachData,
168  const TQCString &attachType,
169  const TQCString &attachSubType,
170  const TQCString &attachParamAttr,
171  const TQString &attachParamValue,
172  const TQCString &attachContDisp,
173  const TQCString &attachCharset,
174  unsigned int identity);
175 
176  DCOPRef openComposer(const TQString &to, const TQString &cc,
177  const TQString &bcc, const TQString &subject,
178  const TQString &body,bool hidden);
179 
182  void setDefaultTransport( const TQString & transport );
183 
185  DCOPRef newMessage(const TQString &to,
186  const TQString &cc,
187  const TQString &bcc,
188  bool hidden,
189  bool useFolderId,
190  const KURL &messageFile,
191  const KURL &attachURL);
192 
193  int sendCertificate( const TQString& to, const TQByteArray& certData );
194 
195  void openReader() { openReader( false ); }
196 
197  int dcopAddMessage(const TQString & foldername, const TQString & messagefile,
198  const TQString & MsgStatusFlags = TQString());
199  int dcopAddMessage(const TQString & foldername, const KURL & messagefile,
200  const TQString & MsgStatusFlags = TQString());
201  void dcopResetAddMessage();
203  int dcopAddMessage_fastImport(const TQString & foldername, const TQString & messagefile,
204  const TQString & MsgStatusFlags = TQString());
205  int dcopAddMessage_fastImport(const TQString & foldername, const KURL & messagefile,
206  const TQString & MsgStatusFlags = TQString());
207  void showImportArchiveDialog();
208 
209  TQStringList folderList() const;
210  DCOPRef getFolder( const TQString& vpath );
211  void selectFolder( TQString folder );
212  int timeOfLastMessageCountChange() const;
213  virtual bool showMail( TQ_UINT32 serialNumber, TQString messageId );
214  virtual TQString getFrom( TQ_UINT32 serialNumber );
215  virtual TQString debugScheduler();
216  virtual TQString debugSernum( TQ_UINT32 serialNumber );
217  int viewMessage( const KURL & messageFile );
218 
223  virtual void pauseBackgroundJobs();
224 
229  virtual void resumeBackgroundJobs();
230 
235  void stopNetworkJobs();
236 
241  void resumeNetworkJobs();
242 
248  static bool askToGoOnline();
249 
254  static bool isOffline();
255 
258  static KMKernel *self() { return mySelf; }
259  static TDEConfig *config();
260 
261  void init();
262  void readConfig();
263  void cleanupImapFolders();
264  void recreateCorruptIndexFiles();
265  void testDir(const char *_name);
266  void recoverDeadLetters();
267  void initFolders(TDEConfig* cfg);
268  void closeAllKMailWindows();
269  void cleanup(void);
270  void quit();
276  bool transferMail( TQString & destinationDir );
277  void ungrabPtrKb(void);
278  void kmailMsgHandler(TQtMsgType aType, const char* aMsg);
279  bool doSessionManagement();
280  bool firstInstance() { return the_firstInstance; }
281  void setFirstInstance(bool value) { the_firstInstance = value; }
282  void action (bool mailto, bool check, const TQString &to, const TQString &cc,
283  const TQString &bcc, const TQString &subj, const TQString &body,
284  const KURL &messageFile, const KURL::List &attach,
285  const QCStringList &customHeaders);
286  void byteArrayToRemoteFile(const TQByteArray&, const KURL&,
287  bool overwrite = false);
288  bool folderIsDraftOrOutbox( const KMFolder * );
289  bool folderIsDrafts( const KMFolder * );
290  bool folderIsTemplates( const KMFolder * );
291  bool folderIsTrash( KMFolder * );
295  bool folderIsSentMailFolder( const KMFolder * );
299  KMFolder* findFolderById( const TQString& idString );
300 
301  TDEInstance *xmlGuiInstance() { return mXmlGuiInstance; }
302  void setXmlGuiInstance( TDEInstance *instance ) { mXmlGuiInstance = instance; }
303 
304  KMFolder *inboxFolder() { return the_inboxFolder; }
305  KMFolder *outboxFolder() { return the_outboxFolder; }
306  KMFolder *sentFolder() { return the_sentFolder; }
307  KMFolder *trashFolder() { return the_trashFolder; }
308  KMFolder *draftsFolder() { return the_draftsFolder; }
309  KMFolder *templatesFolder() { return the_templatesFolder; }
310 
311  KMFolderMgr *folderMgr() { return the_folderMgr; }
312  KMFolderMgr *imapFolderMgr() { return the_imapFolderMgr; }
313  KMFolderMgr *dimapFolderMgr() { return the_dimapFolderMgr; }
314  KMFolderMgr *searchFolderMgr() { return the_searchFolderMgr; }
315  UndoStack *undoStack() { return the_undoStack; }
316  AccountManager *acctMgr() { return the_acctMgr; }
317  KMFilterMgr *filterMgr() { return the_filterMgr; }
318  KMFilterMgr *popFilterMgr() { return the_popFilterMgr; }
319  KMFilterActionDict *filterActionDict() { return the_filterActionDict; }
320  KMail::MessageSender *msgSender();
321  KMMsgIndex *msgIndex();
322 
323  KPIM::ThreadWeaver::Weaver *weaver() { return the_weaver; }
325  KPIM::IdentityManager *identityManager();
326 
327  JobScheduler* jobScheduler() { return mJobScheduler; }
328 
330  void compactAllFolders();
332  void expireAllFoldersNow();
333 
334  KMailICalIfaceImpl& iCalIface();
335 
336  bool firstStart() { return the_firstStart; }
337  TQString previousVersion() { return the_previousVersion; }
338  bool startingUp() { return the_startingUp; }
339  void setStartingUp (bool flag) { the_startingUp = flag; }
340  bool shuttingDown() { return the_shuttingDown; }
341  void setShuttingDown(bool flag) { the_shuttingDown = flag; }
342  void serverReady (bool flag) { the_server_is_ready = flag; }
343 
347  static TQString localDataPath();
348 
353  bool haveSystemTrayApplet();
354 
355  bool registerSystemTrayApplet( const KSystemTray* );
356  bool unregisterSystemTrayApplet( const KSystemTray* );
357 
359  bool handleCommandLine( bool noArgsOpensReader );
360  void emergencyExit( const TQString& reason );
361 
363  unsigned long getNextMsgSerNum();
364  TQTextCodec *networkCodec() { return netCodec; }
365 
367  TDEMainWindow* mainWin();
368 
369  // ### The mContextMenuShown flag is necessary to work around bug# 56693
370  // ### (kmail freeze with the complete desktop while pinentry-qt appears)
371  // ### FIXME: Once the encryption support is asynchron this can be removed
372  // ### again.
373  void setContextMenuShown( bool flag ) { mContextMenuShown = flag; }
374  bool contextMenuShown() const { return mContextMenuShown; }
375 
380  ::KIMProxy* imProxy();
381 
386  bool mailCheckAborted() const;
390  void enableMailCheck();
396  void abortMailCheck();
397 
398  bool canQueryClose();
399 
403  void messageCountChanged();
404 
406  TDEWallet::Wallet *wallet();
407 
409  KMMainWidget *getKMMainWidget();
410 
412  TQValueList< TQGuardedPtr<KMFolder> > allFolders();
413 
414  void raise();
415 
416  void loadProfile( const TQString& path );
417 
418  void saveToProfile( const TQString& path ) const;
419 
420  bool isCodecAsciiCompatible( const TQTextCodec *codec );
421 public slots:
422 
424  void dumpDeadLetters();
425 
431  void slotRequestConfigSync();
432 
434  void slotEmptyTrash();
435 
436  void slotShowConfigurationDialog();
437  void slotRunBackgroundTasks();
438 
439  void slotConfigChanged();
440 
441 protected slots:
442  void slotDataReq(TDEIO::Job*,TQByteArray&);
443  void slotResult(TDEIO::Job*);
444  void slotNetworkStateChanged(TDENetworkConnectionStatus::TDENetworkConnectionStatus, TDENetworkConnectionStatus::TDENetworkConnectionStatus, TQString);
445 
446 signals:
447  void configChanged();
448  void folderRemoved( KMFolder* aFolder );
449  void onlineStatusChanged( GlobalSettings::EnumNetworkState::type );
450 
451 private:
452  void openReader( bool onlyCheck );
453  KMMsgStatus strToStatus(const TQString &flags);
454  bool networkStateConnected();
455  KMFolder *currentFolder();
456 
457  KMFolder *the_inboxFolder;
458  KMFolder *the_outboxFolder;
459  KMFolder *the_sentFolder;
460  KMFolder *the_trashFolder;
461  KMFolder *the_draftsFolder;
462  KMFolder *the_templatesFolder;
463 
464  KMFolderMgr *the_folderMgr;
465  KMFolderMgr *the_imapFolderMgr;
466  KMFolderMgr *the_dimapFolderMgr;
467  KMFolderMgr *the_searchFolderMgr;
468  UndoStack *the_undoStack;
469  AccountManager *the_acctMgr;
470  KMFilterMgr *the_filterMgr;
471  KMFilterMgr *the_popFilterMgr;
472  KMFilterActionDict *the_filterActionDict;
473  mutable KPIM::IdentityManager *mIdentityManager;
474  KMSender *the_msgSender;
475  KMMsgIndex *the_msgIndex;
476  struct putData
477  {
478  KURL url;
479  TQByteArray data;
480  int offset;
481  };
482  TQMap<TDEIO::Job *, putData> mPutJobs;
485  TQString the_previousVersion;
487  bool the_firstStart;
489  bool the_startingUp;
491  bool the_shuttingDown;
493  bool the_server_is_ready;
495  bool closed_by_user;
496  bool the_firstInstance;
497  bool mMailCheckAborted;
498  static KMKernel *mySelf;
499  TDESharedConfig::Ptr mConfig;
500  TQTextCodec *netCodec;
501  TDEInstance* mXmlGuiInstance;
502  ConfigureDialog *mConfigureDialog;
503 
504  TQTimer *mBackgroundTasksTimer;
505  KMailICalIfaceImpl* mICalIface;
506  JobScheduler* mJobScheduler;
507  // temporary mainwin
508  KMMainWin *mWin;
509  MailServiceImpl *mMailService;
510 
511  // the time of the last change of the unread or total count of a folder;
512  // this can be queried via DCOP in order to determine whether the counts
513  // need to be updated (e.g. in the Summary in Kontact)
514  int mTimeOfLastMessageCountChange;
515 
516  // true if the context menu of KMFolderTree or KMHeaders is shown
517  // this is necessary to know in order to prevent a dead lock between the
518  // context menus and the pinentry program
519  bool mContextMenuShown;
520 
521  TQValueList<const KSystemTray*> systemTrayApplets;
522  TQValueList<const TQTextCodec*> mNonAsciiCompatibleCodecs;
523 
524  /* Weaver */
525  KPIM::ThreadWeaver::Weaver *the_weaver;
526  KPIM::ThreadWeaver::WeaverThreadLogger *the_weaverLogger;
527 
528  TDEWallet::Wallet *mWallet;
529 
530  // variables used by dcopAddMessage()
531  TQStringList mAddMessageMsgIds;
532  TQString mAddMessageLastFolder;
533  KMFolder *mAddMsgCurrentFolder;
534 
535 #ifdef __TDE_HAVE_TDEHWLIB
536  TDEGlobalNetworkManager *mNetworkManager;
537 #endif
538 };
539 
540 #endif
Dictionary that contains a list of all registered filter actions with their creation functions.
Mail folder.
Definition: kmfolder.h:69
Central point of coordination in KMail.
Definition: kmkernel.h:91
int openComposer(const TQString &to, const TQString &cc, const TQString &bcc, const TQString &subject, const TQString &body, int hidden, const KURL &messageFile, const KURL &attachURL)
For backward compatibility.
Definition: kmkernel.h:118
int openComposer(const TQString &to, const TQString &cc, const TQString &bcc, const TQString &subject, const TQString &body, int hidden, const KURL &messageFile)
For backward compatibility.
Definition: kmkernel.h:125
unsigned long getNextMsgSerNum()
Returns a message serial number that hasn't been used yet.
int openComposer(const TQString &to, const TQString &cc, const TQString &bcc, const TQString &subject, const TQString &body, int hidden, const KURL &messageFile, const KURL::List &attachURLs)
For backward compatibility.
Definition: kmkernel.h:110
This class implements a "reader window", that is a window used for reading or viewing messages.
Definition: kmreaderwin.h:75
The implementation of the interface.
checkMail wont show reader but will check mail.
Definition: kmailIface.h:18
virtual void setDefaultTransport(const TQString &transport)=0
Set the KMail Default transport.
virtual void dcopResetAddMessage()=0
Clears the list of added message ids which is used to filter out duplicates.
virtual void resumeBackgroundJobs()=0
Resume compaction/expiry, and allow launching new ones.
virtual void pauseBackgroundJobs()=0
Abort any running compaction/expiry, and don't launch any new ones until resumeBackgroundJobs() is ca...
virtual int dcopAddMessage_fastImport(const TQString &foldername, const TQString &messagefile, const TQString &MsgStatusFlags=TQString())=0
Does essentially the same as dcopAddMessage except that it doesn't reject duplicate messages.
virtual bool showMail(TQ_UINT32 serialNumber, TQString messageId)=0
Shows the specified message in a separate message window.
virtual bool handleCommandLine(bool noArgsOpensReader)=0
DCOP-enabled for KMailUniqueAppHandler in the kontact plugin.
virtual int dcopAddMessage(const TQString &foldername, const TQString &messagefile, const TQString &MsgStatusFlags=TQString())=0
virtual int sendCertificate(const TQString &to, const TQByteArray &certData)=0
Send a certificate request to the CA specified in to.
virtual void stopNetworkJobs()=0
Stop all network related jobs and enter offline mode.
virtual void resumeNetworkJobs()=0
Resume all network related jobs and enter online mode.
virtual TQString getFrom(TQ_UINT32 serialNumber)=0
DCOP-enabled for use in kaddressbook drop.
The account manager is responsible for creating accounts of various types via the factory method crea...
The unique JobScheduler instance (owned by kmkernel) implements "background processing" of folder ope...
Definition: jobscheduler.h:97
folderdiaquotatab.h
Definition: aboutdata.cpp:40