Sophie

Sophie

distrib > Mandriva > 2008.1 > x86_64 > by-pkgid > 98d6b53e11e983e268c3e19f14e091a0 > files > 2443

kdepim-devel-doc-3.5.9-9mdv2008.1.x86_64.rpm

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en_US" xml:lang="en_US">

<head>
  <title>kmail: kmkernel.cpp Source File (kmail)</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

  <meta http-equiv="Content-Style-Type" content="text/css" />

  <meta http-equiv="pics-label" content='(pics-1.1 "http://www.icra.org/ratingsv02.html" comment "ICRAonline DE v2.0" l gen true for "http://www.kde.org"  r (nz 1 vz 1 lz 1 oz 1 cb 1) "http://www.rsac.org/ratingsv01.html" l gen true for "http://www.kde.org"  r (n 0 s 0 v 0 l 0))' />

  <meta name="trademark" content="KDE e.V." />
  <meta name="description" content="K Desktop Environment Homepage, KDE.org" />
  <meta name="MSSmartTagsPreventParsing" content="true" />
  <meta name="robots" content="all" />

  <link rel="shortcut icon" href="../../favicon.ico" />

<link rel="stylesheet" media="screen" type="text/css" title="APIDOX" href="doxygen.css" />



<style type="text/css">
<!--
hr { display: none; }
#content h2 { margin-left: 0px; }
table.mdTable { background-color: #f8f8f8; border: .2em solid #d7d7d7; }
td.mdRow { padding: 8px 20px; }
td.md { font-weight: bold; }
td.mdname1 { font-weight: bold; color: #602020; }
td.mdname { font-weight: bold; color: #602020;  }

-->
</style>

</head>

<body>

<div id="nav_header_top" align="right">
  <a href="#content" class="doNotDisplay" accesskey="2">Skip to main content ::</a>

  <a href="../.."><img id="nav_header_logo" alt="Home" align="left" src="../../kde_gear_64.png" border="0" /></a>
  <span class="doNotDisplay">::</span>
  <img id="nav_header_logo_right" alt="" align="right" src="../../pimlogo.png" border="0" />

  <div id="nav_header_title" align="left">KDE PIM API Reference</div>


</div>

<div id="nav_header_bottom" align="right">
  <span class="doNotDisplay">:: <a href="#navigation" accesskey="5">Skip to Link Menu</a><br/></span>
  <div id="nav_header_bottom_left" style="text-align: left;">
/ <a href="../../">API Reference</a>
 / <a href=".">kmail</a>
  </div>
</div>


<table id="main" border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
      <td valign="top" class="menuheader" height="0"></td>

  <td id="contentcolumn" valign="top" rowspan="2" >
    <div id="content" style="padding-top: 0px;"><div style="width:100%; margin: 0px; padding: 0px;">
    <h2><a name="content"></a>kmail</h2>


<!-- Generated by Doxygen 1.5.5 -->
<h1>kmkernel.cpp</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*  -*- mode: C++; c-file-style: "gnu" -*- */</span>
<a name="l00002"></a>00002 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span><span class="preprocessor">#include &lt;config.h&gt;</span>
<a name="l00004"></a>00004 <span class="preprocessor">#endif</span>
<a name="l00005"></a>00005 <span class="preprocessor"></span>
<a name="l00006"></a>00006 <span class="preprocessor">#include "config.h"</span>
<a name="l00007"></a>00007 <span class="preprocessor">#include "kmkernel.h"</span>
<a name="l00008"></a>00008 
<a name="l00009"></a>00009 <span class="preprocessor">#include &lt;weaver.h&gt;</span>
<a name="l00010"></a>00010 <span class="preprocessor">#include &lt;weaverlogger.h&gt;</span>
<a name="l00011"></a>00011 
<a name="l00012"></a>00012 <span class="preprocessor">#include "globalsettings.h"</span>
<a name="l00013"></a>00013 <span class="preprocessor">#include "broadcaststatus.h"</span>
<a name="l00014"></a>00014 <span class="keyword">using</span> KPIM::BroadcastStatus;
<a name="l00015"></a>00015 <span class="preprocessor">#include "kmstartup.h"</span>
<a name="l00016"></a>00016 <span class="preprocessor">#include "index.h"</span>
<a name="l00017"></a>00017 <span class="preprocessor">#include "kmmainwin.h"</span>
<a name="l00018"></a>00018 <span class="preprocessor">#include "composer.h"</span>
<a name="l00019"></a>00019 <span class="preprocessor">#include "kmmsgpart.h"</span>
<a name="l00020"></a>00020 <span class="preprocessor">#include "kmreadermainwin.h"</span>
<a name="l00021"></a>00021 <span class="preprocessor">#include "kmfoldermgr.h"</span>
<a name="l00022"></a>00022 <span class="preprocessor">#include "kmfoldercachedimap.h"</span>
<a name="l00023"></a>00023 <span class="preprocessor">#include "kmacctcachedimap.h"</span>
<a name="l00024"></a>00024 <span class="preprocessor">#include "kmfiltermgr.h"</span>
<a name="l00025"></a>00025 <span class="preprocessor">#include "kmfilteraction.h"</span>
<a name="l00026"></a>00026 <span class="preprocessor">#define REALLY_WANT_KMSENDER</span>
<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#include "kmsender.h"</span>
<a name="l00028"></a>00028 <span class="preprocessor">#undef REALLY_WANT_KMSENDER</span>
<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#include "undostack.h"</span>
<a name="l00030"></a>00030 <span class="preprocessor">#include "accountmanager.h"</span>
<a name="l00031"></a>00031 <span class="keyword">using</span> <a class="code" href="classKMail_1_1AccountManager.html" title="The account manager is responsible for creating accounts of various types via the...">KMail::AccountManager</a>;
<a name="l00032"></a>00032 <span class="preprocessor">#include &lt;libkdepim/kfileio.h&gt;</span>
<a name="l00033"></a>00033 <span class="preprocessor">#include "kmversion.h"</span>
<a name="l00034"></a>00034 <span class="preprocessor">#include "kmreaderwin.h"</span>
<a name="l00035"></a>00035 <span class="preprocessor">#include "kmmainwidget.h"</span>
<a name="l00036"></a>00036 <span class="preprocessor">#include "kmfoldertree.h"</span>
<a name="l00037"></a>00037 <span class="preprocessor">#include "recentaddresses.h"</span>
<a name="l00038"></a>00038 <span class="keyword">using</span> KRecentAddress::RecentAddresses;
<a name="l00039"></a>00039 <span class="preprocessor">#include "kmmsgdict.h"</span>
<a name="l00040"></a>00040 <span class="preprocessor">#include &lt;libkpimidentities/identity.h&gt;</span>
<a name="l00041"></a>00041 <span class="preprocessor">#include &lt;libkpimidentities/identitymanager.h&gt;</span>
<a name="l00042"></a>00042 <span class="preprocessor">#include "configuredialog.h"</span>
<a name="l00043"></a>00043 <span class="preprocessor">#include "kmcommands.h"</span>
<a name="l00044"></a>00044 <span class="preprocessor">#include "kmsystemtray.h"</span>
<a name="l00045"></a>00045 <span class="preprocessor">#include "transportmanager.h"</span>
<a name="l00046"></a>00046 
<a name="l00047"></a>00047 <span class="preprocessor">#include &lt;kwin.h&gt;</span>
<a name="l00048"></a>00048 <span class="preprocessor">#include "kmailicalifaceimpl.h"</span>
<a name="l00049"></a>00049 <span class="preprocessor">#include "mailserviceimpl.h"</span>
<a name="l00050"></a>00050 <span class="keyword">using</span> KMail::MailServiceImpl;
<a name="l00051"></a>00051 <span class="preprocessor">#include "mailcomposerIface.h"</span>
<a name="l00052"></a>00052 <span class="preprocessor">#include "folderIface.h"</span>
<a name="l00053"></a>00053 <span class="keyword">using</span> KMail::FolderIface;
<a name="l00054"></a>00054 <span class="preprocessor">#include "jobscheduler.h"</span>
<a name="l00055"></a>00055 <span class="preprocessor">#include "templateparser.h"</span>
<a name="l00056"></a>00056 
<a name="l00057"></a>00057 <span class="preprocessor">#include &lt;kapplication.h&gt;</span>
<a name="l00058"></a>00058 <span class="preprocessor">#include &lt;kmessagebox.h&gt;</span>
<a name="l00059"></a>00059 <span class="preprocessor">#include &lt;knotifyclient.h&gt;</span>
<a name="l00060"></a>00060 <span class="preprocessor">#include &lt;kstaticdeleter.h&gt;</span>
<a name="l00061"></a>00061 <span class="preprocessor">#include &lt;kstandarddirs.h&gt;</span>
<a name="l00062"></a>00062 <span class="preprocessor">#include &lt;kconfig.h&gt;</span>
<a name="l00063"></a>00063 <span class="preprocessor">#include &lt;kprogress.h&gt;</span>
<a name="l00064"></a>00064 <span class="preprocessor">#include &lt;kpassivepopup.h&gt;</span>
<a name="l00065"></a>00065 <span class="preprocessor">#include &lt;dcopclient.h&gt;</span>
<a name="l00066"></a>00066 <span class="preprocessor">#include &lt;ksystemtray.h&gt;</span>
<a name="l00067"></a>00067 <span class="preprocessor">#include &lt;kpgp.h&gt;</span>
<a name="l00068"></a>00068 <span class="preprocessor">#include &lt;kdebug.h&gt;</span>
<a name="l00069"></a>00069 <span class="preprocessor">#include &lt;kio/netaccess.h&gt;</span>
<a name="l00070"></a>00070 <span class="preprocessor">#include &lt;kwallet.h&gt;</span>
<a name="l00071"></a>00071 <span class="keyword">using</span> KWallet::Wallet;
<a name="l00072"></a>00072 <span class="preprocessor">#include "actionscheduler.h"</span>
<a name="l00073"></a>00073 
<a name="l00074"></a>00074 <span class="preprocessor">#include &lt;qutf7codec.h&gt;</span>
<a name="l00075"></a>00075 <span class="preprocessor">#include &lt;qvbox.h&gt;</span>
<a name="l00076"></a>00076 <span class="preprocessor">#include &lt;qdir.h&gt;</span>
<a name="l00077"></a>00077 <span class="preprocessor">#include &lt;qwidgetlist.h&gt;</span>
<a name="l00078"></a>00078 <span class="preprocessor">#include &lt;qobjectlist.h&gt;</span>
<a name="l00079"></a>00079 
<a name="l00080"></a>00080 <span class="preprocessor">#include &lt;sys/types.h&gt;</span>
<a name="l00081"></a>00081 <span class="preprocessor">#include &lt;dirent.h&gt;</span>
<a name="l00082"></a>00082 <span class="preprocessor">#include &lt;sys/stat.h&gt;</span>
<a name="l00083"></a>00083 <span class="preprocessor">#include &lt;unistd.h&gt;</span>
<a name="l00084"></a>00084 <span class="preprocessor">#include &lt;stdio.h&gt;</span>
<a name="l00085"></a>00085 <span class="preprocessor">#include &lt;stdlib.h&gt;</span>
<a name="l00086"></a>00086 <span class="preprocessor">#include &lt;assert.h&gt;</span>
<a name="l00087"></a>00087 
<a name="l00088"></a>00088 <span class="preprocessor">#include &lt;X11/Xlib.h&gt;</span>
<a name="l00089"></a>00089 <span class="preprocessor">#include &lt;fixx11h.h&gt;</span>
<a name="l00090"></a>00090 <span class="preprocessor">#include &lt;kcmdlineargs.h&gt;</span>
<a name="l00091"></a>00091 <span class="preprocessor">#include &lt;kstartupinfo.h&gt;</span>
<a name="l00092"></a>00092 
<a name="l00093"></a>00093 <a class="code" href="classKMKernel.html" title="Central point of coordination in KMail.">KMKernel</a> *KMKernel::mySelf = 0;
<a name="l00094"></a>00094 
<a name="l00095"></a>00095 <span class="comment">/********************************************************************/</span>
<a name="l00096"></a>00096 <span class="comment">/*                     Constructor and destructor                   */</span>
<a name="l00097"></a>00097 <span class="comment">/********************************************************************/</span>
<a name="l00098"></a>00098 KMKernel::KMKernel (QObject *parent, <span class="keyword">const</span> <span class="keywordtype">char</span> *name) :
<a name="l00099"></a>00099   DCOPObject(<span class="stringliteral">"KMailIface"</span>), QObject(parent, name),
<a name="l00100"></a>00100   mIdentityManager(0), mConfigureDialog(0),
<a name="l00101"></a>00101   mContextMenuShown( false ), mWallet( 0 )
<a name="l00102"></a>00102 {
<a name="l00103"></a>00103   kdDebug(5006) &lt;&lt; <span class="stringliteral">"KMKernel::KMKernel"</span> &lt;&lt; endl;
<a name="l00104"></a>00104   mySelf = <span class="keyword">this</span>;
<a name="l00105"></a>00105   the_startingUp = <span class="keyword">true</span>;
<a name="l00106"></a>00106   closed_by_user = <span class="keyword">true</span>;
<a name="l00107"></a>00107   the_firstInstance = <span class="keyword">true</span>;
<a name="l00108"></a>00108   the_msgIndex = 0;
<a name="l00109"></a>00109 
<a name="l00110"></a>00110   the_inboxFolder = 0;
<a name="l00111"></a>00111   the_outboxFolder = 0;
<a name="l00112"></a>00112   the_sentFolder = 0;
<a name="l00113"></a>00113   the_trashFolder = 0;
<a name="l00114"></a>00114   the_draftsFolder = 0;
<a name="l00115"></a>00115   the_templatesFolder = 0;
<a name="l00116"></a>00116 
<a name="l00117"></a>00117   the_folderMgr = 0;
<a name="l00118"></a>00118   the_imapFolderMgr = 0;
<a name="l00119"></a>00119   the_dimapFolderMgr = 0;
<a name="l00120"></a>00120   the_searchFolderMgr = 0;
<a name="l00121"></a>00121   the_undoStack = 0;
<a name="l00122"></a>00122   the_acctMgr = 0;
<a name="l00123"></a>00123   the_filterMgr = 0;
<a name="l00124"></a>00124   the_popFilterMgr = 0;
<a name="l00125"></a>00125   the_filterActionDict = 0;
<a name="l00126"></a>00126   the_msgSender = 0;
<a name="l00127"></a>00127   mWin = 0;
<a name="l00128"></a>00128   mMailCheckAborted = <span class="keyword">false</span>;
<a name="l00129"></a>00129 
<a name="l00130"></a>00130   <span class="comment">// make sure that we check for config updates before doing anything else</span>
<a name="l00131"></a>00131   KMKernel::config();
<a name="l00132"></a>00132   <span class="comment">// this shares the kmailrc parsing too (via KSharedConfig), and reads values from it</span>
<a name="l00133"></a>00133   <span class="comment">// so better do it here, than in some code where changing the group of config()</span>
<a name="l00134"></a>00134   <span class="comment">// would be unexpected</span>
<a name="l00135"></a>00135   GlobalSettings::self();
<a name="l00136"></a>00136 
<a name="l00137"></a>00137   <span class="comment">// Set up DCOP interface</span>
<a name="l00138"></a>00138   mICalIface = <span class="keyword">new</span> <a class="code" href="classKMailICalIfaceImpl.html" title="The implementation of the interface.">KMailICalIfaceImpl</a>();
<a name="l00139"></a>00139 
<a name="l00140"></a>00140   mJobScheduler = <span class="keyword">new</span> JobScheduler( <span class="keyword">this</span> );
<a name="l00141"></a>00141 
<a name="l00142"></a>00142   mXmlGuiInstance = 0;
<a name="l00143"></a>00143 
<a name="l00144"></a>00144   <span class="keyword">new</span> Kpgp::Module();
<a name="l00145"></a>00145 
<a name="l00146"></a>00146   <span class="comment">// register our own (libkdenetwork) utf-7 codec as long as Qt</span>
<a name="l00147"></a>00147   <span class="comment">// doesn't have it's own:</span>
<a name="l00148"></a>00148   <span class="keywordflow">if</span> ( !QTextCodec::codecForName(<span class="stringliteral">"utf-7"</span>) ) {
<a name="l00149"></a>00149     kdDebug(5006) &lt;&lt; <span class="stringliteral">"No Qt-native utf-7 codec found; registering QUtf7Codec from libkdenetwork"</span> &lt;&lt; endl;
<a name="l00150"></a>00150     (void) <span class="keyword">new</span> QUtf7Codec();
<a name="l00151"></a>00151   }
<a name="l00152"></a>00152 
<a name="l00153"></a>00153   <span class="comment">// In the case of Japan. Japanese locale name is "eucjp" but</span>
<a name="l00154"></a>00154   <span class="comment">// The Japanese mail systems normally used "iso-2022-jp" of locale name.</span>
<a name="l00155"></a>00155   <span class="comment">// We want to change locale name from eucjp to iso-2022-jp at KMail only.</span>
<a name="l00156"></a>00156   <span class="keywordflow">if</span> ( QCString(QTextCodec::codecForLocale()-&gt;name()).lower() == <span class="stringliteral">"eucjp"</span> )
<a name="l00157"></a>00157   {
<a name="l00158"></a>00158     netCodec = QTextCodec::codecForName(<span class="stringliteral">"jis7"</span>);
<a name="l00159"></a>00159     <span class="comment">// QTextCodec *cdc = QTextCodec::codecForName("jis7");</span>
<a name="l00160"></a>00160     <span class="comment">// QTextCodec::setCodecForLocale(cdc);</span>
<a name="l00161"></a>00161     <span class="comment">// KGlobal::locale()-&gt;setEncoding(cdc-&gt;mibEnum());</span>
<a name="l00162"></a>00162   } <span class="keywordflow">else</span> {
<a name="l00163"></a>00163     netCodec = QTextCodec::codecForLocale();
<a name="l00164"></a>00164   }
<a name="l00165"></a>00165   mMailService =  <span class="keyword">new</span> MailServiceImpl();
<a name="l00166"></a>00166 
<a name="l00167"></a>00167   connectDCOPSignal( 0, 0, <span class="stringliteral">"kmailSelectFolder(QString)"</span>,
<a name="l00168"></a>00168                      <span class="stringliteral">"selectFolder(QString)"</span>, <span class="keyword">false</span> );
<a name="l00169"></a>00169 }
<a name="l00170"></a>00170 
<a name="l00171"></a>00171 KMKernel::~KMKernel ()
<a name="l00172"></a>00172 {
<a name="l00173"></a>00173   QMap&lt;KIO::Job*, putData&gt;::Iterator it = mPutJobs.begin();
<a name="l00174"></a>00174   <span class="keywordflow">while</span> ( it != mPutJobs.end() )
<a name="l00175"></a>00175   {
<a name="l00176"></a>00176     KIO::Job *job = it.key();
<a name="l00177"></a>00177     mPutJobs.remove( it );
<a name="l00178"></a>00178     job-&gt;kill();
<a name="l00179"></a>00179     it = mPutJobs.begin();
<a name="l00180"></a>00180   }
<a name="l00181"></a>00181 
<a name="l00182"></a>00182   <span class="keyword">delete</span> mICalIface;
<a name="l00183"></a>00183   mICalIface = 0;
<a name="l00184"></a>00184   <span class="keyword">delete</span> mMailService;
<a name="l00185"></a>00185   mMailService = 0;
<a name="l00186"></a>00186 
<a name="l00187"></a>00187   GlobalSettings::self()-&gt;writeConfig();
<a name="l00188"></a>00188   <span class="keyword">delete</span> mWallet;
<a name="l00189"></a>00189   mWallet = 0;
<a name="l00190"></a>00190   mySelf = 0;
<a name="l00191"></a>00191   kdDebug(5006) &lt;&lt; <span class="stringliteral">"KMKernel::~KMKernel"</span> &lt;&lt; endl;
<a name="l00192"></a>00192 }
<a name="l00193"></a>00193 
<a name="l00194"></a><a class="code" href="classKMKernel.html#ea270965190598f25309c184cb905fd6">00194</a> <span class="keywordtype">bool</span> <a class="code" href="classKMKernel.html#ea270965190598f25309c184cb905fd6" title="Reimplemented from KMailIface.">KMKernel::handleCommandLine</a>( <span class="keywordtype">bool</span> noArgsOpensReader )
<a name="l00195"></a>00195 {
<a name="l00196"></a>00196   QString to, cc, bcc, subj, body;
<a name="l00197"></a>00197   QCStringList customHeaders;
<a name="l00198"></a>00198   KURL messageFile;
<a name="l00199"></a>00199   KURL::List attachURLs;
<a name="l00200"></a>00200   <span class="keywordtype">bool</span> mailto = <span class="keyword">false</span>;
<a name="l00201"></a>00201   <span class="keywordtype">bool</span> <a class="code" href="classKMKernel.html#636f33ad6865e98d2a4845c835d83fd7" title="dcop callable stuff">checkMail</a> = <span class="keyword">false</span>;
<a name="l00202"></a>00202   <span class="keywordtype">bool</span> viewOnly = <span class="keyword">false</span>;
<a name="l00203"></a>00203   <span class="keywordtype">bool</span> calledWithSession = <span class="keyword">false</span>; <span class="comment">// for ignoring '-session foo'</span>
<a name="l00204"></a>00204 
<a name="l00205"></a>00205   <span class="comment">// process args:</span>
<a name="l00206"></a>00206   KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
<a name="l00207"></a>00207   <span class="keywordflow">if</span> (args-&gt;getOption(<span class="stringliteral">"subject"</span>))
<a name="l00208"></a>00208   {
<a name="l00209"></a>00209      subj = QString::fromLocal8Bit(args-&gt;getOption(<span class="stringliteral">"subject"</span>));
<a name="l00210"></a>00210      <span class="comment">// if kmail is called with 'kmail -session abc' then this doesn't mean</span>
<a name="l00211"></a>00211      <span class="comment">// that the user wants to send a message with subject "ession" but</span>
<a name="l00212"></a>00212      <span class="comment">// (most likely) that the user clicked on KMail's system tray applet</span>
<a name="l00213"></a>00213      <span class="comment">// which results in KMKernel::raise() calling "kmail kmail newInstance"</span>
<a name="l00214"></a>00214      <span class="comment">// via dcop which apparently executes the application with the original</span>
<a name="l00215"></a>00215      <span class="comment">// command line arguments and those include "-session ..." if</span>
<a name="l00216"></a>00216      <span class="comment">// kmail/kontact was restored by session management</span>
<a name="l00217"></a>00217      <span class="keywordflow">if</span> ( subj == <span class="stringliteral">"ession"</span> ) {
<a name="l00218"></a>00218        subj = QString::null;
<a name="l00219"></a>00219        calledWithSession = <span class="keyword">true</span>;
<a name="l00220"></a>00220      }
<a name="l00221"></a>00221      <span class="keywordflow">else</span>
<a name="l00222"></a>00222        mailto = <span class="keyword">true</span>;
<a name="l00223"></a>00223   }
<a name="l00224"></a>00224 
<a name="l00225"></a>00225   <span class="keywordflow">if</span> (args-&gt;getOption(<span class="stringliteral">"cc"</span>))
<a name="l00226"></a>00226   {
<a name="l00227"></a>00227      mailto = <span class="keyword">true</span>;
<a name="l00228"></a>00228      cc = QString::fromLocal8Bit(args-&gt;getOption(<span class="stringliteral">"cc"</span>));
<a name="l00229"></a>00229   }
<a name="l00230"></a>00230 
<a name="l00231"></a>00231   <span class="keywordflow">if</span> (args-&gt;getOption(<span class="stringliteral">"bcc"</span>))
<a name="l00232"></a>00232   {
<a name="l00233"></a>00233      mailto = <span class="keyword">true</span>;
<a name="l00234"></a>00234      bcc = QString::fromLocal8Bit(args-&gt;getOption(<span class="stringliteral">"bcc"</span>));
<a name="l00235"></a>00235   }
<a name="l00236"></a>00236 
<a name="l00237"></a>00237   <span class="keywordflow">if</span> (args-&gt;getOption(<span class="stringliteral">"msg"</span>))
<a name="l00238"></a>00238   {
<a name="l00239"></a>00239      mailto = <span class="keyword">true</span>;
<a name="l00240"></a>00240      messageFile.setPath( QString::fromLocal8Bit(args-&gt;getOption(<span class="stringliteral">"msg"</span>)) );
<a name="l00241"></a>00241   }
<a name="l00242"></a>00242 
<a name="l00243"></a>00243   <span class="keywordflow">if</span> (args-&gt;getOption(<span class="stringliteral">"body"</span>))
<a name="l00244"></a>00244   {
<a name="l00245"></a>00245      mailto = <span class="keyword">true</span>;
<a name="l00246"></a>00246      body = QString::fromLocal8Bit(args-&gt;getOption(<span class="stringliteral">"body"</span>));
<a name="l00247"></a>00247   }
<a name="l00248"></a>00248 
<a name="l00249"></a>00249   QCStringList attachList = args-&gt;getOptionList(<span class="stringliteral">"attach"</span>);
<a name="l00250"></a>00250   <span class="keywordflow">if</span> (!attachList.isEmpty())
<a name="l00251"></a>00251   {
<a name="l00252"></a>00252      mailto = <span class="keyword">true</span>;
<a name="l00253"></a>00253      <span class="keywordflow">for</span> ( QCStringList::Iterator it = attachList.begin() ; it != attachList.end() ; ++it )
<a name="l00254"></a>00254        <span class="keywordflow">if</span> ( !(*it).isEmpty() )
<a name="l00255"></a>00255          attachURLs += KURL( QString::fromLocal8Bit( *it ) );
<a name="l00256"></a>00256   }
<a name="l00257"></a>00257 
<a name="l00258"></a>00258   customHeaders = args-&gt;getOptionList(<span class="stringliteral">"header"</span>);
<a name="l00259"></a>00259 
<a name="l00260"></a>00260   <span class="keywordflow">if</span> (args-&gt;isSet(<span class="stringliteral">"composer"</span>))
<a name="l00261"></a>00261     mailto = <span class="keyword">true</span>;
<a name="l00262"></a>00262 
<a name="l00263"></a>00263   <span class="keywordflow">if</span> (args-&gt;isSet(<span class="stringliteral">"check"</span>))
<a name="l00264"></a>00264     checkMail = <span class="keyword">true</span>;
<a name="l00265"></a>00265 
<a name="l00266"></a>00266   <span class="keywordflow">if</span> ( args-&gt;getOption( <span class="stringliteral">"view"</span> ) ) {
<a name="l00267"></a>00267     viewOnly = <span class="keyword">true</span>;
<a name="l00268"></a>00268     <span class="keyword">const</span> QString filename =
<a name="l00269"></a>00269       QString::fromLocal8Bit( args-&gt;getOption( <span class="stringliteral">"view"</span> ) );
<a name="l00270"></a>00270     messageFile = KURL::fromPathOrURL( filename );
<a name="l00271"></a>00271     <span class="keywordflow">if</span> ( !messageFile.isValid() ) {
<a name="l00272"></a>00272       messageFile = KURL();
<a name="l00273"></a>00273       messageFile.setPath( filename );
<a name="l00274"></a>00274     }
<a name="l00275"></a>00275   }
<a name="l00276"></a>00276 
<a name="l00277"></a>00277   <span class="keywordflow">if</span> ( !calledWithSession ) {
<a name="l00278"></a>00278     <span class="comment">// only read additional command line arguments if kmail/kontact is</span>
<a name="l00279"></a>00279     <span class="comment">// not called with "-session foo"</span>
<a name="l00280"></a>00280     <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i= 0; i &lt; args-&gt;count(); i++)
<a name="l00281"></a>00281     {
<a name="l00282"></a>00282       <span class="keywordflow">if</span> (strncasecmp(args-&gt;arg(i),<span class="stringliteral">"mailto:"</span>,7)==0)
<a name="l00283"></a>00283         to += args-&gt;url(i).path() + <span class="stringliteral">", "</span>;
<a name="l00284"></a>00284       <span class="keywordflow">else</span> {
<a name="l00285"></a>00285         QString tmpArg = QString::fromLocal8Bit( args-&gt;arg(i) );
<a name="l00286"></a>00286         KURL url( tmpArg );
<a name="l00287"></a>00287         <span class="keywordflow">if</span> ( url.isValid() )
<a name="l00288"></a>00288           attachURLs += url;
<a name="l00289"></a>00289         <span class="keywordflow">else</span>
<a name="l00290"></a>00290           to += tmpArg + <span class="stringliteral">", "</span>;
<a name="l00291"></a>00291       }
<a name="l00292"></a>00292       mailto = <span class="keyword">true</span>;
<a name="l00293"></a>00293     }
<a name="l00294"></a>00294     <span class="keywordflow">if</span> ( !to.isEmpty() ) {
<a name="l00295"></a>00295       <span class="comment">// cut off the superfluous trailing ", "</span>
<a name="l00296"></a>00296       to.truncate( to.length() - 2 );
<a name="l00297"></a>00297     }
<a name="l00298"></a>00298   }
<a name="l00299"></a>00299 
<a name="l00300"></a>00300   <span class="keywordflow">if</span> ( !calledWithSession )
<a name="l00301"></a>00301     args-&gt;clear();
<a name="l00302"></a>00302 
<a name="l00303"></a>00303   <span class="keywordflow">if</span> ( !noArgsOpensReader &amp;&amp; !mailto &amp;&amp; !checkMail &amp;&amp; !viewOnly )
<a name="l00304"></a>00304     <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00305"></a>00305 
<a name="l00306"></a>00306   <span class="keywordflow">if</span> ( viewOnly )
<a name="l00307"></a>00307     viewMessage( messageFile );
<a name="l00308"></a>00308   <span class="keywordflow">else</span>
<a name="l00309"></a>00309     action( mailto, checkMail, to, cc, bcc, subj, body, messageFile,
<a name="l00310"></a>00310             attachURLs, customHeaders );
<a name="l00311"></a>00311   <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00312"></a>00312 }
<a name="l00313"></a>00313 
<a name="l00314"></a>00314 <span class="comment">/********************************************************************/</span>
<a name="l00315"></a>00315 <span class="comment">/*             DCOP-callable, and command line actions              */</span>
<a name="l00316"></a>00316 <span class="comment">/********************************************************************/</span>
<a name="l00317"></a><a class="code" href="classKMKernel.html#636f33ad6865e98d2a4845c835d83fd7">00317</a> <span class="keywordtype">void</span> <a class="code" href="classKMKernel.html#636f33ad6865e98d2a4845c835d83fd7" title="dcop callable stuff">KMKernel::checkMail</a> () <span class="comment">//might create a new reader but won't show!!</span>
<a name="l00318"></a>00318 {
<a name="l00319"></a>00319   kmkernel-&gt;acctMgr()-&gt;checkMail(<span class="keyword">false</span>);
<a name="l00320"></a>00320 }
<a name="l00321"></a>00321 
<a name="l00322"></a>00322 QStringList KMKernel::accounts()
<a name="l00323"></a>00323 {
<a name="l00324"></a>00324   <span class="keywordflow">return</span> kmkernel-&gt;acctMgr()-&gt;getAccounts();
<a name="l00325"></a>00325 }
<a name="l00326"></a>00326 
<a name="l00327"></a>00327 <span class="keywordtype">void</span> KMKernel::checkAccount (<span class="keyword">const</span> QString &amp;account) <span class="comment">//might create a new reader but won't show!!</span>
<a name="l00328"></a>00328 {
<a name="l00329"></a>00329   kdDebug(5006) &lt;&lt; <span class="stringliteral">"KMKernel::checkMail called"</span> &lt;&lt; endl;
<a name="l00330"></a>00330 
<a name="l00331"></a>00331   KMAccount* acct = kmkernel-&gt;acctMgr()-&gt;findByName(account);
<a name="l00332"></a>00332   <span class="keywordflow">if</span> (acct)
<a name="l00333"></a>00333     kmkernel-&gt;acctMgr()-&gt;singleCheckMail(acct, <span class="keyword">false</span>);
<a name="l00334"></a>00334 }
<a name="l00335"></a>00335 
<a name="l00336"></a>00336 <span class="keywordtype">void</span> KMKernel::loadProfile( <span class="keyword">const</span> QString&amp; )
<a name="l00337"></a>00337 {
<a name="l00338"></a>00338 }
<a name="l00339"></a>00339 
<a name="l00340"></a>00340 <span class="keywordtype">void</span> KMKernel::saveToProfile( <span class="keyword">const</span> QString&amp; )<span class="keyword"> const</span>
<a name="l00341"></a>00341 <span class="keyword"></span>{
<a name="l00342"></a>00342 }
<a name="l00343"></a>00343 
<a name="l00344"></a>00344 <span class="keywordtype">void</span> KMKernel::openReader( <span class="keywordtype">bool</span> onlyCheck )
<a name="l00345"></a>00345 {
<a name="l00346"></a>00346   mWin = 0;
<a name="l00347"></a>00347   KMainWindow *ktmw = 0;
<a name="l00348"></a>00348   kdDebug(5006) &lt;&lt; <span class="stringliteral">"KMKernel::openReader called"</span> &lt;&lt; endl;
<a name="l00349"></a>00349 
<a name="l00350"></a>00350   <span class="keywordflow">if</span> (KMainWindow::memberList)
<a name="l00351"></a>00351     <span class="keywordflow">for</span> (ktmw = KMainWindow::memberList-&gt;first(); ktmw;
<a name="l00352"></a>00352          ktmw = KMainWindow::memberList-&gt;next())
<a name="l00353"></a>00353       <span class="keywordflow">if</span> (ktmw-&gt;isA(<span class="stringliteral">"KMMainWin"</span>))
<a name="l00354"></a>00354         <span class="keywordflow">break</span>;
<a name="l00355"></a>00355 
<a name="l00356"></a>00356   <span class="keywordtype">bool</span> activate;
<a name="l00357"></a>00357   <span class="keywordflow">if</span> (ktmw) {
<a name="l00358"></a>00358     mWin = (KMMainWin *) ktmw;
<a name="l00359"></a>00359     activate = !onlyCheck; <span class="comment">// existing window: only activate if not --check</span>
<a name="l00360"></a>00360     <span class="keywordflow">if</span> ( activate )
<a name="l00361"></a>00361        mWin-&gt;show();
<a name="l00362"></a>00362   } <span class="keywordflow">else</span> {
<a name="l00363"></a>00363     mWin = <span class="keyword">new</span> KMMainWin;
<a name="l00364"></a>00364     mWin-&gt;show();
<a name="l00365"></a>00365     activate = <span class="keyword">false</span>; <span class="comment">// new window: no explicit activation (#73591)</span>
<a name="l00366"></a>00366   }
<a name="l00367"></a>00367 
<a name="l00368"></a>00368   <span class="keywordflow">if</span> ( activate ) {
<a name="l00369"></a>00369     <span class="comment">// Activate window - doing this instead of KWin::activateWindow(mWin-&gt;winId());</span>
<a name="l00370"></a>00370     <span class="comment">// so that it also works when called from KMailApplication::newInstance()</span>
<a name="l00371"></a>00371 <span class="preprocessor">#if defined Q_WS_X11 &amp;&amp; ! defined K_WS_QTONLY</span>
<a name="l00372"></a>00372 <span class="preprocessor"></span>    KStartupInfo::setNewStartupId( mWin, kapp-&gt;startupId() );
<a name="l00373"></a>00373 <span class="preprocessor">#endif</span>
<a name="l00374"></a>00374 <span class="preprocessor"></span>  }
<a name="l00375"></a>00375 }
<a name="l00376"></a>00376 
<a name="l00377"></a><a class="code" href="classKMKernel.html#03ba295b9139421b58829d2f690f3494">00377</a> <span class="keywordtype">int</span> <a class="code" href="classKMKernel.html#03ba295b9139421b58829d2f690f3494" title="returns id of composer if more are opened">KMKernel::openComposer</a> (<span class="keyword">const</span> QString &amp;to, <span class="keyword">const</span> QString &amp;cc,
<a name="l00378"></a>00378                             <span class="keyword">const</span> QString &amp;bcc, <span class="keyword">const</span> QString &amp;subject,
<a name="l00379"></a>00379                             <span class="keyword">const</span> QString &amp;body, <span class="keywordtype">int</span> hidden,
<a name="l00380"></a>00380                             <span class="keyword">const</span> KURL &amp;messageFile,
<a name="l00381"></a>00381                             <span class="keyword">const</span> KURL::List &amp;attachURLs,
<a name="l00382"></a>00382                             <span class="keyword">const</span> QCStringList &amp;customHeaders)
<a name="l00383"></a>00383 {
<a name="l00384"></a>00384   kdDebug(5006) &lt;&lt; <span class="stringliteral">"KMKernel::openComposer called"</span> &lt;&lt; endl;
<a name="l00385"></a>00385   <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a> *msg = <span class="keyword">new</span> <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a>;
<a name="l00386"></a>00386   msg-&gt;<a class="code" href="classKMMessage.html#f3fe6794874214ffa4ad07a3992590e7" title="Initialize header fields.">initHeader</a>();
<a name="l00387"></a>00387   msg-&gt;<a class="code" href="classKMMessage.html#6c6413b3690538964ac810f4c6755a5b" title="Set the message charset.">setCharset</a>(<span class="stringliteral">"utf-8"</span>);
<a name="l00388"></a>00388   <span class="comment">// tentatively decode to, cc and bcc because invokeMailer calls us with</span>
<a name="l00389"></a>00389   <span class="comment">// RFC 2047 encoded addresses in order to protect non-ASCII email addresses</span>
<a name="l00390"></a>00390   <span class="keywordflow">if</span> (!to.isEmpty())
<a name="l00391"></a>00391     msg-&gt;<a class="code" href="classKMMessage.html#5bb40f8b006d66c80cff9a43fa3018d6">setTo</a>( KMMsgBase::decodeRFC2047String( to.latin1() ) );
<a name="l00392"></a>00392   <span class="keywordflow">if</span> (!cc.isEmpty())
<a name="l00393"></a>00393     msg-&gt;<a class="code" href="classKMMessage.html#3bf036f0a5f466a614154a749fb4ac54">setCc</a>( KMMsgBase::decodeRFC2047String( cc.latin1() ) );
<a name="l00394"></a>00394   <span class="keywordflow">if</span> (!bcc.isEmpty())
<a name="l00395"></a>00395     msg-&gt;<a class="code" href="classKMMessage.html#d58fc2382ca70c04a23aafeefbdc6a10">setBcc</a>( KMMsgBase::decodeRFC2047String( bcc.latin1() ) );
<a name="l00396"></a>00396   <span class="keywordflow">if</span> (!subject.isEmpty()) msg-&gt;<a class="code" href="classKMMessage.html#dc02d16017d248f9f7c9dc980aee25b4">setSubject</a>(subject);
<a name="l00397"></a>00397   <span class="keywordflow">if</span> (!messageFile.isEmpty() &amp;&amp; messageFile.isLocalFile()) {
<a name="l00398"></a>00398     QCString str = KPIM::kFileToString( messageFile.path(), <span class="keyword">true</span>, false );
<a name="l00399"></a>00399     <span class="keywordflow">if</span>( !str.isEmpty() ) {
<a name="l00400"></a>00400       msg-&gt;<a class="code" href="classKMMessage.html#1b9c4db08086c94986f00d0c708a01e7" title="Set the message body.">setBody</a>( QString::fromLocal8Bit( str ).utf8() );
<a name="l00401"></a>00401     } <span class="keywordflow">else</span> {
<a name="l00402"></a>00402       TemplateParser parser( msg, TemplateParser::NewMessage,
<a name="l00403"></a>00403     <span class="stringliteral">""</span>, <span class="keyword">false</span>, <span class="keyword">false</span>, <span class="keyword">false</span>, <span class="keyword">false</span> );
<a name="l00404"></a>00404       parser.process( NULL, NULL );
<a name="l00405"></a>00405     }
<a name="l00406"></a>00406   }
<a name="l00407"></a>00407   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!body.isEmpty())
<a name="l00408"></a>00408   {
<a name="l00409"></a>00409     msg-&gt;<a class="code" href="classKMMessage.html#1b9c4db08086c94986f00d0c708a01e7" title="Set the message body.">setBody</a>(body.utf8());
<a name="l00410"></a>00410   }
<a name="l00411"></a>00411   <span class="keywordflow">else</span>
<a name="l00412"></a>00412   {
<a name="l00413"></a>00413     TemplateParser parser( msg, TemplateParser::NewMessage,
<a name="l00414"></a>00414       <span class="stringliteral">""</span>, <span class="keyword">false</span>, <span class="keyword">false</span>, <span class="keyword">false</span>, <span class="keyword">false</span> );
<a name="l00415"></a>00415     parser.process( NULL, NULL );
<a name="l00416"></a>00416   }
<a name="l00417"></a>00417 
<a name="l00418"></a>00418   <span class="keywordflow">if</span> (!customHeaders.isEmpty())
<a name="l00419"></a>00419   {
<a name="l00420"></a>00420     <span class="keywordflow">for</span> ( QCStringList::ConstIterator it = customHeaders.begin() ; it != customHeaders.end() ; ++it )
<a name="l00421"></a>00421       <span class="keywordflow">if</span> ( !(*it).isEmpty() )
<a name="l00422"></a>00422       {
<a name="l00423"></a>00423         <span class="keyword">const</span> <span class="keywordtype">int</span> pos = (*it).find( <span class="charliteral">':'</span> );
<a name="l00424"></a>00424         <span class="keywordflow">if</span> ( pos &gt; 0 )
<a name="l00425"></a>00425         {
<a name="l00426"></a>00426           QCString header, value;
<a name="l00427"></a>00427           header = (*it).left( pos ).stripWhiteSpace();
<a name="l00428"></a>00428           value = (*it).mid( pos+1 ).stripWhiteSpace();
<a name="l00429"></a>00429           <span class="keywordflow">if</span> ( !header.isEmpty() &amp;&amp; !value.isEmpty() )
<a name="l00430"></a>00430             msg-&gt;<a class="code" href="classKMMessage.html#de227ca74ea9bca2412ddfc63b4025c6" title="Set the header field with the given name to the given value.">setHeaderField</a>( header, value );
<a name="l00431"></a>00431         }
<a name="l00432"></a>00432       }
<a name="l00433"></a>00433   }
<a name="l00434"></a>00434 
<a name="l00435"></a>00435   KMail::Composer * cWin = KMail::makeComposer( msg );
<a name="l00436"></a>00436   cWin-&gt;setCharset(<span class="stringliteral">""</span>, <span class="keyword">true</span>);
<a name="l00437"></a>00437   <span class="keywordflow">for</span> ( KURL::List::ConstIterator it = attachURLs.begin() ; it != attachURLs.end() ; ++it )
<a name="l00438"></a>00438     cWin-&gt;addAttach((*it));
<a name="l00439"></a>00439   <span class="keywordflow">if</span> (hidden == 0) {
<a name="l00440"></a>00440     cWin-&gt;show();
<a name="l00441"></a>00441     <span class="comment">// Activate window - doing this instead of KWin::activateWindow(cWin-&gt;winId());</span>
<a name="l00442"></a>00442     <span class="comment">// so that it also works when called from KMailApplication::newInstance()</span>
<a name="l00443"></a>00443 <span class="preprocessor">#if defined Q_WS_X11 &amp;&amp; ! defined K_WS_QTONLY</span>
<a name="l00444"></a>00444 <span class="preprocessor"></span>    KStartupInfo::setNewStartupId( cWin, kapp-&gt;startupId() );
<a name="l00445"></a>00445 <span class="preprocessor">#endif</span>
<a name="l00446"></a>00446 <span class="preprocessor"></span>  }
<a name="l00447"></a>00447   <span class="keywordflow">return</span> 1;
<a name="l00448"></a>00448 }
<a name="l00449"></a>00449 
<a name="l00450"></a>00450 
<a name="l00451"></a><a class="code" href="classKMKernel.html#3bdb146de84e86f77fe73acef5ba9ea6">00451</a> <span class="keywordtype">int</span> <a class="code" href="classKMKernel.html#03ba295b9139421b58829d2f690f3494" title="returns id of composer if more are opened">KMKernel::openComposer</a> (<span class="keyword">const</span> QString &amp;to, <span class="keyword">const</span> QString &amp;cc,
<a name="l00452"></a>00452                             <span class="keyword">const</span> QString &amp;bcc, <span class="keyword">const</span> QString &amp;subject,
<a name="l00453"></a>00453                             <span class="keyword">const</span> QString &amp;body, <span class="keywordtype">int</span> hidden,
<a name="l00454"></a>00454                             <span class="keyword">const</span> QString &amp;attachName,
<a name="l00455"></a>00455                             <span class="keyword">const</span> QCString &amp;attachCte,
<a name="l00456"></a>00456                             <span class="keyword">const</span> QCString &amp;attachData,
<a name="l00457"></a>00457                             <span class="keyword">const</span> QCString &amp;attachType,
<a name="l00458"></a>00458                             <span class="keyword">const</span> QCString &amp;attachSubType,
<a name="l00459"></a>00459                             <span class="keyword">const</span> QCString &amp;attachParamAttr,
<a name="l00460"></a>00460                             <span class="keyword">const</span> QString &amp;attachParamValue,
<a name="l00461"></a>00461                             <span class="keyword">const</span> QCString &amp;attachContDisp )
<a name="l00462"></a>00462 {
<a name="l00463"></a>00463   kdDebug(5006) &lt;&lt; <span class="stringliteral">"KMKernel::openComposer called (deprecated version)"</span> &lt;&lt; endl;
<a name="l00464"></a>00464 
<a name="l00465"></a>00465   <span class="keywordflow">return</span> <a class="code" href="classKMKernel.html#03ba295b9139421b58829d2f690f3494" title="returns id of composer if more are opened">openComposer</a> ( to, cc, bcc, subject, body, hidden,
<a name="l00466"></a>00466                         attachName, attachCte, attachData,
<a name="l00467"></a>00467                         attachType, attachSubType, attachParamAttr,
<a name="l00468"></a>00468                         attachParamValue, attachContDisp, QCString() );
<a name="l00469"></a>00469 }
<a name="l00470"></a>00470 
<a name="l00471"></a>00471 <span class="keywordtype">int</span> <a class="code" href="classKMKernel.html#03ba295b9139421b58829d2f690f3494" title="returns id of composer if more are opened">KMKernel::openComposer</a> (<span class="keyword">const</span> QString &amp;to, <span class="keyword">const</span> QString &amp;cc,
<a name="l00472"></a>00472                             <span class="keyword">const</span> QString &amp;bcc, <span class="keyword">const</span> QString &amp;subject,
<a name="l00473"></a>00473                             <span class="keyword">const</span> QString &amp;body, <span class="keywordtype">int</span> hidden,
<a name="l00474"></a>00474                             <span class="keyword">const</span> QString &amp;attachName,
<a name="l00475"></a>00475                             <span class="keyword">const</span> QCString &amp;attachCte,
<a name="l00476"></a>00476                             <span class="keyword">const</span> QCString &amp;attachData,
<a name="l00477"></a>00477                             <span class="keyword">const</span> QCString &amp;attachType,
<a name="l00478"></a>00478                             <span class="keyword">const</span> QCString &amp;attachSubType,
<a name="l00479"></a>00479                             <span class="keyword">const</span> QCString &amp;attachParamAttr,
<a name="l00480"></a>00480                             <span class="keyword">const</span> QString &amp;attachParamValue,
<a name="l00481"></a>00481                             <span class="keyword">const</span> QCString &amp;attachContDisp,
<a name="l00482"></a>00482                             <span class="keyword">const</span> QCString &amp;attachCharset )
<a name="l00483"></a>00483 {
<a name="l00484"></a>00484   kdDebug(5006) &lt;&lt; <span class="stringliteral">"KMKernel::openComposer()"</span> &lt;&lt; endl;
<a name="l00485"></a>00485 
<a name="l00486"></a>00486   <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a> *msg = <span class="keyword">new</span> <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a>;
<a name="l00487"></a>00487   KMMessagePart *msgPart = 0;
<a name="l00488"></a>00488   msg-&gt;<a class="code" href="classKMMessage.html#f3fe6794874214ffa4ad07a3992590e7" title="Initialize header fields.">initHeader</a>();
<a name="l00489"></a>00489   msg-&gt;<a class="code" href="classKMMessage.html#6c6413b3690538964ac810f4c6755a5b" title="Set the message charset.">setCharset</a>( <span class="stringliteral">"utf-8"</span> );
<a name="l00490"></a>00490   <span class="keywordflow">if</span> ( !cc.isEmpty() ) msg-&gt;<a class="code" href="classKMMessage.html#3bf036f0a5f466a614154a749fb4ac54">setCc</a>(cc);
<a name="l00491"></a>00491   <span class="keywordflow">if</span> ( !bcc.isEmpty() ) msg-&gt;<a class="code" href="classKMMessage.html#d58fc2382ca70c04a23aafeefbdc6a10">setBcc</a>(bcc);
<a name="l00492"></a>00492   <span class="keywordflow">if</span> ( !subject.isEmpty() ) msg-&gt;<a class="code" href="classKMMessage.html#dc02d16017d248f9f7c9dc980aee25b4">setSubject</a>(subject);
<a name="l00493"></a>00493   <span class="keywordflow">if</span> ( !to.isEmpty() ) msg-&gt;<a class="code" href="classKMMessage.html#5bb40f8b006d66c80cff9a43fa3018d6">setTo</a>(to);
<a name="l00494"></a>00494   <span class="keywordflow">if</span> ( !body.isEmpty() ) {
<a name="l00495"></a>00495     msg-&gt;<a class="code" href="classKMMessage.html#1b9c4db08086c94986f00d0c708a01e7" title="Set the message body.">setBody</a>(body.utf8());
<a name="l00496"></a>00496   } <span class="keywordflow">else</span> {
<a name="l00497"></a>00497     TemplateParser parser( msg, TemplateParser::NewMessage,
<a name="l00498"></a>00498       <span class="stringliteral">""</span>, <span class="keyword">false</span>, <span class="keyword">false</span>, <span class="keyword">false</span>, <span class="keyword">false</span> );
<a name="l00499"></a>00499     parser.process( NULL, NULL );
<a name="l00500"></a>00500   }
<a name="l00501"></a>00501 
<a name="l00502"></a>00502   <span class="keywordtype">bool</span> iCalAutoSend = <span class="keyword">false</span>;
<a name="l00503"></a>00503   <span class="keywordtype">bool</span> noWordWrap = <span class="keyword">false</span>;
<a name="l00504"></a>00504   <span class="keywordtype">bool</span> isICalInvitation = <span class="keyword">false</span>;
<a name="l00505"></a>00505   KConfigGroup options( config(), <span class="stringliteral">"Groupware"</span> );
<a name="l00506"></a>00506   <span class="keywordflow">if</span> ( !attachData.isEmpty() ) {
<a name="l00507"></a>00507     isICalInvitation = attachName == <span class="stringliteral">"cal.ics"</span> &amp;&amp;
<a name="l00508"></a>00508       attachType == <span class="stringliteral">"text"</span> &amp;&amp;
<a name="l00509"></a>00509       attachSubType == <span class="stringliteral">"calendar"</span> &amp;&amp;
<a name="l00510"></a>00510       attachParamAttr == <span class="stringliteral">"method"</span>;
<a name="l00511"></a>00511     <span class="comment">// Remove BCC from identity on ical invitations (https://intevation.de/roundup/kolab/issue474)</span>
<a name="l00512"></a>00512     <span class="keywordflow">if</span> ( isICalInvitation &amp;&amp; bcc.isEmpty() )
<a name="l00513"></a>00513       msg-&gt;<a class="code" href="classKMMessage.html#d58fc2382ca70c04a23aafeefbdc6a10">setBcc</a>( <span class="stringliteral">""</span> );
<a name="l00514"></a>00514     <span class="keywordflow">if</span> ( isICalInvitation &amp;&amp;
<a name="l00515"></a>00515         GlobalSettings::self()-&gt;legacyBodyInvites() ) {
<a name="l00516"></a>00516       <span class="comment">// KOrganizer invitation caught and to be sent as body instead</span>
<a name="l00517"></a>00517       msg-&gt;<a class="code" href="classKMMessage.html#1b9c4db08086c94986f00d0c708a01e7" title="Set the message body.">setBody</a>( attachData );
<a name="l00518"></a>00518       msg-&gt;<a class="code" href="classKMMessage.html#de227ca74ea9bca2412ddfc63b4025c6" title="Set the header field with the given name to the given value.">setHeaderField</a>( <span class="stringliteral">"Content-Type"</span>,
<a name="l00519"></a>00519                            QString( <span class="stringliteral">"text/calendar; method=%1; "</span>
<a name="l00520"></a>00520                                     <span class="stringliteral">"charset=\"utf-8\""</span> ).
<a name="l00521"></a>00521                            arg( attachParamValue ) );
<a name="l00522"></a>00522 
<a name="l00523"></a>00523       iCalAutoSend = <span class="keyword">true</span>; <span class="comment">// no point in editing raw ICAL</span>
<a name="l00524"></a>00524       noWordWrap = <span class="keyword">true</span>; <span class="comment">// we shant word wrap inline invitations</span>
<a name="l00525"></a>00525     } <span class="keywordflow">else</span> {
<a name="l00526"></a>00526       <span class="comment">// Just do what we're told to do</span>
<a name="l00527"></a>00527       msgPart = <span class="keyword">new</span> KMMessagePart;
<a name="l00528"></a>00528       msgPart-&gt;setName( attachName );
<a name="l00529"></a>00529       msgPart-&gt;setCteStr( attachCte );
<a name="l00530"></a>00530       msgPart-&gt;setBodyEncoded( attachData );
<a name="l00531"></a>00531       msgPart-&gt;setTypeStr( attachType );
<a name="l00532"></a>00532       msgPart-&gt;setSubtypeStr( attachSubType );
<a name="l00533"></a>00533       msgPart-&gt;setParameter( attachParamAttr, attachParamValue );
<a name="l00534"></a>00534        <span class="keywordflow">if</span>( ! GlobalSettings::self()-&gt;exchangeCompatibleInvitations() ) {
<a name="l00535"></a>00535         msgPart-&gt;setContentDisposition( attachContDisp );
<a name="l00536"></a>00536       }
<a name="l00537"></a>00537       <span class="keywordflow">if</span>( !attachCharset.isEmpty() ) {
<a name="l00538"></a>00538         <span class="comment">// kdDebug(5006) &lt;&lt; "KMKernel::openComposer set attachCharset to "</span>
<a name="l00539"></a>00539         <span class="comment">// &lt;&lt; attachCharset &lt;&lt; endl;</span>
<a name="l00540"></a>00540         msgPart-&gt;setCharset( attachCharset );
<a name="l00541"></a>00541       }
<a name="l00542"></a>00542       <span class="comment">// Don't show the composer window, if the automatic sending is checked</span>
<a name="l00543"></a>00543       KConfigGroup options( config(), <span class="stringliteral">"Groupware"</span> );
<a name="l00544"></a>00544       iCalAutoSend = options.readBoolEntry( <span class="stringliteral">"AutomaticSending"</span>, <span class="keyword">true</span> );
<a name="l00545"></a>00545     }
<a name="l00546"></a>00546   }
<a name="l00547"></a>00547 
<a name="l00548"></a>00548   KMail::Composer * cWin = KMail::makeComposer();
<a name="l00549"></a>00549   cWin-&gt;setMsg( msg, !isICalInvitation <span class="comment">/* mayAutoSign */</span> );
<a name="l00550"></a>00550   cWin-&gt;setSigningAndEncryptionDisabled( isICalInvitation
<a name="l00551"></a>00551       &amp;&amp; GlobalSettings::self()-&gt;legacyBodyInvites() );
<a name="l00552"></a>00552   cWin-&gt;setAutoDelete( <span class="keyword">true</span> );
<a name="l00553"></a>00553   <span class="keywordflow">if</span>( noWordWrap )
<a name="l00554"></a>00554     cWin-&gt;disableWordWrap();
<a name="l00555"></a>00555   <span class="keywordflow">else</span>
<a name="l00556"></a>00556     cWin-&gt;setCharset( <span class="stringliteral">""</span>, <span class="keyword">true</span> );
<a name="l00557"></a>00557   <span class="keywordflow">if</span> ( msgPart )
<a name="l00558"></a>00558     cWin-&gt;addAttach(msgPart);
<a name="l00559"></a>00559 
<a name="l00560"></a>00560   <span class="keywordflow">if</span> ( hidden == 0 &amp;&amp; !iCalAutoSend ) {
<a name="l00561"></a>00561     cWin-&gt;show();
<a name="l00562"></a>00562     <span class="comment">// Activate window - doing this instead of KWin::activateWindow(cWin-&gt;winId());</span>
<a name="l00563"></a>00563     <span class="comment">// so that it also works when called from KMailApplication::newInstance()</span>
<a name="l00564"></a>00564 <span class="preprocessor">#if defined Q_WS_X11 &amp;&amp; ! defined K_WS_QTONLY</span>
<a name="l00565"></a>00565 <span class="preprocessor"></span>    KStartupInfo::setNewStartupId( cWin, kapp-&gt;startupId() );
<a name="l00566"></a>00566 <span class="preprocessor">#endif</span>
<a name="l00567"></a>00567 <span class="preprocessor"></span>  } <span class="keywordflow">else</span> {
<a name="l00568"></a>00568     cWin-&gt;setAutoDeleteWindow( <span class="keyword">true</span> );
<a name="l00569"></a>00569     cWin-&gt;slotSendNow();
<a name="l00570"></a>00570   }
<a name="l00571"></a>00571 
<a name="l00572"></a>00572   <span class="keywordflow">return</span> 1;
<a name="l00573"></a>00573 }
<a name="l00574"></a>00574 
<a name="l00575"></a><a class="code" href="classKMKernel.html#f60dbe36205e2acd811222b9a68251e8">00575</a> <span class="keywordtype">void</span> <a class="code" href="classKMKernel.html#f60dbe36205e2acd811222b9a68251e8" title="DCOP call used to set the default transport.">KMKernel::setDefaultTransport</a>( <span class="keyword">const</span> QString &amp; transport )
<a name="l00576"></a>00576 {
<a name="l00577"></a>00577   QStringList availTransports = <a class="code" href="classKMail_1_1TransportManager.html#3284d5cf310f956ed8537f6ff82113a8" title="Returns the list for transport names.">KMail::TransportManager::transportNames</a>();
<a name="l00578"></a>00578   QStringList::const_iterator it = availTransports.find( transport );
<a name="l00579"></a>00579   <span class="keywordflow">if</span> ( it == availTransports.end() ) {
<a name="l00580"></a>00580     kdWarning() &lt;&lt; <span class="stringliteral">"The transport you entered is not available"</span> &lt;&lt; endl;
<a name="l00581"></a>00581     <span class="keywordflow">return</span>;
<a name="l00582"></a>00582   }
<a name="l00583"></a>00583   GlobalSettings::self()-&gt;setDefaultTransport( transport );
<a name="l00584"></a>00584 }
<a name="l00585"></a>00585 
<a name="l00586"></a><a class="code" href="classKMKernel.html#f033dbf275c318f83759992d8aae22bd">00586</a> DCOPRef <a class="code" href="classKMKernel.html#03ba295b9139421b58829d2f690f3494" title="returns id of composer if more are opened">KMKernel::openComposer</a>(<span class="keyword">const</span> QString &amp;to, <span class="keyword">const</span> QString &amp;cc,
<a name="l00587"></a>00587                                <span class="keyword">const</span> QString &amp;bcc, <span class="keyword">const</span> QString &amp;subject,
<a name="l00588"></a>00588                                <span class="keyword">const</span> QString &amp;body,<span class="keywordtype">bool</span> hidden)
<a name="l00589"></a>00589 {
<a name="l00590"></a>00590   <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a> *msg = <span class="keyword">new</span> <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a>;
<a name="l00591"></a>00591   msg-&gt;<a class="code" href="classKMMessage.html#f3fe6794874214ffa4ad07a3992590e7" title="Initialize header fields.">initHeader</a>();
<a name="l00592"></a>00592   msg-&gt;<a class="code" href="classKMMessage.html#6c6413b3690538964ac810f4c6755a5b" title="Set the message charset.">setCharset</a>(<span class="stringliteral">"utf-8"</span>);
<a name="l00593"></a>00593   <span class="keywordflow">if</span> (!cc.isEmpty()) msg-&gt;<a class="code" href="classKMMessage.html#3bf036f0a5f466a614154a749fb4ac54">setCc</a>(cc);
<a name="l00594"></a>00594   <span class="keywordflow">if</span> (!bcc.isEmpty()) msg-&gt;<a class="code" href="classKMMessage.html#d58fc2382ca70c04a23aafeefbdc6a10">setBcc</a>(bcc);
<a name="l00595"></a>00595   <span class="keywordflow">if</span> (!subject.isEmpty()) msg-&gt;<a class="code" href="classKMMessage.html#dc02d16017d248f9f7c9dc980aee25b4">setSubject</a>(subject);
<a name="l00596"></a>00596   <span class="keywordflow">if</span> (!to.isEmpty()) msg-&gt;<a class="code" href="classKMMessage.html#5bb40f8b006d66c80cff9a43fa3018d6">setTo</a>(to);
<a name="l00597"></a>00597   <span class="keywordflow">if</span> (!body.isEmpty()) {
<a name="l00598"></a>00598     msg-&gt;<a class="code" href="classKMMessage.html#1b9c4db08086c94986f00d0c708a01e7" title="Set the message body.">setBody</a>(body.utf8());
<a name="l00599"></a>00599   } <span class="keywordflow">else</span> {
<a name="l00600"></a>00600     TemplateParser parser( msg, TemplateParser::NewMessage,
<a name="l00601"></a>00601       <span class="stringliteral">""</span>, <span class="keyword">false</span>, <span class="keyword">false</span>, <span class="keyword">false</span>, <span class="keyword">false</span> );
<a name="l00602"></a>00602     parser.process( NULL, NULL );
<a name="l00603"></a>00603   }
<a name="l00604"></a>00604 
<a name="l00605"></a>00605   KMail::Composer * cWin = KMail::makeComposer( msg );
<a name="l00606"></a>00606   cWin-&gt;setCharset(<span class="stringliteral">""</span>, <span class="keyword">true</span>);
<a name="l00607"></a>00607   <span class="keywordflow">if</span> (!hidden) {
<a name="l00608"></a>00608     cWin-&gt;show();
<a name="l00609"></a>00609     <span class="comment">// Activate window - doing this instead of KWin::activateWindow(cWin-&gt;winId());</span>
<a name="l00610"></a>00610     <span class="comment">// so that it also works when called from KMailApplication::newInstance()</span>
<a name="l00611"></a>00611 <span class="preprocessor">#if defined Q_WS_X11 &amp;&amp; ! defined K_WS_QTONLY</span>
<a name="l00612"></a>00612 <span class="preprocessor"></span>    KStartupInfo::setNewStartupId( cWin, kapp-&gt;startupId() );
<a name="l00613"></a>00613 <span class="preprocessor">#endif</span>
<a name="l00614"></a>00614 <span class="preprocessor"></span>  }
<a name="l00615"></a>00615 
<a name="l00616"></a>00616   <span class="keywordflow">return</span> DCOPRef( cWin-&gt;asMailComposerIFace() );
<a name="l00617"></a>00617 }
<a name="l00618"></a>00618 
<a name="l00619"></a><a class="code" href="classKMKernel.html#56a6e34e27b06b69f2a5f1efe742fa06">00619</a> DCOPRef <a class="code" href="classKMKernel.html#56a6e34e27b06b69f2a5f1efe742fa06" title="DCOP call used by the Kontact plugin to create a new message.">KMKernel::newMessage</a>(<span class="keyword">const</span> QString &amp;to,
<a name="l00620"></a>00620                              <span class="keyword">const</span> QString &amp;cc,
<a name="l00621"></a>00621                              <span class="keyword">const</span> QString &amp;bcc,
<a name="l00622"></a>00622                              <span class="keywordtype">bool</span> hidden,
<a name="l00623"></a>00623                              <span class="keywordtype">bool</span> useFolderId,
<a name="l00624"></a>00624                              <span class="keyword">const</span> KURL &amp; <span class="comment">/*messageFile*/</span>,
<a name="l00625"></a>00625                              <span class="keyword">const</span> KURL &amp;attachURL)
<a name="l00626"></a>00626 {
<a name="l00627"></a>00627   KMail::Composer * win = 0;
<a name="l00628"></a>00628   <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a> *msg = <span class="keyword">new</span> <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a>;
<a name="l00629"></a>00629   <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a> *folder = NULL;
<a name="l00630"></a>00630   uint id;
<a name="l00631"></a>00631 
<a name="l00632"></a>00632   <span class="keywordflow">if</span> ( useFolderId ) {
<a name="l00633"></a>00633     <span class="comment">//create message with required folder identity</span>
<a name="l00634"></a>00634     folder = currentFolder();
<a name="l00635"></a>00635     <span class="keywordtype">id</span> = folder ? folder-&gt;<a class="code" href="classKMFolder.html#2d2c39e5a8a9b0ca6ee666df1db475f6">identity</a>() : 0;
<a name="l00636"></a>00636     msg-&gt;<a class="code" href="classKMMessage.html#f3fe6794874214ffa4ad07a3992590e7" title="Initialize header fields.">initHeader</a>( <span class="keywordtype">id</span> );
<a name="l00637"></a>00637   } <span class="keywordflow">else</span> {
<a name="l00638"></a>00638     msg-&gt;<a class="code" href="classKMMessage.html#f3fe6794874214ffa4ad07a3992590e7" title="Initialize header fields.">initHeader</a>();
<a name="l00639"></a>00639   }
<a name="l00640"></a>00640   msg-&gt;<a class="code" href="classKMMessage.html#6c6413b3690538964ac810f4c6755a5b" title="Set the message charset.">setCharset</a>(<span class="stringliteral">"utf-8"</span>);
<a name="l00641"></a>00641   <span class="comment">//set basic headers</span>
<a name="l00642"></a>00642   <span class="keywordflow">if</span> (!to.isEmpty()) msg-&gt;<a class="code" href="classKMMessage.html#5bb40f8b006d66c80cff9a43fa3018d6">setTo</a>(to);
<a name="l00643"></a>00643   <span class="keywordflow">if</span> (!cc.isEmpty()) msg-&gt;<a class="code" href="classKMMessage.html#3bf036f0a5f466a614154a749fb4ac54">setCc</a>(cc);
<a name="l00644"></a>00644   <span class="keywordflow">if</span> (!bcc.isEmpty()) msg-&gt;<a class="code" href="classKMMessage.html#d58fc2382ca70c04a23aafeefbdc6a10">setBcc</a>(bcc);
<a name="l00645"></a>00645 
<a name="l00646"></a>00646   <span class="keywordflow">if</span> ( useFolderId ) {
<a name="l00647"></a>00647     TemplateParser parser( msg, TemplateParser::NewMessage,
<a name="l00648"></a>00648       <span class="stringliteral">""</span>, <span class="keyword">false</span>, <span class="keyword">false</span>, <span class="keyword">false</span>, <span class="keyword">false</span> );
<a name="l00649"></a>00649     parser.process( NULL, folder );
<a name="l00650"></a>00650     win = makeComposer( msg, <span class="keywordtype">id</span> );
<a name="l00651"></a>00651   } <span class="keywordflow">else</span> {
<a name="l00652"></a>00652     TemplateParser parser( msg, TemplateParser::NewMessage,
<a name="l00653"></a>00653       <span class="stringliteral">""</span>, <span class="keyword">false</span>, <span class="keyword">false</span>, <span class="keyword">false</span>, <span class="keyword">false</span> );
<a name="l00654"></a>00654     parser.process( NULL, folder );
<a name="l00655"></a>00655     win = makeComposer( msg );
<a name="l00656"></a>00656   }
<a name="l00657"></a>00657 
<a name="l00658"></a>00658   <span class="comment">//Add the attachment if we have one</span>
<a name="l00659"></a>00659   <span class="keywordflow">if</span>(!attachURL.isEmpty() &amp;&amp; attachURL.isValid()) {
<a name="l00660"></a>00660     win-&gt;addAttach(attachURL);
<a name="l00661"></a>00661   }
<a name="l00662"></a>00662 
<a name="l00663"></a>00663   <span class="comment">//only show window when required</span>
<a name="l00664"></a>00664   <span class="keywordflow">if</span>(!hidden) {
<a name="l00665"></a>00665     win-&gt;show();
<a name="l00666"></a>00666   }
<a name="l00667"></a>00667   <span class="keywordflow">return</span> DCOPRef( win-&gt;asMailComposerIFace() );
<a name="l00668"></a>00668 }
<a name="l00669"></a>00669 
<a name="l00670"></a>00670 <span class="keywordtype">int</span> KMKernel::viewMessage( <span class="keyword">const</span> KURL &amp; messageFile )
<a name="l00671"></a>00671 {
<a name="l00672"></a>00672   KMOpenMsgCommand *openCommand = <span class="keyword">new</span> KMOpenMsgCommand( 0, messageFile );
<a name="l00673"></a>00673 
<a name="l00674"></a>00674   openCommand-&gt;start();
<a name="l00675"></a>00675 
<a name="l00676"></a>00676   <span class="keywordflow">return</span> 1;
<a name="l00677"></a>00677 }
<a name="l00678"></a>00678 
<a name="l00679"></a><a class="code" href="classKMKernel.html#ef9acf232beb78ed59d71d8c0ffc16c5">00679</a> <span class="keywordtype">int</span> <a class="code" href="classKMKernel.html#ef9acf232beb78ed59d71d8c0ffc16c5" title="Send a certificate request to the CA specified in to.">KMKernel::sendCertificate</a>( <span class="keyword">const</span> QString&amp; to, <span class="keyword">const</span> QByteArray&amp; certData )
<a name="l00680"></a>00680 {
<a name="l00681"></a>00681   <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a> *msg = <span class="keyword">new</span> <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a>;
<a name="l00682"></a>00682   msg-&gt;<a class="code" href="classKMMessage.html#f3fe6794874214ffa4ad07a3992590e7" title="Initialize header fields.">initHeader</a>();
<a name="l00683"></a>00683   msg-&gt;<a class="code" href="classKMMessage.html#6c6413b3690538964ac810f4c6755a5b" title="Set the message charset.">setCharset</a>(<span class="stringliteral">"utf-8"</span>);
<a name="l00684"></a>00684   msg-&gt;<a class="code" href="classKMMessage.html#dc02d16017d248f9f7c9dc980aee25b4">setSubject</a>( i18n( <span class="stringliteral">"Certificate Signature Request"</span> ) );
<a name="l00685"></a>00685   <span class="keywordflow">if</span> (!to.isEmpty()) msg-&gt;<a class="code" href="classKMMessage.html#5bb40f8b006d66c80cff9a43fa3018d6">setTo</a>(to);
<a name="l00686"></a>00686   <span class="comment">// ### Make this message customizable via KIOSK</span>
<a name="l00687"></a>00687   msg-&gt;<a class="code" href="classKMMessage.html#1b9c4db08086c94986f00d0c708a01e7" title="Set the message body.">setBody</a>( i18n( <span class="stringliteral">"Please create a certificate from attachment and return to sender."</span> ).utf8() );
<a name="l00688"></a>00688 
<a name="l00689"></a>00689   KMail::Composer * cWin = KMail::makeComposer( msg );
<a name="l00690"></a>00690   cWin-&gt;setCharset(<span class="stringliteral">""</span>, <span class="keyword">true</span>);
<a name="l00691"></a>00691   cWin-&gt;slotSetAlwaysSend( <span class="keyword">true</span> );
<a name="l00692"></a>00692   <span class="keywordflow">if</span> (!certData.isEmpty()) {
<a name="l00693"></a>00693     KMMessagePart *msgPart = <span class="keyword">new</span> KMMessagePart;
<a name="l00694"></a>00694     msgPart-&gt;setName(<span class="stringliteral">"smime.p10"</span>);
<a name="l00695"></a>00695     msgPart-&gt;setCteStr(<span class="stringliteral">"base64"</span>);
<a name="l00696"></a>00696     msgPart-&gt;setBodyEncodedBinary(certData);
<a name="l00697"></a>00697     msgPart-&gt;setTypeStr(<span class="stringliteral">"application"</span>);
<a name="l00698"></a>00698     msgPart-&gt;setSubtypeStr(<span class="stringliteral">"pkcs10"</span>);
<a name="l00699"></a>00699     msgPart-&gt;setContentDisposition(<span class="stringliteral">"attachment; filename=smime.p10"</span>);
<a name="l00700"></a>00700     cWin-&gt;addAttach(msgPart);
<a name="l00701"></a>00701   }
<a name="l00702"></a>00702 
<a name="l00703"></a>00703   cWin-&gt;show();
<a name="l00704"></a>00704   <span class="keywordflow">return</span> 1;
<a name="l00705"></a>00705 }
<a name="l00706"></a>00706 
<a name="l00707"></a>00707 KMMsgStatus KMKernel::strToStatus(<span class="keyword">const</span> QString &amp;flags)
<a name="l00708"></a>00708 {
<a name="l00709"></a>00709     KMMsgStatus status = 0;
<a name="l00710"></a>00710     <span class="keywordflow">if</span> (!flags.isEmpty()) {
<a name="l00711"></a>00711         <span class="keywordflow">for</span> (uint n = 0; n &lt; flags.length() ; n++) {
<a name="l00712"></a>00712             <span class="keywordflow">switch</span> (flags[n]) {
<a name="l00713"></a>00713                 <span class="keywordflow">case</span> <span class="charliteral">'N'</span>:
<a name="l00714"></a>00714                     status |= KMMsgStatusNew;
<a name="l00715"></a>00715                     <span class="keywordflow">break</span>;
<a name="l00716"></a>00716                 <span class="keywordflow">case</span> <span class="charliteral">'U'</span>:
<a name="l00717"></a>00717                     status |= KMMsgStatusUnread;
<a name="l00718"></a>00718                     <span class="keywordflow">break</span>;
<a name="l00719"></a>00719                 <span class="keywordflow">case</span> <span class="charliteral">'O'</span>:
<a name="l00720"></a>00720                     status |= KMMsgStatusOld;
<a name="l00721"></a>00721                     <span class="keywordflow">break</span>;
<a name="l00722"></a>00722                 <span class="keywordflow">case</span> <span class="charliteral">'R'</span>:
<a name="l00723"></a>00723                     status |= KMMsgStatusRead;
<a name="l00724"></a>00724                     <span class="keywordflow">break</span>;
<a name="l00725"></a>00725                 <span class="keywordflow">case</span> <span class="charliteral">'D'</span>:
<a name="l00726"></a>00726                     status |= KMMsgStatusDeleted;
<a name="l00727"></a>00727                     <span class="keywordflow">break</span>;
<a name="l00728"></a>00728                 <span class="keywordflow">case</span> <span class="charliteral">'A'</span>:
<a name="l00729"></a>00729                     status |= KMMsgStatusReplied;
<a name="l00730"></a>00730                     <span class="keywordflow">break</span>;
<a name="l00731"></a>00731                 <span class="keywordflow">case</span> <span class="charliteral">'F'</span>:
<a name="l00732"></a>00732                     status |= KMMsgStatusForwarded;
<a name="l00733"></a>00733                     <span class="keywordflow">break</span>;
<a name="l00734"></a>00734                 <span class="keywordflow">case</span> <span class="charliteral">'Q'</span>:
<a name="l00735"></a>00735                     status |= KMMsgStatusQueued;
<a name="l00736"></a>00736                     <span class="keywordflow">break</span>;
<a name="l00737"></a>00737                 <span class="keywordflow">case</span> <span class="charliteral">'K'</span>:
<a name="l00738"></a>00738                     status |= KMMsgStatusTodo;
<a name="l00739"></a>00739                     <span class="keywordflow">break</span>;
<a name="l00740"></a>00740                 <span class="keywordflow">case</span> <span class="charliteral">'S'</span>:
<a name="l00741"></a>00741                     status |= KMMsgStatusSent;
<a name="l00742"></a>00742                     <span class="keywordflow">break</span>;
<a name="l00743"></a>00743                 <span class="keywordflow">case</span> <span class="charliteral">'G'</span>:
<a name="l00744"></a>00744                     status |= KMMsgStatusFlag;
<a name="l00745"></a>00745                     <span class="keywordflow">break</span>;
<a name="l00746"></a>00746                 <span class="keywordflow">case</span> <span class="charliteral">'W'</span>:
<a name="l00747"></a>00747                     status |= KMMsgStatusWatched;
<a name="l00748"></a>00748                     <span class="keywordflow">break</span>;
<a name="l00749"></a>00749                 <span class="keywordflow">case</span> <span class="charliteral">'I'</span>:
<a name="l00750"></a>00750                     status |= KMMsgStatusIgnored;
<a name="l00751"></a>00751                     <span class="keywordflow">break</span>;
<a name="l00752"></a>00752                 <span class="keywordflow">case</span> <span class="charliteral">'P'</span>:
<a name="l00753"></a>00753                     status |= KMMsgStatusSpam;
<a name="l00754"></a>00754                     <span class="keywordflow">break</span>;
<a name="l00755"></a>00755                 <span class="keywordflow">case</span> <span class="charliteral">'H'</span>:
<a name="l00756"></a>00756                     status |= KMMsgStatusHam;
<a name="l00757"></a>00757                     <span class="keywordflow">break</span>;
<a name="l00758"></a>00758                 <span class="keywordflow">case</span> <span class="charliteral">'T'</span>:
<a name="l00759"></a>00759                     status |= KMMsgStatusHasAttach;
<a name="l00760"></a>00760                     <span class="keywordflow">break</span>;
<a name="l00761"></a>00761                 <span class="keywordflow">case</span> <span class="charliteral">'C'</span>:
<a name="l00762"></a>00762                     status |= KMMsgStatusHasNoAttach;
<a name="l00763"></a>00763                     <span class="keywordflow">break</span>;
<a name="l00764"></a>00764                 <span class="keywordflow">default</span>:
<a name="l00765"></a>00765                     <span class="keywordflow">break</span>;
<a name="l00766"></a>00766             }
<a name="l00767"></a>00767         }
<a name="l00768"></a>00768     }
<a name="l00769"></a>00769     <span class="keywordflow">return</span> status;
<a name="l00770"></a>00770 }
<a name="l00771"></a>00771 
<a name="l00772"></a><a class="code" href="classKMKernel.html#bf51e708c21621128df82ff22ec5fc36">00772</a> <span class="keywordtype">int</span> <a class="code" href="classKMKernel.html#bf51e708c21621128df82ff22ec5fc36">KMKernel::dcopAddMessage</a>( <span class="keyword">const</span> QString &amp; foldername, <span class="keyword">const</span> QString &amp; msgUrlString,
<a name="l00773"></a>00773                               <span class="keyword">const</span> QString &amp; MsgStatusFlags)
<a name="l00774"></a>00774 {
<a name="l00775"></a>00775   <span class="keywordflow">return</span> <a class="code" href="classKMKernel.html#bf51e708c21621128df82ff22ec5fc36">dcopAddMessage</a>(foldername, KURL(msgUrlString), MsgStatusFlags);
<a name="l00776"></a>00776 }
<a name="l00777"></a>00777 
<a name="l00778"></a>00778 <span class="keywordtype">int</span> <a class="code" href="classKMKernel.html#bf51e708c21621128df82ff22ec5fc36">KMKernel::dcopAddMessage</a>( <span class="keyword">const</span> QString &amp; foldername,<span class="keyword">const</span> KURL &amp; msgUrl,
<a name="l00779"></a>00779                               <span class="keyword">const</span> QString &amp; MsgStatusFlags)
<a name="l00780"></a>00780 {
<a name="l00781"></a>00781   kdDebug(5006) &lt;&lt; <span class="stringliteral">"KMKernel::dcopAddMessage called"</span> &lt;&lt; endl;
<a name="l00782"></a>00782 
<a name="l00783"></a>00783   <span class="keywordflow">if</span> ( foldername.isEmpty() || foldername.startsWith(<span class="stringliteral">"."</span>))
<a name="l00784"></a>00784     <span class="keywordflow">return</span> -1;
<a name="l00785"></a>00785 
<a name="l00786"></a>00786   <span class="keywordtype">int</span> retval;
<a name="l00787"></a>00787   <span class="keywordtype">bool</span> readFolderMsgIds = <span class="keyword">false</span>;
<a name="l00788"></a>00788   QString _foldername = foldername.stripWhiteSpace();
<a name="l00789"></a>00789   _foldername = _foldername.replace(<span class="charliteral">'\\'</span>,<span class="stringliteral">""</span>); <span class="comment">//try to prevent ESCAPE Sequences</span>
<a name="l00790"></a>00790 
<a name="l00791"></a>00791   <span class="keywordflow">if</span> ( foldername != mAddMessageLastFolder ) {
<a name="l00792"></a>00792     mAddMessageMsgIds.clear();
<a name="l00793"></a>00793     readFolderMsgIds = <span class="keyword">true</span>;
<a name="l00794"></a>00794     mAddMessageLastFolder = foldername;
<a name="l00795"></a>00795   }
<a name="l00796"></a>00796 
<a name="l00797"></a>00797   <span class="keywordflow">if</span> (!msgUrl.isEmpty() &amp;&amp; msgUrl.isLocalFile()) {
<a name="l00798"></a>00798 
<a name="l00799"></a>00799     <span class="comment">// This is a proposed change by Daniel Andor.</span>
<a name="l00800"></a>00800     <span class="comment">// He proposed to change from the fopen(blah)</span>
<a name="l00801"></a>00801     <span class="comment">// to a KPIM::kFileToString(blah).</span>
<a name="l00802"></a>00802     <span class="comment">// Although it assigns a QString to a QString,</span>
<a name="l00803"></a>00803     <span class="comment">// because of the implicit sharing this poses</span>
<a name="l00804"></a>00804     <span class="comment">// no memory or performance penalty.</span>
<a name="l00805"></a>00805 
<a name="l00806"></a>00806     <span class="keyword">const</span> QCString messageText =
<a name="l00807"></a>00807       KPIM::kFileToString( msgUrl.path(), <span class="keyword">true</span>, false );
<a name="l00808"></a>00808     <span class="keywordflow">if</span> ( messageText.isEmpty() )
<a name="l00809"></a>00809       <span class="keywordflow">return</span> -2;
<a name="l00810"></a>00810 
<a name="l00811"></a>00811     <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a> *msg = <span class="keyword">new</span> <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a>();
<a name="l00812"></a>00812     msg-&gt;<a class="code" href="classKMMessage.html#12b6fd6049348c2fe5f0337851a8c0f1">fromString</a>( messageText );
<a name="l00813"></a>00813 
<a name="l00814"></a>00814     <span class="keywordflow">if</span> (readFolderMsgIds) {
<a name="l00815"></a>00815       <span class="keywordflow">if</span> ( foldername.contains(<span class="stringliteral">"/"</span>)) {
<a name="l00816"></a>00816         QString tmp_fname = <span class="stringliteral">""</span>;
<a name="l00817"></a>00817         <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a> *folder = NULL;
<a name="l00818"></a>00818         <a class="code" href="classKMFolderDir.html" title="KMail list that manages the contents of one directory that may contain folders and/or...">KMFolderDir</a> *subfolder;
<a name="l00819"></a>00819         <span class="keywordtype">bool</span> root = <span class="keyword">true</span>;
<a name="l00820"></a>00820 
<a name="l00821"></a>00821         QStringList subFList = QStringList::split(<span class="stringliteral">"/"</span>,_foldername,<span class="keyword">false</span>);
<a name="l00822"></a>00822 
<a name="l00823"></a>00823         <span class="keywordflow">for</span> ( QStringList::Iterator it = subFList.begin(); it != subFList.end(); ++it ) {
<a name="l00824"></a>00824           QString _newFolder = *it;
<a name="l00825"></a>00825           <span class="keywordflow">if</span>(_newFolder.startsWith(<span class="stringliteral">"."</span>)) <span class="keywordflow">return</span> -1;
<a name="l00826"></a>00826 
<a name="l00827"></a>00827           <span class="keywordflow">if</span>(root) {
<a name="l00828"></a>00828             folder = the_folderMgr-&gt;findOrCreate(*it, <span class="keyword">false</span>);
<a name="l00829"></a>00829             <span class="keywordflow">if</span> (folder) {
<a name="l00830"></a>00830               root = <span class="keyword">false</span>;
<a name="l00831"></a>00831               tmp_fname = <span class="stringliteral">"/"</span> + *it;
<a name="l00832"></a>00832             }
<a name="l00833"></a>00833             <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1;
<a name="l00834"></a>00834           } <span class="keywordflow">else</span> {
<a name="l00835"></a>00835             subfolder = folder-&gt;<a class="code" href="classKMFolder.html#9342ce04787044b210296c0fbe5e5bd8" title="Create a child folder directory and associates it with this folder.">createChildFolder</a>();
<a name="l00836"></a>00836             tmp_fname += <span class="stringliteral">"/"</span> + *it;
<a name="l00837"></a>00837             <span class="keywordflow">if</span>(!the_folderMgr-&gt;getFolderByURL( tmp_fname )) {
<a name="l00838"></a>00838              folder = the_folderMgr-&gt;createFolder(*it, <span class="keyword">false</span>, folder-&gt;<a class="code" href="classKMFolder.html#f95cbfeb07323847c6fe68d43c5a9276" title="Returns the type of this folder.">folderType</a>(), subfolder);
<a name="l00839"></a>00839             }
<a name="l00840"></a>00840 
<a name="l00841"></a>00841             <span class="keywordflow">if</span>(!(folder = the_folderMgr-&gt;getFolderByURL( tmp_fname ))) <span class="keywordflow">return</span> -1;
<a name="l00842"></a>00842           }
<a name="l00843"></a>00843         }
<a name="l00844"></a>00844 
<a name="l00845"></a>00845         mAddMsgCurrentFolder = the_folderMgr-&gt;getFolderByURL( tmp_fname );
<a name="l00846"></a>00846         <span class="keywordflow">if</span>(!folder) <span class="keywordflow">return</span> -1;
<a name="l00847"></a>00847 
<a name="l00848"></a>00848       } <span class="keywordflow">else</span> {
<a name="l00849"></a>00849         mAddMsgCurrentFolder = the_folderMgr-&gt;findOrCreate(_foldername, <span class="keyword">false</span>);
<a name="l00850"></a>00850       }
<a name="l00851"></a>00851     }
<a name="l00852"></a>00852 
<a name="l00853"></a>00853     <span class="keywordflow">if</span> ( mAddMsgCurrentFolder ) {
<a name="l00854"></a>00854       <span class="keywordflow">if</span> (readFolderMsgIds) {
<a name="l00855"></a>00855 
<a name="l00856"></a>00856         <span class="comment">// OLD COMMENT:</span>
<a name="l00857"></a>00857         <span class="comment">// Try to determine if a message already exists in</span>
<a name="l00858"></a>00858         <span class="comment">// the folder. The message id that is searched for, is</span>
<a name="l00859"></a>00859         <span class="comment">// the subject line + the date. This should be quite</span>
<a name="l00860"></a>00860         <span class="comment">// unique. The change that a given date with a given</span>
<a name="l00861"></a>00861         <span class="comment">// subject is in the folder twice is very small.</span>
<a name="l00862"></a>00862         <span class="comment">// If the subject is empty, the fromStrip string</span>
<a name="l00863"></a>00863         <span class="comment">// is taken.</span>
<a name="l00864"></a>00864 
<a name="l00865"></a>00865     <span class="comment">// NEW COMMENT from Danny Kukawka (danny.kukawka@web.de):</span>
<a name="l00866"></a>00866     <span class="comment">// subject line + the date is only unique if the following</span>
<a name="l00867"></a>00867     <span class="comment">// return a correct unique value:</span>
<a name="l00868"></a>00868     <span class="comment">//  time_t  DT = mb-&gt;date();</span>
<a name="l00869"></a>00869         <span class="comment">//  QString dt = ctime(&amp;DT);</span>
<a name="l00870"></a>00870     <span class="comment">// But if the datestring in the Header isn't RFC conform</span>
<a name="l00871"></a>00871     <span class="comment">// subject line + the date isn't unique.</span>
<a name="l00872"></a>00872     <span class="comment">//</span>
<a name="l00873"></a>00873     <span class="comment">// The only uique headerfield is the Message-ID. In some</span>
<a name="l00874"></a>00874     <span class="comment">// cases this could be empty. I then I use the</span>
<a name="l00875"></a>00875     <span class="comment">// subject line + dateStr .</span>
<a name="l00876"></a>00876 
<a name="l00877"></a>00877         <span class="keywordtype">int</span> i;
<a name="l00878"></a>00878 
<a name="l00879"></a>00879         mAddMsgCurrentFolder-&gt;<a class="code" href="classKMFolder.html#c12a4bb5f265447d87b3e0e9a9482cc6" title="Open folder for access.">open</a>(<span class="stringliteral">"dcopadd"</span>);
<a name="l00880"></a>00880         <span class="keywordflow">for</span>( i=0; i&lt;mAddMsgCurrentFolder-&gt;<a class="code" href="classKMFolder.html#c482e9431d9cd9ec0dc99b57e39e0942" title="Number of messages in this folder.">count</a>(); i++) {
<a name="l00881"></a>00881           KMMsgBase *mb = mAddMsgCurrentFolder-&gt;<a class="code" href="classKMFolder.html#4f7a5e120a3cd63293367cde74378a8a" title="Provides access to the basic message fields that are also stored in the index.">getMsgBase</a>(i);
<a name="l00882"></a>00882       QString <span class="keywordtype">id</span> = mb-&gt;msgIdMD5();
<a name="l00883"></a>00883       <span class="keywordflow">if</span> ( <span class="keywordtype">id</span>.isEmpty() ) {
<a name="l00884"></a>00884             <span class="keywordtype">id</span> = mb-&gt;subject();
<a name="l00885"></a>00885             <span class="keywordflow">if</span> ( <span class="keywordtype">id</span>.isEmpty() )
<a name="l00886"></a>00886               <span class="keywordtype">id</span> = mb-&gt;fromStrip();
<a name="l00887"></a>00887             <span class="keywordflow">if</span> ( <span class="keywordtype">id</span>.isEmpty() )
<a name="l00888"></a>00888               <span class="keywordtype">id</span> = mb-&gt;toStrip();
<a name="l00889"></a>00889 
<a name="l00890"></a>00890             <span class="keywordtype">id</span> += mb-&gt;dateStr();
<a name="l00891"></a>00891       }
<a name="l00892"></a>00892 
<a name="l00893"></a>00893           <span class="comment">//fprintf(stderr,"%s\n",(const char *) id);</span>
<a name="l00894"></a>00894           <span class="keywordflow">if</span> ( !<span class="keywordtype">id</span>.isEmpty() ) {
<a name="l00895"></a>00895             mAddMessageMsgIds.append(<span class="keywordtype">id</span>);
<a name="l00896"></a>00896           }
<a name="l00897"></a>00897         }
<a name="l00898"></a>00898         mAddMsgCurrentFolder-&gt;<a class="code" href="classKMFolder.html#8d167662bca3ad6315fa5ad67bb9e4dd" title="Close folder.">close</a>(<span class="stringliteral">"dcopadd"</span>);
<a name="l00899"></a>00899       }
<a name="l00900"></a>00900 
<a name="l00901"></a>00901       QString msgId = msg-&gt;<a class="code" href="classKMMessage.html#fff44cb1cfeb46156492e48b7caef46a">msgIdMD5</a>();
<a name="l00902"></a>00902       <span class="keywordflow">if</span> ( msgId.isEmpty()) {
<a name="l00903"></a>00903     msgId = msg-&gt;<a class="code" href="classKMMessage.html#8f39a479d6704ce51bcdb1de1fc28bda" title="Get or set the &amp;#39;Subject&amp;#39; header field.">subject</a>();
<a name="l00904"></a>00904     <span class="keywordflow">if</span> ( msgId.isEmpty() )
<a name="l00905"></a>00905           msgId = msg-&gt;<a class="code" href="classKMMessage.html#1e7591d9bcc1edb3c2037eb9a59721bb">fromStrip</a>();
<a name="l00906"></a>00906         <span class="keywordflow">if</span> ( msgId.isEmpty() )
<a name="l00907"></a>00907           msgId = msg-&gt;<a class="code" href="classKMMessage.html#6c438be725aa29ceeffa5b0da6194ec9">toStrip</a>();
<a name="l00908"></a>00908 
<a name="l00909"></a>00909     msgId += msg-&gt;<a class="code" href="classKMMessage.html#dc0c5523e610a960a4d913d7e27ff04a" title="Get or set the &amp;#39;Date&amp;#39; header field.">dateStr</a>();
<a name="l00910"></a>00910       }
<a name="l00911"></a>00911 
<a name="l00912"></a>00912       <span class="keywordtype">int</span> k = mAddMessageMsgIds.findIndex( msgId );
<a name="l00913"></a>00913       <span class="comment">//fprintf(stderr,"find %s = %d\n",(const char *) msgId,k);</span>
<a name="l00914"></a>00914 
<a name="l00915"></a>00915       <span class="keywordflow">if</span> ( k == -1 ) {
<a name="l00916"></a>00916         <span class="keywordflow">if</span> ( !msgId.isEmpty() ) {
<a name="l00917"></a>00917           mAddMessageMsgIds.append( msgId );
<a name="l00918"></a>00918         }
<a name="l00919"></a>00919 
<a name="l00920"></a>00920         <span class="keywordflow">if</span> ( !MsgStatusFlags.isEmpty() ) {
<a name="l00921"></a>00921           KMMsgStatus status = strToStatus(MsgStatusFlags);
<a name="l00922"></a>00922           <span class="keywordflow">if</span> (status) msg-&gt;<a class="code" href="classKMMessage.html#508dba38dc91893691edddaab30e274d" title="Set status and mark dirty.">setStatus</a>(status);
<a name="l00923"></a>00923         }
<a name="l00924"></a>00924 
<a name="l00925"></a>00925         <span class="keywordtype">int</span> index;
<a name="l00926"></a>00926         <span class="keywordflow">if</span> ( mAddMsgCurrentFolder-&gt;<a class="code" href="classKMFolder.html#5e7d1aee44132cf435081452c211f1aa" title="Add the given message to the folder.">addMsg</a>( msg, &amp;index ) == 0 ) {
<a name="l00927"></a>00927           mAddMsgCurrentFolder-&gt;<a class="code" href="classKMFolder.html#55d936471c71f7d03f6e54d2f83a0b52" title="Replace KMMessage with KMMsgInfo and delete KMMessage.">unGetMsg</a>( index );
<a name="l00928"></a>00928           retval = 1;
<a name="l00929"></a>00929         } <span class="keywordflow">else</span> {
<a name="l00930"></a>00930           retval =- 2;
<a name="l00931"></a>00931           <span class="keyword">delete</span> msg;
<a name="l00932"></a>00932           msg = 0;
<a name="l00933"></a>00933         }
<a name="l00934"></a>00934       } <span class="keywordflow">else</span> {
<a name="l00935"></a>00935         <span class="comment">//qDebug( "duplicate: " + msgId + "; subj: " + msg-&gt;subject() + ", from: " + msgId = msg-&gt;fromStrip());</span>
<a name="l00936"></a>00936     retval = -4;
<a name="l00937"></a>00937       }
<a name="l00938"></a>00938     } <span class="keywordflow">else</span> {
<a name="l00939"></a>00939       retval = -1;
<a name="l00940"></a>00940     }
<a name="l00941"></a>00941   } <span class="keywordflow">else</span> {
<a name="l00942"></a>00942     retval = -2;
<a name="l00943"></a>00943   }
<a name="l00944"></a>00944   <span class="keywordflow">return</span> retval;
<a name="l00945"></a>00945 }
<a name="l00946"></a>00946 
<a name="l00947"></a><a class="code" href="classKMKernel.html#3cdbced0b1a3f10addec8c898c9261be">00947</a> <span class="keywordtype">void</span> <a class="code" href="classKMKernel.html#3cdbced0b1a3f10addec8c898c9261be" title="Clears the list of added message ids which is used to filter out duplicates.">KMKernel::dcopResetAddMessage</a>()
<a name="l00948"></a>00948 {
<a name="l00949"></a>00949   mAddMessageMsgIds.clear();
<a name="l00950"></a>00950   mAddMessageLastFolder = QString();
<a name="l00951"></a>00951 }
<a name="l00952"></a>00952 
<a name="l00953"></a><a class="code" href="classKMKernel.html#8f6b53b2e7b8ff27fc65aae22ec23005">00953</a> <span class="keywordtype">int</span> <a class="code" href="classKMKernel.html#8f6b53b2e7b8ff27fc65aae22ec23005" title="add messages without rejecting duplicates">KMKernel::dcopAddMessage_fastImport</a>( <span class="keyword">const</span> QString &amp; foldername,
<a name="l00954"></a>00954                                          <span class="keyword">const</span> QString &amp; msgUrlString,
<a name="l00955"></a>00955                                          <span class="keyword">const</span> QString &amp; MsgStatusFlags)
<a name="l00956"></a>00956 {
<a name="l00957"></a>00957   <span class="keywordflow">return</span> <a class="code" href="classKMKernel.html#8f6b53b2e7b8ff27fc65aae22ec23005" title="add messages without rejecting duplicates">dcopAddMessage_fastImport</a>(foldername, KURL(msgUrlString), MsgStatusFlags);
<a name="l00958"></a>00958 }
<a name="l00959"></a>00959 
<a name="l00960"></a>00960 <span class="keywordtype">int</span> <a class="code" href="classKMKernel.html#8f6b53b2e7b8ff27fc65aae22ec23005" title="add messages without rejecting duplicates">KMKernel::dcopAddMessage_fastImport</a>( <span class="keyword">const</span> QString &amp; foldername,
<a name="l00961"></a>00961                                          <span class="keyword">const</span> KURL &amp; msgUrl,
<a name="l00962"></a>00962                                          <span class="keyword">const</span> QString &amp; MsgStatusFlags)
<a name="l00963"></a>00963 {
<a name="l00964"></a>00964   <span class="comment">// Use this function to import messages without</span>
<a name="l00965"></a>00965   <span class="comment">// search for already existing emails.</span>
<a name="l00966"></a>00966   kdDebug(5006) &lt;&lt; <span class="stringliteral">"KMKernel::dcopAddMessage_fastImport called"</span> &lt;&lt; endl;
<a name="l00967"></a>00967 
<a name="l00968"></a>00968   <span class="keywordflow">if</span> ( foldername.isEmpty() || foldername.startsWith(<span class="stringliteral">"."</span>))
<a name="l00969"></a>00969     <span class="keywordflow">return</span> -1;
<a name="l00970"></a>00970 
<a name="l00971"></a>00971   <span class="keywordtype">int</span> retval;
<a name="l00972"></a>00972   <span class="keywordtype">bool</span> createNewFolder = <span class="keyword">false</span>;
<a name="l00973"></a>00973 
<a name="l00974"></a>00974   QString _foldername = foldername.stripWhiteSpace();
<a name="l00975"></a>00975   _foldername = _foldername.replace(<span class="charliteral">'\\'</span>,<span class="stringliteral">""</span>); <span class="comment">//try to prevent ESCAPE Sequences</span>
<a name="l00976"></a>00976 
<a name="l00977"></a>00977   <span class="keywordflow">if</span> ( foldername != mAddMessageLastFolder ) {
<a name="l00978"></a>00978     createNewFolder = <span class="keyword">true</span>;
<a name="l00979"></a>00979     mAddMessageLastFolder = foldername;
<a name="l00980"></a>00980   }
<a name="l00981"></a>00981 
<a name="l00982"></a>00982 
<a name="l00983"></a>00983   <span class="keywordflow">if</span> ( !msgUrl.isEmpty() &amp;&amp; msgUrl.isLocalFile() ) {
<a name="l00984"></a>00984     <span class="keyword">const</span> QCString messageText =
<a name="l00985"></a>00985       KPIM::kFileToString( msgUrl.path(), <span class="keyword">true</span>, false );
<a name="l00986"></a>00986     <span class="keywordflow">if</span> ( messageText.isEmpty() )
<a name="l00987"></a>00987       <span class="keywordflow">return</span> -2;
<a name="l00988"></a>00988 
<a name="l00989"></a>00989     <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a> *msg = <span class="keyword">new</span> <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a>();
<a name="l00990"></a>00990     msg-&gt;<a class="code" href="classKMMessage.html#12b6fd6049348c2fe5f0337851a8c0f1">fromString</a>( messageText );
<a name="l00991"></a>00991 
<a name="l00992"></a>00992     <span class="keywordflow">if</span> (createNewFolder) {
<a name="l00993"></a>00993       <span class="keywordflow">if</span> ( foldername.contains(<span class="stringliteral">"/"</span>)) {
<a name="l00994"></a>00994         QString tmp_fname = <span class="stringliteral">""</span>;
<a name="l00995"></a>00995         <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a> *folder = NULL;
<a name="l00996"></a>00996         <a class="code" href="classKMFolderDir.html" title="KMail list that manages the contents of one directory that may contain folders and/or...">KMFolderDir</a> *subfolder;
<a name="l00997"></a>00997         <span class="keywordtype">bool</span> root = <span class="keyword">true</span>;
<a name="l00998"></a>00998 
<a name="l00999"></a>00999         QStringList subFList = QStringList::split(<span class="stringliteral">"/"</span>,_foldername,<span class="keyword">false</span>);
<a name="l01000"></a>01000 
<a name="l01001"></a>01001         <span class="keywordflow">for</span> ( QStringList::Iterator it = subFList.begin(); it != subFList.end(); ++it ) {
<a name="l01002"></a>01002           QString _newFolder = *it;
<a name="l01003"></a>01003           <span class="keywordflow">if</span>(_newFolder.startsWith(<span class="stringliteral">"."</span>)) <span class="keywordflow">return</span> -1;
<a name="l01004"></a>01004 
<a name="l01005"></a>01005           <span class="keywordflow">if</span>(root) {
<a name="l01006"></a>01006             folder = the_folderMgr-&gt;findOrCreate(*it, <span class="keyword">false</span>);
<a name="l01007"></a>01007             <span class="keywordflow">if</span> (folder) {
<a name="l01008"></a>01008               root = <span class="keyword">false</span>;
<a name="l01009"></a>01009               tmp_fname = <span class="stringliteral">"/"</span> + *it;
<a name="l01010"></a>01010             }
<a name="l01011"></a>01011             <span class="keywordflow">else</span> <span class="keywordflow">return</span> -1;
<a name="l01012"></a>01012           } <span class="keywordflow">else</span> {
<a name="l01013"></a>01013             subfolder = folder-&gt;<a class="code" href="classKMFolder.html#9342ce04787044b210296c0fbe5e5bd8" title="Create a child folder directory and associates it with this folder.">createChildFolder</a>();
<a name="l01014"></a>01014             tmp_fname += <span class="stringliteral">"/"</span> + *it;
<a name="l01015"></a>01015             <span class="keywordflow">if</span>(!the_folderMgr-&gt;getFolderByURL( tmp_fname )) {
<a name="l01016"></a>01016               folder = the_folderMgr-&gt;createFolder(*it, <span class="keyword">false</span>, folder-&gt;<a class="code" href="classKMFolder.html#f95cbfeb07323847c6fe68d43c5a9276" title="Returns the type of this folder.">folderType</a>(), subfolder);
<a name="l01017"></a>01017             }
<a name="l01018"></a>01018             <span class="keywordflow">if</span>(!(folder = the_folderMgr-&gt;getFolderByURL( tmp_fname ))) <span class="keywordflow">return</span> -1;
<a name="l01019"></a>01019           }
<a name="l01020"></a>01020         }
<a name="l01021"></a>01021 
<a name="l01022"></a>01022       mAddMsgCurrentFolder = the_folderMgr-&gt;getFolderByURL( tmp_fname );
<a name="l01023"></a>01023       <span class="keywordflow">if</span>(!folder) <span class="keywordflow">return</span> -1;
<a name="l01024"></a>01024 
<a name="l01025"></a>01025       } <span class="keywordflow">else</span> {
<a name="l01026"></a>01026         mAddMsgCurrentFolder = the_folderMgr-&gt;findOrCreate(_foldername, <span class="keyword">false</span>);
<a name="l01027"></a>01027       }
<a name="l01028"></a>01028     }
<a name="l01029"></a>01029 
<a name="l01030"></a>01030     <span class="keywordflow">if</span> ( mAddMsgCurrentFolder ) {
<a name="l01031"></a>01031       <span class="keywordtype">int</span> index;
<a name="l01032"></a>01032 
<a name="l01033"></a>01033       <span class="keywordflow">if</span>( !MsgStatusFlags.isEmpty() ) {
<a name="l01034"></a>01034         KMMsgStatus status = strToStatus(MsgStatusFlags);
<a name="l01035"></a>01035         <span class="keywordflow">if</span> (status) msg-&gt;<a class="code" href="classKMMessage.html#508dba38dc91893691edddaab30e274d" title="Set status and mark dirty.">setStatus</a>(status);
<a name="l01036"></a>01036       }
<a name="l01037"></a>01037 
<a name="l01038"></a>01038       <span class="keywordflow">if</span> ( mAddMsgCurrentFolder-&gt;<a class="code" href="classKMFolder.html#5e7d1aee44132cf435081452c211f1aa" title="Add the given message to the folder.">addMsg</a>( msg, &amp;index ) == 0 ) {
<a name="l01039"></a>01039         mAddMsgCurrentFolder-&gt;<a class="code" href="classKMFolder.html#55d936471c71f7d03f6e54d2f83a0b52" title="Replace KMMessage with KMMsgInfo and delete KMMessage.">unGetMsg</a>( index );
<a name="l01040"></a>01040         retval = 1;
<a name="l01041"></a>01041       } <span class="keywordflow">else</span> {
<a name="l01042"></a>01042         retval =- 2;
<a name="l01043"></a>01043         <span class="keyword">delete</span> msg;
<a name="l01044"></a>01044         msg = 0;
<a name="l01045"></a>01045       }
<a name="l01046"></a>01046     } <span class="keywordflow">else</span> {
<a name="l01047"></a>01047       retval = -1;
<a name="l01048"></a>01048     }
<a name="l01049"></a>01049   } <span class="keywordflow">else</span> {
<a name="l01050"></a>01050     retval = -2;
<a name="l01051"></a>01051   }
<a name="l01052"></a>01052 
<a name="l01053"></a>01053   <span class="keywordflow">return</span> retval;
<a name="l01054"></a>01054 }
<a name="l01055"></a>01055 
<a name="l01056"></a>01056 QStringList KMKernel::folderList()<span class="keyword"> const</span>
<a name="l01057"></a>01057 <span class="keyword"></span>{
<a name="l01058"></a>01058   QStringList folders;
<a name="l01059"></a>01059   <span class="keyword">const</span> QString localPrefix = <span class="stringliteral">"/Local"</span>;
<a name="l01060"></a>01060   folders &lt;&lt; localPrefix;
<a name="l01061"></a>01061   the_folderMgr-&gt;getFolderURLS( folders, localPrefix );
<a name="l01062"></a>01062   the_imapFolderMgr-&gt;getFolderURLS( folders );
<a name="l01063"></a>01063   the_dimapFolderMgr-&gt;getFolderURLS( folders );
<a name="l01064"></a>01064   <span class="keywordflow">return</span> folders;
<a name="l01065"></a>01065 }
<a name="l01066"></a>01066 
<a name="l01067"></a>01067 DCOPRef KMKernel::getFolder( <span class="keyword">const</span> QString&amp; vpath )
<a name="l01068"></a>01068 {
<a name="l01069"></a>01069   <span class="keyword">const</span> QString localPrefix = <span class="stringliteral">"/Local"</span>;
<a name="l01070"></a>01070   <span class="keywordflow">if</span> ( the_folderMgr-&gt;getFolderByURL( vpath ) )
<a name="l01071"></a>01071     <span class="keywordflow">return</span> DCOPRef( <span class="keyword">new</span> FolderIface( vpath ) );
<a name="l01072"></a>01072   <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( vpath.startsWith( localPrefix ) &amp;&amp;
<a name="l01073"></a>01073             the_folderMgr-&gt;getFolderByURL( vpath.mid( localPrefix.length() ) ) )
<a name="l01074"></a>01074     <span class="keywordflow">return</span> DCOPRef( <span class="keyword">new</span> FolderIface( vpath.mid( localPrefix.length() ) ) );
<a name="l01075"></a>01075   <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( the_imapFolderMgr-&gt;getFolderByURL( vpath ) )
<a name="l01076"></a>01076     <span class="keywordflow">return</span> DCOPRef( <span class="keyword">new</span> FolderIface( vpath ) );
<a name="l01077"></a>01077   <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( the_dimapFolderMgr-&gt;getFolderByURL( vpath ) )
<a name="l01078"></a>01078     <span class="keywordflow">return</span> DCOPRef( <span class="keyword">new</span> FolderIface( vpath ) );
<a name="l01079"></a>01079   <span class="keywordflow">return</span> DCOPRef();
<a name="l01080"></a>01080 }
<a name="l01081"></a>01081 
<a name="l01082"></a>01082 <span class="keywordtype">void</span> KMKernel::raise()
<a name="l01083"></a>01083 {
<a name="l01084"></a>01084   DCOPRef kmail( <span class="stringliteral">"kmail"</span>, <span class="stringliteral">"kmail"</span> );
<a name="l01085"></a>01085   kmail.call( <span class="stringliteral">"newInstance"</span> );
<a name="l01086"></a>01086 }
<a name="l01087"></a>01087 
<a name="l01088"></a><a class="code" href="classKMKernel.html#70f32cb0a6f3c0b2a5ff1224bd50622e">01088</a> <span class="keywordtype">bool</span> <a class="code" href="classKMKernel.html#70f32cb0a6f3c0b2a5ff1224bd50622e" title="Shows the specified message in a separate message window.">KMKernel::showMail</a>( Q_UINT32 serialNumber, QString <span class="comment">/* messageId */</span> )
<a name="l01089"></a>01089 {
<a name="l01090"></a>01090   KMMainWidget *mainWidget = 0;
<a name="l01091"></a>01091   <span class="keywordflow">if</span> (KMainWindow::memberList) {
<a name="l01092"></a>01092     KMainWindow *win = 0;
<a name="l01093"></a>01093     QObjectList *l;
<a name="l01094"></a>01094 
<a name="l01095"></a>01095     <span class="comment">// First look for a KMainWindow.</span>
<a name="l01096"></a>01096     <span class="keywordflow">for</span> (win = KMainWindow::memberList-&gt;first(); win;
<a name="l01097"></a>01097          win = KMainWindow::memberList-&gt;next()) {
<a name="l01098"></a>01098       <span class="comment">// Then look for a KMMainWidget.</span>
<a name="l01099"></a>01099       l = win-&gt;queryList(<span class="stringliteral">"KMMainWidget"</span>);
<a name="l01100"></a>01100       <span class="keywordflow">if</span> (l &amp;&amp; l-&gt;first()) {
<a name="l01101"></a>01101     mainWidget = <span class="keyword">dynamic_cast&lt;</span>KMMainWidget *<span class="keyword">&gt;</span>(l-&gt;first());
<a name="l01102"></a>01102     <span class="keywordflow">if</span> (win-&gt;isActiveWindow())
<a name="l01103"></a>01103       <span class="keywordflow">break</span>;
<a name="l01104"></a>01104       }
<a name="l01105"></a>01105     }
<a name="l01106"></a>01106   }
<a name="l01107"></a>01107 
<a name="l01108"></a>01108   <span class="keywordflow">if</span> (mainWidget) {
<a name="l01109"></a>01109     <span class="keywordtype">int</span> idx = -1;
<a name="l01110"></a>01110     <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a> *folder = 0;
<a name="l01111"></a>01111     <a class="code" href="classKMMsgDict.html#c39553f1139eff6c27e06082c625d067" title="Access the globally unique MessageDict.">KMMsgDict::instance</a>()-&gt;<a class="code" href="classKMMsgDict.html#c5d3159ddfbc5935322acd5602fb06ef" title="Returns the folder the message represented by the serial number key is in and the...">getLocation</a>(serialNumber, &amp;folder, &amp;idx);
<a name="l01112"></a>01112     <span class="keywordflow">if</span> (!folder || (idx == -1))
<a name="l01113"></a>01113       <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l01114"></a>01114     <a class="code" href="classKMFolderOpener.html" title="RAII for KMFolder::open() / close().">KMFolderOpener</a> openFolder(folder, <span class="stringliteral">"showmail"</span>);
<a name="l01115"></a>01115     KMMsgBase *msgBase = folder-&gt;<a class="code" href="classKMFolder.html#4f7a5e120a3cd63293367cde74378a8a" title="Provides access to the basic message fields that are also stored in the index.">getMsgBase</a>(idx);
<a name="l01116"></a>01116     <span class="keywordflow">if</span> (!msgBase)
<a name="l01117"></a>01117       <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l01118"></a>01118     <span class="keywordtype">bool</span> unGet = !msgBase-&gt;isMessage();
<a name="l01119"></a>01119     <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a> *msg = folder-&gt;<a class="code" href="classKMFolder.html#a0fdfeeed6e8e20eff1cd6445309b2f4" title="Read message at given index.">getMsg</a>(idx);
<a name="l01120"></a>01120 
<a name="l01121"></a>01121     KMReaderMainWin *win = <span class="keyword">new</span> KMReaderMainWin( <span class="keyword">false</span>, <span class="keyword">false</span> );
<a name="l01122"></a>01122     <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a> *<a class="code" href="classKMKernel.html#56a6e34e27b06b69f2a5f1efe742fa06" title="DCOP call used by the Kontact plugin to create a new message.">newMessage</a> = <span class="keyword">new</span> <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a>( *msg );
<a name="l01123"></a>01123     newMessage-&gt;setParent( msg-&gt;parent() );
<a name="l01124"></a>01124     newMessage-&gt;<a class="code" href="classKMMessage.html#a4eacb849513e37fc225b7dafe3be263" title="Sets the message serial number.">setMsgSerNum</a>( msg-&gt;getMsgSerNum() );
<a name="l01125"></a>01125     newMessage-&gt;<a class="code" href="classKMMessage.html#2312a56537b9b6ceefa0c2b4b17c387f" title="Set if the message is ready to be shown.">setReadyToShow</a>( <span class="keyword">true</span> );
<a name="l01126"></a>01126     win-&gt;showMsg( GlobalSettings::self()-&gt;overrideCharacterEncoding(), newMessage );
<a name="l01127"></a>01127     win-&gt;show();
<a name="l01128"></a>01128 
<a name="l01129"></a>01129     <span class="keywordflow">if</span> (unGet)
<a name="l01130"></a>01130       folder-&gt;<a class="code" href="classKMFolder.html#55d936471c71f7d03f6e54d2f83a0b52" title="Replace KMMessage with KMMsgInfo and delete KMMessage.">unGetMsg</a>(idx);
<a name="l01131"></a>01131     <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l01132"></a>01132   }
<a name="l01133"></a>01133 
<a name="l01134"></a>01134   <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l01135"></a>01135 }
<a name="l01136"></a>01136 
<a name="l01137"></a><a class="code" href="classKMKernel.html#d3906f8b7c8d4313f62a2702013d9d75">01137</a> QString <a class="code" href="classKMKernel.html#d3906f8b7c8d4313f62a2702013d9d75" title="DCOP-enabled for use in kaddressbook drop.">KMKernel::getFrom</a>( Q_UINT32 serialNumber )
<a name="l01138"></a>01138 {
<a name="l01139"></a>01139   <span class="keywordtype">int</span> idx = -1;
<a name="l01140"></a>01140   <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a> *folder = 0;
<a name="l01141"></a>01141   <a class="code" href="classKMMsgDict.html#c39553f1139eff6c27e06082c625d067" title="Access the globally unique MessageDict.">KMMsgDict::instance</a>()-&gt;<a class="code" href="classKMMsgDict.html#c5d3159ddfbc5935322acd5602fb06ef" title="Returns the folder the message represented by the serial number key is in and the...">getLocation</a>(serialNumber, &amp;folder, &amp;idx);
<a name="l01142"></a>01142   <span class="keywordflow">if</span> (!folder || (idx == -1))
<a name="l01143"></a>01143     <span class="keywordflow">return</span> QString::null;
<a name="l01144"></a>01144   <a class="code" href="classKMFolderOpener.html" title="RAII for KMFolder::open() / close().">KMFolderOpener</a> openFolder(folder, <span class="stringliteral">"getFrom"</span>);
<a name="l01145"></a>01145   KMMsgBase *msgBase = folder-&gt;<a class="code" href="classKMFolder.html#4f7a5e120a3cd63293367cde74378a8a" title="Provides access to the basic message fields that are also stored in the index.">getMsgBase</a>(idx);
<a name="l01146"></a>01146   <span class="keywordflow">if</span> (!msgBase)
<a name="l01147"></a>01147     <span class="keywordflow">return</span> QString::null;
<a name="l01148"></a>01148   <span class="keywordtype">bool</span> unGet = !msgBase-&gt;isMessage();
<a name="l01149"></a>01149   <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a> *msg = folder-&gt;<a class="code" href="classKMFolder.html#a0fdfeeed6e8e20eff1cd6445309b2f4" title="Read message at given index.">getMsg</a>(idx);
<a name="l01150"></a>01150   QString result = msg-&gt;<a class="code" href="classKMMessage.html#8c90e62a192cb4a42b53458d82697cbe" title="Get or set the &amp;#39;From&amp;#39; header field.">from</a>();
<a name="l01151"></a>01151   <span class="keywordflow">if</span> (unGet)
<a name="l01152"></a>01152     folder-&gt;<a class="code" href="classKMFolder.html#55d936471c71f7d03f6e54d2f83a0b52" title="Replace KMMessage with KMMsgInfo and delete KMMessage.">unGetMsg</a>(idx);
<a name="l01153"></a>01153   <span class="keywordflow">return</span> result;
<a name="l01154"></a>01154 }
<a name="l01155"></a>01155 
<a name="l01156"></a>01156 QString KMKernel::debugScheduler()
<a name="l01157"></a>01157 {
<a name="l01158"></a>01158   QString res = KMail::ActionScheduler::debug();
<a name="l01159"></a>01159   <span class="keywordflow">return</span> res;
<a name="l01160"></a>01160 }
<a name="l01161"></a>01161 
<a name="l01162"></a>01162 QString KMKernel::debugSernum( Q_UINT32 serialNumber )
<a name="l01163"></a>01163 {
<a name="l01164"></a>01164   QString res;
<a name="l01165"></a>01165   <span class="keywordflow">if</span> (serialNumber != 0) {
<a name="l01166"></a>01166     <span class="keywordtype">int</span> idx = -1;
<a name="l01167"></a>01167     <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a> *folder = 0;
<a name="l01168"></a>01168     KMMsgBase *msg = 0;
<a name="l01169"></a>01169     <a class="code" href="classKMMsgDict.html#c39553f1139eff6c27e06082c625d067" title="Access the globally unique MessageDict.">KMMsgDict::instance</a>()-&gt;<a class="code" href="classKMMsgDict.html#c5d3159ddfbc5935322acd5602fb06ef" title="Returns the folder the message represented by the serial number key is in and the...">getLocation</a>( serialNumber, &amp;folder, &amp;idx );
<a name="l01170"></a>01170     <span class="comment">// It's possible that the message has been deleted or moved into a</span>
<a name="l01171"></a>01171     <span class="comment">// different folder</span>
<a name="l01172"></a>01172     <span class="keywordflow">if</span> (folder &amp;&amp; (idx != -1)) {
<a name="l01173"></a>01173       <span class="comment">// everything is ok</span>
<a name="l01174"></a>01174       <a class="code" href="classKMFolderOpener.html" title="RAII for KMFolder::open() / close().">KMFolderOpener</a> openFolder(folder, <span class="stringliteral">"debugser"</span>);
<a name="l01175"></a>01175       msg = folder-&gt;<a class="code" href="classKMFolder.html#4f7a5e120a3cd63293367cde74378a8a" title="Provides access to the basic message fields that are also stored in the index.">getMsgBase</a>( idx );
<a name="l01176"></a>01176       <span class="keywordflow">if</span> (msg) {
<a name="l01177"></a>01177         res.append( QString( <span class="stringliteral">" subject %s,\n sender %s,\n date %s.\n"</span> )
<a name="l01178"></a>01178                              .arg( msg-&gt;subject() )
<a name="l01179"></a>01179                              .arg( msg-&gt;fromStrip() )
<a name="l01180"></a>01180                              .arg( msg-&gt;dateStr() ) );
<a name="l01181"></a>01181       } <span class="keywordflow">else</span> {
<a name="l01182"></a>01182         res.append( QString( <span class="stringliteral">"Invalid serial number."</span> ) );
<a name="l01183"></a>01183       }
<a name="l01184"></a>01184     } <span class="keywordflow">else</span> {
<a name="l01185"></a>01185       res.append( QString( <span class="stringliteral">"Invalid serial number."</span> ) );
<a name="l01186"></a>01186     }
<a name="l01187"></a>01187   }
<a name="l01188"></a>01188   <span class="keywordflow">return</span> res;
<a name="l01189"></a>01189 }
<a name="l01190"></a>01190 
<a name="l01191"></a>01191 
<a name="l01192"></a><a class="code" href="classKMKernel.html#1e8fe85c34c1eac7c7303d3053257b1d">01192</a> <span class="keywordtype">void</span> <a class="code" href="classKMKernel.html#1e8fe85c34c1eac7c7303d3053257b1d" title="Pauses all background jobs and does not allow new background jobs to be started.">KMKernel::pauseBackgroundJobs</a>()
<a name="l01193"></a>01193 {
<a name="l01194"></a>01194   mBackgroundTasksTimer-&gt;stop();
<a name="l01195"></a>01195   mJobScheduler-&gt;pause();
<a name="l01196"></a>01196 }
<a name="l01197"></a>01197 
<a name="l01198"></a><a class="code" href="classKMKernel.html#c8a7bd71a10d36df7615db486a8a2bb3">01198</a> <span class="keywordtype">void</span> <a class="code" href="classKMKernel.html#c8a7bd71a10d36df7615db486a8a2bb3" title="Resumes all background jobs and allows new jobs to be started.">KMKernel::resumeBackgroundJobs</a>()
<a name="l01199"></a>01199 {
<a name="l01200"></a>01200   mJobScheduler-&gt;resume();
<a name="l01201"></a>01201   mBackgroundTasksTimer-&gt;start( 4 * 60 * 60 * 1000, <span class="keyword">true</span> );
<a name="l01202"></a>01202 }
<a name="l01203"></a>01203 
<a name="l01204"></a><a class="code" href="classKMKernel.html#a5d03c325baa05cddacd63bd69c53094">01204</a> <span class="keywordtype">void</span> <a class="code" href="classKMKernel.html#a5d03c325baa05cddacd63bd69c53094" title="Stops all network related jobs and enter offline mode New network jobs cannot be...">KMKernel::stopNetworkJobs</a>()
<a name="l01205"></a>01205 {
<a name="l01206"></a>01206   <span class="keywordflow">if</span> ( GlobalSettings::self()-&gt;networkState() == GlobalSettings::EnumNetworkState::Offline )
<a name="l01207"></a>01207     <span class="keywordflow">return</span>;
<a name="l01208"></a>01208 
<a name="l01209"></a>01209   GlobalSettings::setNetworkState( GlobalSettings::EnumNetworkState::Offline );
<a name="l01210"></a>01210   BroadcastStatus::instance()-&gt;setStatusMsg( i18n(<span class="stringliteral">"KMail is set to be offline; all network jobs are suspended"</span>));
<a name="l01211"></a>01211   emit onlineStatusChanged( (GlobalSettings::EnumNetworkState::type)GlobalSettings::networkState() );
<a name="l01212"></a>01212 }
<a name="l01213"></a>01213 
<a name="l01214"></a><a class="code" href="classKMKernel.html#ea4fcc45959bb2c30d9325089df6da67">01214</a> <span class="keywordtype">void</span> <a class="code" href="classKMKernel.html#ea4fcc45959bb2c30d9325089df6da67" title="Resumes all network related jobs and enter online mode New network jobs can be started...">KMKernel::resumeNetworkJobs</a>()
<a name="l01215"></a>01215 {
<a name="l01216"></a>01216   <span class="keywordflow">if</span> ( GlobalSettings::self()-&gt;networkState() == GlobalSettings::EnumNetworkState::Online )
<a name="l01217"></a>01217     <span class="keywordflow">return</span>;
<a name="l01218"></a>01218 
<a name="l01219"></a>01219   GlobalSettings::setNetworkState( GlobalSettings::EnumNetworkState::Online );
<a name="l01220"></a>01220   BroadcastStatus::instance()-&gt;setStatusMsg( i18n(<span class="stringliteral">"KMail is set to be online; all network jobs resumed"</span>));
<a name="l01221"></a>01221   emit onlineStatusChanged( (GlobalSettings::EnumNetworkState::type)GlobalSettings::networkState() );
<a name="l01222"></a>01222 
<a name="l01223"></a>01223   <span class="keywordflow">if</span> ( kmkernel-&gt;msgSender()-&gt;sendImmediate() ) {
<a name="l01224"></a>01224     kmkernel-&gt;msgSender()-&gt;sendQueued();
<a name="l01225"></a>01225   }
<a name="l01226"></a>01226 }
<a name="l01227"></a>01227 
<a name="l01228"></a><a class="code" href="classKMKernel.html#dee1ceab872ab1812d3d7b483681d004">01228</a> <span class="keywordtype">bool</span> <a class="code" href="classKMKernel.html#dee1ceab872ab1812d3d7b483681d004" title="Checks if the current network state is online or offline.">KMKernel::isOffline</a>()
<a name="l01229"></a>01229 {
<a name="l01230"></a>01230   <span class="keywordflow">if</span> ( GlobalSettings::self()-&gt;networkState() == GlobalSettings::EnumNetworkState::Offline )
<a name="l01231"></a>01231     <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l01232"></a>01232   <span class="keywordflow">else</span>
<a name="l01233"></a>01233     <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l01234"></a>01234 }
<a name="l01235"></a>01235 
<a name="l01236"></a><a class="code" href="classKMKernel.html#73e404890fc270ff774cb92cff405b91">01236</a> <span class="keywordtype">bool</span> <a class="code" href="classKMKernel.html#73e404890fc270ff774cb92cff405b91" title="A static helper function that asks the user if they want to go online.">KMKernel::askToGoOnline</a>()
<a name="l01237"></a>01237 {
<a name="l01238"></a>01238   <span class="keywordflow">if</span> ( kmkernel-&gt;isOffline() ) {
<a name="l01239"></a>01239     <span class="keywordtype">int</span> rc =
<a name="l01240"></a>01240     KMessageBox::questionYesNo( <a class="code" href="classKMKernel.html#90d242e3eb45157375ca56d99f1ca8ff" title="normal control stuff">KMKernel::self</a>()-&gt;<a class="code" href="classKMKernel.html#96596ce95b1ab6f14a299ed38c370441" title="returns a reference to the first Mainwin or a temporary Mainwin">mainWin</a>(),
<a name="l01241"></a>01241                                 i18n(<span class="stringliteral">"KMail is currently in offline mode. "</span>
<a name="l01242"></a>01242                                      <span class="stringliteral">"How do you want to proceed?"</span>),
<a name="l01243"></a>01243                                 i18n(<span class="stringliteral">"Online/Offline"</span>),
<a name="l01244"></a>01244                                 i18n(<span class="stringliteral">"Work Online"</span>),
<a name="l01245"></a>01245                                 i18n(<span class="stringliteral">"Work Offline"</span>));
<a name="l01246"></a>01246 
<a name="l01247"></a>01247     <span class="keywordflow">if</span>( rc == KMessageBox::No ) {
<a name="l01248"></a>01248       <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l01249"></a>01249     } <span class="keywordflow">else</span> {
<a name="l01250"></a>01250       kmkernel-&gt;resumeNetworkJobs();
<a name="l01251"></a>01251     }
<a name="l01252"></a>01252   }
<a name="l01253"></a>01253   <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l01254"></a>01254 }
<a name="l01255"></a>01255 
<a name="l01256"></a>01256 <span class="comment">/********************************************************************/</span>
<a name="l01257"></a>01257 <span class="comment">/*                        Kernel methods                            */</span>
<a name="l01258"></a>01258 <span class="comment">/********************************************************************/</span>
<a name="l01259"></a>01259 
<a name="l01260"></a>01260 <span class="keywordtype">void</span> KMKernel::quit()
<a name="l01261"></a>01261 {
<a name="l01262"></a>01262   <span class="comment">// Called when all windows are closed. Will take care of compacting,</span>
<a name="l01263"></a>01263   <span class="comment">// sending... should handle session management too!!</span>
<a name="l01264"></a>01264 }
<a name="l01265"></a>01265   <span class="comment">/* TODO later:</span>
<a name="l01266"></a>01266 <span class="comment">   Asuming that:</span>
<a name="l01267"></a>01267 <span class="comment">     - msgsender is nonblocking</span>
<a name="l01268"></a>01268 <span class="comment">       (our own, QSocketNotifier based. Pops up errors and sends signal</span>
<a name="l01269"></a>01269 <span class="comment">        senderFinished when done)</span>
<a name="l01270"></a>01270 <span class="comment"></span>
<a name="l01271"></a>01271 <span class="comment">   o If we are getting mail, stop it (but dont lose something!)</span>
<a name="l01272"></a>01272 <span class="comment">         [Done already, see mailCheckAborted]</span>
<a name="l01273"></a>01273 <span class="comment">   o If we are sending mail, go on UNLESS this was called by SM,</span>
<a name="l01274"></a>01274 <span class="comment">       in which case stop ASAP that too (can we warn? should we continue</span>
<a name="l01275"></a>01275 <span class="comment">       on next start?)</span>
<a name="l01276"></a>01276 <span class="comment">   o If we are compacting, or expunging, go on UNLESS this was SM call.</span>
<a name="l01277"></a>01277 <span class="comment">       In that case stop compacting ASAP and continue on next start, before</span>
<a name="l01278"></a>01278 <span class="comment">       touching any folders. [Not needed anymore with CompactionJob]</span>
<a name="l01279"></a>01279 <span class="comment"></span>
<a name="l01280"></a>01280 <span class="comment">   KMKernel::quit ()</span>
<a name="l01281"></a>01281 <span class="comment">   {</span>
<a name="l01282"></a>01282 <span class="comment">     SM call?</span>
<a name="l01283"></a>01283 <span class="comment">       if compacting, stop;</span>
<a name="l01284"></a>01284 <span class="comment">       if sending, stop;</span>
<a name="l01285"></a>01285 <span class="comment">       if receiving, stop;</span>
<a name="l01286"></a>01286 <span class="comment">       Windows will take care of themselves (composer should dump</span>
<a name="l01287"></a>01287 <span class="comment">        its messages, if any but not in deadMail)</span>
<a name="l01288"></a>01288 <span class="comment">       declare us ready for the End of the Session</span>
<a name="l01289"></a>01289 <span class="comment"></span>
<a name="l01290"></a>01290 <span class="comment">     No, normal quit call</span>
<a name="l01291"></a>01291 <span class="comment">       All windows are off. Anything to do, should compact or sender sends?</span>
<a name="l01292"></a>01292 <span class="comment">         Yes, maybe put an icon in panel as a sign of life</span>
<a name="l01293"></a>01293 <span class="comment">         if sender sending, connect us to his finished slot, declare us ready</span>
<a name="l01294"></a>01294 <span class="comment">                            for quit and wait for senderFinished</span>
<a name="l01295"></a>01295 <span class="comment">         if not, Folder manager, go compact sent-mail and outbox</span>
<a name="l01296"></a>01296 <span class="comment">}                (= call slotFinished())</span>
<a name="l01297"></a>01297 <span class="comment"></span>
<a name="l01298"></a>01298 <span class="comment">void KMKernel::slotSenderFinished()</span>
<a name="l01299"></a>01299 <span class="comment">{</span>
<a name="l01300"></a>01300 <span class="comment">  good, Folder manager go compact sent-mail and outbox</span>
<a name="l01301"></a>01301 <span class="comment">  clean up stage1 (release folders and config, unregister from dcop)</span>
<a name="l01302"></a>01302 <span class="comment">    -- another kmail may start now ---</span>
<a name="l01303"></a>01303 <span class="comment">  kapp-&gt;quit();</span>
<a name="l01304"></a>01304 <span class="comment">}</span>
<a name="l01305"></a>01305 <span class="comment">*/</span>
<a name="l01306"></a>01306 
<a name="l01307"></a>01307 
<a name="l01308"></a>01308 <span class="comment">/********************************************************************/</span>
<a name="l01309"></a>01309 <span class="comment">/*            Init, Exit, and handler  methods                      */</span>
<a name="l01310"></a>01310 <span class="comment">/********************************************************************/</span>
<a name="l01311"></a>01311 <span class="keywordtype">void</span> KMKernel::testDir(<span class="keyword">const</span> <span class="keywordtype">char</span> *_name)
<a name="l01312"></a>01312 {
<a name="l01313"></a>01313   QString foldersPath = QDir::homeDirPath() + QString( _name );
<a name="l01314"></a>01314   QFileInfo info( foldersPath );
<a name="l01315"></a>01315   <span class="keywordflow">if</span> ( !info.exists() ) {
<a name="l01316"></a>01316     <span class="keywordflow">if</span> ( ::mkdir( QFile::encodeName( foldersPath ) , S_IRWXU ) == -1 ) {
<a name="l01317"></a>01317       KMessageBox::sorry(0, i18n(<span class="stringliteral">"KMail could not create folder '%1';\n"</span>
<a name="l01318"></a>01318                                  <span class="stringliteral">"please make sure that you can view and "</span>
<a name="l01319"></a>01319                                  <span class="stringliteral">"modify the content of the folder '%2'."</span>)
<a name="l01320"></a>01320                             .arg( foldersPath ).arg( QDir::homeDirPath() ) );
<a name="l01321"></a>01321       ::exit(-1);
<a name="l01322"></a>01322     }
<a name="l01323"></a>01323   }
<a name="l01324"></a>01324   <span class="keywordflow">if</span> ( !info.isDir() || !info.isReadable() || !info.isWritable() ) {
<a name="l01325"></a>01325     KMessageBox::sorry(0, i18n(<span class="stringliteral">"The permissions of the folder '%1' are "</span>
<a name="l01326"></a>01326                                <span class="stringliteral">"incorrect;\n"</span>
<a name="l01327"></a>01327                                <span class="stringliteral">"please make sure that you can view and modify "</span>
<a name="l01328"></a>01328                                <span class="stringliteral">"the content of this folder."</span>)
<a name="l01329"></a>01329                           .arg( foldersPath ) );
<a name="l01330"></a>01330     ::exit(-1);
<a name="l01331"></a>01331   }
<a name="l01332"></a>01332 }
<a name="l01333"></a>01333 
<a name="l01334"></a>01334 
<a name="l01335"></a>01335 <span class="comment">//-----------------------------------------------------------------------------</span>
<a name="l01336"></a>01336 <span class="comment">// Open a composer for each message found in the dead.letter folder</span>
<a name="l01337"></a>01337 <span class="keywordtype">void</span> KMKernel::recoverDeadLetters()
<a name="l01338"></a>01338 {
<a name="l01339"></a>01339   <span class="keyword">const</span> QString pathName = <a class="code" href="classKMKernel.html#4b90101cd292c2cfc5b4ae57bf40b1e4" title="Returns the full path of the user&amp;#39;s local data directory for KMail.">localDataPath</a>();
<a name="l01340"></a>01340   QDir dir( pathName );
<a name="l01341"></a>01341   <span class="keywordflow">if</span> ( !dir.exists( <span class="stringliteral">"autosave"</span> ) )
<a name="l01342"></a>01342     <span class="keywordflow">return</span>;
<a name="l01343"></a>01343 
<a name="l01344"></a>01344   <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a> folder( 0, pathName + <span class="stringliteral">"autosave"</span>, KMFolderTypeMaildir, <span class="keyword">false</span> <span class="comment">/* no index */</span> );
<a name="l01345"></a>01345   <a class="code" href="classKMFolderOpener.html" title="RAII for KMFolder::open() / close().">KMFolderOpener</a> openFolder( &amp;folder, <span class="stringliteral">"recover"</span> );
<a name="l01346"></a>01346   <span class="keywordflow">if</span> ( !folder.<a class="code" href="classKMFolder.html#3c27cff932e410e8456989ed09c86c06" title="Test if folder is opened.">isOpened</a>() ) {
<a name="l01347"></a>01347     perror( <span class="stringliteral">"cannot open autosave folder"</span> );
<a name="l01348"></a>01348     <span class="keywordflow">return</span>;
<a name="l01349"></a>01349   }
<a name="l01350"></a>01350 
<a name="l01351"></a>01351   <span class="keyword">const</span> <span class="keywordtype">int</span> num = folder.<a class="code" href="classKMFolder.html#c482e9431d9cd9ec0dc99b57e39e0942" title="Number of messages in this folder.">count</a>();
<a name="l01352"></a>01352   <span class="keywordflow">for</span> ( <span class="keywordtype">int</span> i = 0; i &lt; num; i++ ) {
<a name="l01353"></a>01353     <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a> *msg = folder.<a class="code" href="classKMFolder.html#84bce28aea6c2d1638427bb81cded547" title="Detach message from this folder.">take</a>( 0 );
<a name="l01354"></a>01354     <span class="keywordflow">if</span> ( msg ) {
<a name="l01355"></a>01355       KMail::Composer * win = KMail::makeComposer();
<a name="l01356"></a>01356       win-&gt;setMsg( msg, <span class="keyword">false</span>, <span class="keyword">false</span>, <span class="keyword">true</span> );
<a name="l01357"></a>01357       win-&gt;setAutoSaveFilename( msg-&gt;<a class="code" href="classKMMessage.html#78b22cd6d22bfee54cf5b96826267c5c" title="Get/set filename in mail folder.">fileName</a>() );
<a name="l01358"></a>01358       win-&gt;show();
<a name="l01359"></a>01359     }
<a name="l01360"></a>01360   }
<a name="l01361"></a>01361 }
<a name="l01362"></a>01362 
<a name="l01363"></a>01363 <span class="comment">//-----------------------------------------------------------------------------</span>
<a name="l01364"></a>01364 <span class="keywordtype">void</span> KMKernel::initFolders(KConfig* cfg)
<a name="l01365"></a>01365 {
<a name="l01366"></a>01366   QString name;
<a name="l01367"></a>01367 
<a name="l01368"></a>01368   name = cfg-&gt;readEntry(<span class="stringliteral">"inboxFolder"</span>);
<a name="l01369"></a>01369 
<a name="l01370"></a>01370   <span class="comment">// Currently the folder manager cannot manage folders which are not</span>
<a name="l01371"></a>01371   <span class="comment">// in the base folder directory.</span>
<a name="l01372"></a>01372   <span class="comment">//if (name.isEmpty()) name = getenv("MAIL");</span>
<a name="l01373"></a>01373 
<a name="l01374"></a>01374   <span class="keywordflow">if</span> (name.isEmpty()) name = I18N_NOOP(<span class="stringliteral">"inbox"</span>);
<a name="l01375"></a>01375 
<a name="l01376"></a>01376   the_inboxFolder  = (<a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>*)the_folderMgr-&gt;findOrCreate(name);
<a name="l01377"></a>01377 
<a name="l01378"></a>01378   <span class="keywordflow">if</span> (the_inboxFolder-&gt;<a class="code" href="classKMFolder.html#5d346b829aee4176f16077e2a72fd5f3" title="Check folder for permissions Returns zero if readable and writable.">canAccess</a>() != 0) {
<a name="l01379"></a>01379     emergencyExit( i18n(<span class="stringliteral">"You do not have read/write permission to your inbox folder."</span>) );
<a name="l01380"></a>01380   }
<a name="l01381"></a>01381 
<a name="l01382"></a>01382   the_inboxFolder-&gt;<a class="code" href="classKMFolder.html#39dc68ff3092dc5ace99dc67da7074e3">setSystemFolder</a>(<span class="keyword">true</span>);
<a name="l01383"></a>01383   <span class="keywordflow">if</span> ( the_inboxFolder-&gt;<a class="code" href="classKMFolder.html#fd000a4fd5d6f371da2cec1bccb49f7a" title="Get / set the user-settings for the WhoField (From/To/Empty).">userWhoField</a>().isEmpty() )
<a name="l01384"></a>01384     the_inboxFolder-&gt;<a class="code" href="classKMFolder.html#2a271d0560bbf7937f0831366a4545ad">setUserWhoField</a>( QString::null );
<a name="l01385"></a>01385   <span class="comment">// inboxFolder-&gt;open();</span>
<a name="l01386"></a>01386 
<a name="l01387"></a>01387   the_outboxFolder = the_folderMgr-&gt;findOrCreate(cfg-&gt;readEntry(<span class="stringliteral">"outboxFolder"</span>, I18N_NOOP(<span class="stringliteral">"outbox"</span>)));
<a name="l01388"></a>01388   <span class="keywordflow">if</span> (the_outboxFolder-&gt;<a class="code" href="classKMFolder.html#5d346b829aee4176f16077e2a72fd5f3" title="Check folder for permissions Returns zero if readable and writable.">canAccess</a>() != 0) {
<a name="l01389"></a>01389     emergencyExit( i18n(<span class="stringliteral">"You do not have read/write permission to your outbox folder."</span>) );
<a name="l01390"></a>01390   }
<a name="l01391"></a>01391   the_outboxFolder-&gt;<a class="code" href="classKMFolder.html#067242d146c2de146e337c96dfcd8c86" title="Specify, that the folder can&amp;#39;t have children.">setNoChildren</a>(<span class="keyword">true</span>);
<a name="l01392"></a>01392 
<a name="l01393"></a>01393   the_outboxFolder-&gt;<a class="code" href="classKMFolder.html#39dc68ff3092dc5ace99dc67da7074e3">setSystemFolder</a>(<span class="keyword">true</span>);
<a name="l01394"></a>01394   <span class="keywordflow">if</span> ( the_outboxFolder-&gt;<a class="code" href="classKMFolder.html#fd000a4fd5d6f371da2cec1bccb49f7a" title="Get / set the user-settings for the WhoField (From/To/Empty).">userWhoField</a>().isEmpty() )
<a name="l01395"></a>01395     the_outboxFolder-&gt;<a class="code" href="classKMFolder.html#2a271d0560bbf7937f0831366a4545ad">setUserWhoField</a>( QString::null );
<a name="l01396"></a>01396   <span class="comment">/* Nuke the oubox's index file, to make sure that no ghost messages are in</span>
<a name="l01397"></a>01397 <span class="comment">   * it from a previous crash. Ghost messages happen in the outbox because it</span>
<a name="l01398"></a>01398 <span class="comment">   * the only folder where messages enter and leave within 5 seconds, which is</span>
<a name="l01399"></a>01399 <span class="comment">   * the leniency period for index invalidation. Since the number of mails in</span>
<a name="l01400"></a>01400 <span class="comment">   * this folder is expected to be very small, we can live with regenerating</span>
<a name="l01401"></a>01401 <span class="comment">   * the index on each start to be on the save side. */</span>
<a name="l01402"></a>01402   <span class="comment">//if ( the_outboxFolder-&gt;folderType() == KMFolderTypeMaildir )</span>
<a name="l01403"></a>01403   <span class="comment">//  unlink( QFile::encodeName( the_outboxFolder-&gt;indexLocation() ) );</span>
<a name="l01404"></a>01404   the_outboxFolder-&gt;<a class="code" href="classKMFolder.html#c12a4bb5f265447d87b3e0e9a9482cc6" title="Open folder for access.">open</a>(<span class="stringliteral">"kmkernel"</span>);
<a name="l01405"></a>01405 
<a name="l01406"></a>01406   the_sentFolder = the_folderMgr-&gt;findOrCreate(cfg-&gt;readEntry(<span class="stringliteral">"sentFolder"</span>, I18N_NOOP(<span class="stringliteral">"sent-mail"</span>)));
<a name="l01407"></a>01407   <span class="keywordflow">if</span> (the_sentFolder-&gt;<a class="code" href="classKMFolder.html#5d346b829aee4176f16077e2a72fd5f3" title="Check folder for permissions Returns zero if readable and writable.">canAccess</a>() != 0) {
<a name="l01408"></a>01408     emergencyExit( i18n(<span class="stringliteral">"You do not have read/write permission to your sent-mail folder."</span>) );
<a name="l01409"></a>01409   }
<a name="l01410"></a>01410   the_sentFolder-&gt;<a class="code" href="classKMFolder.html#39dc68ff3092dc5ace99dc67da7074e3">setSystemFolder</a>(<span class="keyword">true</span>);
<a name="l01411"></a>01411   <span class="keywordflow">if</span> ( the_sentFolder-&gt;<a class="code" href="classKMFolder.html#fd000a4fd5d6f371da2cec1bccb49f7a" title="Get / set the user-settings for the WhoField (From/To/Empty).">userWhoField</a>().isEmpty() )
<a name="l01412"></a>01412     the_sentFolder-&gt;<a class="code" href="classKMFolder.html#2a271d0560bbf7937f0831366a4545ad">setUserWhoField</a>( QString::null );
<a name="l01413"></a>01413   <span class="comment">// the_sentFolder-&gt;open();</span>
<a name="l01414"></a>01414 
<a name="l01415"></a>01415   the_trashFolder  = the_folderMgr-&gt;findOrCreate(cfg-&gt;readEntry(<span class="stringliteral">"trashFolder"</span>, I18N_NOOP(<span class="stringliteral">"trash"</span>)));
<a name="l01416"></a>01416   <span class="keywordflow">if</span> (the_trashFolder-&gt;<a class="code" href="classKMFolder.html#5d346b829aee4176f16077e2a72fd5f3" title="Check folder for permissions Returns zero if readable and writable.">canAccess</a>() != 0) {
<a name="l01417"></a>01417     emergencyExit( i18n(<span class="stringliteral">"You do not have read/write permission to your trash folder."</span>) );
<a name="l01418"></a>01418   }
<a name="l01419"></a>01419   the_trashFolder-&gt;<a class="code" href="classKMFolder.html#39dc68ff3092dc5ace99dc67da7074e3">setSystemFolder</a>( <span class="keyword">true</span> );
<a name="l01420"></a>01420   <span class="keywordflow">if</span> ( the_trashFolder-&gt;<a class="code" href="classKMFolder.html#fd000a4fd5d6f371da2cec1bccb49f7a" title="Get / set the user-settings for the WhoField (From/To/Empty).">userWhoField</a>().isEmpty() )
<a name="l01421"></a>01421     the_trashFolder-&gt;<a class="code" href="classKMFolder.html#2a271d0560bbf7937f0831366a4545ad">setUserWhoField</a>( QString::null );
<a name="l01422"></a>01422   <span class="comment">// the_trashFolder-&gt;open();</span>
<a name="l01423"></a>01423 
<a name="l01424"></a>01424   the_draftsFolder = the_folderMgr-&gt;findOrCreate(cfg-&gt;readEntry(<span class="stringliteral">"draftsFolder"</span>, I18N_NOOP(<span class="stringliteral">"drafts"</span>)));
<a name="l01425"></a>01425   <span class="keywordflow">if</span> (the_draftsFolder-&gt;<a class="code" href="classKMFolder.html#5d346b829aee4176f16077e2a72fd5f3" title="Check folder for permissions Returns zero if readable and writable.">canAccess</a>() != 0) {
<a name="l01426"></a>01426     emergencyExit( i18n(<span class="stringliteral">"You do not have read/write permission to your drafts folder."</span>) );
<a name="l01427"></a>01427   }
<a name="l01428"></a>01428   the_draftsFolder-&gt;<a class="code" href="classKMFolder.html#39dc68ff3092dc5ace99dc67da7074e3">setSystemFolder</a>( <span class="keyword">true</span> );
<a name="l01429"></a>01429   <span class="keywordflow">if</span> ( the_draftsFolder-&gt;<a class="code" href="classKMFolder.html#fd000a4fd5d6f371da2cec1bccb49f7a" title="Get / set the user-settings for the WhoField (From/To/Empty).">userWhoField</a>().isEmpty() )
<a name="l01430"></a>01430     the_draftsFolder-&gt;<a class="code" href="classKMFolder.html#2a271d0560bbf7937f0831366a4545ad">setUserWhoField</a>( QString::null );
<a name="l01431"></a>01431   the_draftsFolder-&gt;<a class="code" href="classKMFolder.html#c12a4bb5f265447d87b3e0e9a9482cc6" title="Open folder for access.">open</a>(<span class="stringliteral">"kmkernel"</span>);
<a name="l01432"></a>01432 
<a name="l01433"></a>01433   the_templatesFolder =
<a name="l01434"></a>01434     the_folderMgr-&gt;findOrCreate( cfg-&gt;readEntry( <span class="stringliteral">"templatesFolder"</span>,
<a name="l01435"></a>01435                                                  I18N_NOOP(<span class="stringliteral">"templates"</span>) ) );
<a name="l01436"></a>01436   <span class="keywordflow">if</span> ( the_templatesFolder-&gt;<a class="code" href="classKMFolder.html#5d346b829aee4176f16077e2a72fd5f3" title="Check folder for permissions Returns zero if readable and writable.">canAccess</a>() != 0 ) {
<a name="l01437"></a>01437     emergencyExit( i18n(<span class="stringliteral">"You do not have read/write permission to your templates folder."</span>) );
<a name="l01438"></a>01438   }
<a name="l01439"></a>01439   the_templatesFolder-&gt;<a class="code" href="classKMFolder.html#39dc68ff3092dc5ace99dc67da7074e3">setSystemFolder</a>( <span class="keyword">true</span> );
<a name="l01440"></a>01440   <span class="keywordflow">if</span> ( the_templatesFolder-&gt;<a class="code" href="classKMFolder.html#fd000a4fd5d6f371da2cec1bccb49f7a" title="Get / set the user-settings for the WhoField (From/To/Empty).">userWhoField</a>().isEmpty() )
<a name="l01441"></a>01441     the_templatesFolder-&gt;<a class="code" href="classKMFolder.html#2a271d0560bbf7937f0831366a4545ad">setUserWhoField</a>( QString::null );
<a name="l01442"></a>01442   the_templatesFolder-&gt;<a class="code" href="classKMFolder.html#c12a4bb5f265447d87b3e0e9a9482cc6" title="Open folder for access.">open</a>(<span class="stringliteral">"kmkernel"</span>);
<a name="l01443"></a>01443 }
<a name="l01444"></a>01444 
<a name="l01445"></a>01445 
<a name="l01446"></a>01446 <span class="keywordtype">void</span> KMKernel::init()
<a name="l01447"></a>01447 {
<a name="l01448"></a>01448   the_shuttingDown = <span class="keyword">false</span>;
<a name="l01449"></a>01449   the_server_is_ready = <span class="keyword">false</span>;
<a name="l01450"></a>01450 
<a name="l01451"></a>01451   KConfig* cfg = KMKernel::config();
<a name="l01452"></a>01452 
<a name="l01453"></a>01453   QDir dir;
<a name="l01454"></a>01454 
<a name="l01455"></a>01455   KConfigGroupSaver saver(cfg, <span class="stringliteral">"General"</span>);
<a name="l01456"></a>01456   the_firstStart = cfg-&gt;readBoolEntry(<span class="stringliteral">"first-start"</span>, <span class="keyword">true</span>);
<a name="l01457"></a>01457   cfg-&gt;writeEntry(<span class="stringliteral">"first-start"</span>, <span class="keyword">false</span>);
<a name="l01458"></a>01458   the_previousVersion = cfg-&gt;readEntry(<span class="stringliteral">"previous-version"</span>);
<a name="l01459"></a>01459   cfg-&gt;writeEntry(<span class="stringliteral">"previous-version"</span>, KMAIL_VERSION);
<a name="l01460"></a>01460   QString foldersPath = cfg-&gt;readPathEntry( <span class="stringliteral">"folders"</span> );
<a name="l01461"></a>01461   kdDebug(5006) &lt;&lt; k_funcinfo &lt;&lt; <span class="stringliteral">"foldersPath (from config): '"</span> &lt;&lt; foldersPath &lt;&lt; <span class="stringliteral">"'"</span> &lt;&lt; endl;
<a name="l01462"></a>01462   <span class="keywordtype">bool</span> migrateMail = <span class="keyword">true</span>;
<a name="l01463"></a>01463 
<a name="l01464"></a>01464   <span class="keywordflow">if</span> ( foldersPath.isEmpty() ) {
<a name="l01465"></a>01465     foldersPath = <a class="code" href="classKMKernel.html#4b90101cd292c2cfc5b4ae57bf40b1e4" title="Returns the full path of the user&amp;#39;s local data directory for KMail.">localDataPath</a>() + <span class="stringliteral">"mail"</span>;
<a name="l01466"></a>01466     <span class="keywordflow">if</span> ( <a class="code" href="classKMKernel.html#b462ede91a7f71fcb67012a054f6ca2b" title="Returns true if the transfer was successful, otherwise false.">transferMail</a>( foldersPath ) ) {
<a name="l01467"></a>01467       cfg-&gt;writePathEntry( <span class="stringliteral">"folders"</span>, foldersPath );
<a name="l01468"></a>01468     }
<a name="l01469"></a>01469     kdDebug(5006) &lt;&lt; k_funcinfo &lt;&lt; <span class="stringliteral">"foldersPath (after transferMail): '"</span> &lt;&lt; foldersPath &lt;&lt; <span class="stringliteral">"'"</span> &lt;&lt; endl;
<a name="l01470"></a>01470   }
<a name="l01471"></a>01471 
<a name="l01472"></a>01472   <span class="comment">// moved up here because KMMessage::stripOffPrefixes is used below</span>
<a name="l01473"></a>01473   <a class="code" href="classKMMessage.html#4a6963f180c82bf446483d9ad5247e56" title="Reads config settings from group &amp;quot;KMMessage&amp;quot; and sets all internal variables...">KMMessage::readConfig</a>();
<a name="l01474"></a>01474 
<a name="l01475"></a>01475   the_undoStack     = <span class="keyword">new</span> UndoStack(20);
<a name="l01476"></a>01476   the_folderMgr     = <span class="keyword">new</span> KMFolderMgr(foldersPath);
<a name="l01477"></a>01477   the_imapFolderMgr = <span class="keyword">new</span> KMFolderMgr( KMFolderImap::cacheLocation(), KMImapDir);
<a name="l01478"></a>01478   the_dimapFolderMgr = <span class="keyword">new</span> KMFolderMgr( KMFolderCachedImap::cacheLocation(), KMDImapDir);
<a name="l01479"></a>01479 
<a name="l01480"></a>01480   the_searchFolderMgr = <span class="keyword">new</span> KMFolderMgr(locateLocal(<span class="stringliteral">"data"</span>,<span class="stringliteral">"kmail/search"</span>), KMSearchDir);
<a name="l01481"></a>01481   <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a> *lsf = the_searchFolderMgr-&gt;find( i18n(<span class="stringliteral">"Last Search"</span>) );
<a name="l01482"></a>01482   <span class="keywordflow">if</span> (lsf)
<a name="l01483"></a>01483     the_searchFolderMgr-&gt;remove( lsf );
<a name="l01484"></a>01484 
<a name="l01485"></a>01485   the_acctMgr       = <span class="keyword">new</span> <a class="code" href="classKMail_1_1AccountManager.html" title="The account manager is responsible for creating accounts of various types via the...">AccountManager</a>();
<a name="l01486"></a>01486   the_filterMgr     = <span class="keyword">new</span> KMFilterMgr();
<a name="l01487"></a>01487   the_popFilterMgr     = <span class="keyword">new</span> KMFilterMgr(<span class="keyword">true</span>);
<a name="l01488"></a>01488   the_filterActionDict = <span class="keyword">new</span> <a class="code" href="classKMFilterActionDict.html" title="Dictionary that contains a list of all registered filter actions with their creation...">KMFilterActionDict</a>;
<a name="l01489"></a>01489 
<a name="l01490"></a>01490   initFolders(cfg);
<a name="l01491"></a>01491   the_acctMgr-&gt;<a class="code" href="classKMail_1_1AccountManager.html#2b633adf8343c7ae75dcb98b2fe8a125" title="Completely reload accounts from config.">readConfig</a>();
<a name="l01492"></a>01492   the_filterMgr-&gt;readConfig();
<a name="l01493"></a>01493   the_popFilterMgr-&gt;readConfig();
<a name="l01494"></a>01494   cleanupImapFolders();
<a name="l01495"></a>01495 
<a name="l01496"></a>01496   the_msgSender = <span class="keyword">new</span> KMSender;
<a name="l01497"></a>01497   the_server_is_ready = <span class="keyword">true</span>;
<a name="l01498"></a>01498   <a class="code" href="classKMKernel.html#2fbabe6f58f0f95eeb8f7ed48e25a8eb" title="Get a reference to KMail&amp;#39;s KIMProxy instance.">imProxy</a>()-&gt;initialize();
<a name="l01499"></a>01499   { <span class="comment">// area for config group "Composer"</span>
<a name="l01500"></a>01500     KConfigGroupSaver saver(cfg, <span class="stringliteral">"Composer"</span>);
<a name="l01501"></a>01501     <span class="keywordflow">if</span> (cfg-&gt;readListEntry(<span class="stringliteral">"pref-charsets"</span>).isEmpty())
<a name="l01502"></a>01502     {
<a name="l01503"></a>01503       cfg-&gt;writeEntry(<span class="stringliteral">"pref-charsets"</span>, <span class="stringliteral">"us-ascii,iso-8859-1,locale,utf-8"</span>);
<a name="l01504"></a>01504     }
<a name="l01505"></a>01505   }
<a name="l01506"></a>01506   readConfig();
<a name="l01507"></a>01507   mICalIface-&gt;<a class="code" href="classKMailICalIfaceImpl.html#eaeb7d19b932b9b4a7d63c82d31feb01">readConfig</a>();
<a name="l01508"></a>01508   <span class="comment">// filterMgr-&gt;dump();</span>
<a name="l01509"></a>01509 <span class="preprocessor">#ifdef HAVE_INDEXLIB</span>
<a name="l01510"></a>01510 <span class="preprocessor"></span>  the_msgIndex = <span class="keyword">new</span> KMMsgIndex(<span class="keyword">this</span>); <span class="comment">//create the indexer</span>
<a name="l01511"></a>01511 <span class="preprocessor">#else</span>
<a name="l01512"></a>01512 <span class="preprocessor"></span>  the_msgIndex = 0;
<a name="l01513"></a>01513 <span class="preprocessor">#endif</span>
<a name="l01514"></a>01514 <span class="preprocessor"></span>
<a name="l01515"></a>01515 <span class="comment">//#if 0</span>
<a name="l01516"></a>01516   the_weaver =  <span class="keyword">new</span> KPIM::ThreadWeaver::Weaver( <span class="keyword">this</span> );
<a name="l01517"></a>01517   the_weaverLogger = <span class="keyword">new</span> KPIM::ThreadWeaver::WeaverThreadLogger(<span class="keyword">this</span>);
<a name="l01518"></a>01518   the_weaverLogger-&gt;attach (the_weaver);
<a name="l01519"></a>01519 <span class="comment">//#endif</span>
<a name="l01520"></a>01520 
<a name="l01521"></a>01521   connect( the_folderMgr, SIGNAL( folderRemoved(<a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>*) ),
<a name="l01522"></a>01522            <span class="keyword">this</span>, SIGNAL( folderRemoved(<a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>*) ) );
<a name="l01523"></a>01523   connect( the_dimapFolderMgr, SIGNAL( folderRemoved(<a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>*) ),
<a name="l01524"></a>01524            <span class="keyword">this</span>, SIGNAL( folderRemoved(<a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>*) ) );
<a name="l01525"></a>01525   connect( the_imapFolderMgr, SIGNAL( folderRemoved(<a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>*) ),
<a name="l01526"></a>01526            <span class="keyword">this</span>, SIGNAL( folderRemoved(<a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>*) ) );
<a name="l01527"></a>01527   connect( the_searchFolderMgr, SIGNAL( folderRemoved(<a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>*) ),
<a name="l01528"></a>01528            <span class="keyword">this</span>, SIGNAL( folderRemoved(<a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>*) ) );
<a name="l01529"></a>01529 
<a name="l01530"></a>01530   mBackgroundTasksTimer = <span class="keyword">new</span> QTimer( <span class="keyword">this</span>, <span class="stringliteral">"mBackgroundTasksTimer"</span> );
<a name="l01531"></a>01531   connect( mBackgroundTasksTimer, SIGNAL( timeout() ), <span class="keyword">this</span>, SLOT( slotRunBackgroundTasks() ) );
<a name="l01532"></a>01532 <span class="preprocessor">#ifdef DEBUG_SCHEDULER // for debugging, see jobscheduler.h</span>
<a name="l01533"></a>01533 <span class="preprocessor"></span>  mBackgroundTasksTimer-&gt;start( 10000, <span class="keyword">true</span> ); <span class="comment">// 10s minute, singleshot</span>
<a name="l01534"></a>01534 <span class="preprocessor">#else</span>
<a name="l01535"></a>01535 <span class="preprocessor"></span>  mBackgroundTasksTimer-&gt;start( 5 * 60000, <span class="keyword">true</span> ); <span class="comment">// 5 minutes, singleshot</span>
<a name="l01536"></a>01536 <span class="preprocessor">#endif</span>
<a name="l01537"></a>01537 <span class="preprocessor"></span>}
<a name="l01538"></a>01538 
<a name="l01539"></a>01539 <span class="keywordtype">void</span> KMKernel::readConfig()
<a name="l01540"></a>01540 {
<a name="l01541"></a>01541   <span class="comment">//Needed here, since this function is also called when the configuration</span>
<a name="l01542"></a>01542   <span class="comment">//changes, and the static variables should be updated then - IOF</span>
<a name="l01543"></a>01543   <a class="code" href="classKMMessage.html#4a6963f180c82bf446483d9ad5247e56" title="Reads config settings from group &amp;quot;KMMessage&amp;quot; and sets all internal variables...">KMMessage::readConfig</a>();
<a name="l01544"></a>01544 }
<a name="l01545"></a>01545 
<a name="l01546"></a>01546 <span class="keywordtype">void</span> KMKernel::cleanupImapFolders()
<a name="l01547"></a>01547 {
<a name="l01548"></a>01548   KMAccount *acct = 0;
<a name="l01549"></a>01549   KMFolderNode *node = the_imapFolderMgr-&gt;dir().first();
<a name="l01550"></a>01550   <span class="keywordflow">while</span> (node)
<a name="l01551"></a>01551   {
<a name="l01552"></a>01552     <span class="keywordflow">if</span> (node-&gt;isDir() || ((acct = the_acctMgr-&gt;<a class="code" href="classKMail_1_1AccountManager.html#d01e5852c28fbd4db520979d09368464" title="Find account by id.">find</a>(node-&gt;id()))
<a name="l01553"></a>01553               &amp;&amp; ( acct-&gt;type() == <span class="stringliteral">"imap"</span> )) )
<a name="l01554"></a>01554     {
<a name="l01555"></a>01555       node = the_imapFolderMgr-&gt;dir().next();
<a name="l01556"></a>01556     } <span class="keywordflow">else</span> {
<a name="l01557"></a>01557       <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* folder = <span class="keyword">static_cast&lt;</span><a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>*<span class="keyword">&gt;</span>(node);
<a name="l01558"></a>01558       <span class="comment">// delete only local</span>
<a name="l01559"></a>01559       <span class="keyword">static_cast&lt;</span>KMFolderImap*<span class="keyword">&gt;</span>( folder-&gt;<a class="code" href="classKMFolder.html#4c7476219c137471fb93cb8c88061336">storage</a>() )-&gt;setAlreadyRemoved( <span class="keyword">true</span> );
<a name="l01560"></a>01560       the_imapFolderMgr-&gt;remove(folder);
<a name="l01561"></a>01561       node = the_imapFolderMgr-&gt;dir().first();
<a name="l01562"></a>01562     }
<a name="l01563"></a>01563   }
<a name="l01564"></a>01564 
<a name="l01565"></a>01565   node = the_dimapFolderMgr-&gt;dir().first();
<a name="l01566"></a>01566   <span class="keywordflow">while</span> (node)
<a name="l01567"></a>01567   {
<a name="l01568"></a>01568     <span class="keywordflow">if</span> (node-&gt;isDir() || ((acct = the_acctMgr-&gt;<a class="code" href="classKMail_1_1AccountManager.html#d01e5852c28fbd4db520979d09368464" title="Find account by id.">find</a>(node-&gt;id()))
<a name="l01569"></a>01569               &amp;&amp; ( acct-&gt;type() == <span class="stringliteral">"cachedimap"</span> )) )
<a name="l01570"></a>01570     {
<a name="l01571"></a>01571       node = the_dimapFolderMgr-&gt;dir().next();
<a name="l01572"></a>01572     } <span class="keywordflow">else</span> {
<a name="l01573"></a>01573       the_dimapFolderMgr-&gt;remove(static_cast&lt;KMFolder*&gt;(node));
<a name="l01574"></a>01574       node = the_dimapFolderMgr-&gt;dir().first();
<a name="l01575"></a>01575     }
<a name="l01576"></a>01576   }
<a name="l01577"></a>01577 
<a name="l01578"></a>01578   the_imapFolderMgr-&gt;quiet(<span class="keyword">true</span>);
<a name="l01579"></a>01579   <span class="keywordflow">for</span> (acct = the_acctMgr-&gt;<a class="code" href="classKMail_1_1AccountManager.html#9ab78f4ffdb974c60040f400b4be3657" title="First account of the list.">first</a>(); acct; acct = the_acctMgr-&gt;<a class="code" href="classKMail_1_1AccountManager.html#f21f9077b425ba7218d934342b2b5835" title="Next account of the list.">next</a>())
<a name="l01580"></a>01580   {
<a name="l01581"></a>01581     KMFolderImap *fld;
<a name="l01582"></a>01582     KMAcctImap *imapAcct;
<a name="l01583"></a>01583 
<a name="l01584"></a>01584     <span class="keywordflow">if</span> (acct-&gt;type() != <span class="stringliteral">"imap"</span>) <span class="keywordflow">continue</span>;
<a name="l01585"></a>01585     fld = <span class="keyword">static_cast&lt;</span>KMFolderImap*<span class="keyword">&gt;</span>(the_imapFolderMgr
<a name="l01586"></a>01586       -&gt;findOrCreate(QString::number(acct-&gt;id()), <span class="keyword">false</span>, acct-&gt;id())-&gt;storage());
<a name="l01587"></a>01587     fld-&gt;setNoContent(<span class="keyword">true</span>);
<a name="l01588"></a>01588     fld-&gt;folder()-&gt;setLabel(acct-&gt;name());
<a name="l01589"></a>01589     imapAcct = <span class="keyword">static_cast&lt;</span>KMAcctImap*<span class="keyword">&gt;</span>(acct);
<a name="l01590"></a>01590     fld-&gt;setAccount(imapAcct);
<a name="l01591"></a>01591     imapAcct-&gt;setImapFolder(fld);
<a name="l01592"></a>01592     fld-&gt;close( <span class="stringliteral">"kernel"</span>, <span class="keyword">true</span> );
<a name="l01593"></a>01593   }
<a name="l01594"></a>01594   the_imapFolderMgr-&gt;quiet(<span class="keyword">false</span>);
<a name="l01595"></a>01595 
<a name="l01596"></a>01596   the_dimapFolderMgr-&gt;quiet( <span class="keyword">true</span> );
<a name="l01597"></a>01597   <span class="keywordflow">for</span> (acct = the_acctMgr-&gt;<a class="code" href="classKMail_1_1AccountManager.html#9ab78f4ffdb974c60040f400b4be3657" title="First account of the list.">first</a>(); acct; acct = the_acctMgr-&gt;<a class="code" href="classKMail_1_1AccountManager.html#f21f9077b425ba7218d934342b2b5835" title="Next account of the list.">next</a>())
<a name="l01598"></a>01598   {
<a name="l01599"></a>01599     KMFolderCachedImap *cfld = 0;
<a name="l01600"></a>01600     KMAcctCachedImap *cachedImapAcct;
<a name="l01601"></a>01601 
<a name="l01602"></a>01602     <span class="keywordflow">if</span> (acct-&gt;type() != <span class="stringliteral">"cachedimap"</span> ) <span class="keywordflow">continue</span>;
<a name="l01603"></a>01603 
<a name="l01604"></a>01604     <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* fld = the_dimapFolderMgr-&gt;find(QString::number(acct-&gt;id()));
<a name="l01605"></a>01605     <span class="keywordflow">if</span>( fld )
<a name="l01606"></a>01606       cfld = <span class="keyword">static_cast&lt;</span>KMFolderCachedImap*<span class="keyword">&gt;</span>( fld-&gt;<a class="code" href="classKMFolder.html#4c7476219c137471fb93cb8c88061336">storage</a>() );
<a name="l01607"></a>01607     <span class="keywordflow">if</span> (cfld == 0) {
<a name="l01608"></a>01608       <span class="comment">// Folder doesn't exist yet</span>
<a name="l01609"></a>01609       cfld = <span class="keyword">static_cast&lt;</span>KMFolderCachedImap*<span class="keyword">&gt;</span>(the_dimapFolderMgr-&gt;createFolder(QString::number(acct-&gt;id()),
<a name="l01610"></a>01610             <span class="keyword">false</span>, KMFolderTypeCachedImap)-&gt;storage());
<a name="l01611"></a>01611       <span class="keywordflow">if</span> (!cfld) {
<a name="l01612"></a>01612         KMessageBox::error(0,(i18n(<span class="stringliteral">"Cannot create file `%1' in %2.\nKMail cannot start without it."</span>).arg(acct-&gt;name()).arg(the_dimapFolderMgr-&gt;basePath())));
<a name="l01613"></a>01613         exit(-1);
<a name="l01614"></a>01614       }
<a name="l01615"></a>01615       cfld-&gt;folder()-&gt;setId( acct-&gt;id() );
<a name="l01616"></a>01616     }
<a name="l01617"></a>01617 
<a name="l01618"></a>01618     cfld-&gt;setNoContent(<span class="keyword">true</span>);
<a name="l01619"></a>01619     cfld-&gt;folder()-&gt;setLabel(acct-&gt;name());
<a name="l01620"></a>01620     cachedImapAcct = <span class="keyword">static_cast&lt;</span>KMAcctCachedImap*<span class="keyword">&gt;</span>(acct);
<a name="l01621"></a>01621     cfld-&gt;setAccount(cachedImapAcct);
<a name="l01622"></a>01622     cachedImapAcct-&gt;setImapFolder(cfld);
<a name="l01623"></a>01623     cfld-&gt;close(<span class="stringliteral">"kmkernel"</span>);
<a name="l01624"></a>01624   }
<a name="l01625"></a>01625   the_dimapFolderMgr-&gt;quiet( <span class="keyword">false</span> );
<a name="l01626"></a>01626 }
<a name="l01627"></a>01627 
<a name="l01628"></a>01628 <span class="keywordtype">bool</span> KMKernel::doSessionManagement()
<a name="l01629"></a>01629 {
<a name="l01630"></a>01630 
<a name="l01631"></a>01631   <span class="comment">// Do session management</span>
<a name="l01632"></a>01632   <span class="keywordflow">if</span> (kapp-&gt;isRestored()){
<a name="l01633"></a>01633     <span class="keywordtype">int</span> n = 1;
<a name="l01634"></a>01634     <span class="keywordflow">while</span> (KMMainWin::canBeRestored(n)){
<a name="l01635"></a>01635       <span class="comment">//only restore main windows! (Matthias);</span>
<a name="l01636"></a>01636       <span class="keywordflow">if</span> (KMMainWin::classNameOfToplevel(n) == <span class="stringliteral">"KMMainWin"</span>)
<a name="l01637"></a>01637         (<span class="keyword">new</span> KMMainWin)-&gt;restore(n);
<a name="l01638"></a>01638       n++;
<a name="l01639"></a>01639     }
<a name="l01640"></a>01640     <span class="keywordflow">return</span> <span class="keyword">true</span>; <span class="comment">// we were restored by SM</span>
<a name="l01641"></a>01641   }
<a name="l01642"></a>01642   <span class="keywordflow">return</span> <span class="keyword">false</span>;  <span class="comment">// no, we were not restored</span>
<a name="l01643"></a>01643 }
<a name="l01644"></a>01644 
<a name="l01645"></a>01645 <span class="keywordtype">void</span> KMKernel::closeAllKMailWindows()
<a name="l01646"></a>01646 {
<a name="l01647"></a>01647   <span class="keywordflow">if</span> (!KMainWindow::memberList) <span class="keywordflow">return</span>;
<a name="l01648"></a>01648   QPtrListIterator&lt;KMainWindow&gt; it(*KMainWindow::memberList);
<a name="l01649"></a>01649   KMainWindow *window = 0;
<a name="l01650"></a>01650   <span class="keywordflow">while</span> ((window = it.current()) != 0) {
<a name="l01651"></a>01651     ++it;
<a name="l01652"></a>01652     <span class="keywordflow">if</span> (window-&gt;isA(<span class="stringliteral">"KMMainWindow"</span>) ||
<a name="l01653"></a>01653     window-&gt;inherits(<span class="stringliteral">"KMail::SecondaryWindow"</span>))
<a name="l01654"></a>01654       window-&gt;close( <span class="keyword">true</span> ); <span class="comment">// close and delete the window</span>
<a name="l01655"></a>01655   }
<a name="l01656"></a>01656 }
<a name="l01657"></a>01657 
<a name="l01658"></a>01658 <span class="keywordtype">void</span> KMKernel::cleanup(<span class="keywordtype">void</span>)
<a name="l01659"></a>01659 {
<a name="l01660"></a>01660   <a class="code" href="classKMKernel.html#288c5368985b40f15e7c85e6a10affc0" title="Save contents of all open composer widnows to ~/dead.letter.">dumpDeadLetters</a>();
<a name="l01661"></a>01661   the_shuttingDown = <span class="keyword">true</span>;
<a name="l01662"></a>01662   closeAllKMailWindows();
<a name="l01663"></a>01663 
<a name="l01664"></a>01664   <span class="keyword">delete</span> the_acctMgr;
<a name="l01665"></a>01665   the_acctMgr = 0;
<a name="l01666"></a>01666   <span class="keyword">delete</span> the_filterMgr;
<a name="l01667"></a>01667   the_filterMgr = 0;
<a name="l01668"></a>01668   <span class="keyword">delete</span> the_msgSender;
<a name="l01669"></a>01669   the_msgSender = 0;
<a name="l01670"></a>01670   <span class="keyword">delete</span> the_filterActionDict;
<a name="l01671"></a>01671   the_filterActionDict = 0;
<a name="l01672"></a>01672   <span class="keyword">delete</span> the_undoStack;
<a name="l01673"></a>01673   the_undoStack = 0;
<a name="l01674"></a>01674   <span class="keyword">delete</span> the_popFilterMgr;
<a name="l01675"></a>01675   the_popFilterMgr = 0;
<a name="l01676"></a>01676 
<a name="l01677"></a>01677 <span class="preprocessor">#if 0</span>
<a name="l01678"></a>01678 <span class="preprocessor"></span>  <span class="keyword">delete</span> the_weaver;
<a name="l01679"></a>01679   the_weaver = 0;
<a name="l01680"></a>01680 <span class="preprocessor">#endif</span>
<a name="l01681"></a>01681 <span class="preprocessor"></span>
<a name="l01682"></a>01682   KConfig* config =  KMKernel::config();
<a name="l01683"></a>01683   KConfigGroupSaver saver(config, <span class="stringliteral">"General"</span>);
<a name="l01684"></a>01684 
<a name="l01685"></a>01685   <span class="keywordflow">if</span> (the_trashFolder) {
<a name="l01686"></a>01686 
<a name="l01687"></a>01687     the_trashFolder-&gt;<a class="code" href="classKMFolder.html#8d167662bca3ad6315fa5ad67bb9e4dd" title="Close folder.">close</a>(<span class="stringliteral">"kmkernel"</span>, <span class="keyword">true</span>);
<a name="l01688"></a>01688 
<a name="l01689"></a>01689     <span class="keywordflow">if</span> (config-&gt;readBoolEntry(<span class="stringliteral">"empty-trash-on-exit"</span>, <span class="keyword">true</span>))
<a name="l01690"></a>01690     {
<a name="l01691"></a>01691       <span class="keywordflow">if</span> ( the_trashFolder-&gt;<a class="code" href="classKMFolder.html#c482e9431d9cd9ec0dc99b57e39e0942" title="Number of messages in this folder.">count</a>( <span class="keyword">true</span> ) &gt; 0 )
<a name="l01692"></a>01692         the_trashFolder-&gt;<a class="code" href="classKMFolder.html#864532ff929cd6c408e01bc58788e9fc" title="Delete entire folder.">expunge</a>();
<a name="l01693"></a>01693     }
<a name="l01694"></a>01694   }
<a name="l01695"></a>01695 
<a name="l01696"></a>01696   mICalIface-&gt;<a class="code" href="classKMailICalIfaceImpl.html#d6bc094d610f49dd7413a4fccf01e385" title="Disconnect all slots and close the dirs.">cleanup</a>();
<a name="l01697"></a>01697 
<a name="l01698"></a>01698   QValueList&lt;QGuardedPtr&lt;KMFolder&gt; &gt; folders;
<a name="l01699"></a>01699   QStringList strList;
<a name="l01700"></a>01700   <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a> *folder;
<a name="l01701"></a>01701   the_folderMgr-&gt;createFolderList(&amp;strList, &amp;folders);
<a name="l01702"></a>01702   <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; folders.at(i) != folders.end(); i++)
<a name="l01703"></a>01703   {
<a name="l01704"></a>01704     folder = *folders.at(i);
<a name="l01705"></a>01705     <span class="keywordflow">if</span> (!folder || folder-&gt;isDir()) <span class="keywordflow">continue</span>;
<a name="l01706"></a>01706     folder-&gt;<a class="code" href="classKMFolder.html#8d167662bca3ad6315fa5ad67bb9e4dd" title="Close folder.">close</a>(<span class="stringliteral">"kmkernel"</span>, <span class="keyword">true</span>);
<a name="l01707"></a>01707   }
<a name="l01708"></a>01708   strList.clear();
<a name="l01709"></a>01709   folders.clear();
<a name="l01710"></a>01710   the_searchFolderMgr-&gt;createFolderList(&amp;strList, &amp;folders);
<a name="l01711"></a>01711   <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; folders.at(i) != folders.end(); i++)
<a name="l01712"></a>01712   {
<a name="l01713"></a>01713     folder = *folders.at(i);
<a name="l01714"></a>01714     <span class="keywordflow">if</span> (!folder || folder-&gt;isDir()) <span class="keywordflow">continue</span>;
<a name="l01715"></a>01715     folder-&gt;<a class="code" href="classKMFolder.html#8d167662bca3ad6315fa5ad67bb9e4dd" title="Close folder.">close</a>(<span class="stringliteral">"kmkernel"</span>, <span class="keyword">true</span>);
<a name="l01716"></a>01716   }
<a name="l01717"></a>01717 
<a name="l01718"></a>01718   <span class="keyword">delete</span> the_msgIndex;
<a name="l01719"></a>01719   the_msgIndex = 0;
<a name="l01720"></a>01720   <span class="keyword">delete</span> the_folderMgr;
<a name="l01721"></a>01721   the_folderMgr = 0;
<a name="l01722"></a>01722   <span class="keyword">delete</span> the_imapFolderMgr;
<a name="l01723"></a>01723   the_imapFolderMgr = 0;
<a name="l01724"></a>01724   <span class="keyword">delete</span> the_dimapFolderMgr;
<a name="l01725"></a>01725   the_dimapFolderMgr = 0;
<a name="l01726"></a>01726   <span class="keyword">delete</span> the_searchFolderMgr;
<a name="l01727"></a>01727   the_searchFolderMgr = 0;
<a name="l01728"></a>01728   <span class="keyword">delete</span> mConfigureDialog;
<a name="l01729"></a>01729   mConfigureDialog = 0;
<a name="l01730"></a>01730   <span class="comment">// do not delete, because mWin may point to an existing window</span>
<a name="l01731"></a>01731   <span class="comment">// delete mWin;</span>
<a name="l01732"></a>01732   mWin = 0;
<a name="l01733"></a>01733 
<a name="l01734"></a>01734   <span class="keywordflow">if</span> ( RecentAddresses::exists() )
<a name="l01735"></a>01735     RecentAddresses::self( config )-&gt;save( config );
<a name="l01736"></a>01736   config-&gt;sync();
<a name="l01737"></a>01737 }
<a name="l01738"></a>01738 
<a name="l01739"></a><a class="code" href="classKMKernel.html#b462ede91a7f71fcb67012a054f6ca2b">01739</a> <span class="keywordtype">bool</span> <a class="code" href="classKMKernel.html#b462ede91a7f71fcb67012a054f6ca2b" title="Returns true if the transfer was successful, otherwise false.">KMKernel::transferMail</a>( QString &amp; destinationDir )
<a name="l01740"></a>01740 {
<a name="l01741"></a>01741   QString dir;
<a name="l01742"></a>01742 
<a name="l01743"></a>01743   <span class="comment">// check whether the user has a ~/KMail folder</span>
<a name="l01744"></a>01744   QFileInfo fi( QDir::home(), <span class="stringliteral">"KMail"</span> );
<a name="l01745"></a>01745   <span class="keywordflow">if</span> ( fi.exists() &amp;&amp; fi.isDir() ) {
<a name="l01746"></a>01746     dir = QDir::homeDirPath() + <span class="stringliteral">"/KMail"</span>;
<a name="l01747"></a>01747     <span class="comment">// the following two lines can be removed once moving mail is reactivated</span>
<a name="l01748"></a>01748     destinationDir = dir;
<a name="l01749"></a>01749     <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l01750"></a>01750   }
<a name="l01751"></a>01751 
<a name="l01752"></a>01752   <span class="keywordflow">if</span> ( dir.isEmpty() ) {
<a name="l01753"></a>01753     <span class="comment">// check whether the user has a ~/Mail folder</span>
<a name="l01754"></a>01754     fi.setFile( QDir::home(), <span class="stringliteral">"Mail"</span> );
<a name="l01755"></a>01755     <span class="keywordflow">if</span> ( fi.exists() &amp;&amp; fi.isDir() &amp;&amp;
<a name="l01756"></a>01756          QFile::exists( QDir::homeDirPath() + <span class="stringliteral">"/Mail/.inbox.index"</span> ) ) {
<a name="l01757"></a>01757       <span class="comment">// there's a ~/Mail folder which seems to be used by KMail (because of the</span>
<a name="l01758"></a>01758       <span class="comment">// index file)</span>
<a name="l01759"></a>01759       dir = QDir::homeDirPath() + <span class="stringliteral">"/Mail"</span>;
<a name="l01760"></a>01760       <span class="comment">// the following two lines can be removed once moving mail is reactivated</span>
<a name="l01761"></a>01761       destinationDir = dir;
<a name="l01762"></a>01762       <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l01763"></a>01763     }
<a name="l01764"></a>01764   }
<a name="l01765"></a>01765 
<a name="l01766"></a>01766   <span class="keywordflow">if</span> ( dir.isEmpty() ) {
<a name="l01767"></a>01767     <span class="comment">// check whether the user has a ~/.Mail folder</span>
<a name="l01768"></a>01768     fi.setFile( QDir::home(), <span class="stringliteral">".Mail"</span> );
<a name="l01769"></a>01769     <span class="keywordflow">if</span> ( fi.exists() &amp;&amp; fi.isDir() &amp;&amp;
<a name="l01770"></a>01770          QFile::exists( QDir::homeDirPath() + <span class="stringliteral">"/.Mail/.inbox.index"</span> ) ) {
<a name="l01771"></a>01771       <span class="comment">// there's a ~/Mail folder which seems to be used by KMail (because of the</span>
<a name="l01772"></a>01772       <span class="comment">// index file)</span>
<a name="l01773"></a>01773       dir = QDir::homeDirPath() + <span class="stringliteral">"/.Mail"</span>;
<a name="l01774"></a>01774       <span class="comment">// the following two lines can be removed once moving mail is reactivated</span>
<a name="l01775"></a>01775       destinationDir = dir;
<a name="l01776"></a>01776       <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l01777"></a>01777     }
<a name="l01778"></a>01778   }
<a name="l01779"></a>01779 
<a name="l01780"></a>01780   <span class="keywordflow">if</span> ( dir.isEmpty() ) {
<a name="l01781"></a>01781     <span class="keywordflow">return</span> <span class="keyword">true</span>; <span class="comment">// there's no old mail folder</span>
<a name="l01782"></a>01782   }
<a name="l01783"></a>01783 
<a name="l01784"></a>01784 <span class="preprocessor">#if 0</span>
<a name="l01785"></a>01785 <span class="preprocessor"></span>  <span class="comment">// disabled for now since moving fails in certain cases (e.g. if symbolic links are involved)</span>
<a name="l01786"></a>01786   <span class="keyword">const</span> QString kmailName = kapp-&gt;aboutData()-&gt;programName();
<a name="l01787"></a>01787   QString msg;
<a name="l01788"></a>01788   <span class="keywordflow">if</span> ( KIO::NetAccess::exists( destinationDir, <span class="keyword">true</span>, 0 ) ) {
<a name="l01789"></a>01789     <span class="comment">// if destinationDir exists, we need to warn about possible</span>
<a name="l01790"></a>01790     <span class="comment">// overwriting of files. otherwise, we don't have to</span>
<a name="l01791"></a>01791     msg = i18n( <span class="stringliteral">"%1-%3 is the application name, %4-%7 are folder path"</span>,
<a name="l01792"></a>01792                 <span class="stringliteral">"&lt;qt&gt;The &lt;i&gt;%4&lt;/i&gt; folder exists. "</span>
<a name="l01793"></a>01793                 <span class="stringliteral">"%1 now uses the &lt;i&gt;%5&lt;/i&gt; folder for "</span>
<a name="l01794"></a>01794                 <span class="stringliteral">"its messages.&lt;p&gt;"</span>
<a name="l01795"></a>01795                 <span class="stringliteral">"%2 can move the contents of &lt;i&gt;%6&lt;i&gt; into this folder for "</span>
<a name="l01796"></a>01796                 <span class="stringliteral">"you, though this may replace any existing files with "</span>
<a name="l01797"></a>01797                 <span class="stringliteral">"the same name in &lt;i&gt;%7&lt;/i&gt;.&lt;p&gt;"</span>
<a name="l01798"></a>01798                 <span class="stringliteral">"&lt;strong&gt;Would you like %3 to move the mail "</span>
<a name="l01799"></a>01799                 <span class="stringliteral">"files now?&lt;/strong&gt;&lt;/qt&gt;"</span> )
<a name="l01800"></a>01800           .arg( kmailName, kmailName, kmailName )
<a name="l01801"></a>01801           .arg( dir, destinationDir, dir, destinationDir );
<a name="l01802"></a>01802   } <span class="keywordflow">else</span> {
<a name="l01803"></a>01803     msg = i18n( <span class="stringliteral">"%1-%3 is the application name, %4-%6 are folder path"</span>,
<a name="l01804"></a>01804                 <span class="stringliteral">"&lt;qt&gt;The &lt;i&gt;%4&lt;/i&gt; folder exists. "</span>
<a name="l01805"></a>01805                 <span class="stringliteral">"%1 now uses the &lt;i&gt;%5&lt;/i&gt; folder for "</span>
<a name="l01806"></a>01806                 <span class="stringliteral">"its messages. %2 can move the contents of &lt;i&gt;%6&lt;/i&gt; into "</span>
<a name="l01807"></a>01807                 <span class="stringliteral">"this folder for you.&lt;p&gt;"</span>
<a name="l01808"></a>01808                 <span class="stringliteral">"&lt;strong&gt;Would you like %3 to move the mail "</span>
<a name="l01809"></a>01809                 <span class="stringliteral">"files now?&lt;/strong&gt;&lt;/qt&gt;"</span> )
<a name="l01810"></a>01810           .arg( kmailName, kmailName, kmailName )
<a name="l01811"></a>01811           .arg( dir, destinationDir, dir );
<a name="l01812"></a>01812   }
<a name="l01813"></a>01813   QString title = i18n( <span class="stringliteral">"Migrate Mail Files?"</span> );
<a name="l01814"></a>01814   QString buttonText = i18n( <span class="stringliteral">"Move"</span> );
<a name="l01815"></a>01815 
<a name="l01816"></a>01816   <span class="keywordflow">if</span> ( KMessageBox::questionYesNo( 0, msg, title, buttonText, i18n(<span class="stringliteral">"Do Not Move"</span>) ) ==
<a name="l01817"></a>01817        KMessageBox::No ) {
<a name="l01818"></a>01818     destinationDir = dir;
<a name="l01819"></a>01819     <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l01820"></a>01820   }
<a name="l01821"></a>01821 
<a name="l01822"></a>01822   <span class="keywordflow">if</span> ( !KIO::NetAccess::move( dir, destinationDir ) ) {
<a name="l01823"></a>01823     kdDebug(5006) &lt;&lt; k_funcinfo &lt;&lt; <span class="stringliteral">"Moving "</span> &lt;&lt; dir &lt;&lt; <span class="stringliteral">" to "</span> &lt;&lt; destinationDir &lt;&lt; <span class="stringliteral">" failed: "</span> &lt;&lt; KIO::NetAccess::lastErrorString() &lt;&lt; endl;
<a name="l01824"></a>01824     kdDebug(5006) &lt;&lt; k_funcinfo &lt;&lt; <span class="stringliteral">"Deleting "</span> &lt;&lt; destinationDir &lt;&lt; endl;
<a name="l01825"></a>01825     KIO::NetAccess::del( destinationDir, 0 );
<a name="l01826"></a>01826     destinationDir = dir;
<a name="l01827"></a>01827     <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l01828"></a>01828   }
<a name="l01829"></a>01829 <span class="preprocessor">#endif</span>
<a name="l01830"></a>01830 <span class="preprocessor"></span>
<a name="l01831"></a>01831   <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l01832"></a>01832 }
<a name="l01833"></a>01833 
<a name="l01834"></a>01834 
<a name="l01835"></a>01835 <span class="keywordtype">void</span> KMKernel::ungrabPtrKb(<span class="keywordtype">void</span>)
<a name="l01836"></a>01836 {
<a name="l01837"></a>01837   <span class="keywordflow">if</span>(!KMainWindow::memberList) <span class="keywordflow">return</span>;
<a name="l01838"></a>01838   QWidget* widg = KMainWindow::memberList-&gt;first();
<a name="l01839"></a>01839   Display* dpy;
<a name="l01840"></a>01840 
<a name="l01841"></a>01841   <span class="keywordflow">if</span> (!widg) <span class="keywordflow">return</span>;
<a name="l01842"></a>01842   dpy = widg-&gt;x11Display();
<a name="l01843"></a>01843   XUngrabKeyboard(dpy, CurrentTime);
<a name="l01844"></a>01844   XUngrabPointer(dpy, CurrentTime);
<a name="l01845"></a>01845 }
<a name="l01846"></a>01846 
<a name="l01847"></a>01847 
<a name="l01848"></a>01848 <span class="comment">// Message handler</span>
<a name="l01849"></a>01849 <span class="keywordtype">void</span> KMKernel::kmailMsgHandler(QtMsgType aType, <span class="keyword">const</span> <span class="keywordtype">char</span>* aMsg)
<a name="l01850"></a>01850 {
<a name="l01851"></a>01851   <span class="keyword">static</span> <span class="keywordtype">int</span> recurse=-1;
<a name="l01852"></a>01852 
<a name="l01853"></a>01853   recurse++;
<a name="l01854"></a>01854 
<a name="l01855"></a>01855   <span class="keywordflow">switch</span> (aType)
<a name="l01856"></a>01856   {
<a name="l01857"></a>01857   <span class="keywordflow">case</span> QtDebugMsg:
<a name="l01858"></a>01858   <span class="keywordflow">case</span> QtWarningMsg:
<a name="l01859"></a>01859     kdDebug(5006) &lt;&lt; aMsg &lt;&lt; endl;
<a name="l01860"></a>01860     <span class="keywordflow">break</span>;
<a name="l01861"></a>01861 
<a name="l01862"></a>01862   <span class="keywordflow">case</span> QtFatalMsg: <span class="comment">// Hm, what about using kdFatal() here?</span>
<a name="l01863"></a>01863     ungrabPtrKb();
<a name="l01864"></a>01864     kdDebug(5006) &lt;&lt; kapp-&gt;caption() &lt;&lt; <span class="stringliteral">" fatal error "</span>
<a name="l01865"></a>01865           &lt;&lt; aMsg &lt;&lt; endl;
<a name="l01866"></a>01866     KMessageBox::error(0, aMsg);
<a name="l01867"></a>01867     abort();
<a name="l01868"></a>01868   }
<a name="l01869"></a>01869 
<a name="l01870"></a>01870   recurse--;
<a name="l01871"></a>01871 }
<a name="l01872"></a>01872 
<a name="l01873"></a>01873 
<a name="l01874"></a><a class="code" href="classKMKernel.html#288c5368985b40f15e7c85e6a10affc0">01874</a> <span class="keywordtype">void</span> <a class="code" href="classKMKernel.html#288c5368985b40f15e7c85e6a10affc0" title="Save contents of all open composer widnows to ~/dead.letter.">KMKernel::dumpDeadLetters</a>()
<a name="l01875"></a>01875 {
<a name="l01876"></a>01876   <span class="keywordflow">if</span> ( shuttingDown() )
<a name="l01877"></a>01877     <span class="keywordflow">return</span>; <span class="comment">//All documents should be saved before shutting down is set!</span>
<a name="l01878"></a>01878 
<a name="l01879"></a>01879   <span class="comment">// make all composer windows autosave their contents</span>
<a name="l01880"></a>01880   <span class="keywordflow">if</span> ( !KMainWindow::memberList )
<a name="l01881"></a>01881     <span class="keywordflow">return</span>;
<a name="l01882"></a>01882 
<a name="l01883"></a>01883   <span class="keywordflow">for</span> ( QPtrListIterator&lt;KMainWindow&gt; it(*KMainWindow::memberList) ; it.current() != 0; ++it )
<a name="l01884"></a>01884     <span class="keywordflow">if</span> ( KMail::Composer * win = ::qt_cast&lt;KMail::Composer*&gt;( it.current() ) )
<a name="l01885"></a>01885       win-&gt;autoSaveMessage();
<a name="l01886"></a>01886 }
<a name="l01887"></a>01887 
<a name="l01888"></a>01888 
<a name="l01889"></a>01889 
<a name="l01890"></a>01890 <span class="keywordtype">void</span> KMKernel::action(<span class="keywordtype">bool</span> mailto, <span class="keywordtype">bool</span> check, <span class="keyword">const</span> QString &amp;to,
<a name="l01891"></a>01891                       <span class="keyword">const</span> QString &amp;cc, <span class="keyword">const</span> QString &amp;bcc,
<a name="l01892"></a>01892                       <span class="keyword">const</span> QString &amp;subj, <span class="keyword">const</span> QString &amp;body,
<a name="l01893"></a>01893                       <span class="keyword">const</span> KURL &amp;messageFile,
<a name="l01894"></a>01894                       <span class="keyword">const</span> KURL::List &amp;attachURLs,
<a name="l01895"></a>01895                       <span class="keyword">const</span> QCStringList &amp;customHeaders)
<a name="l01896"></a>01896 {
<a name="l01897"></a>01897   <span class="keywordflow">if</span> ( mailto )
<a name="l01898"></a>01898     <a class="code" href="classKMKernel.html#03ba295b9139421b58829d2f690f3494" title="returns id of composer if more are opened">openComposer</a>( to, cc, bcc, subj, body, 0, messageFile, attachURLs, customHeaders );
<a name="l01899"></a>01899   <span class="keywordflow">else</span>
<a name="l01900"></a>01900     openReader( check );
<a name="l01901"></a>01901 
<a name="l01902"></a>01902   <span class="keywordflow">if</span> ( check )
<a name="l01903"></a>01903     <a class="code" href="classKMKernel.html#636f33ad6865e98d2a4845c835d83fd7" title="dcop callable stuff">checkMail</a>();
<a name="l01904"></a>01904   <span class="comment">//Anything else?</span>
<a name="l01905"></a>01905 }
<a name="l01906"></a>01906 
<a name="l01907"></a>01907 <span class="keywordtype">void</span> KMKernel::byteArrayToRemoteFile(<span class="keyword">const</span> QByteArray &amp;aData, <span class="keyword">const</span> KURL &amp;aURL,
<a name="l01908"></a>01908   <span class="keywordtype">bool</span> overwrite)
<a name="l01909"></a>01909 {
<a name="l01910"></a>01910   <span class="comment">// ## when KDE 3.3 is out: use KIO::storedPut to remove slotDataReq altogether</span>
<a name="l01911"></a>01911   KIO::Job *job = KIO::put(aURL, -1, overwrite, <span class="keyword">false</span>);
<a name="l01912"></a>01912   putData pd; pd.url = aURL; pd.data = aData; pd.offset = 0;
<a name="l01913"></a>01913   mPutJobs.insert(job, pd);
<a name="l01914"></a>01914   connect(job, SIGNAL(dataReq(KIO::Job*,QByteArray&amp;)),
<a name="l01915"></a>01915     SLOT(slotDataReq(KIO::Job*,QByteArray&amp;)));
<a name="l01916"></a>01916   connect(job, SIGNAL(result(KIO::Job*)),
<a name="l01917"></a>01917     SLOT(slotResult(KIO::Job*)));
<a name="l01918"></a>01918 }
<a name="l01919"></a>01919 
<a name="l01920"></a>01920 <span class="keywordtype">void</span> KMKernel::slotDataReq(KIO::Job *job, QByteArray &amp;data)
<a name="l01921"></a>01921 {
<a name="l01922"></a>01922   <span class="comment">// send the data in 64 KB chunks</span>
<a name="l01923"></a>01923   <span class="keyword">const</span> <span class="keywordtype">int</span> MAX_CHUNK_SIZE = 64*1024;
<a name="l01924"></a>01924   QMap&lt;KIO::Job*, putData&gt;::Iterator it = mPutJobs.find(job);
<a name="l01925"></a>01925   assert(it != mPutJobs.end());
<a name="l01926"></a>01926   <span class="keywordtype">int</span> remainingBytes = (*it).data.size() - (*it).offset;
<a name="l01927"></a>01927   <span class="keywordflow">if</span>( remainingBytes &gt; MAX_CHUNK_SIZE )
<a name="l01928"></a>01928   {
<a name="l01929"></a>01929     <span class="comment">// send MAX_CHUNK_SIZE bytes to the receiver (deep copy)</span>
<a name="l01930"></a>01930     data.duplicate( (*it).data.data() + (*it).offset, MAX_CHUNK_SIZE );
<a name="l01931"></a>01931     (*it).offset += MAX_CHUNK_SIZE;
<a name="l01932"></a>01932     <span class="comment">//kdDebug( 5006 ) &lt;&lt; "Sending " &lt;&lt; MAX_CHUNK_SIZE &lt;&lt; " bytes ("</span>
<a name="l01933"></a>01933     <span class="comment">//                &lt;&lt; remainingBytes - MAX_CHUNK_SIZE &lt;&lt; " bytes remain)\n";</span>
<a name="l01934"></a>01934   }
<a name="l01935"></a>01935   <span class="keywordflow">else</span>
<a name="l01936"></a>01936   {
<a name="l01937"></a>01937     <span class="comment">// send the remaining bytes to the receiver (deep copy)</span>
<a name="l01938"></a>01938     data.duplicate( (*it).data.data() + (*it).offset, remainingBytes );
<a name="l01939"></a>01939     (*it).data = QByteArray();
<a name="l01940"></a>01940     (*it).offset = 0;
<a name="l01941"></a>01941     <span class="comment">//kdDebug( 5006 ) &lt;&lt; "Sending " &lt;&lt; remainingBytes &lt;&lt; " bytes\n";</span>
<a name="l01942"></a>01942   }
<a name="l01943"></a>01943 }
<a name="l01944"></a>01944 
<a name="l01945"></a>01945 <span class="keywordtype">void</span> KMKernel::slotResult(KIO::Job *job)
<a name="l01946"></a>01946 {
<a name="l01947"></a>01947   QMap&lt;KIO::Job*, putData&gt;::Iterator it = mPutJobs.find(job);
<a name="l01948"></a>01948   assert(it != mPutJobs.end());
<a name="l01949"></a>01949   <span class="keywordflow">if</span> (job-&gt;error())
<a name="l01950"></a>01950   {
<a name="l01951"></a>01951     <span class="keywordflow">if</span> (job-&gt;error() == KIO::ERR_FILE_ALREADY_EXIST)
<a name="l01952"></a>01952     {
<a name="l01953"></a>01953       <span class="keywordflow">if</span> (KMessageBox::warningContinueCancel(0,
<a name="l01954"></a>01954         i18n(<span class="stringliteral">"File %1 exists.\nDo you want to replace it?"</span>)
<a name="l01955"></a>01955         .arg((*it).url.prettyURL()), i18n(<span class="stringliteral">"Save to File"</span>), i18n(<span class="stringliteral">"&amp;Replace"</span>))
<a name="l01956"></a>01956         == KMessageBox::Continue)
<a name="l01957"></a>01957         byteArrayToRemoteFile((*it).data, (*it).url, <span class="keyword">true</span>);
<a name="l01958"></a>01958     }
<a name="l01959"></a>01959     <span class="keywordflow">else</span> job-&gt;showErrorDialog();
<a name="l01960"></a>01960   }
<a name="l01961"></a>01961   mPutJobs.remove(it);
<a name="l01962"></a>01962 }
<a name="l01963"></a>01963 
<a name="l01964"></a><a class="code" href="classKMKernel.html#db61ef50ab48476855b06b2990839ee3">01964</a> <span class="keywordtype">void</span> <a class="code" href="classKMKernel.html#db61ef50ab48476855b06b2990839ee3" title="Call this slot instead of directly KConfig::sync() to minimize the overall config...">KMKernel::slotRequestConfigSync</a>() {
<a name="l01965"></a>01965   <span class="comment">// ### FIXME: delay as promised in the kdoc of this function ;-)</span>
<a name="l01966"></a>01966   KMKernel::config()-&gt;sync();
<a name="l01967"></a>01967 }
<a name="l01968"></a>01968 
<a name="l01969"></a>01969 <span class="keywordtype">void</span> KMKernel::slotShowConfigurationDialog()
<a name="l01970"></a>01970 {
<a name="l01971"></a>01971   <span class="keywordflow">if</span>( !mConfigureDialog ) {
<a name="l01972"></a>01972     mConfigureDialog = <span class="keyword">new</span> ConfigureDialog( 0, <span class="stringliteral">"configure"</span>, <span class="keyword">false</span> );
<a name="l01973"></a>01973     connect( mConfigureDialog, SIGNAL( configCommitted() ),
<a name="l01974"></a>01974              <span class="keyword">this</span>, SLOT( slotConfigChanged() ) );
<a name="l01975"></a>01975   }
<a name="l01976"></a>01976 
<a name="l01977"></a>01977   <span class="keywordflow">if</span>( <a class="code" href="classKMKernel.html#9bb8b4b117c7f1c7c964b6a4c2222c72" title="Get first mainwidget.">KMKernel::getKMMainWidget</a>() == 0 )
<a name="l01978"></a>01978   {
<a name="l01979"></a>01979     <span class="comment">// ensure that there is a main widget available</span>
<a name="l01980"></a>01980     <span class="comment">// as parts of the configure dialog (identity) rely on this</span>
<a name="l01981"></a>01981     <span class="comment">// and this slot can be called when there is only a KMComposeWin showing</span>
<a name="l01982"></a>01982     KMMainWin * win = <span class="keyword">new</span> KMMainWin;
<a name="l01983"></a>01983     win-&gt;show();
<a name="l01984"></a>01984   }
<a name="l01985"></a>01985 
<a name="l01986"></a>01986   <span class="keywordflow">if</span>( mConfigureDialog-&gt;isHidden() )
<a name="l01987"></a>01987     mConfigureDialog-&gt;show();
<a name="l01988"></a>01988   <span class="keywordflow">else</span>
<a name="l01989"></a>01989     mConfigureDialog-&gt;raise();
<a name="l01990"></a>01990 }
<a name="l01991"></a>01991 
<a name="l01992"></a>01992 <span class="keywordtype">void</span> KMKernel::slotConfigChanged()
<a name="l01993"></a>01993 {
<a name="l01994"></a>01994   readConfig();
<a name="l01995"></a>01995   emit configChanged();
<a name="l01996"></a>01996 }
<a name="l01997"></a>01997 
<a name="l01998"></a>01998 <span class="comment">//-------------------------------------------------------------------------------</span>
<a name="l01999"></a>01999 <span class="comment">//static</span>
<a name="l02000"></a><a class="code" href="classKMKernel.html#4b90101cd292c2cfc5b4ae57bf40b1e4">02000</a> QString <a class="code" href="classKMKernel.html#4b90101cd292c2cfc5b4ae57bf40b1e4" title="Returns the full path of the user&amp;#39;s local data directory for KMail.">KMKernel::localDataPath</a>()
<a name="l02001"></a>02001 {
<a name="l02002"></a>02002   <span class="keywordflow">return</span> locateLocal( <span class="stringliteral">"data"</span>, <span class="stringliteral">"kmail/"</span> );
<a name="l02003"></a>02003 }
<a name="l02004"></a>02004 
<a name="l02005"></a>02005 <span class="comment">//-------------------------------------------------------------------------------</span>
<a name="l02006"></a>02006 
<a name="l02007"></a><a class="code" href="classKMKernel.html#94ed97b560d3765fa63c014fff18c088">02007</a> <span class="keywordtype">bool</span> <a class="code" href="classKMKernel.html#94ed97b560d3765fa63c014fff18c088" title="Returns true if we have a system tray applet.">KMKernel::haveSystemTrayApplet</a>()
<a name="l02008"></a>02008 {
<a name="l02009"></a>02009   <span class="keywordflow">return</span> !systemTrayApplets.isEmpty();
<a name="l02010"></a>02010 }
<a name="l02011"></a>02011 
<a name="l02012"></a>02012 <span class="keywordtype">bool</span> KMKernel::registerSystemTrayApplet( <span class="keyword">const</span> KSystemTray* applet )
<a name="l02013"></a>02013 {
<a name="l02014"></a>02014   <span class="keywordflow">if</span> ( systemTrayApplets.findIndex( applet ) == -1 ) {
<a name="l02015"></a>02015     systemTrayApplets.append( applet );
<a name="l02016"></a>02016     <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l02017"></a>02017   }
<a name="l02018"></a>02018   <span class="keywordflow">else</span>
<a name="l02019"></a>02019     <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l02020"></a>02020 }
<a name="l02021"></a>02021 
<a name="l02022"></a>02022 <span class="keywordtype">bool</span> KMKernel::unregisterSystemTrayApplet( <span class="keyword">const</span> KSystemTray* applet )
<a name="l02023"></a>02023 {
<a name="l02024"></a>02024   QValueList&lt;const KSystemTray*&gt;::iterator it =
<a name="l02025"></a>02025     systemTrayApplets.find( applet );
<a name="l02026"></a>02026   <span class="keywordflow">if</span> ( it != systemTrayApplets.end() ) {
<a name="l02027"></a>02027     systemTrayApplets.remove( it );
<a name="l02028"></a>02028     <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l02029"></a>02029   }
<a name="l02030"></a>02030   <span class="keywordflow">else</span>
<a name="l02031"></a>02031     <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l02032"></a>02032 }
<a name="l02033"></a>02033 
<a name="l02034"></a>02034 <span class="keywordtype">void</span> KMKernel::emergencyExit( <span class="keyword">const</span> QString&amp; reason )
<a name="l02035"></a>02035 {
<a name="l02036"></a>02036   QString mesg;
<a name="l02037"></a>02037   <span class="keywordflow">if</span> ( reason.length() == 0 ) {
<a name="l02038"></a>02038     mesg = i18n(<span class="stringliteral">"KMail encountered a fatal error and will terminate now"</span>);
<a name="l02039"></a>02039   } <span class="keywordflow">else</span> {
<a name="l02040"></a>02040     mesg = i18n(<span class="stringliteral">"KMail encountered a fatal error and will "</span>
<a name="l02041"></a>02041                       <span class="stringliteral">"terminate now.\nThe error was:\n%1"</span>).arg( reason );
<a name="l02042"></a>02042   }
<a name="l02043"></a>02043 
<a name="l02044"></a>02044   kdWarning() &lt;&lt; mesg &lt;&lt; endl;
<a name="l02045"></a>02045   KNotifyClient::userEvent( 0, <span class="stringliteral">"&lt;qt&gt;"</span>+mesg+<span class="stringliteral">"&lt;/qt&gt;"</span>, KNotifyClient::Messagebox, KNotifyClient::Error );
<a name="l02046"></a>02046 
<a name="l02047"></a>02047   ::exit(1);
<a name="l02048"></a>02048 }
<a name="l02049"></a>02049 
<a name="l02053"></a><a class="code" href="classKMKernel.html#452284acec25d36d92967c58e590a76e">02053</a> <span class="keywordtype">bool</span> <a class="code" href="classKMKernel.html#452284acec25d36d92967c58e590a76e" title="Returns true if the folder is either the outbox or one of the drafts-folders.">KMKernel::folderIsDraftOrOutbox</a>(<span class="keyword">const</span> <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a> * folder)
<a name="l02054"></a>02054 {
<a name="l02055"></a>02055   assert( folder );
<a name="l02056"></a>02056   <span class="keywordflow">if</span> ( folder == the_outboxFolder )
<a name="l02057"></a>02057     <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l02058"></a>02058   <span class="keywordflow">return</span> folderIsDrafts( folder );
<a name="l02059"></a>02059 }
<a name="l02060"></a>02060 
<a name="l02061"></a>02061 <span class="keywordtype">bool</span> KMKernel::folderIsDrafts(<span class="keyword">const</span> <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a> * folder)
<a name="l02062"></a>02062 {
<a name="l02063"></a>02063   assert( folder );
<a name="l02064"></a>02064   <span class="keywordflow">if</span> ( folder == the_draftsFolder )
<a name="l02065"></a>02065     <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l02066"></a>02066 
<a name="l02067"></a>02067   QString idString = folder-&gt;<a class="code" href="classKMFolder.html#bab3b6b7c2758c19aa04c2bf72716b27" title="Returns a string that can be used to identify this folder.">idString</a>();
<a name="l02068"></a>02068   <span class="keywordflow">if</span> ( idString.isEmpty() )
<a name="l02069"></a>02069     <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l02070"></a>02070 
<a name="l02071"></a>02071   <span class="comment">// search the identities if the folder matches the drafts-folder</span>
<a name="l02072"></a>02072   <span class="keyword">const</span> KPIM::IdentityManager *im = <a class="code" href="classKMKernel.html#b61603e7dcd50af20492374aa91951cc" title="return the pointer to the identity manager">identityManager</a>();
<a name="l02073"></a>02073   <span class="keywordflow">for</span> ( KPIM::IdentityManager::ConstIterator it=im-&gt;begin(); it != im-&gt;end(); ++it )
<a name="l02074"></a>02074     <span class="keywordflow">if</span> ( (*it).drafts() == idString )
<a name="l02075"></a>02075       <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l02076"></a>02076   <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l02077"></a>02077 }
<a name="l02078"></a>02078 
<a name="l02079"></a>02079 <span class="keywordtype">bool</span> KMKernel::folderIsTemplates( <span class="keyword">const</span> <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a> *folder )
<a name="l02080"></a>02080 {
<a name="l02081"></a>02081   assert( folder );
<a name="l02082"></a>02082   <span class="keywordflow">if</span> ( folder == the_templatesFolder )
<a name="l02083"></a>02083     <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l02084"></a>02084 
<a name="l02085"></a>02085   QString idString = folder-&gt;<a class="code" href="classKMFolder.html#bab3b6b7c2758c19aa04c2bf72716b27" title="Returns a string that can be used to identify this folder.">idString</a>();
<a name="l02086"></a>02086   <span class="keywordflow">if</span> ( idString.isEmpty() )
<a name="l02087"></a>02087     <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l02088"></a>02088 
<a name="l02089"></a>02089   <span class="comment">// search the identities if the folder matches the templates-folder</span>
<a name="l02090"></a>02090   <span class="keyword">const</span> KPIM::IdentityManager *im = <a class="code" href="classKMKernel.html#b61603e7dcd50af20492374aa91951cc" title="return the pointer to the identity manager">identityManager</a>();
<a name="l02091"></a>02091   <span class="keywordflow">for</span> ( KPIM::IdentityManager::ConstIterator it=im-&gt;begin(); it != im-&gt;end(); ++it )
<a name="l02092"></a>02092     <span class="keywordflow">if</span> ( (*it).templates() == idString )
<a name="l02093"></a>02093       <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l02094"></a>02094   <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l02095"></a>02095 }
<a name="l02096"></a>02096 
<a name="l02097"></a>02097 <span class="keywordtype">bool</span> KMKernel::folderIsTrash(<a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a> * folder)
<a name="l02098"></a>02098 {
<a name="l02099"></a>02099   assert(folder);
<a name="l02100"></a>02100   <span class="keywordflow">if</span> (folder == the_trashFolder) <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l02101"></a>02101   QStringList actList = acctMgr()-&gt;<a class="code" href="classKMail_1_1AccountManager.html#ed307d037c92a9e0c8eb6590846fbd3e">getAccounts</a>();
<a name="l02102"></a>02102   QStringList::Iterator it( actList.begin() );
<a name="l02103"></a>02103   <span class="keywordflow">for</span>( ; it != actList.end() ; ++it ) {
<a name="l02104"></a>02104     KMAccount* act = acctMgr()-&gt;<a class="code" href="classKMail_1_1AccountManager.html#f8c2abe2a69667320a30addb3e6370d6" title="Find account by name.">findByName</a>( *it );
<a name="l02105"></a>02105     <span class="keywordflow">if</span> ( act &amp;&amp; ( act-&gt;trash() == folder-&gt;<a class="code" href="classKMFolder.html#bab3b6b7c2758c19aa04c2bf72716b27" title="Returns a string that can be used to identify this folder.">idString</a>() ) )
<a name="l02106"></a>02106       <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l02107"></a>02107   }
<a name="l02108"></a>02108   <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l02109"></a>02109 }
<a name="l02110"></a>02110 
<a name="l02111"></a><a class="code" href="classKMKernel.html#9719478392afe2ef9b7609f8bbd72a39">02111</a> <span class="keywordtype">bool</span> <a class="code" href="classKMKernel.html#9719478392afe2ef9b7609f8bbd72a39" title="Returns true if the folder is one of the sent-mail folders.">KMKernel::folderIsSentMailFolder</a>( <span class="keyword">const</span> <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a> * folder )
<a name="l02112"></a>02112 {
<a name="l02113"></a>02113   assert( folder );
<a name="l02114"></a>02114   <span class="keywordflow">if</span> ( folder == the_sentFolder )
<a name="l02115"></a>02115     <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l02116"></a>02116 
<a name="l02117"></a>02117   QString idString = folder-&gt;<a class="code" href="classKMFolder.html#bab3b6b7c2758c19aa04c2bf72716b27" title="Returns a string that can be used to identify this folder.">idString</a>();
<a name="l02118"></a>02118   <span class="keywordflow">if</span> ( idString.isEmpty() ) <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l02119"></a>02119 
<a name="l02120"></a>02120   <span class="comment">// search the identities if the folder matches the sent-folder</span>
<a name="l02121"></a>02121   <span class="keyword">const</span> KPIM::IdentityManager * im = <a class="code" href="classKMKernel.html#b61603e7dcd50af20492374aa91951cc" title="return the pointer to the identity manager">identityManager</a>();
<a name="l02122"></a>02122   <span class="keywordflow">for</span>( KPIM::IdentityManager::ConstIterator it = im-&gt;begin(); it != im-&gt;end(); ++it )
<a name="l02123"></a>02123     <span class="keywordflow">if</span> ( (*it).fcc() == idString ) <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l02124"></a>02124   <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l02125"></a>02125 }
<a name="l02126"></a>02126 
<a name="l02127"></a><a class="code" href="classKMKernel.html#b61603e7dcd50af20492374aa91951cc">02127</a> KPIM::IdentityManager * <a class="code" href="classKMKernel.html#b61603e7dcd50af20492374aa91951cc" title="return the pointer to the identity manager">KMKernel::identityManager</a>() {
<a name="l02128"></a>02128   <span class="keywordflow">if</span> ( !mIdentityManager ) {
<a name="l02129"></a>02129     kdDebug(5006) &lt;&lt; <span class="stringliteral">"instantating KPIM::IdentityManager"</span> &lt;&lt; endl;
<a name="l02130"></a>02130     mIdentityManager = <span class="keyword">new</span> KPIM::IdentityManager( <span class="keyword">false</span>, <span class="keyword">this</span>, <span class="stringliteral">"mIdentityManager"</span> );
<a name="l02131"></a>02131   }
<a name="l02132"></a>02132   <span class="keywordflow">return</span> mIdentityManager;
<a name="l02133"></a>02133 }
<a name="l02134"></a>02134 
<a name="l02135"></a>02135 KMMsgIndex *KMKernel::msgIndex()
<a name="l02136"></a>02136 {
<a name="l02137"></a>02137     <span class="keywordflow">return</span> the_msgIndex;
<a name="l02138"></a>02138 }
<a name="l02139"></a>02139 
<a name="l02140"></a><a class="code" href="classKMKernel.html#96596ce95b1ab6f14a299ed38c370441">02140</a> KMainWindow* <a class="code" href="classKMKernel.html#96596ce95b1ab6f14a299ed38c370441" title="returns a reference to the first Mainwin or a temporary Mainwin">KMKernel::mainWin</a>()
<a name="l02141"></a>02141 {
<a name="l02142"></a>02142   <span class="keywordflow">if</span> (KMainWindow::memberList) {
<a name="l02143"></a>02143     KMainWindow *kmWin = 0;
<a name="l02144"></a>02144 
<a name="l02145"></a>02145     <span class="comment">// First look for a KMMainWin.</span>
<a name="l02146"></a>02146     <span class="keywordflow">for</span> (kmWin = KMainWindow::memberList-&gt;first(); kmWin;
<a name="l02147"></a>02147          kmWin = KMainWindow::memberList-&gt;next())
<a name="l02148"></a>02148       <span class="keywordflow">if</span> (kmWin-&gt;isA(<span class="stringliteral">"KMMainWin"</span>))
<a name="l02149"></a>02149         <span class="keywordflow">return</span> kmWin;
<a name="l02150"></a>02150 
<a name="l02151"></a>02151     <span class="comment">// There is no KMMainWin. Use any other KMainWindow instead (e.g. in</span>
<a name="l02152"></a>02152     <span class="comment">// case we are running inside Kontact) because we anyway only need</span>
<a name="l02153"></a>02153     <span class="comment">// it for modal message boxes and for KNotify events.</span>
<a name="l02154"></a>02154     kmWin = KMainWindow::memberList-&gt;first();
<a name="l02155"></a>02155     <span class="keywordflow">if</span> ( kmWin )
<a name="l02156"></a>02156       <span class="keywordflow">return</span> kmWin;
<a name="l02157"></a>02157   }
<a name="l02158"></a>02158 
<a name="l02159"></a>02159   <span class="comment">// There's not a single KMainWindow. Create a KMMainWin.</span>
<a name="l02160"></a>02160   <span class="comment">// This could happen if we want to pop up an error message</span>
<a name="l02161"></a>02161   <span class="comment">// while we are still doing the startup wizard and no other</span>
<a name="l02162"></a>02162   <span class="comment">// KMainWindow is running.</span>
<a name="l02163"></a>02163   mWin = <span class="keyword">new</span> KMMainWin;
<a name="l02164"></a>02164   <span class="keywordflow">return</span> mWin;
<a name="l02165"></a>02165 }
<a name="l02166"></a>02166 
<a name="l02167"></a>02167 
<a name="l02171"></a><a class="code" href="classKMKernel.html#fbd5f5e8c0d381daabea9502df9a9ec8">02171</a> <span class="keywordtype">void</span> <a class="code" href="classKMKernel.html#fbd5f5e8c0d381daabea9502df9a9ec8" title="empty all the trash bins">KMKernel::slotEmptyTrash</a>()
<a name="l02172"></a>02172 {
<a name="l02173"></a>02173   QString title = i18n(<span class="stringliteral">"Empty Trash"</span>);
<a name="l02174"></a>02174   QString text = i18n(<span class="stringliteral">"Are you sure you want to empty the trash folders of all accounts?"</span>);
<a name="l02175"></a>02175   <span class="keywordflow">if</span> (KMessageBox::warningContinueCancel(0, text, title,
<a name="l02176"></a>02176                                          KStdGuiItem::cont(), <span class="stringliteral">"confirm_empty_trash"</span>)
<a name="l02177"></a>02177       != KMessageBox::Continue)
<a name="l02178"></a>02178   {
<a name="l02179"></a>02179     <span class="keywordflow">return</span>;
<a name="l02180"></a>02180   }
<a name="l02181"></a>02181 
<a name="l02182"></a>02182   <span class="keywordflow">for</span> (KMAccount* acct = acctMgr()-&gt;first(); acct; acct = acctMgr()-&gt;<a class="code" href="classKMail_1_1AccountManager.html#f21f9077b425ba7218d934342b2b5835" title="Next account of the list.">next</a>())
<a name="l02183"></a>02183   {
<a name="l02184"></a>02184     <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* trash = <a class="code" href="classKMKernel.html#2a846601c0951eae06087e679a923925" title="Find a folder by ID string in all folder managers.">findFolderById</a>(acct-&gt;trash());
<a name="l02185"></a>02185     <span class="keywordflow">if</span> (trash)
<a name="l02186"></a>02186     {
<a name="l02187"></a>02187       trash-&gt;<a class="code" href="classKMFolder.html#864532ff929cd6c408e01bc58788e9fc" title="Delete entire folder.">expunge</a>();
<a name="l02188"></a>02188     }
<a name="l02189"></a>02189   }
<a name="l02190"></a>02190 }
<a name="l02191"></a>02191 
<a name="l02192"></a>02192 KConfig* KMKernel::config()
<a name="l02193"></a>02193 {
<a name="l02194"></a>02194   assert(mySelf);
<a name="l02195"></a>02195   <span class="keywordflow">if</span> (!mySelf-&gt;<a class="code" href="classKMKernel.html#8dc45e6ec3aa4edc5662157dd0fad5a6">mConfig</a>)
<a name="l02196"></a>02196   {
<a name="l02197"></a>02197     mySelf-&gt;<a class="code" href="classKMKernel.html#8dc45e6ec3aa4edc5662157dd0fad5a6">mConfig</a> = KSharedConfig::openConfig( <span class="stringliteral">"kmailrc"</span> );
<a name="l02198"></a>02198     <span class="comment">// Check that all updates have been run on the config file:</span>
<a name="l02199"></a>02199     KMail::checkConfigUpdates();
<a name="l02200"></a>02200   }
<a name="l02201"></a>02201   <span class="keywordflow">return</span> mySelf-&gt;<a class="code" href="classKMKernel.html#8dc45e6ec3aa4edc5662157dd0fad5a6">mConfig</a>;
<a name="l02202"></a>02202 }
<a name="l02203"></a>02203 
<a name="l02204"></a>02204 <a class="code" href="classKMailICalIfaceImpl.html" title="The implementation of the interface.">KMailICalIfaceImpl</a>&amp; KMKernel::iCalIface()
<a name="l02205"></a>02205 {
<a name="l02206"></a>02206   assert( mICalIface );
<a name="l02207"></a>02207   <span class="keywordflow">return</span> *mICalIface;
<a name="l02208"></a>02208 }
<a name="l02209"></a>02209 
<a name="l02210"></a>02210 <span class="keywordtype">void</span> KMKernel::selectFolder( QString folderPath )
<a name="l02211"></a>02211 {
<a name="l02212"></a>02212   kdDebug(5006)&lt;&lt;<span class="stringliteral">"Selecting a folder "</span>&lt;&lt;folderPath&lt;&lt;endl;
<a name="l02213"></a>02213   <span class="keyword">const</span> QString localPrefix = <span class="stringliteral">"/Local"</span>;
<a name="l02214"></a>02214   <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a> *folder = kmkernel-&gt;folderMgr()-&gt;getFolderByURL( folderPath );
<a name="l02215"></a>02215   <span class="keywordflow">if</span> ( !folder &amp;&amp; folderPath.startsWith( localPrefix ) )
<a name="l02216"></a>02216     folder = the_folderMgr-&gt;getFolderByURL( folderPath.mid( localPrefix.length() ) );
<a name="l02217"></a>02217   <span class="keywordflow">if</span> ( !folder )
<a name="l02218"></a>02218     folder = kmkernel-&gt;imapFolderMgr()-&gt;getFolderByURL( folderPath );
<a name="l02219"></a>02219   <span class="keywordflow">if</span> ( !folder )
<a name="l02220"></a>02220     folder = kmkernel-&gt;dimapFolderMgr()-&gt;getFolderByURL( folderPath );
<a name="l02221"></a>02221   Q_ASSERT( folder );
<a name="l02222"></a>02222 
<a name="l02223"></a>02223   KMMainWidget *widget = <a class="code" href="classKMKernel.html#9bb8b4b117c7f1c7c964b6a4c2222c72" title="Get first mainwidget.">getKMMainWidget</a>();
<a name="l02224"></a>02224   Q_ASSERT( widget );
<a name="l02225"></a>02225   <span class="keywordflow">if</span> ( !widget )
<a name="l02226"></a>02226     <span class="keywordflow">return</span>;
<a name="l02227"></a>02227 
<a name="l02228"></a>02228   KMFolderTree *tree = widget-&gt;folderTree();
<a name="l02229"></a>02229   tree-&gt;doFolderSelected( tree-&gt;indexOfFolder( folder ) );
<a name="l02230"></a>02230   tree-&gt;ensureItemVisible( tree-&gt;indexOfFolder( folder ) );
<a name="l02231"></a>02231 }
<a name="l02232"></a>02232 
<a name="l02233"></a><a class="code" href="classKMKernel.html#9bb8b4b117c7f1c7c964b6a4c2222c72">02233</a> KMMainWidget *<a class="code" href="classKMKernel.html#9bb8b4b117c7f1c7c964b6a4c2222c72" title="Get first mainwidget.">KMKernel::getKMMainWidget</a>()
<a name="l02234"></a>02234 {
<a name="l02235"></a>02235   <span class="comment">//This could definitely use a speadup</span>
<a name="l02236"></a>02236   QWidgetList *l = kapp-&gt;topLevelWidgets();
<a name="l02237"></a>02237   QWidgetListIt it( *l );
<a name="l02238"></a>02238   QWidget *wid;
<a name="l02239"></a>02239 
<a name="l02240"></a>02240   <span class="keywordflow">while</span> ( ( wid = it.current() ) != 0 ) {
<a name="l02241"></a>02241     ++it;
<a name="l02242"></a>02242     QObjectList *l2 = wid-&gt;topLevelWidget()-&gt;queryList( <span class="stringliteral">"KMMainWidget"</span> );
<a name="l02243"></a>02243     <span class="keywordflow">if</span> (l2 &amp;&amp; l2-&gt;first()) {
<a name="l02244"></a>02244       KMMainWidget* kmmw = <span class="keyword">dynamic_cast&lt;</span>KMMainWidget *<span class="keyword">&gt;</span>( l2-&gt;first() );
<a name="l02245"></a>02245       Q_ASSERT( kmmw );
<a name="l02246"></a>02246       <span class="keyword">delete</span> l2;
<a name="l02247"></a>02247       <span class="keyword">delete</span> l;
<a name="l02248"></a>02248       <span class="keywordflow">return</span> kmmw;
<a name="l02249"></a>02249     }
<a name="l02250"></a>02250     <span class="keyword">delete</span> l2;
<a name="l02251"></a>02251   }
<a name="l02252"></a>02252   <span class="keyword">delete</span> l;
<a name="l02253"></a>02253   <span class="keywordflow">return</span> 0;
<a name="l02254"></a>02254 }
<a name="l02255"></a>02255 
<a name="l02256"></a>02256 <span class="keywordtype">void</span> KMKernel::slotRunBackgroundTasks() <span class="comment">// called regularly by timer</span>
<a name="l02257"></a>02257 {
<a name="l02258"></a>02258   <span class="comment">// Hidden KConfig keys. Not meant to be used, but a nice fallback in case</span>
<a name="l02259"></a>02259   <span class="comment">// a stable kmail release goes out with a nasty bug in CompactionJob...</span>
<a name="l02260"></a>02260   KConfigGroup generalGroup( config(), <span class="stringliteral">"General"</span> );
<a name="l02261"></a>02261 
<a name="l02262"></a>02262   <span class="keywordflow">if</span> ( generalGroup.readBoolEntry( <span class="stringliteral">"auto-expiring"</span>, <span class="keyword">true</span> ) ) {
<a name="l02263"></a>02263     the_folderMgr-&gt;expireAllFolders( <span class="keyword">false</span> <span class="comment">/*scheduled, not immediate*/</span> );
<a name="l02264"></a>02264     the_imapFolderMgr-&gt;expireAllFolders( <span class="keyword">false</span> <span class="comment">/*scheduled, not immediate*/</span> );
<a name="l02265"></a>02265     the_dimapFolderMgr-&gt;expireAllFolders( <span class="keyword">false</span> <span class="comment">/*scheduled, not immediate*/</span> );
<a name="l02266"></a>02266     <span class="comment">// the_searchFolderMgr: no expiry there</span>
<a name="l02267"></a>02267   }
<a name="l02268"></a>02268 
<a name="l02269"></a>02269   <span class="keywordflow">if</span> ( generalGroup.readBoolEntry( <span class="stringliteral">"auto-compaction"</span>, <span class="keyword">true</span> ) ) {
<a name="l02270"></a>02270     the_folderMgr-&gt;compactAllFolders( <span class="keyword">false</span> <span class="comment">/*scheduled, not immediate*/</span> );
<a name="l02271"></a>02271     <span class="comment">// the_imapFolderMgr: no compaction</span>
<a name="l02272"></a>02272     the_dimapFolderMgr-&gt;compactAllFolders( <span class="keyword">false</span> <span class="comment">/*scheduled, not immediate*/</span> );
<a name="l02273"></a>02273     <span class="comment">// the_searchFolderMgr: no compaction</span>
<a name="l02274"></a>02274   }
<a name="l02275"></a>02275 
<a name="l02276"></a>02276 <span class="preprocessor">#ifdef DEBUG_SCHEDULER // for debugging, see jobscheduler.h</span>
<a name="l02277"></a>02277 <span class="preprocessor"></span>  mBackgroundTasksTimer-&gt;start( 60 * 1000, <span class="keyword">true</span> ); <span class="comment">// check again in 1 minute</span>
<a name="l02278"></a>02278 <span class="preprocessor">#else</span>
<a name="l02279"></a>02279 <span class="preprocessor"></span>  mBackgroundTasksTimer-&gt;start( 4 * 60 * 60 * 1000, <span class="keyword">true</span> ); <span class="comment">// check again in 4 hours</span>
<a name="l02280"></a>02280 <span class="preprocessor">#endif</span>
<a name="l02281"></a>02281 <span class="preprocessor"></span>
<a name="l02282"></a>02282 }
<a name="l02283"></a>02283 
<a name="l02284"></a><a class="code" href="classKMKernel.html#16d48005d23673fd6b3b8dbe68aca18d">02284</a> <span class="keywordtype">void</span> <a class="code" href="classKMKernel.html#16d48005d23673fd6b3b8dbe68aca18d" title="Expire all folders, used for the gui action.">KMKernel::expireAllFoldersNow</a>() <span class="comment">// called by the GUI</span>
<a name="l02285"></a>02285 {
<a name="l02286"></a>02286   the_folderMgr-&gt;expireAllFolders( <span class="keyword">true</span> <span class="comment">/*immediate*/</span> );
<a name="l02287"></a>02287   the_imapFolderMgr-&gt;expireAllFolders( <span class="keyword">true</span> <span class="comment">/*immediate*/</span> );
<a name="l02288"></a>02288   the_dimapFolderMgr-&gt;expireAllFolders( <span class="keyword">true</span> <span class="comment">/*immediate*/</span> );
<a name="l02289"></a>02289 }
<a name="l02290"></a>02290 
<a name="l02291"></a><a class="code" href="classKMKernel.html#275b794215db576d86cd6ece0ec6348a">02291</a> <span class="keywordtype">void</span> <a class="code" href="classKMKernel.html#275b794215db576d86cd6ece0ec6348a" title="Compact all folders, used for the gui action (and from DCOP).">KMKernel::compactAllFolders</a>() <span class="comment">// called by the GUI</span>
<a name="l02292"></a>02292 {
<a name="l02293"></a>02293   the_folderMgr-&gt;compactAllFolders( <span class="keyword">true</span> <span class="comment">/*immediate*/</span> );
<a name="l02294"></a>02294   <span class="comment">//the_imapFolderMgr-&gt;compactAllFolders( true /*immediate*/ );</span>
<a name="l02295"></a>02295   the_dimapFolderMgr-&gt;compactAllFolders( <span class="keyword">true</span> <span class="comment">/*immediate*/</span> );
<a name="l02296"></a>02296 }
<a name="l02297"></a>02297 
<a name="l02298"></a><a class="code" href="classKMKernel.html#2a846601c0951eae06087e679a923925">02298</a> <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* <a class="code" href="classKMKernel.html#2a846601c0951eae06087e679a923925" title="Find a folder by ID string in all folder managers.">KMKernel::findFolderById</a>( <span class="keyword">const</span> QString&amp; idString )
<a name="l02299"></a>02299 {
<a name="l02300"></a>02300   <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a> * folder = the_folderMgr-&gt;findIdString( idString );
<a name="l02301"></a>02301   <span class="keywordflow">if</span> ( !folder )
<a name="l02302"></a>02302     folder = the_imapFolderMgr-&gt;findIdString( idString );
<a name="l02303"></a>02303   <span class="keywordflow">if</span> ( !folder )
<a name="l02304"></a>02304     folder = the_dimapFolderMgr-&gt;findIdString( idString );
<a name="l02305"></a>02305   <span class="keywordflow">if</span> ( !folder )
<a name="l02306"></a>02306     folder = the_searchFolderMgr-&gt;findIdString( idString );
<a name="l02307"></a>02307   <span class="keywordflow">return</span> folder;
<a name="l02308"></a>02308 }
<a name="l02309"></a>02309 
<a name="l02310"></a><a class="code" href="classKMKernel.html#2fbabe6f58f0f95eeb8f7ed48e25a8eb">02310</a> ::KIMProxy* <a class="code" href="classKMKernel.html#2fbabe6f58f0f95eeb8f7ed48e25a8eb" title="Get a reference to KMail&amp;#39;s KIMProxy instance.">KMKernel::imProxy</a>()
<a name="l02311"></a>02311 {
<a name="l02312"></a>02312   <span class="keywordflow">return</span> KIMProxy::instance( kapp-&gt;dcopClient() );
<a name="l02313"></a>02313 }
<a name="l02314"></a>02314 
<a name="l02315"></a><a class="code" href="classKMKernel.html#fc186b954b6b201b464f337a1cf298c4">02315</a> <span class="keywordtype">void</span> <a class="code" href="classKMKernel.html#fc186b954b6b201b464f337a1cf298c4" title="Set the state of the abort requested variable to false, i.e.">KMKernel::enableMailCheck</a>()
<a name="l02316"></a>02316 {
<a name="l02317"></a>02317   mMailCheckAborted = <span class="keyword">false</span>;
<a name="l02318"></a>02318 }
<a name="l02319"></a>02319 
<a name="l02320"></a><a class="code" href="classKMKernel.html#5cca9ba7173a93f7dbebe5288e55d64e">02320</a> <span class="keywordtype">bool</span> <a class="code" href="classKMKernel.html#5cca9ba7173a93f7dbebe5288e55d64e" title="Returns true IFF the user has requested that the current mail checks should be aborted...">KMKernel::mailCheckAborted</a>()<span class="keyword"> const</span>
<a name="l02321"></a>02321 <span class="keyword"></span>{
<a name="l02322"></a>02322   <span class="keywordflow">return</span> mMailCheckAborted;
<a name="l02323"></a>02323 }
<a name="l02324"></a>02324 
<a name="l02325"></a><a class="code" href="classKMKernel.html#d4225575664dff50a1799df49031a7af">02325</a> <span class="keywordtype">void</span> <a class="code" href="classKMKernel.html#d4225575664dff50a1799df49031a7af" title="Set the state of the abort requested variable to true, (to let the current jobs run...">KMKernel::abortMailCheck</a>()
<a name="l02326"></a>02326 {
<a name="l02327"></a>02327   mMailCheckAborted = <span class="keyword">true</span>;
<a name="l02328"></a>02328 }
<a name="l02329"></a>02329 
<a name="l02330"></a>02330 <span class="keywordtype">bool</span> KMKernel::canQueryClose()
<a name="l02331"></a>02331 {
<a name="l02332"></a>02332   <span class="keywordflow">if</span> ( KMMainWidget::mainWidgetList() &amp;&amp;
<a name="l02333"></a>02333        KMMainWidget::mainWidgetList()-&gt;count() &gt; 1 )
<a name="l02334"></a>02334     <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l02335"></a>02335   KMMainWidget *widget = <a class="code" href="classKMKernel.html#9bb8b4b117c7f1c7c964b6a4c2222c72" title="Get first mainwidget.">getKMMainWidget</a>();
<a name="l02336"></a>02336   <span class="keywordflow">if</span> ( !widget )
<a name="l02337"></a>02337     <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l02338"></a>02338   <a class="code" href="classKMSystemTray.html" title="KMSystemTray extends KSystemTray and handles system tray notification for KMail.">KMSystemTray</a>* systray = widget-&gt;systray();
<a name="l02339"></a>02339   <span class="keywordflow">if</span> ( !systray || GlobalSettings::closeDespiteSystemTray() )
<a name="l02340"></a>02340       <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l02341"></a>02341   <span class="keywordflow">if</span> ( systray-&gt;<a class="code" href="classKMSystemTray.html#16cad7317e33e1e7e18f316b811d9b67">mode</a>() == GlobalSettings::EnumSystemTrayPolicy::ShowAlways ) {
<a name="l02342"></a>02342     systray-&gt;<a class="code" href="classKMSystemTray.html#834c9d6a49e7af6e38a9ef93dd2cfdd2">hideKMail</a>();
<a name="l02343"></a>02343     <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l02344"></a>02344   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( systray-&gt;<a class="code" href="classKMSystemTray.html#16cad7317e33e1e7e18f316b811d9b67">mode</a>() == GlobalSettings::EnumSystemTrayPolicy::ShowOnUnread ) {
<a name="l02345"></a>02345     systray-&gt;show();
<a name="l02346"></a>02346     systray-&gt;<a class="code" href="classKMSystemTray.html#834c9d6a49e7af6e38a9ef93dd2cfdd2">hideKMail</a>();
<a name="l02347"></a>02347     <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l02348"></a>02348   }
<a name="l02349"></a>02349   <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l02350"></a>02350 }
<a name="l02351"></a>02351 
<a name="l02352"></a><a class="code" href="classKMKernel.html#ffd793427ffa2980d9f718c59fbba516">02352</a> <span class="keywordtype">void</span> <a class="code" href="classKMKernel.html#ffd793427ffa2980d9f718c59fbba516" title="Called by the folder tree if the count of unread/total messages changed.">KMKernel::messageCountChanged</a>()
<a name="l02353"></a>02353 {
<a name="l02354"></a>02354   mTimeOfLastMessageCountChange = ::time( 0 );
<a name="l02355"></a>02355 }
<a name="l02356"></a>02356 
<a name="l02357"></a>02357 <span class="keywordtype">int</span> KMKernel::timeOfLastMessageCountChange()<span class="keyword"> const</span>
<a name="l02358"></a>02358 <span class="keyword"></span>{
<a name="l02359"></a>02359   <span class="keywordflow">return</span> mTimeOfLastMessageCountChange;
<a name="l02360"></a>02360 }
<a name="l02361"></a>02361 
<a name="l02362"></a><a class="code" href="classKMKernel.html#c61ffa11b8ca84e1a97a7040b8a4a077">02362</a> Wallet *<a class="code" href="classKMKernel.html#c61ffa11b8ca84e1a97a7040b8a4a077" title="Open KDE wallet and set it to kmail folder.">KMKernel::wallet</a>() {
<a name="l02363"></a>02363   <span class="keyword">static</span> <span class="keywordtype">bool</span> walletOpenFailed = <span class="keyword">false</span>;
<a name="l02364"></a>02364   <span class="keywordflow">if</span> ( mWallet &amp;&amp; mWallet-&gt;isOpen() )
<a name="l02365"></a>02365     <span class="keywordflow">return</span> mWallet;
<a name="l02366"></a>02366 
<a name="l02367"></a>02367   <span class="keywordflow">if</span> ( !Wallet::isEnabled() || walletOpenFailed )
<a name="l02368"></a>02368     <span class="keywordflow">return</span> 0;
<a name="l02369"></a>02369 
<a name="l02370"></a>02370   <span class="comment">// find an appropriate parent window for the wallet dialog</span>
<a name="l02371"></a>02371   WId window = 0;
<a name="l02372"></a>02372   <span class="keywordflow">if</span> ( qApp-&gt;activeWindow() )
<a name="l02373"></a>02373     window = qApp-&gt;activeWindow()-&gt;winId();
<a name="l02374"></a>02374   <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( <a class="code" href="classKMKernel.html#9bb8b4b117c7f1c7c964b6a4c2222c72" title="Get first mainwidget.">getKMMainWidget</a>() )
<a name="l02375"></a>02375     window = <a class="code" href="classKMKernel.html#9bb8b4b117c7f1c7c964b6a4c2222c72" title="Get first mainwidget.">getKMMainWidget</a>()-&gt;topLevelWidget()-&gt;winId();
<a name="l02376"></a>02376 
<a name="l02377"></a>02377   <span class="keyword">delete</span> mWallet;
<a name="l02378"></a>02378   mWallet = Wallet::openWallet( Wallet::NetworkWallet(), window );
<a name="l02379"></a>02379 
<a name="l02380"></a>02380   <span class="keywordflow">if</span> ( !mWallet ) {
<a name="l02381"></a>02381     walletOpenFailed = <span class="keyword">true</span>;
<a name="l02382"></a>02382     <span class="keywordflow">return</span> 0;
<a name="l02383"></a>02383   }
<a name="l02384"></a>02384 
<a name="l02385"></a>02385   <span class="keywordflow">if</span> ( !mWallet-&gt;hasFolder( <span class="stringliteral">"kmail"</span> ) )
<a name="l02386"></a>02386     mWallet-&gt;createFolder( <span class="stringliteral">"kmail"</span> );
<a name="l02387"></a>02387   mWallet-&gt;setFolder( <span class="stringliteral">"kmail"</span> );
<a name="l02388"></a>02388   <span class="keywordflow">return</span> mWallet;
<a name="l02389"></a>02389 }
<a name="l02390"></a>02390 
<a name="l02391"></a><a class="code" href="classKMKernel.html#eaa98fbd0bd0d4dc42e1586cf01a83f6">02391</a> QValueList&lt; QGuardedPtr&lt;KMFolder&gt; &gt; <a class="code" href="classKMKernel.html#eaa98fbd0bd0d4dc42e1586cf01a83f6">KMKernel::allFolders</a>()
<a name="l02392"></a>02392 {
<a name="l02393"></a>02393   QStringList names;
<a name="l02394"></a>02394   QValueList&lt;QGuardedPtr&lt;KMFolder&gt; &gt; folders;
<a name="l02395"></a>02395   folderMgr()-&gt;createFolderList(&amp;names, &amp;folders);
<a name="l02396"></a>02396   imapFolderMgr()-&gt;createFolderList(&amp;names, &amp;folders);
<a name="l02397"></a>02397   dimapFolderMgr()-&gt;createFolderList(&amp;names, &amp;folders);
<a name="l02398"></a>02398   searchFolderMgr()-&gt;createFolderList(&amp;names, &amp;folders);
<a name="l02399"></a>02399 
<a name="l02400"></a>02400   <span class="keywordflow">return</span> folders;
<a name="l02401"></a>02401 }
<a name="l02402"></a>02402 
<a name="l02403"></a>02403 <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a> *KMKernel::currentFolder() {
<a name="l02404"></a>02404   KMMainWidget *widget = <a class="code" href="classKMKernel.html#9bb8b4b117c7f1c7c964b6a4c2222c72" title="Get first mainwidget.">getKMMainWidget</a>();
<a name="l02405"></a>02405   <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a> *folder = 0;
<a name="l02406"></a>02406   <span class="keywordflow">if</span> ( widget &amp;&amp; widget-&gt;folderTree() ) {
<a name="l02407"></a>02407     folder = widget-&gt;folderTree()-&gt;currentFolder();
<a name="l02408"></a>02408   }
<a name="l02409"></a>02409   <span class="keywordflow">return</span> folder;
<a name="l02410"></a>02410 }
<a name="l02411"></a>02411 
<a name="l02412"></a>02412 <span class="comment">// can't be inline, since KMSender isn't known to implement</span>
<a name="l02413"></a>02413 <span class="comment">// KMail::MessageSender outside this .cpp file</span>
<a name="l02414"></a>02414 KMail::MessageSender * KMKernel::msgSender() { <span class="keywordflow">return</span> the_msgSender; }
<a name="l02415"></a>02415 
<a name="l02416"></a>02416 <span class="preprocessor">#include "kmkernel.moc"</span>
</pre></div></div>
    </div></div>


      </td>
  </tr>
  <tr>
    <td valign="top" id="leftmenu" width="25%">
      <a name="navigation"></a>
      <div class="menu_box"><h2>kmail</h2>
<div class="nav_list">
<ul><li><a href="index.html">Main Page</a></li><li><a href="namespaces.html">Namespace List</a></li><li><a href="hierarchy.html">Class Hierarchy</a></li><li><a href="classes.html">Alphabetical List</a></li><li><a href="annotated.html">Class List</a></li><li><a href="files.html">File List</a></li><li><a href="namespacemembers.html">Namespace Members</a></li><li><a href="functions.html">Class Members</a></li><li><a href="pages.html">Related Pages</a></li></ul>
<!--
<h2>Class Picker</h2>
<div style="text-align: center;">
<form name="guideform">
<select name="guidelinks" style="width:100%;" onChange="window.location=document.guideform.guidelinks.options[document.guideform.guidelinks.selectedIndex].value">
<option value="annotated.html">-- Choose --</option>
  <option value="classAccountUpdater.html">accountupdater</option>,  <option value="classAttachmentModifyCommand.html">attachmentmodifycommand</option>,  <option value="classFolderStorage.html">folderstorage</option>,  <option value="classKCursorSaver.html">kcursorsaver</option>,  <option value="classKleo_1_1KeyResolver.html">kleo::keyresolver</option>,  <option value="classKListViewIndexedSearchLine.html">klistviewindexedsearchline</option>,  <option value="classKMAcctFolder.html">kmacctfolder</option>,  <option value="classKMAcctSelDlg.html">kmacctseldlg</option>,  <option value="classKMail_1_1AccountComboBox.html">kmail::accountcombobox</option>,  <option value="classKMail_1_1AccountManager.html">kmail::accountmanager</option>,  <option value="classKMail_1_1ACLEntryDialog.html">kmail::aclentrydialog</option>,  <option value="classKMail_1_1ACLJobs_1_1DeleteACLJob.html">kmail::acljobs::deleteacljob</option>,  <option value="classKMail_1_1ACLJobs_1_1GetACLJob.html">kmail::acljobs::getacljob</option>,  <option value="classKMail_1_1ACLJobs_1_1GetUserRightsJob.html">kmail::acljobs::getuserrightsjob</option>,  <option value="classKMail_1_1ACLJobs_1_1MultiSetACLJob.html">kmail::acljobs::multisetacljob</option>,  <option value="classKMail_1_1AnnotationJobs_1_1GetAnnotationJob.html">kmail::annotationjobs::getannotationjob</option>,  <option value="classKMail_1_1AnnotationJobs_1_1MultiGetAnnotationJob.html">kmail::annotationjobs::multigetannotationjob</option>,  <option value="classKMail_1_1AnnotationJobs_1_1MultiSetAnnotationJob.html">kmail::annotationjobs::multisetannotationjob</option>,  <option value="classKMail_1_1AnnotationJobs_1_1MultiUrlGetAnnotationJob.html">kmail::annotationjobs::multiurlgetannotationjob</option>,  <option value="classKMail_1_1AntiSpamConfig.html">kmail::antispamconfig</option>,  <option value="classKMail_1_1AntiSpamWizard.html">kmail::antispamwizard</option>,  <option value="classKMail_1_1AntiSpamWizard_1_1ConfigReader.html">kmail::antispamwizard::configreader</option>,  <option value="classKMail_1_1AntiSpamWizard_1_1SpamToolConfig.html">kmail::antispamwizard::spamtoolconfig</option>,  <option value="classKMail_1_1Callback.html">kmail::callback</option>,  <option value="classKMail_1_1CopyFolderJob.html">kmail::copyfolderjob</option>,  <option value="classKMail_1_1DictionaryComboBox.html">kmail::dictionarycombobox</option>,  <option value="classKMail_1_1EditorWatcher.html">kmail::editorwatcher</option>,  <option value="classKMail_1_1FilterImporterExporter.html">kmail::filterimporterexporter</option>,  <option value="classKMail_1_1FilterLog.html">kmail::filterlog</option>,  <option value="classKMail_1_1FilterLogDialog.html">kmail::filterlogdialog</option>,  <option value="classKMail_1_1FolderDiaACLTab.html">kmail::folderdiaacltab</option>,  <option value="classKMail_1_1FolderDiaGeneralTab.html">kmail::folderdiageneraltab</option>,  <option value="classKMail_1_1FolderDiaQuotaTab.html">kmail::folderdiaquotatab</option>,  <option value="classKMail_1_1FolderDiaTab.html">kmail::folderdiatab</option>,  <option value="classKMail_1_1FolderDiaTemplatesTab.html">kmail::folderdiatemplatestab</option>,  <option value="classKMail_1_1FolderRequester.html">kmail::folderrequester</option>,  <option value="classKMail_1_1HeaderItem.html">kmail::headeritem</option>,  <option value="classKMail_1_1HeaderStyle.html">kmail::headerstyle</option>,  <option value="classKMail_1_1HtmlStatusBar.html">kmail::htmlstatusbar</option>,  <option value="classKMail_1_1HtmlWriter.html">kmail::htmlwriter</option>,  <option value="classKMail_1_1IdentityDrag.html">kmail::identitydrag</option>,  <option value="classKMail_1_1IdentityListView.html">kmail::identitylistview</option>,  <option value="classKMail_1_1IdentityListViewItem.html">kmail::identitylistviewitem</option>,  <option value="classKMail_1_1Interface_1_1BodyPart.html">kmail::interface::bodypart</option>,  <option value="classKMail_1_1Interface_1_1BodyPartFormatterPlugin.html">kmail::interface::bodypartformatterplugin</option>,  <option value="classKMail_1_1Interface_1_1BodyPartMemento.html">kmail::interface::bodypartmemento</option>,  <option value="classKMail_1_1Interface_1_1BodyPartURLHandler.html">kmail::interface::bodyparturlhandler</option>,  <option value="classKMail_1_1Interface_1_1Observable.html">kmail::interface::observable</option>,  <option value="classKMail_1_1Interface_1_1Observer.html">kmail::interface::observer</option>,  <option value="classKMail_1_1JobScheduler.html">kmail::jobscheduler</option>,  <option value="classKMail_1_1ListJob.html">kmail::listjob</option>,  <option value="classKMail_1_1MaildirCompactionJob.html">kmail::maildircompactionjob</option>,  <option value="classKMail_1_1MailingList.html">kmail::mailinglist</option>,  <option value="classKMail_1_1MboxCompactionJob.html">kmail::mboxcompactionjob</option>,  <option value="classKMail_1_1MessageActions.html">kmail::messageactions</option>,  <option value="classKMail_1_1MessageCopyHelper.html">kmail::messagecopyhelper</option>,  <option value="classKMail_1_1PartNodeBodyPart.html">kmail::partnodebodypart</option>,  <option value="classKMail_1_1PopAccount.html">kmail::popaccount</option>,  <option value="classKMail_1_1QuotaJobs_1_1GetQuotarootJob.html">kmail::quotajobs::getquotarootjob</option>,  <option value="classKMail_1_1QuotaJobs_1_1GetStorageQuotaJob.html">kmail::quotajobs::getstoragequotajob</option>,  <option value="classKMail_1_1RedirectDialog.html">kmail::redirectdialog</option>,  <option value="classKMail_1_1RenameJob.html">kmail::renamejob</option>,  <option value="classKMail_1_1RuleWidgetHandler.html">kmail::rulewidgethandler</option>,  <option value="classKMail_1_1RuleWidgetHandlerManager.html">kmail::rulewidgethandlermanager</option>,  <option value="classKMail_1_1ScheduledCompactionTask.html">kmail::scheduledcompactiontask</option>,  <option value="classKMail_1_1ScheduledExpireTask.html">kmail::scheduledexpiretask</option>,  <option value="classKMail_1_1ScheduledJob.html">kmail::scheduledjob</option>,  <option value="classKMail_1_1ScheduledTask.html">kmail::scheduledtask</option>,  <option value="classKMail_1_1SearchJob.html">kmail::searchjob</option>,  <option value="classKMail_1_1SearchWindow.html">kmail::searchwindow</option>,  <option value="classKMail_1_1SecondaryWindow.html">kmail::secondarywindow</option>,  <option value="classKMail_1_1SieveDebugDialog.html">kmail::sievedebugdialog</option>,  <option value="classKMail_1_1SortCacheItem.html">kmail::sortcacheitem</option>,  <option value="classKMail_1_1SpamHeaderAnalyzer.html">kmail::spamheaderanalyzer</option>,  <option value="classKMail_1_1SpamScore.html">kmail::spamscore</option>,  <option value="classKMail_1_1TeeHtmlWriter.html">kmail::teehtmlwriter</option>,  <option value="classKMail_1_1TransportManager.html">kmail::transportmanager</option>,  <option value="classKMail_1_1UndoInfo.html">kmail::undoinfo</option>,  <option value="classKMail_1_1URLHandler.html">kmail::urlhandler</option>,  <option value="classKMail_1_1URLHandlerManager.html">kmail::urlhandlermanager</option>,  <option value="classKMail_1_1Util_1_1LaterDeleter.html">kmail::util::laterdeleter</option>,  <option value="classKMailICalIfaceImpl.html">kmailicalifaceimpl</option>,  <option value="classKMailIface.html">kmailiface</option>,  <option value="classKMDict.html">kmdict</option>,  <option value="classKMDictItem.html">kmdictitem</option>,  <option value="classKMFilterAction.html">kmfilteraction</option>,  <option value="classKMFilterActionDict.html">kmfilteractiondict</option>,  <option value="classKMFilterActionWidget.html">kmfilteractionwidget</option>,  <option value="classKMFilterActionWithAddress.html">kmfilteractionwithaddress</option>,  <option value="classKMFilterActionWithFolder.html">kmfilteractionwithfolder</option>,  <option value="classKMFilterActionWithNone.html">kmfilteractionwithnone</option>,  <option value="classKMFilterActionWithString.html">kmfilteractionwithstring</option>,  <option value="classKMFilterActionWithStringList.html">kmfilteractionwithstringlist</option>,  <option value="classKMFilterActionWithUOID.html">kmfilteractionwithuoid</option>,  <option value="classKMFilterActionWithUrl.html">kmfilteractionwithurl</option>,  <option value="classKMFilterDlg.html">kmfilterdlg</option>,  <option value="classKMFilterListBox.html">kmfilterlistbox</option>,  <option value="classKMFolder.html">kmfolder</option>,  <option value="classKMFolderDialog.html">kmfolderdialog</option>,  <option value="classKMFolderDir.html">kmfolderdir</option>,  <option value="classKMFolderIndex.html">kmfolderindex</option>,  <option value="classKMFolderOpener.html">kmfolderopener</option>,  <option value="classKMHeaders.html">kmheaders</option>,  <option value="classKMKernel.html">kmkernel</option>,  <option value="classKMMenuCommand.html">kmmenucommand</option>,  <option value="classKMMessage.html">kmmessage</option>,  <option value="classKMMsgDict.html">kmmsgdict</option>,  <option value="classKMMsgList.html">kmmsglist</option>,  <option value="classKMMsgPartDialog.html">kmmsgpartdialog</option>,  <option value="classKMMsgPartDialogCompat.html">kmmsgpartdialogcompat</option>,  <option value="classKMPopHeadersView.html">kmpopheadersview</option>,  <option value="classKMReaderWin.html">kmreaderwin</option>,  <option value="classKMSearchPattern.html">kmsearchpattern</option>,  <option value="classKMSearchPatternEdit.html">kmsearchpatternedit</option>,  <option value="classKMSearchRule.html">kmsearchrule</option>,  <option value="classKMSearchRuleNumerical.html">kmsearchrulenumerical</option>,  <option value="classKMSearchRuleStatus.html">kmsearchrulestatus</option>,  <option value="classKMSearchRuleString.html">kmsearchrulestring</option>,  <option value="classKMSearchRuleWidget.html">kmsearchrulewidget</option>,  <option value="classKMSystemTray.html">kmsystemtray</option>,  <option value="classMailComposerIface.html">mailcomposeriface</option>,  <option value="classScalix_1_1FolderAttributeParser.html">scalix::folderattributeparser</option>,  <option value="classSnippetConfig.html">snippetconfig</option>,  <option value="classSnippetGroup.html">snippetgroup</option>,  <option value="classSnippetItem.html">snippetitem</option>,  <option value="classSnippetSettings.html">snippetsettings</option>,  <option value="classSnippetWidget.html">snippetwidget</option>,
</select>
</form>
</div>
-->
</div></div>
<div class="menu_box"><h2>API Dox</h2>
<div class="nav_list">
<ul>
<li><a href="../../akregator/html/index.html">akregator</a></li><li>&nbsp;&nbsp;<a href="../../akregator/src/html/index.html">src</a></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<a href="../../akregator/src/librss/html/index.html">librss</a></li><li><a href="../../certmanager/html/index.html">certmanager</a></li><li>&nbsp;&nbsp;<a href="../../certmanager/lib/html/index.html">lib</a></li><li><a href="../../kaddressbook/html/index.html">kaddressbook</a></li><li><a href="../../kalarm/html/index.html">kalarm</a></li><li>&nbsp;&nbsp;<a href="../../kalarm/lib/html/index.html">lib</a></li><li><a href="../../kandy/html/index.html">kandy</a></li><li><a href="../../karm/html/index.html">karm</a></li><li><a href="../../kdgantt/html/index.html">kdgantt</a></li><li><a href="../../kgantt/html/index.html">kgantt</a></li><li><a href="../../kioslaves/html/index.html">kioslaves</a></li><li>&nbsp;&nbsp;<a href="../../kioslaves/imap4/html/index.html">imap4</a></li><li>&nbsp;&nbsp;<a href="../../kioslaves/mbox/html/index.html">mbox</a></li><li><a href="../../kitchensync/html/index.html">kitchensync</a></li><li><a href="../../kmail/html/index.html">kmail</a></li><li><a href="../../knotes/html/index.html">knotes</a></li><li><a href="../../konsolekalendar/html/index.html">konsolekalendar</a></li><li><a href="../../kontact/html/index.html">kontact</a></li><li><a href="../../korganizer/html/index.html">korganizer</a></li><li><a href="../../kpilot/html/index.html">kpilot</a></li><li>&nbsp;&nbsp;<a href="../../kpilot/kpilot/html/index.html">kpilot</a></li><li>&nbsp;&nbsp;<a href="../../kpilot/lib/html/index.html">lib</a></li><li><a href="../../libemailfunctions/html/index.html">libemailfunctions</a></li><li><a href="../../libkcal/html/index.html">libkcal</a></li><li><a href="../../libkdepim/html/index.html">libkdepim</a></li><li><a href="../../libkholidays/html/index.html">libkholidays</a></li><li><a href="../../libkmime/html/index.html">libkmime</a></li><li><a href="../../libkpgp/html/index.html">libkpgp</a></li><li><a href="../../libkpimidentities/html/index.html">libkpimidentities</a></li>
</ul></div></div>


        </td>
</tr>
</table>

<span class="doNotDisplay">
  <a href="http://www.kde.org/" accesskey="8">KDE Home</a> |
  <a href="http://accessibility.kde.org/" accesskey="9">KDE Accessibility Home</a> |
  <a href="http://www.kde.org/media/accesskeys.php" accesskey="0">Description of Access Keys</a>
</span>


<div style="height: 8px"></div>

<div id="footer">
  <div id="footer_left">
    Maintained by <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;groo&#116;&#64;kde&#46;or&#x67;">Adriaan de Groot</a>
and
<a href="&#109;a&#105;&#108;&#116;&#111;&#58;w&#105;nter&#64;kde&#46;or&#x67">Allen Winter</a>.
<br/>
    KDE and K Desktop Environment are trademarks of <a href="http://www.kde.org/areas/kde-ev/" title="Homepage of the KDE non-profit Organization">KDE e.V.</a> |
    <a href="http://www.kde.org/contact/impressum.php">Legal</a>
  </div>
  <div id="footer_right"><img src="/media/images/footer_right.png" style="margin: 0px" alt="" /></div>
</div>

<!--
WARNING: DO NOT SEND MAIL TO THE FOLLOWING EMAIL ADDRESS! YOU WILL
BE BLOCKED INSTANTLY AND PERMANENTLY!
<a href="mailto:aaaatrap-425acc3b5374943f@kde.org">Block me</a>
WARNING END
-->

</body>
</html>