Sophie

Sophie

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

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: kmailicalifaceimpl.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>kmailicalifaceimpl.cpp</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
<a name="l00002"></a>00002 <span class="comment">    This file is part of KMail.</span>
<a name="l00003"></a>00003 <span class="comment"></span>
<a name="l00004"></a>00004 <span class="comment">    Copyright (c) 2003 Steffen Hansen &lt;steffen@klaralvdalens-datakonsult.se&gt;</span>
<a name="l00005"></a>00005 <span class="comment">    Copyright (c) 2003 - 2004 Bo Thorsen &lt;bo@sonofthor.dk&gt;</span>
<a name="l00006"></a>00006 <span class="comment">    Copyright (c) 2004 Till Adam &lt;adam@kde.org&gt;</span>
<a name="l00007"></a>00007 <span class="comment"></span>
<a name="l00008"></a>00008 <span class="comment">    This library is free software; you can redistribute it and/or</span>
<a name="l00009"></a>00009 <span class="comment">    modify it under the terms of the GNU Library General Public</span>
<a name="l00010"></a>00010 <span class="comment">    License as published by the Free Software Foundation; either</span>
<a name="l00011"></a>00011 <span class="comment">    version 2 of the License, or (at your option) any later version.</span>
<a name="l00012"></a>00012 <span class="comment"></span>
<a name="l00013"></a>00013 <span class="comment">    This library is distributed in the hope that it will be useful,</span>
<a name="l00014"></a>00014 <span class="comment">    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<a name="l00015"></a>00015 <span class="comment">    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
<a name="l00016"></a>00016 <span class="comment">    Library General Public License for more details.</span>
<a name="l00017"></a>00017 <span class="comment"></span>
<a name="l00018"></a>00018 <span class="comment">    You should have received a copy of the GNU Library General Public License</span>
<a name="l00019"></a>00019 <span class="comment">    along with this library; see the file COPYING.LIB.  If not, write to</span>
<a name="l00020"></a>00020 <span class="comment">    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,</span>
<a name="l00021"></a>00021 <span class="comment">    Boston, MA 02110-1301, USA.</span>
<a name="l00022"></a>00022 <span class="comment"></span>
<a name="l00023"></a>00023 <span class="comment">    In addition, as a special exception, the copyright holders give</span>
<a name="l00024"></a>00024 <span class="comment">    permission to link the code of this program with any edition of</span>
<a name="l00025"></a>00025 <span class="comment">    the Qt library by Trolltech AS, Norway (or with modified versions</span>
<a name="l00026"></a>00026 <span class="comment">    of Qt that use the same license as Qt), and distribute linked</span>
<a name="l00027"></a>00027 <span class="comment">    combinations including the two.  You must obey the GNU General</span>
<a name="l00028"></a>00028 <span class="comment">    Public License in all respects for all of the code used other than</span>
<a name="l00029"></a>00029 <span class="comment">    Qt.  If you modify this file, you may extend this exception to</span>
<a name="l00030"></a>00030 <span class="comment">    your version of the file, but you are not obligated to do so.  If</span>
<a name="l00031"></a>00031 <span class="comment">    you do not wish to do so, delete this exception statement from</span>
<a name="l00032"></a>00032 <span class="comment">    your version.</span>
<a name="l00033"></a>00033 <span class="comment">*/</span>
<a name="l00034"></a>00034 
<a name="l00035"></a>00035 <span class="preprocessor">#ifdef HAVE_CONFIG_H</span>
<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#include &lt;config.h&gt;</span>
<a name="l00037"></a>00037 <span class="preprocessor">#endif</span>
<a name="l00038"></a>00038 <span class="preprocessor"></span>
<a name="l00039"></a>00039 <span class="preprocessor">#include "kmailicalifaceimpl.h"</span>
<a name="l00040"></a>00040 <span class="preprocessor">#include "kmfolder.h"</span>
<a name="l00041"></a>00041 <span class="preprocessor">#include "kmfoldertree.h"</span>
<a name="l00042"></a>00042 <span class="preprocessor">#include "kmfolderdir.h"</span>
<a name="l00043"></a>00043 <span class="preprocessor">#include "kmgroupware.h"</span>
<a name="l00044"></a>00044 <span class="preprocessor">#include "kmfoldermgr.h"</span>
<a name="l00045"></a>00045 <span class="preprocessor">#include "kmcommands.h"</span>
<a name="l00046"></a>00046 <span class="preprocessor">#include "kmfolderindex.h"</span>
<a name="l00047"></a>00047 <span class="preprocessor">#include "kmmsgdict.h"</span>
<a name="l00048"></a>00048 <span class="preprocessor">#include "kmmsgpart.h"</span>
<a name="l00049"></a>00049 <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="l00050"></a>00050 <span class="preprocessor">#include "kmfolderimap.h"</span>
<a name="l00051"></a>00051 <span class="preprocessor">#include "globalsettings.h"</span>
<a name="l00052"></a>00052 <span class="preprocessor">#include "accountmanager.h"</span>
<a name="l00053"></a>00053 <span class="preprocessor">#include "kmfoldercachedimap.h"</span>
<a name="l00054"></a>00054 <span class="preprocessor">#include "kmacctcachedimap.h"</span>
<a name="l00055"></a>00055 <span class="preprocessor">#include "acljobs.h"</span>
<a name="l00056"></a>00056 
<a name="l00057"></a>00057 <span class="preprocessor">#include "scalix.h"</span>
<a name="l00058"></a>00058 
<a name="l00059"></a>00059 <span class="preprocessor">#include &lt;mimelib/enum.h&gt;</span>
<a name="l00060"></a>00060 <span class="preprocessor">#include &lt;mimelib/utility.h&gt;</span>
<a name="l00061"></a>00061 <span class="preprocessor">#include &lt;mimelib/body.h&gt;</span>
<a name="l00062"></a>00062 <span class="preprocessor">#include &lt;mimelib/mimepp.h&gt;</span>
<a name="l00063"></a>00063 
<a name="l00064"></a>00064 <span class="preprocessor">#include &lt;qfile.h&gt;</span>
<a name="l00065"></a>00065 <span class="preprocessor">#include &lt;qmap.h&gt;</span>
<a name="l00066"></a>00066 <span class="preprocessor">#include &lt;qtextcodec.h&gt;</span>
<a name="l00067"></a>00067 
<a name="l00068"></a>00068 <span class="preprocessor">#include &lt;kdebug.h&gt;</span>
<a name="l00069"></a>00069 <span class="preprocessor">#include &lt;kiconloader.h&gt;</span>
<a name="l00070"></a>00070 <span class="preprocessor">#include &lt;dcopclient.h&gt;</span>
<a name="l00071"></a>00071 <span class="preprocessor">#include &lt;kmessagebox.h&gt;</span>
<a name="l00072"></a>00072 <span class="preprocessor">#include &lt;kconfig.h&gt;</span>
<a name="l00073"></a>00073 <span class="preprocessor">#include &lt;kurl.h&gt;</span>
<a name="l00074"></a>00074 <span class="preprocessor">#include &lt;ktempfile.h&gt;</span>
<a name="l00075"></a>00075 
<a name="l00076"></a>00076 <span class="keyword">using namespace </span>KMail;
<a name="l00077"></a>00077 
<a name="l00078"></a>00078 <span class="comment">// Local helper methods</span>
<a name="l00079"></a>00079 <span class="keyword">static</span> <span class="keywordtype">void</span> vPartMicroParser( <span class="keyword">const</span> QString&amp; str, QString&amp; s );
<a name="l00080"></a>00080 <span class="keyword">static</span> <span class="keywordtype">void</span> reloadFolderTree();
<a name="l00081"></a>00081 
<a name="l00082"></a>00082 <span class="comment">// The index in this array is the KMail::FolderContentsType enum</span>
<a name="l00083"></a>00083 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keyword">struct </span>{
<a name="l00084"></a>00084   <span class="keyword">const</span> <span class="keywordtype">char</span>* contentsTypeStr; <span class="comment">// the string used in the DCOP interface</span>
<a name="l00085"></a>00085   <span class="keyword">const</span> <span class="keywordtype">char</span>* mimetype;
<a name="l00086"></a>00086   KFolderTreeItem::Type treeItemType;
<a name="l00087"></a>00087   <span class="keyword">const</span> <span class="keywordtype">char</span>* annotation;
<a name="l00088"></a>00088   <span class="keyword">const</span> <span class="keywordtype">char</span>* translatedName;
<a name="l00089"></a>00089 } s_folderContentsType[] = {
<a name="l00090"></a>00090   { <span class="stringliteral">"Mail"</span>, <span class="stringliteral">"application/x-vnd.kolab.mail"</span>, KFolderTreeItem::Other, <span class="stringliteral">"mail"</span>, I18N_NOOP( <span class="stringliteral">"Mail"</span> ) },
<a name="l00091"></a>00091   { <span class="stringliteral">"Calendar"</span>, <span class="stringliteral">"application/x-vnd.kolab.event"</span>, KFolderTreeItem::Calendar, <span class="stringliteral">"event"</span>, I18N_NOOP( <span class="stringliteral">"Calendar"</span> ) },
<a name="l00092"></a>00092   { <span class="stringliteral">"Contact"</span>, <span class="stringliteral">"application/x-vnd.kolab.contact"</span>, KFolderTreeItem::Contacts, <span class="stringliteral">"contact"</span>, I18N_NOOP( <span class="stringliteral">"Contacts"</span> ) },
<a name="l00093"></a>00093   { <span class="stringliteral">"Note"</span>, <span class="stringliteral">"application/x-vnd.kolab.note"</span>, KFolderTreeItem::Notes, <span class="stringliteral">"note"</span>, I18N_NOOP( <span class="stringliteral">"Notes"</span> ) },
<a name="l00094"></a>00094   { <span class="stringliteral">"Task"</span>, <span class="stringliteral">"application/x-vnd.kolab.task"</span>, KFolderTreeItem::Tasks, <span class="stringliteral">"task"</span>, I18N_NOOP( <span class="stringliteral">"Tasks"</span> ) },
<a name="l00095"></a>00095   { <span class="stringliteral">"Journal"</span>, <span class="stringliteral">"application/x-vnd.kolab.journal"</span>, KFolderTreeItem::Journals, <span class="stringliteral">"journal"</span>, I18N_NOOP( <span class="stringliteral">"Journal"</span> ) }
<a name="l00096"></a>00096 };
<a name="l00097"></a>00097 
<a name="l00098"></a>00098 <span class="keyword">static</span> QString folderContentsType( KMail::FolderContentsType type )
<a name="l00099"></a>00099 {
<a name="l00100"></a>00100   <span class="keywordflow">return</span> s_folderContentsType[type].contentsTypeStr;
<a name="l00101"></a>00101 }
<a name="l00102"></a>00102 
<a name="l00103"></a>00103 <span class="keyword">static</span> QString folderKolabMimeType( KMail::FolderContentsType type )
<a name="l00104"></a>00104 {
<a name="l00105"></a>00105   <span class="keywordflow">return</span> s_folderContentsType[type].mimetype;
<a name="l00106"></a>00106 }
<a name="l00107"></a>00107 
<a name="l00108"></a>00108 KMailICalIfaceImpl::StorageFormat KMailICalIfaceImpl::globalStorageFormat()<span class="keyword"> const </span>{
<a name="l00109"></a>00109   <span class="keywordflow">return</span> GlobalSettings::self()-&gt;theIMAPResourceStorageFormat()
<a name="l00110"></a>00110     == GlobalSettings::EnumTheIMAPResourceStorageFormat::XML ? StorageXML : StorageIcalVcard;
<a name="l00111"></a>00111 }
<a name="l00112"></a>00112 
<a name="l00113"></a>00113 <span class="keyword">static</span> KMail::FolderContentsType folderContentsType( <span class="keyword">const</span> QString&amp; type )
<a name="l00114"></a>00114 {
<a name="l00115"></a>00115   <span class="keywordflow">for</span> ( uint i = 0 ; i &lt; <span class="keyword">sizeof</span> s_folderContentsType / <span class="keyword">sizeof</span> *s_folderContentsType; ++i )
<a name="l00116"></a>00116     <span class="keywordflow">if</span> ( type == s_folderContentsType[i].contentsTypeStr )
<a name="l00117"></a>00117       <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>KMail::FolderContentsType<span class="keyword">&gt;</span>( i );
<a name="l00118"></a>00118   <span class="keywordflow">return</span> KMail::ContentsTypeMail;
<a name="l00119"></a>00119 }
<a name="l00120"></a>00120 
<a name="l00121"></a>00121 <span class="keyword">static</span> QString localizedDefaultFolderName( KMail::FolderContentsType type )
<a name="l00122"></a>00122 {
<a name="l00123"></a>00123   <span class="keywordflow">return</span> i18n( s_folderContentsType[type].translatedName );
<a name="l00124"></a>00124 }
<a name="l00125"></a>00125 
<a name="l00126"></a>00126 <span class="keyword">const</span> <span class="keywordtype">char</span>* KMailICalIfaceImpl::annotationForContentsType( KMail::FolderContentsType type )
<a name="l00127"></a>00127 {
<a name="l00128"></a>00128   <span class="keywordflow">return</span> s_folderContentsType[type].annotation;
<a name="l00129"></a>00129 }
<a name="l00130"></a>00130 
<a name="l00131"></a>00131 ExtraFolder::ExtraFolder( <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* f )
<a name="l00132"></a>00132     : folder( f )
<a name="l00133"></a>00133 {
<a name="l00134"></a>00134     folder-&gt;open(<span class="stringliteral">"kmailicaliface::extrafolder"</span>);
<a name="l00135"></a>00135 }
<a name="l00136"></a>00136 
<a name="l00137"></a>00137 ExtraFolder::~ExtraFolder()
<a name="l00138"></a>00138 {
<a name="l00139"></a>00139     <span class="keywordflow">if</span> ( folder )
<a name="l00140"></a>00140         folder-&gt;close(<span class="stringliteral">"kmailicaliface::extrafolder"</span>);
<a name="l00141"></a>00141 }
<a name="l00142"></a>00142 
<a name="l00143"></a>00143 
<a name="l00144"></a>00144 <span class="comment">/*</span>
<a name="l00145"></a>00145 <span class="comment">  This interface has three parts to it - libkcal interface;</span>
<a name="l00146"></a>00146 <span class="comment">  kmail interface; and helper functions.</span>
<a name="l00147"></a>00147 <span class="comment"></span>
<a name="l00148"></a>00148 <span class="comment">  The libkcal interface and the kmail interface have the same three</span>
<a name="l00149"></a>00149 <span class="comment">  methods: add, delete and refresh. The only difference is that the</span>
<a name="l00150"></a>00150 <span class="comment">  libkcal interface is used from the IMAP resource in libkcal and</span>
<a name="l00151"></a>00151 <span class="comment">  the kmail interface is used from the groupware object in kmail.</span>
<a name="l00152"></a>00152 <span class="comment">*/</span>
<a name="l00153"></a>00153 
<a name="l00154"></a>00154 KMailICalIfaceImpl::KMailICalIfaceImpl()
<a name="l00155"></a>00155   : DCOPObject( <span class="stringliteral">"KMailICalIface"</span> ), QObject( 0, <span class="stringliteral">"KMailICalIfaceImpl"</span> ),
<a name="l00156"></a>00156     mContacts( 0 ), mCalendar( 0 ), mNotes( 0 ), mTasks( 0 ), mJournals( 0 ),
<a name="l00157"></a>00157     mFolderLanguage( 0 ), mFolderParentDir( 0 ), mFolderType( KMFolderTypeUnknown ),
<a name="l00158"></a>00158     mUseResourceIMAP( false ), mResourceQuiet( false ), mHideFolders( true )
<a name="l00159"></a>00159 {
<a name="l00160"></a>00160   <span class="comment">// Listen to config changes</span>
<a name="l00161"></a>00161   connect( kmkernel, SIGNAL( configChanged() ), <span class="keyword">this</span>, SLOT( readConfig() ) );
<a name="l00162"></a>00162   connect( kmkernel, SIGNAL( folderRemoved( <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* ) ),
<a name="l00163"></a>00163            <span class="keyword">this</span>, SLOT( slotFolderRemoved( <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* ) ) );
<a name="l00164"></a>00164 
<a name="l00165"></a>00165   mExtraFolders.setAutoDelete( <span class="keyword">true</span> );
<a name="l00166"></a>00166   mAccumulators.setAutoDelete( <span class="keyword">true</span> );
<a name="l00167"></a>00167 }
<a name="l00168"></a>00168 
<a name="l00169"></a>00169 
<a name="l00170"></a>00170 <span class="comment">/* libkcal part of the interface, called from the resources using this</span>
<a name="l00171"></a>00171 <span class="comment"> * when incidences are added or deleted */</span>
<a name="l00172"></a>00172 
<a name="l00173"></a>00173 <span class="comment">// Helper function to find an attachment of a given mimetype</span>
<a name="l00174"></a>00174 <span class="comment">// Can't use KMMessage::findDwBodyPart since it only works with known mimetypes.</span>
<a name="l00175"></a>00175 <span class="keyword">static</span> DwBodyPart* findBodyPartByMimeType( <span class="keyword">const</span> <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a>&amp; msg, <span class="keyword">const</span> <span class="keywordtype">char</span>* sType, <span class="keyword">const</span> <span class="keywordtype">char</span>* sSubtype, <span class="keywordtype">bool</span> startsWith = <span class="keyword">false</span> )
<a name="l00176"></a>00176 {
<a name="l00177"></a>00177   <span class="comment">// quickly searching for our message part: since Kolab parts are</span>
<a name="l00178"></a>00178   <span class="comment">// top-level parts we do *not* have to travel into embedded multiparts</span>
<a name="l00179"></a>00179   DwBodyPart* part = msg.<a class="code" href="classKMMessage.html#f7412a18d6089e1055bfe50283671714" title="Get the 1st DwBodyPart.">getFirstDwBodyPart</a>();
<a name="l00180"></a>00180   <span class="keywordflow">while</span>( part ){
<a name="l00181"></a>00181   <span class="comment">//    kdDebug() &lt;&lt; part-&gt;Headers().ContentType().TypeStr().c_str() &lt;&lt; " "</span>
<a name="l00182"></a>00182   <span class="comment">//            &lt;&lt; part-&gt;Headers().ContentType().SubtypeStr().c_str() &lt;&lt; endl;</span>
<a name="l00183"></a>00183     <span class="keywordflow">if</span> ( part-&gt;hasHeaders() ) {
<a name="l00184"></a>00184       DwMediaType&amp; contentType = part-&gt;Headers().ContentType();
<a name="l00185"></a>00185       <span class="keywordflow">if</span> ( startsWith ) {
<a name="l00186"></a>00186         <span class="keywordflow">if</span> ( contentType.TypeStr() == sType
<a name="l00187"></a>00187              &amp;&amp; QString( contentType.SubtypeStr().c_str() ).startsWith( sSubtype ) )
<a name="l00188"></a>00188           <span class="keywordflow">return</span> part;
<a name="l00189"></a>00189       }
<a name="l00190"></a>00190       <span class="keywordflow">else</span>
<a name="l00191"></a>00191         <span class="keywordflow">if</span> ( contentType.TypeStr() == sType
<a name="l00192"></a>00192              &amp;&amp; contentType.SubtypeStr() == sSubtype )
<a name="l00193"></a>00193           <span class="keywordflow">return</span> part;
<a name="l00194"></a>00194     }
<a name="l00195"></a>00195     part = part-&gt;Next();
<a name="l00196"></a>00196   }
<a name="l00197"></a>00197   <span class="keywordflow">return</span> 0;
<a name="l00198"></a>00198 }
<a name="l00199"></a>00199 
<a name="l00200"></a>00200 <span class="comment">// Helper function to find an attachment with a given filename</span>
<a name="l00201"></a>00201 <span class="keyword">static</span> DwBodyPart* findBodyPart( <span class="keyword">const</span> <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a>&amp; msg, <span class="keyword">const</span> QString&amp; attachmentName )
<a name="l00202"></a>00202 {
<a name="l00203"></a>00203   <span class="comment">// quickly searching for our message part: since Kolab parts are</span>
<a name="l00204"></a>00204   <span class="comment">// top-level parts we do *not* have to travel into embedded multiparts</span>
<a name="l00205"></a>00205   <span class="keywordflow">for</span> ( DwBodyPart* part = msg.<a class="code" href="classKMMessage.html#f7412a18d6089e1055bfe50283671714" title="Get the 1st DwBodyPart.">getFirstDwBodyPart</a>(); part; part = part-&gt;Next() ) {
<a name="l00206"></a>00206     <span class="comment">//kdDebug(5006) &lt;&lt; "findBodyPart:  - " &lt;&lt; part-&gt;Headers().ContentDisposition().Filename().c_str() &lt;&lt; endl;</span>
<a name="l00207"></a>00207     <span class="keywordflow">if</span> ( part-&gt;hasHeaders()
<a name="l00208"></a>00208          &amp;&amp; attachmentName == part-&gt;Headers().ContentDisposition().Filename().c_str() )
<a name="l00209"></a>00209       <span class="keywordflow">return</span> part;
<a name="l00210"></a>00210     <span class="keywordflow">if</span> ( part-&gt;hasHeaders() &amp;&amp; attachmentName == part-&gt;Headers().ContentType().Name().c_str() )
<a name="l00211"></a>00211       <span class="keywordflow">return</span> part;
<a name="l00212"></a>00212   }
<a name="l00213"></a>00213   <span class="keywordflow">return</span> 0;
<a name="l00214"></a>00214 }
<a name="l00215"></a>00215 
<a name="l00216"></a>00216 <span class="preprocessor">#if 0</span>
<a name="l00217"></a>00217 <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> debugBodyParts( <span class="keyword">const</span> <span class="keywordtype">char</span>* foo, <span class="keyword">const</span> <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a>&amp; msg )
<a name="l00218"></a>00218 {
<a name="l00219"></a>00219   kdDebug(5006) &lt;&lt; <span class="stringliteral">"--debugBodyParts "</span> &lt;&lt; foo &lt;&lt; <span class="stringliteral">"--"</span> &lt;&lt; endl;
<a name="l00220"></a>00220   <span class="keywordflow">for</span> ( DwBodyPart* part = msg.<a class="code" href="classKMMessage.html#f7412a18d6089e1055bfe50283671714" title="Get the 1st DwBodyPart.">getFirstDwBodyPart</a>(); part; part = part-&gt;Next() ) {
<a name="l00221"></a>00221     <span class="keywordflow">if</span> ( part-&gt;hasHeaders() ) {
<a name="l00222"></a>00222       kdDebug(5006) &lt;&lt; <span class="stringliteral">" bodypart: "</span> &lt;&lt; part &lt;&lt; endl;
<a name="l00223"></a>00223       kdDebug(5006) &lt;&lt; <span class="stringliteral">"        "</span> &lt;&lt; part-&gt;Headers().AsString().c_str() &lt;&lt; endl;
<a name="l00224"></a>00224     }
<a name="l00225"></a>00225     <span class="keywordflow">else</span>
<a name="l00226"></a>00226       kdDebug(5006) &lt;&lt; <span class="stringliteral">" part "</span> &lt;&lt; part &lt;&lt; <span class="stringliteral">" has no headers"</span> &lt;&lt; endl;
<a name="l00227"></a>00227   }
<a name="l00228"></a>00228 }
<a name="l00229"></a>00229 <span class="preprocessor">#else</span>
<a name="l00230"></a>00230 <span class="preprocessor"></span><span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> debugBodyParts( <span class="keyword">const</span> <span class="keywordtype">char</span>*, <span class="keyword">const</span> <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a>&amp; ) {}
<a name="l00231"></a>00231 <span class="preprocessor">#endif</span>
<a name="l00232"></a>00232 <span class="preprocessor"></span>
<a name="l00233"></a>00233 
<a name="l00234"></a>00234 <span class="comment">// Add (or overwrite, resp.) an attachment in an existing mail,</span>
<a name="l00235"></a>00235 <span class="comment">// attachments must be local files, they are identified by their names.</span>
<a name="l00236"></a>00236 <span class="comment">// If lookupByName if false the attachment to replace is looked up by mimetype.</span>
<a name="l00237"></a>00237 <span class="comment">// return value: wrong if attachment could not be added/updated</span>
<a name="l00238"></a>00238 <span class="keywordtype">bool</span> KMailICalIfaceImpl::updateAttachment( <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a>&amp; msg,
<a name="l00239"></a>00239                                            <span class="keyword">const</span> QString&amp; attachmentURL,
<a name="l00240"></a>00240                                            <span class="keyword">const</span> QString&amp; attachmentName,
<a name="l00241"></a>00241                                            <span class="keyword">const</span> QString&amp; attachmentMimetype,
<a name="l00242"></a>00242                                            <span class="keywordtype">bool</span> lookupByName )
<a name="l00243"></a>00243 {
<a name="l00244"></a>00244   kdDebug(5006) &lt;&lt; <span class="stringliteral">"KMailICalIfaceImpl::updateAttachment( "</span> &lt;&lt; attachmentURL &lt;&lt; <span class="stringliteral">" )"</span> &lt;&lt; endl;
<a name="l00245"></a>00245 
<a name="l00246"></a>00246   <span class="keywordtype">bool</span> bOK = <span class="keyword">false</span>;
<a name="l00247"></a>00247 
<a name="l00248"></a>00248   KURL url( attachmentURL );
<a name="l00249"></a>00249   <span class="keywordflow">if</span> ( url.isValid() &amp;&amp; url.isLocalFile() ) {
<a name="l00250"></a>00250     <span class="keyword">const</span> QString fileName( url.path() );
<a name="l00251"></a>00251     QFile file( fileName );
<a name="l00252"></a>00252     <span class="keywordflow">if</span>( file.open( IO_ReadOnly ) ) {
<a name="l00253"></a>00253       QByteArray rawData = file.readAll();
<a name="l00254"></a>00254       file.close();
<a name="l00255"></a>00255 
<a name="l00256"></a>00256       <span class="comment">// create the new message part with data read from temp file</span>
<a name="l00257"></a>00257       KMMessagePart msgPart;
<a name="l00258"></a>00258       msgPart.setName( attachmentName );
<a name="l00259"></a>00259 
<a name="l00260"></a>00260       <span class="keyword">const</span> <span class="keywordtype">int</span> iSlash = attachmentMimetype.find(<span class="charliteral">'/'</span>);
<a name="l00261"></a>00261       <span class="keyword">const</span> QCString sType    = attachmentMimetype.left( iSlash   ).latin1();
<a name="l00262"></a>00262       <span class="keyword">const</span> QCString sSubtype = attachmentMimetype.mid(  iSlash+1 ).latin1();
<a name="l00263"></a>00263       msgPart.setTypeStr( sType );
<a name="l00264"></a>00264       msgPart.setSubtypeStr( sSubtype );
<a name="l00265"></a>00265       QCString ctd(<span class="stringliteral">"attachment;\n  filename=\""</span>);
<a name="l00266"></a>00266       ctd.append( attachmentName.latin1() );
<a name="l00267"></a>00267       ctd.append(<span class="stringliteral">"\""</span>);
<a name="l00268"></a>00268       msgPart.setContentDisposition( ctd );
<a name="l00269"></a>00269       QValueList&lt;int&gt; dummy;
<a name="l00270"></a>00270       msgPart.setBodyAndGuessCte( rawData, dummy );
<a name="l00271"></a>00271       msgPart.setPartSpecifier( fileName );
<a name="l00272"></a>00272 
<a name="l00273"></a>00273       DwBodyPart* newPart = msg.<a class="code" href="classKMMessage.html#fd780c436fe7879034871767c6dc1f18" title="Compose a DwBodyPart (needed for adding a part to the message).">createDWBodyPart</a>( &amp;msgPart );
<a name="l00274"></a>00274       <span class="comment">// This whole method is a bit special. We mix code for writing and code for reading.</span>
<a name="l00275"></a>00275       <span class="comment">// E.g. we need to parse the content-disposition again for ContentDisposition().Filename()</span>
<a name="l00276"></a>00276       <span class="comment">// to work later on.</span>
<a name="l00277"></a>00277       newPart-&gt;Headers().ContentDisposition().Parse();
<a name="l00278"></a>00278 
<a name="l00279"></a>00279       DwBodyPart* part = lookupByName ? findBodyPart( msg, attachmentName )
<a name="l00280"></a>00280                          : findBodyPartByMimeType( msg, sType, sSubtype );
<a name="l00281"></a>00281       <span class="keywordflow">if</span> ( part ) {
<a name="l00282"></a>00282         <span class="comment">// Make sure the replacing body part is pointing</span>
<a name="l00283"></a>00283         <span class="comment">// to the same next part as the original body part.</span>
<a name="l00284"></a>00284         newPart-&gt;SetNext( part-&gt;Next() );
<a name="l00285"></a>00285         <span class="comment">// call DwBodyPart::operator =</span>
<a name="l00286"></a>00286         <span class="comment">// which calls DwEntity::operator =</span>
<a name="l00287"></a>00287         *part = *newPart;
<a name="l00288"></a>00288         <span class="keyword">delete</span> newPart;
<a name="l00289"></a>00289         msg.<a class="code" href="classKMMessage.html#4e359dbe2c3eab4c558bba7431d14ba5" title="tell the message that internal data were changed (must be called after directly modifying...">setNeedsAssembly</a>();
<a name="l00290"></a>00290         kdDebug(5006) &lt;&lt; <span class="stringliteral">"Attachment "</span> &lt;&lt; attachmentName &lt;&lt; <span class="stringliteral">" updated."</span> &lt;&lt; endl;
<a name="l00291"></a>00291       } <span class="keywordflow">else</span> {
<a name="l00292"></a>00292         msg.<a class="code" href="classKMMessage.html#74c1405916368420c33e1542107b6f82" title="Append a DwBodyPart to the message.">addDwBodyPart</a>( newPart );
<a name="l00293"></a>00293         kdDebug(5006) &lt;&lt; <span class="stringliteral">"Attachment "</span> &lt;&lt; attachmentName &lt;&lt; <span class="stringliteral">" added."</span> &lt;&lt; endl;
<a name="l00294"></a>00294       }
<a name="l00295"></a>00295       bOK = <span class="keyword">true</span>;
<a name="l00296"></a>00296     }<span class="keywordflow">else</span>{
<a name="l00297"></a>00297       kdDebug(5006) &lt;&lt; <span class="stringliteral">"Attachment "</span> &lt;&lt; attachmentURL &lt;&lt; <span class="stringliteral">" can not be read."</span> &lt;&lt; endl;
<a name="l00298"></a>00298     }
<a name="l00299"></a>00299   }<span class="keywordflow">else</span>{
<a name="l00300"></a>00300     kdDebug(5006) &lt;&lt; <span class="stringliteral">"Attachment "</span> &lt;&lt; attachmentURL &lt;&lt; <span class="stringliteral">" not a local file."</span> &lt;&lt; endl;
<a name="l00301"></a>00301   }
<a name="l00302"></a>00302 
<a name="l00303"></a>00303   <span class="keywordflow">return</span> bOK;
<a name="l00304"></a>00304 }
<a name="l00305"></a>00305 
<a name="l00306"></a>00306 <span class="comment">// Look for the attachment with the right mimetype</span>
<a name="l00307"></a>00307 <span class="keywordtype">bool</span> KMailICalIfaceImpl::kolabXMLFoundAndDecoded( <span class="keyword">const</span> <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a>&amp; msg, <span class="keyword">const</span> QString&amp; mimetype, QString&amp; s )
<a name="l00308"></a>00308 {
<a name="l00309"></a>00309   <span class="keyword">const</span> <span class="keywordtype">int</span> iSlash = mimetype.find(<span class="charliteral">'/'</span>);
<a name="l00310"></a>00310   <span class="keyword">const</span> QCString sType    = mimetype.left( iSlash   ).latin1();
<a name="l00311"></a>00311   <span class="keyword">const</span> QCString sSubtype = mimetype.mid(  iSlash+1 ).latin1();
<a name="l00312"></a>00312   DwBodyPart* part = findBodyPartByMimeType( msg, sType, sSubtype, <span class="keyword">true</span> <span class="comment">/* starts with sSubtype, to accept application/x-vnd.kolab.contact.distlist */</span> );
<a name="l00313"></a>00313   <span class="keywordflow">if</span> ( part ) {
<a name="l00314"></a>00314     KMMessagePart msgPart;
<a name="l00315"></a>00315     <a class="code" href="classKMMessage.html#2b942616accf9ac39e19351ce2bba17d" title="Fill the KMMessagePart structure for a given DwBodyPart.">KMMessage::bodyPart</a>(part, &amp;msgPart);
<a name="l00316"></a>00316     s = msgPart.bodyToUnicode( QTextCodec::codecForName( <span class="stringliteral">"utf8"</span> ) );
<a name="l00317"></a>00317     <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00318"></a>00318   }
<a name="l00319"></a>00319   <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00320"></a>00320 }
<a name="l00321"></a>00321 
<a name="l00322"></a>00322 <span class="comment">// Delete an attachment in an existing mail.</span>
<a name="l00323"></a>00323 <span class="comment">// return value: wrong if attachment could not be deleted</span>
<a name="l00324"></a>00324 <span class="comment">//</span>
<a name="l00325"></a>00325 <span class="comment">// This code could be optimized: for now we just replace</span>
<a name="l00326"></a>00326 <span class="comment">// the attachment by an empty dummy attachment since Mimelib</span>
<a name="l00327"></a>00327 <span class="comment">// does not provide an option for deleting attachments yet.</span>
<a name="l00328"></a>00328 <span class="keywordtype">bool</span> KMailICalIfaceImpl::deleteAttachment( <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a>&amp; msg,
<a name="l00329"></a>00329                                            <span class="keyword">const</span> QString&amp; attachmentName )
<a name="l00330"></a>00330 {
<a name="l00331"></a>00331   kdDebug(5006) &lt;&lt; <span class="stringliteral">"KMailICalIfaceImpl::deleteAttachment( "</span> &lt;&lt; attachmentName &lt;&lt; <span class="stringliteral">" )"</span> &lt;&lt; endl;
<a name="l00332"></a>00332 
<a name="l00333"></a>00333   <span class="keywordtype">bool</span> bOK = <span class="keyword">false</span>;
<a name="l00334"></a>00334 
<a name="l00335"></a>00335   <span class="comment">// quickly searching for our message part: since Kolab parts are</span>
<a name="l00336"></a>00336   <span class="comment">// top-level parts we do *not* have to travel into embedded multiparts</span>
<a name="l00337"></a>00337   DwBodyPart* part = findBodyPart( msg, attachmentName );
<a name="l00338"></a>00338   <span class="keywordflow">if</span> ( part ) {
<a name="l00339"></a>00339     msg.<a class="code" href="classKMMessage.html#f09c6c9543ffde8de418d671e435ce4a">getTopLevelPart</a>()-&gt;Body().RemoveBodyPart( part );
<a name="l00340"></a>00340     <span class="keyword">delete</span> part;
<a name="l00341"></a>00341     msg.<a class="code" href="classKMMessage.html#4e359dbe2c3eab4c558bba7431d14ba5" title="tell the message that internal data were changed (must be called after directly modifying...">setNeedsAssembly</a>();
<a name="l00342"></a>00342     kdDebug(5006) &lt;&lt; <span class="stringliteral">"Attachment deleted."</span> &lt;&lt; endl;
<a name="l00343"></a>00343     bOK = <span class="keyword">true</span>;
<a name="l00344"></a>00344   }
<a name="l00345"></a>00345 
<a name="l00346"></a>00346   <span class="keywordflow">if</span>( !bOK ){
<a name="l00347"></a>00347     kdDebug(5006) &lt;&lt; <span class="stringliteral">"Attachment "</span> &lt;&lt; attachmentName &lt;&lt; <span class="stringliteral">" not found."</span> &lt;&lt; endl;
<a name="l00348"></a>00348   }
<a name="l00349"></a>00349 
<a name="l00350"></a>00350   <span class="keywordflow">return</span> bOK;
<a name="l00351"></a>00351 }
<a name="l00352"></a>00352 
<a name="l00353"></a>00353 <span class="keyword">static</span> <span class="keywordtype">void</span> setIcalVcardContentTypeHeader( <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a> *msg, KMail::FolderContentsType t, <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a> *folder )
<a name="l00354"></a>00354 {
<a name="l00355"></a>00355   KMAcctCachedImap::GroupwareType groupwareType = KMAcctCachedImap::GroupwareKolab;
<a name="l00356"></a>00356 
<a name="l00357"></a>00357   KMFolderCachedImap *imapFolder = <span class="keyword">dynamic_cast&lt;</span>KMFolderCachedImap*<span class="keyword">&gt;</span>( folder-&gt;<a class="code" href="classKMFolder.html#4c7476219c137471fb93cb8c88061336">storage</a>() );
<a name="l00358"></a>00358   <span class="keywordflow">if</span> ( imapFolder )
<a name="l00359"></a>00359     groupwareType = imapFolder-&gt;account()-&gt;groupwareType();
<a name="l00360"></a>00360 
<a name="l00361"></a>00361   msg-&gt;<a class="code" href="classKMMessage.html#e8dcba97a80b0db0c33df23d08b62f55">setType</a>( DwMime::kTypeText );
<a name="l00362"></a>00362   <span class="keywordflow">if</span> ( t == KMail::ContentsTypeCalendar || t == KMail::ContentsTypeTask
<a name="l00363"></a>00363       || t == KMail::ContentsTypeJournal ) {
<a name="l00364"></a>00364     msg-&gt;<a class="code" href="classKMMessage.html#2f6fd47b46942b7ad77596514a98ec04">setSubtype</a>( DwMime::kSubtypeVCal );
<a name="l00365"></a>00365 
<a name="l00366"></a>00366     <span class="keywordflow">if</span> ( groupwareType == KMAcctCachedImap::GroupwareKolab )
<a name="l00367"></a>00367       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="l00368"></a>00368           <span class="stringliteral">"text/calendar; method=REQUEST; charset=\"utf-8\""</span>);
<a name="l00369"></a>00369     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( groupwareType == KMAcctCachedImap::GroupwareScalix )
<a name="l00370"></a>00370       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="l00371"></a>00371           <span class="stringliteral">"text/calendar; method=PUBLISH; charset=\"UTF-8\""</span>);
<a name="l00372"></a>00372 
<a name="l00373"></a>00373   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( t == KMail::ContentsTypeContact ) {
<a name="l00374"></a>00374     msg-&gt;<a class="code" href="classKMMessage.html#2f6fd47b46942b7ad77596514a98ec04">setSubtype</a>( DwMime::kSubtypeXVCard );
<a name="l00375"></a>00375     <span class="keywordflow">if</span> ( groupwareType == KMAcctCachedImap::GroupwareKolab )
<a name="l00376"></a>00376       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>, <span class="stringliteral">"Text/X-VCard; charset=\"utf-8\""</span> );
<a name="l00377"></a>00377     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( groupwareType == KMAcctCachedImap::GroupwareScalix )
<a name="l00378"></a>00378       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>, <span class="stringliteral">"application/scalix-properties; charset=\"UTF-8\""</span> );
<a name="l00379"></a>00379   } <span class="keywordflow">else</span> {
<a name="l00380"></a>00380     kdWarning(5006) &lt;&lt; k_funcinfo &lt;&lt; <span class="stringliteral">"Attempt to write non-groupware contents to folder"</span> &lt;&lt; endl;
<a name="l00381"></a>00381   }
<a name="l00382"></a>00382 }
<a name="l00383"></a>00383 
<a name="l00384"></a>00384 <span class="keyword">static</span> <span class="keywordtype">void</span> setXMLContentTypeHeader( <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a> *msg, <span class="keyword">const</span> QString plainTextBody )
<a name="l00385"></a>00385 {
<a name="l00386"></a>00386    <span class="comment">// add a first body part to be displayed by all mailer</span>
<a name="l00387"></a>00387     <span class="comment">// than can NOT display Kolab data: no matter if these</span>
<a name="l00388"></a>00388     <span class="comment">// mailers are MIME compliant or not</span>
<a name="l00389"></a>00389     KMMessagePart firstPart;
<a name="l00390"></a>00390     firstPart.setType( DwMime::kTypeText );
<a name="l00391"></a>00391     firstPart.setSubtype( DwMime::kSubtypePlain );
<a name="l00392"></a>00392     msg-&gt;<a class="code" href="classKMMessage.html#d01b9784ec819c2aa44e916098e76f78" title="Remove header field with given name.">removeHeaderField</a>( <span class="stringliteral">"Content-Type"</span> );
<a name="l00393"></a>00393     msg-&gt;<a class="code" href="classKMMessage.html#e8dcba97a80b0db0c33df23d08b62f55">setType</a>( DwMime::kTypeMultipart );
<a name="l00394"></a>00394     msg-&gt;<a class="code" href="classKMMessage.html#2f6fd47b46942b7ad77596514a98ec04">setSubtype</a>( DwMime::kSubtypeMixed );
<a name="l00395"></a>00395     msg-&gt;<a class="code" href="classKMMessage.html#7dd06ebd026305292fd380c9acb283b6" title="get the DwHeaders (make sure to call setNeedsAssembly() function after directly modyfying...">headers</a>().ContentType().CreateBoundary( 0 );
<a name="l00396"></a>00396     msg-&gt;<a class="code" href="classKMMessage.html#7dd06ebd026305292fd380c9acb283b6" title="get the DwHeaders (make sure to call setNeedsAssembly() function after directly modyfying...">headers</a>().ContentType().Assemble();
<a name="l00397"></a>00397     firstPart.setBodyFromUnicode( plainTextBody );
<a name="l00398"></a>00398     msg-&gt;<a class="code" href="classKMMessage.html#98f53dd0092cd4b6a8a07efef0526217" title="Append a body part to the message.">addBodyPart</a>( &amp;firstPart );
<a name="l00399"></a>00399 }
<a name="l00400"></a>00400 
<a name="l00401"></a>00401 <span class="comment">// Store a new entry that was received from the resource</span>
<a name="l00402"></a>00402 Q_UINT32 KMailICalIfaceImpl::addIncidenceKolab( <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>&amp; folder,
<a name="l00403"></a>00403                                                 <span class="keyword">const</span> QString&amp; subject,
<a name="l00404"></a>00404                                                 <span class="keyword">const</span> QString&amp; plainTextBody,
<a name="l00405"></a>00405                                                 <span class="keyword">const</span> QMap&lt;QCString, QString&gt;&amp; customHeaders,
<a name="l00406"></a>00406                                                 <span class="keyword">const</span> QStringList&amp; attachmentURLs,
<a name="l00407"></a>00407                                                 <span class="keyword">const</span> QStringList&amp; attachmentNames,
<a name="l00408"></a>00408                                                 <span class="keyword">const</span> QStringList&amp; attachmentMimetypes )
<a name="l00409"></a>00409 {
<a name="l00410"></a>00410   kdDebug(5006) &lt;&lt; <span class="stringliteral">"KMailICalIfaceImpl::addIncidenceKolab( "</span> &lt;&lt; attachmentNames &lt;&lt; <span class="stringliteral">" )"</span> &lt;&lt; endl;
<a name="l00411"></a>00411 
<a name="l00412"></a>00412   Q_UINT32 sernum = 0;
<a name="l00413"></a>00413   <span class="keywordtype">bool</span> bAttachOK = <span class="keyword">true</span>;
<a name="l00414"></a>00414 
<a name="l00415"></a>00415   <span class="comment">// Make a new message for the incidence</span>
<a name="l00416"></a>00416   <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="l00417"></a>00417   msg-&gt;<a class="code" href="classKMMessage.html#f3fe6794874214ffa4ad07a3992590e7" title="Initialize header fields.">initHeader</a>();
<a name="l00418"></a>00418   msg-&gt;<a class="code" href="classKMMessage.html#dc02d16017d248f9f7c9dc980aee25b4">setSubject</a>( subject );
<a name="l00419"></a>00419   msg-&gt;<a class="code" href="classKMMessage.html#3d877210924a2a0ba380e0ef11ff4e10" title="Set fields that are either automatically set (Message-id) or that do not change from...">setAutomaticFields</a>( <span class="keyword">true</span> );
<a name="l00420"></a>00420 
<a name="l00421"></a>00421   QMap&lt;QCString, QString&gt;::ConstIterator ith = customHeaders.begin();
<a name="l00422"></a>00422   <span class="keyword">const</span> QMap&lt;QCString, QString&gt;::ConstIterator ithEnd = customHeaders.end();
<a name="l00423"></a>00423   <span class="keywordflow">for</span> ( ; ith != ithEnd ; ++ith ) {
<a name="l00424"></a>00424     msg-&gt;<a class="code" href="classKMMessage.html#de227ca74ea9bca2412ddfc63b4025c6" title="Set the header field with the given name to the given value.">setHeaderField</a>( ith.key(), ith.data() );
<a name="l00425"></a>00425   }
<a name="l00426"></a>00426   <span class="comment">// In case of the ical format, simply add the plain text content with the</span>
<a name="l00427"></a>00427   <span class="comment">// right content type</span>
<a name="l00428"></a>00428   <span class="keywordflow">if</span> ( storageFormat( &amp;folder ) == StorageXML ) {
<a name="l00429"></a>00429     setXMLContentTypeHeader( msg, plainTextBody );
<a name="l00430"></a>00430   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( storageFormat( &amp;folder ) == StorageIcalVcard ) {
<a name="l00431"></a>00431     <span class="keyword">const</span> KMail::FolderContentsType t = folder.<a class="code" href="classKMFolder.html#4c7476219c137471fb93cb8c88061336">storage</a>()-&gt;<a class="code" href="classFolderStorage.html#2e2d90259cf68d278f95b89b8f9e5088">contentsType</a>();
<a name="l00432"></a>00432     setIcalVcardContentTypeHeader( msg, t, &amp;folder );
<a name="l00433"></a>00433     msg-&gt;<a class="code" href="classKMMessage.html#7e6ee8707a192b15c0394b69dcc10fb8" title="Set the message body, encoding it according to the current content transfer encoding...">setBodyEncoded</a>( plainTextBody.utf8() );
<a name="l00434"></a>00434   } <span class="keywordflow">else</span> {
<a name="l00435"></a>00435     kdWarning(5006) &lt;&lt; k_funcinfo &lt;&lt; <span class="stringliteral">"Attempt to write to folder with unknown storage type"</span> &lt;&lt; endl;
<a name="l00436"></a>00436   }
<a name="l00437"></a>00437 
<a name="l00438"></a>00438   Q_ASSERT( attachmentMimetypes.count() == attachmentURLs.count() );
<a name="l00439"></a>00439   Q_ASSERT( attachmentNames.count() == attachmentURLs.count() );
<a name="l00440"></a>00440   <span class="comment">// Add all attachments by reading them from their temp. files</span>
<a name="l00441"></a>00441   QStringList::ConstIterator itmime = attachmentMimetypes.begin();
<a name="l00442"></a>00442   QStringList::ConstIterator iturl = attachmentURLs.begin();
<a name="l00443"></a>00443   <span class="keywordflow">for</span>( QStringList::ConstIterator itname = attachmentNames.begin();
<a name="l00444"></a>00444        itname != attachmentNames.end()
<a name="l00445"></a>00445        &amp;&amp; itmime != attachmentMimetypes.end()
<a name="l00446"></a>00446        &amp;&amp; iturl != attachmentURLs.end();
<a name="l00447"></a>00447        ++itname, ++iturl, ++itmime ){
<a name="l00448"></a>00448     <span class="keywordtype">bool</span> byname = !(*itmime).startsWith( <span class="stringliteral">"application/x-vnd.kolab."</span> );
<a name="l00449"></a>00449     <span class="keywordflow">if</span>( !updateAttachment( *msg, *iturl, *itname, *itmime, byname ) ){
<a name="l00450"></a>00450       kdWarning(5006) &lt;&lt; <span class="stringliteral">"Attachment error, can not add Incidence."</span> &lt;&lt; endl;
<a name="l00451"></a>00451       bAttachOK = <span class="keyword">false</span>;
<a name="l00452"></a>00452       <span class="keywordflow">break</span>;
<a name="l00453"></a>00453     }
<a name="l00454"></a>00454   }
<a name="l00455"></a>00455 
<a name="l00456"></a>00456   <span class="keywordflow">if</span>( bAttachOK ){
<a name="l00457"></a>00457     <span class="comment">// Mark the message as read and store it in the folder</span>
<a name="l00458"></a>00458     msg-&gt;<a class="code" href="classKMMessage.html#c3593abb0275a61f2206eaf51435d64d" title="Removes empty fields from the header, e.g.">cleanupHeader</a>();
<a name="l00459"></a>00459     <span class="comment">//debugBodyParts( "after cleanup", *msg );</span>
<a name="l00460"></a>00460     msg-&gt;<a class="code" href="classKMMessage.html#29dbe281ac3746a751821d8edd4b18cf" title="Touch the message - mark it as read.">touch</a>();
<a name="l00461"></a>00461     <span class="keywordflow">if</span> ( folder.<a class="code" href="classKMFolder.html#5e7d1aee44132cf435081452c211f1aa" title="Add the given message to the folder.">addMsg</a>( msg ) == 0 )
<a name="l00462"></a>00462       <span class="comment">// Message stored</span>
<a name="l00463"></a>00463       sernum = msg-&gt;getMsgSerNum();
<a name="l00464"></a>00464     kdDebug(5006) &lt;&lt; <span class="stringliteral">"addIncidenceKolab(): Message done and saved. Sernum: "</span>
<a name="l00465"></a>00465                   &lt;&lt; sernum &lt;&lt; endl;
<a name="l00466"></a>00466 
<a name="l00467"></a>00467     <span class="comment">//debugBodyParts( "after addMsg", *msg );</span>
<a name="l00468"></a>00468     addFolderChange( &amp;folder, Contents );
<a name="l00469"></a>00469     syncFolder( &amp;folder );
<a name="l00470"></a>00470   } <span class="keywordflow">else</span>
<a name="l00471"></a>00471     kdError(5006) &lt;&lt; <span class="stringliteral">"addIncidenceKolab(): Message *NOT* saved!\n"</span>;
<a name="l00472"></a>00472 
<a name="l00473"></a>00473   <span class="keywordflow">return</span> sernum;
<a name="l00474"></a>00474 }
<a name="l00475"></a>00475 
<a name="l00476"></a>00476 <span class="keywordtype">bool</span> KMailICalIfaceImpl::deleteIncidenceKolab( <span class="keyword">const</span> QString&amp; resource,
<a name="l00477"></a>00477                                                Q_UINT32 sernum )
<a name="l00478"></a>00478 {
<a name="l00479"></a>00479   <span class="comment">// Find the message from the serial number and delete it.</span>
<a name="l00480"></a>00480   <span class="keywordflow">if</span>( !mUseResourceIMAP )
<a name="l00481"></a>00481     <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00482"></a>00482 
<a name="l00483"></a>00483   kdDebug(5006) &lt;&lt; <span class="stringliteral">"KMailICalIfaceImpl::deleteIncidenceKolab( "</span>
<a name="l00484"></a>00484                 &lt;&lt; resource &lt;&lt; <span class="stringliteral">", "</span> &lt;&lt; sernum &lt;&lt; <span class="stringliteral">")\n"</span>;
<a name="l00485"></a>00485 
<a name="l00486"></a>00486   <span class="comment">// Find the folder</span>
<a name="l00487"></a>00487   <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* f = findResourceFolder( resource );
<a name="l00488"></a>00488   <span class="keywordflow">if</span>( !f ) {
<a name="l00489"></a>00489     kdError(5006) &lt;&lt; <span class="stringliteral">"deleteIncidenceKolab("</span> &lt;&lt; resource &lt;&lt; <span class="stringliteral">") : Not an IMAP resource folder"</span> &lt;&lt; endl;
<a name="l00490"></a>00490     <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00491"></a>00491   }
<a name="l00492"></a>00492 
<a name="l00493"></a>00493   <span class="keywordtype">bool</span> rc = <span class="keyword">false</span>;
<a name="l00494"></a>00494 
<a name="l00495"></a>00495   <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a>* msg = <a class="code" href="classKMailICalIfaceImpl.html#22b4721deee17c20109256db8f9ace9e" title="Find message matching a given serial number.">findMessageBySerNum</a>( sernum, f );
<a name="l00496"></a>00496   <span class="keywordflow">if</span>( msg ) {
<a name="l00497"></a>00497     <span class="comment">// Message found - delete it and return happy</span>
<a name="l00498"></a>00498     <a class="code" href="classKMailICalIfaceImpl.html#cc85b1f9da1bb38d0e48a97c278721c9" title="Convenience function to delete a message.">deleteMsg</a>( msg );
<a name="l00499"></a>00499     syncFolder( f );
<a name="l00500"></a>00500     rc = <span class="keyword">true</span>;
<a name="l00501"></a>00501   } <span class="keywordflow">else</span> {
<a name="l00502"></a>00502     kdDebug(5006) &lt;&lt; <span class="stringliteral">"Message not found, cannot remove serNum "</span> &lt;&lt; sernum &lt;&lt; endl;
<a name="l00503"></a>00503   }
<a name="l00504"></a>00504   <span class="keywordflow">return</span> rc;
<a name="l00505"></a>00505 }
<a name="l00506"></a>00506 
<a name="l00507"></a>00507 
<a name="l00508"></a>00508 <span class="keywordtype">int</span> KMailICalIfaceImpl::incidencesKolabCount( <span class="keyword">const</span> QString&amp; mimetype,
<a name="l00509"></a>00509                                               <span class="keyword">const</span> QString&amp; resource )
<a name="l00510"></a>00510 {
<a name="l00511"></a>00511   Q_UNUSED( mimetype ); <span class="comment">// honouring that would be too slow...</span>
<a name="l00512"></a>00512 
<a name="l00513"></a>00513   <span class="keywordflow">if</span>( !mUseResourceIMAP )
<a name="l00514"></a>00514     <span class="keywordflow">return</span> 0;
<a name="l00515"></a>00515 
<a name="l00516"></a>00516   <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* f = findResourceFolder( resource );
<a name="l00517"></a>00517   <span class="keywordflow">if</span>( !f ) {
<a name="l00518"></a>00518     kdError(5006) &lt;&lt; <span class="stringliteral">"incidencesKolab("</span> &lt;&lt; resource &lt;&lt; <span class="stringliteral">") : Not an IMAP resource folder"</span> &lt;&lt; endl;
<a name="l00519"></a>00519     <span class="keywordflow">return</span> 0;
<a name="l00520"></a>00520   }
<a name="l00521"></a>00521 
<a name="l00522"></a>00522   f-&gt;<a class="code" href="classKMFolder.html#c12a4bb5f265447d87b3e0e9a9482cc6" title="Open folder for access.">open</a>(<span class="stringliteral">"kolabcount"</span>);
<a name="l00523"></a>00523   <span class="keywordtype">int</span> n = f-&gt;<a class="code" href="classKMFolder.html#c482e9431d9cd9ec0dc99b57e39e0942" title="Number of messages in this folder.">count</a>();
<a name="l00524"></a>00524   f-&gt;<a class="code" href="classKMFolder.html#8d167662bca3ad6315fa5ad67bb9e4dd" title="Close folder.">close</a>(<span class="stringliteral">"kolabcount"</span>);
<a name="l00525"></a>00525   kdDebug(5006) &lt;&lt; <span class="stringliteral">"KMailICalIfaceImpl::incidencesKolabCount( "</span>
<a name="l00526"></a>00526                 &lt;&lt; resource &lt;&lt; <span class="stringliteral">" ) returned "</span> &lt;&lt; n &lt;&lt; endl;
<a name="l00527"></a>00527   <span class="keywordflow">return</span> n;
<a name="l00528"></a>00528 }
<a name="l00529"></a>00529 
<a name="l00530"></a><a class="code" href="classKMailICalIfaceImpl.html#df8af1a09df126f7774639bd7ef9c68b">00530</a> QMap&lt;Q_UINT32, QString&gt; <a class="code" href="classKMailICalIfaceImpl.html#df8af1a09df126f7774639bd7ef9c68b">KMailICalIfaceImpl::incidencesKolab</a>( <span class="keyword">const</span> QString&amp; mimetype,
<a name="l00531"></a>00531                                                              <span class="keyword">const</span> QString&amp; resource,
<a name="l00532"></a>00532                                                              <span class="keywordtype">int</span> startIndex,
<a name="l00533"></a>00533                                                              <span class="keywordtype">int</span> nbMessages )
<a name="l00534"></a>00534 {
<a name="l00538"></a>00538 
<a name="l00539"></a>00539   QMap&lt;Q_UINT32, QString&gt; aMap;
<a name="l00540"></a>00540   <span class="keywordflow">if</span>( !mUseResourceIMAP )
<a name="l00541"></a>00541     <span class="keywordflow">return</span> aMap;
<a name="l00542"></a>00542 
<a name="l00543"></a>00543   <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* f = findResourceFolder( resource );
<a name="l00544"></a>00544   <span class="keywordflow">if</span>( !f ) {
<a name="l00545"></a>00545     kdError(5006) &lt;&lt; <span class="stringliteral">"incidencesKolab("</span> &lt;&lt; resource &lt;&lt; <span class="stringliteral">") : Not an IMAP resource folder"</span> &lt;&lt; endl;
<a name="l00546"></a>00546     <span class="keywordflow">return</span> aMap;
<a name="l00547"></a>00547   }
<a name="l00548"></a>00548 
<a name="l00549"></a>00549   f-&gt;<a class="code" href="classKMFolder.html#c12a4bb5f265447d87b3e0e9a9482cc6" title="Open folder for access.">open</a>( <span class="stringliteral">"incidences"</span> );
<a name="l00550"></a>00550 
<a name="l00551"></a>00551   <span class="keywordtype">int</span> stopIndex = nbMessages == -1 ? f-&gt;<a class="code" href="classKMFolder.html#c482e9431d9cd9ec0dc99b57e39e0942" title="Number of messages in this folder.">count</a>() :
<a name="l00552"></a>00552                   QMIN( f-&gt;<a class="code" href="classKMFolder.html#c482e9431d9cd9ec0dc99b57e39e0942" title="Number of messages in this folder.">count</a>(), startIndex + nbMessages );
<a name="l00553"></a>00553   kdDebug(5006) &lt;&lt; <span class="stringliteral">"KMailICalIfaceImpl::incidencesKolab( "</span> &lt;&lt; mimetype &lt;&lt; <span class="stringliteral">", "</span>
<a name="l00554"></a>00554                 &lt;&lt; resource &lt;&lt; <span class="stringliteral">" ) from "</span> &lt;&lt; startIndex &lt;&lt; <span class="stringliteral">" to "</span> &lt;&lt; stopIndex &lt;&lt; endl;
<a name="l00555"></a>00555 
<a name="l00556"></a>00556   <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = startIndex; i &lt; stopIndex; ++i) {
<a name="l00557"></a>00557 <span class="preprocessor">#if 0</span>
<a name="l00558"></a>00558 <span class="preprocessor"></span>    <span class="keywordtype">bool</span> unget = !f-&gt;<a class="code" href="classKMFolder.html#6dacce907d07e41902f1854e872a5f9d" title="Checks if the message is already &amp;quot;gotten&amp;quot; with getMsg.">isMessage</a>(i);
<a name="l00559"></a>00559     <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a>* msg = f-&gt;<a class="code" href="classKMFolder.html#a0fdfeeed6e8e20eff1cd6445309b2f4" title="Read message at given index.">getMsg</a>( i );
<a name="l00560"></a>00560 <span class="preprocessor">#else // faster</span>
<a name="l00561"></a>00561 <span class="preprocessor"></span>    <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a>* msg = f-&gt;<a class="code" href="classKMFolder.html#4c7476219c137471fb93cb8c88061336">storage</a>()-&gt;<a class="code" href="classFolderStorage.html#253dc81349d2d11adbc1f3179bc4614e" title="Load message from file and do NOT store it, only return it.">readTemporaryMsg</a>(i);
<a name="l00562"></a>00562 <span class="preprocessor">#endif</span>
<a name="l00563"></a>00563 <span class="preprocessor"></span>    <span class="keywordflow">if</span> ( msg ) {
<a name="l00564"></a>00564       <span class="keyword">const</span> <span class="keywordtype">int</span> iSlash = mimetype.find(<span class="charliteral">'/'</span>);
<a name="l00565"></a>00565       <span class="keyword">const</span> QCString sType    = mimetype.left( iSlash   ).latin1();
<a name="l00566"></a>00566       <span class="keyword">const</span> QCString sSubtype = mimetype.mid(  iSlash+1 ).latin1();
<a name="l00567"></a>00567       <span class="keywordflow">if</span> ( sType.isEmpty() || sSubtype.isEmpty() ) {
<a name="l00568"></a>00568         kdError(5006) &lt;&lt; mimetype &lt;&lt; <span class="stringliteral">" not an type/subtype combination"</span> &lt;&lt; endl;
<a name="l00569"></a>00569       } <span class="keywordflow">else</span> {
<a name="l00570"></a>00570         DwBodyPart* dwPart = findBodyPartByMimeType( *msg, sType, sSubtype );
<a name="l00571"></a>00571         <span class="keywordflow">if</span> ( dwPart ) {
<a name="l00572"></a>00572           KMMessagePart msgPart;
<a name="l00573"></a>00573           <a class="code" href="classKMMessage.html#2b942616accf9ac39e19351ce2bba17d" title="Fill the KMMessagePart structure for a given DwBodyPart.">KMMessage::bodyPart</a>(dwPart, &amp;msgPart);
<a name="l00574"></a>00574           aMap.insert(msg-&gt;getMsgSerNum(), msgPart.<a class="code" href="classKMMessage.html#178d0a93482282bad41cfa9031c93e5a" title="Returns the body part decoded to unicode.">bodyToUnicode</a>( QTextCodec::codecForName( <span class="stringliteral">"utf8"</span> ) ));
<a name="l00575"></a>00575         } <span class="keywordflow">else</span> {
<a name="l00576"></a>00576           <span class="comment">// Check if the whole message has the right types. This is what</span>
<a name="l00577"></a>00577           <span class="comment">// happens in the case of ical storage, where the whole mail is</span>
<a name="l00578"></a>00578           <span class="comment">// the data</span>
<a name="l00579"></a>00579           <span class="keyword">const</span> QCString type( msg-&gt;<a class="code" href="classKMMessage.html#15644ca49b0cfa3d3a65d9ab3412accd" title="Get or set the &amp;#39;Content-Type&amp;#39; header field The member functions that involve...">typeStr</a>() );
<a name="l00580"></a>00580           <span class="keyword">const</span> QCString subtype( msg-&gt;<a class="code" href="classKMMessage.html#e2dfa921f919dbaf97269c8ee4b4aa07" title="Subtype.">subtypeStr</a>() );
<a name="l00581"></a>00581           <span class="keywordflow">if</span> (type.lower() == sType &amp;&amp; subtype.lower() == sSubtype ) {
<a name="l00582"></a>00582             aMap.insert( msg-&gt;getMsgSerNum(), msg-&gt;<a class="code" href="classKMMessage.html#178d0a93482282bad41cfa9031c93e5a" title="Returns the body part decoded to unicode.">bodyToUnicode</a>() );
<a name="l00583"></a>00583           }
<a name="l00584"></a>00584           <span class="comment">// This is *not* an error: it may be that not all of the messages</span>
<a name="l00585"></a>00585           <span class="comment">// have a message part that is matching the wanted MIME type</span>
<a name="l00586"></a>00586         }
<a name="l00587"></a>00587       }
<a name="l00588"></a>00588 <span class="preprocessor">#if 0</span>
<a name="l00589"></a>00589 <span class="preprocessor"></span>      <span class="keywordflow">if</span>( unget ) f-&gt;<a class="code" href="classKMFolder.html#55d936471c71f7d03f6e54d2f83a0b52" title="Replace KMMessage with KMMsgInfo and delete KMMessage.">unGetMsg</a>(i);
<a name="l00590"></a>00590 <span class="preprocessor">#else</span>
<a name="l00591"></a>00591 <span class="preprocessor"></span>      <span class="keyword">delete</span> msg;
<a name="l00592"></a>00592 <span class="preprocessor">#endif</span>
<a name="l00593"></a>00593 <span class="preprocessor"></span>    }
<a name="l00594"></a>00594   }
<a name="l00595"></a>00595   f-&gt;<a class="code" href="classKMFolder.html#8d167662bca3ad6315fa5ad67bb9e4dd" title="Close folder.">close</a>( <span class="stringliteral">"incidences"</span> );
<a name="l00596"></a>00596   <span class="keywordflow">return</span> aMap;
<a name="l00597"></a>00597 }
<a name="l00598"></a>00598 
<a name="l00599"></a>00599 
<a name="l00600"></a>00600 <span class="comment">/* Called when a message that was downloaded from an online imap folder</span>
<a name="l00601"></a>00601 <span class="comment"> * arrives. Needed when listing incidences on online account folders. */</span>
<a name="l00602"></a>00602 <span class="comment">// TODO: Till, port me</span>
<a name="l00603"></a>00603 <span class="keywordtype">void</span> KMailICalIfaceImpl::slotMessageRetrieved( <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a>* msg )
<a name="l00604"></a>00604 {
<a name="l00605"></a>00605   <span class="keywordflow">if</span>( !msg ) <span class="keywordflow">return</span>;
<a name="l00606"></a>00606 
<a name="l00607"></a>00607   <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a> *parent = msg-&gt;parent();
<a name="l00608"></a>00608   Q_ASSERT( parent );
<a name="l00609"></a>00609   Q_UINT32 sernum = msg-&gt;getMsgSerNum();
<a name="l00610"></a>00610 
<a name="l00611"></a>00611   <span class="comment">// do we have an accumulator for this folder?</span>
<a name="l00612"></a>00612   Accumulator *ac = mAccumulators.find( parent-&gt;<a class="code" href="classKMFolder.html#ee43a9e2a17f7286cb20d81ac2d3f033" title="Returns full path to folder file.">location</a>() );
<a name="l00613"></a>00613   <span class="keywordflow">if</span>( ac ) {
<a name="l00614"></a>00614     QString s;
<a name="l00615"></a>00615     <span class="keywordflow">if</span> ( !vPartFoundAndDecoded( msg, s ) ) <span class="keywordflow">return</span>;
<a name="l00616"></a>00616     QString uid( <span class="stringliteral">"UID"</span> );
<a name="l00617"></a>00617     vPartMicroParser( s, uid );
<a name="l00618"></a>00618     <span class="keyword">const</span> Q_UINT32 sernum = msg-&gt;getMsgSerNum();
<a name="l00619"></a>00619     mUIDToSerNum.insert( uid, sernum );
<a name="l00620"></a>00620     ac-&gt;add( s );
<a name="l00621"></a>00621     <span class="keywordflow">if</span>( ac-&gt;isFull() ) {
<a name="l00622"></a>00622       <span class="comment">/* if this was the last one we were waiting for, tell the resource</span>
<a name="l00623"></a>00623 <span class="comment">       * about the new incidences and clean up. */</span>
<a name="l00624"></a>00624       <span class="comment">//asyncLoadResult( ac-&gt;incidences, ac-&gt;type, ac-&gt;folder );</span>
<a name="l00625"></a>00625       mAccumulators.remove( ac-&gt;folder ); <span class="comment">// autodelete</span>
<a name="l00626"></a>00626     }
<a name="l00627"></a>00627   } <span class="keywordflow">else</span> {
<a name="l00628"></a>00628     <span class="comment">/* We are not accumulating for this folder, so this one was added</span>
<a name="l00629"></a>00629 <span class="comment">     * by KMail. Do your thang. */</span>
<a name="l00630"></a>00630      slotIncidenceAdded( msg-&gt;parent(), msg-&gt;getMsgSerNum() );
<a name="l00631"></a>00631   }
<a name="l00632"></a>00632 
<a name="l00633"></a>00633   <span class="keywordflow">if</span> ( mTheUnGetMes.contains( sernum ) ) {
<a name="l00634"></a>00634     mTheUnGetMes.remove( sernum );
<a name="l00635"></a>00635     <span class="keywordtype">int</span> i = 0;
<a name="l00636"></a>00636     <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* folder = 0;
<a name="l00637"></a>00637     <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>( sernum, &amp;folder, &amp;i );
<a name="l00638"></a>00638     folder-&gt;<a class="code" href="classKMFolder.html#55d936471c71f7d03f6e54d2f83a0b52" title="Replace KMMessage with KMMsgInfo and delete KMMessage.">unGetMsg</a>( i );
<a name="l00639"></a>00639   }
<a name="l00640"></a>00640 }
<a name="l00641"></a>00641 
<a name="l00642"></a>00642 <span class="keyword">static</span> <span class="keywordtype">int</span> dimapAccountCount()
<a name="l00643"></a>00643 {
<a name="l00644"></a>00644   <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> *mgr = kmkernel-&gt;acctMgr();
<a name="l00645"></a>00645   KMAccount *account = mgr-&gt;<a class="code" href="classKMail_1_1AccountManager.html#9ab78f4ffdb974c60040f400b4be3657" title="First account of the list.">first</a>();
<a name="l00646"></a>00646   <span class="keywordtype">int</span> count = 0;
<a name="l00647"></a>00647   <span class="keywordflow">while</span> ( account ) {
<a name="l00648"></a>00648     <span class="keywordflow">if</span> ( dynamic_cast&lt;KMAcctCachedImap*&gt;( account ) )
<a name="l00649"></a>00649       ++count;
<a name="l00650"></a>00650     account = mgr-&gt;<a class="code" href="classKMail_1_1AccountManager.html#f21f9077b425ba7218d934342b2b5835" title="Next account of the list.">next</a>();
<a name="l00651"></a>00651   }
<a name="l00652"></a>00652   <span class="keywordflow">return</span> count;
<a name="l00653"></a>00653 }
<a name="l00654"></a>00654 
<a name="l00655"></a>00655 <span class="keyword">static</span> QString subresourceLabelForPresentation( <span class="keyword">const</span> <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a> * folder )
<a name="l00656"></a>00656 {
<a name="l00657"></a>00657     QString label = folder-&gt;<a class="code" href="classKMFolder.html#978272752c47b2a2c0ebef7b3203419d" title="URL of the node for visualization purposes.">prettyURL</a>();
<a name="l00658"></a>00658     QStringList parts = QStringList::split( QString::fromLatin1(<span class="stringliteral">"/"</span>), label );
<a name="l00659"></a>00659     <span class="comment">// In the common special case of some other user's folder shared with us</span>
<a name="l00660"></a>00660     <span class="comment">// the url looks like "Server Name/user/$USERNAME/Folder/Name". Make</span>
<a name="l00661"></a>00661     <span class="comment">// those a bit nicer.</span>
<a name="l00662"></a>00662     <span class="keywordflow">if</span> ( parts[1] == QString::fromLatin1(<span class="stringliteral">"user"</span>) ) {
<a name="l00663"></a>00663         QStringList remainder(parts);
<a name="l00664"></a>00664         remainder.pop_front();
<a name="l00665"></a>00665         remainder.pop_front();
<a name="l00666"></a>00666         remainder.pop_front();
<a name="l00667"></a>00667         label = i18n(<span class="stringliteral">"%1's %2"</span>)
<a name="l00668"></a>00668             .arg( parts[2] )
<a name="l00669"></a>00669             .arg( remainder.join( QString::fromLatin1(<span class="stringliteral">"/"</span>) ) );
<a name="l00670"></a>00670     }
<a name="l00671"></a>00671     <span class="comment">// Another special case is our own folders, under the imap INBOX, make</span>
<a name="l00672"></a>00672     <span class="comment">// those prettier too</span>
<a name="l00673"></a>00673     <span class="keyword">const</span> <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a> *parent = folder;
<a name="l00674"></a>00674     <span class="keywordflow">while</span> ( parent-&gt;parent() &amp;&amp; parent-&gt;parent()-&gt;owner() ) {
<a name="l00675"></a>00675       parent = parent-&gt;parent()-&gt;owner();
<a name="l00676"></a>00676       <span class="keywordflow">if</span> ( parent-&gt;<a class="code" href="classKMFolder.html#775598752860ff7bf869b0f822b4fcb4" title="Returns true if the folder is a kmail system folder.">isSystemFolder</a>() ) {
<a name="l00677"></a>00677         QStringList remainder(parts);
<a name="l00678"></a>00678         remainder.pop_front();
<a name="l00679"></a>00679         remainder.pop_front();
<a name="l00680"></a>00680         <span class="keywordflow">if</span> ( dimapAccountCount() &gt; 1 ) {
<a name="l00681"></a>00681           label = i18n( <span class="stringliteral">"My %1 (%2)"</span>)
<a name="l00682"></a>00682               .arg( remainder.join( QString::fromLatin1(<span class="stringliteral">"/"</span>) ),
<a name="l00683"></a>00683                     <span class="keyword">static_cast&lt;</span><span class="keyword">const </span>KMFolderCachedImap*<span class="keyword">&gt;</span>( folder-&gt;<a class="code" href="classKMFolder.html#4c7476219c137471fb93cb8c88061336">storage</a>() )-&gt;account()-&gt;name() );
<a name="l00684"></a>00684         } <span class="keywordflow">else</span> {
<a name="l00685"></a>00685           label = i18n(<span class="stringliteral">"My %1"</span>)
<a name="l00686"></a>00686               .arg( remainder.join( QString::fromLatin1(<span class="stringliteral">"/"</span>) ) );
<a name="l00687"></a>00687         }
<a name="l00688"></a>00688         <span class="keywordflow">break</span>;
<a name="l00689"></a>00689       }
<a name="l00690"></a>00690     }
<a name="l00691"></a>00691     <span class="keywordflow">return</span> label;
<a name="l00692"></a>00692 }
<a name="l00693"></a>00693 
<a name="l00694"></a>00694 <span class="comment">/* list all available subresources */</span>
<a name="l00695"></a>00695 QValueList&lt;KMailICalIfaceImpl::SubResource&gt; KMailICalIfaceImpl::subresourcesKolab( <span class="keyword">const</span> QString&amp; contentsType )
<a name="l00696"></a>00696 {
<a name="l00697"></a>00697   QValueList&lt;SubResource&gt; subResources;
<a name="l00698"></a>00698 
<a name="l00699"></a>00699   <span class="comment">// Add the default one</span>
<a name="l00700"></a>00700   <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* f = <a class="code" href="classKMailICalIfaceImpl.html#b3f9595bf285c5a0250daae033d51c67" title="Get the folder that holds *type* entries.">folderFromType</a>( contentsType, QString::null );
<a name="l00701"></a>00701   <span class="keywordflow">if</span> ( f ) {
<a name="l00702"></a>00702     subResources.append( SubResource( f-&gt;<a class="code" href="classKMFolder.html#ee43a9e2a17f7286cb20d81ac2d3f033" title="Returns full path to folder file.">location</a>(), subresourceLabelForPresentation( f ),
<a name="l00703"></a>00703                                       !f-&gt;<a class="code" href="classKMFolder.html#6fc63ddd905b6d47f348400cb1a61b18" title="Is the folder read-only?">isReadOnly</a>(), folderIsAlarmRelevant( f ) ) );
<a name="l00704"></a>00704     kdDebug(5006) &lt;&lt; <span class="stringliteral">"Adding(1) folder "</span> &lt;&lt; f-&gt;<a class="code" href="classKMFolder.html#ee43a9e2a17f7286cb20d81ac2d3f033" title="Returns full path to folder file.">location</a>() &lt;&lt; <span class="stringliteral">"    "</span> &lt;&lt;
<a name="l00705"></a>00705       ( f-&gt;<a class="code" href="classKMFolder.html#6fc63ddd905b6d47f348400cb1a61b18" title="Is the folder read-only?">isReadOnly</a>() ? <span class="stringliteral">"readonly"</span> : <span class="stringliteral">""</span> ) &lt;&lt; endl;
<a name="l00706"></a>00706   }
<a name="l00707"></a>00707 
<a name="l00708"></a>00708   <span class="comment">// get the extra ones</span>
<a name="l00709"></a>00709   <span class="keyword">const</span> KMail::FolderContentsType t = folderContentsType( contentsType );
<a name="l00710"></a>00710   QDictIterator&lt;ExtraFolder&gt; it( mExtraFolders );
<a name="l00711"></a>00711   <span class="keywordflow">for</span> ( ; it.current(); ++it ){
<a name="l00712"></a>00712     f = it.current()-&gt;folder;
<a name="l00713"></a>00713     <span class="keywordflow">if</span> ( f &amp;&amp; f-&gt;<a class="code" href="classKMFolder.html#4c7476219c137471fb93cb8c88061336">storage</a>()-&gt;<a class="code" href="classFolderStorage.html#2e2d90259cf68d278f95b89b8f9e5088">contentsType</a>() == t ) {
<a name="l00714"></a>00714       subResources.append( SubResource( f-&gt;<a class="code" href="classKMFolder.html#ee43a9e2a17f7286cb20d81ac2d3f033" title="Returns full path to folder file.">location</a>(), subresourceLabelForPresentation( f ),
<a name="l00715"></a>00715                                         !f-&gt;<a class="code" href="classKMFolder.html#6fc63ddd905b6d47f348400cb1a61b18" title="Is the folder read-only?">isReadOnly</a>(), folderIsAlarmRelevant( f ) ) );
<a name="l00716"></a>00716       kdDebug(5006) &lt;&lt; <span class="stringliteral">"Adding(2) folder "</span> &lt;&lt; f-&gt;<a class="code" href="classKMFolder.html#ee43a9e2a17f7286cb20d81ac2d3f033" title="Returns full path to folder file.">location</a>() &lt;&lt; <span class="stringliteral">"     "</span> &lt;&lt;
<a name="l00717"></a>00717               ( f-&gt;<a class="code" href="classKMFolder.html#6fc63ddd905b6d47f348400cb1a61b18" title="Is the folder read-only?">isReadOnly</a>() ? <span class="stringliteral">"readonly"</span> : <span class="stringliteral">""</span> ) &lt;&lt; endl;
<a name="l00718"></a>00718     }
<a name="l00719"></a>00719   }
<a name="l00720"></a>00720 
<a name="l00721"></a>00721   <span class="keywordflow">if</span> ( subResources.isEmpty() )
<a name="l00722"></a>00722     kdDebug(5006) &lt;&lt; <span class="stringliteral">"subresourcesKolab: No folder found for "</span> &lt;&lt; contentsType &lt;&lt; endl;
<a name="l00723"></a>00723   <span class="keywordflow">return</span> subResources;
<a name="l00724"></a>00724 }
<a name="l00725"></a>00725 
<a name="l00726"></a>00726 <span class="keywordtype">bool</span> KMailICalIfaceImpl::triggerSync( <span class="keyword">const</span> QString&amp; contentsType )
<a name="l00727"></a>00727 {
<a name="l00728"></a>00728   kdDebug(5006) &lt;&lt; k_funcinfo &lt;&lt; endl;
<a name="l00729"></a>00729   QValueList&lt;KMailICalIfaceImpl::SubResource&gt; folderList = subresourcesKolab( contentsType );
<a name="l00730"></a>00730   <span class="keywordflow">for</span> ( QValueList&lt;KMailICalIfaceImpl::SubResource&gt;::const_iterator it( folderList.begin() ),
<a name="l00731"></a>00731                                                                     end( folderList.end() );
<a name="l00732"></a>00732         it != end ; ++it ) {
<a name="l00733"></a>00733     <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a> * <span class="keyword">const</span> f = findResourceFolder( (*it).location );
<a name="l00734"></a>00734     <span class="keywordflow">if</span> ( !f ) <span class="keywordflow">continue</span>;
<a name="l00735"></a>00735     <span class="keywordflow">if</span> ( f-&gt;<a class="code" href="classKMFolder.html#f95cbfeb07323847c6fe68d43c5a9276" title="Returns the type of this folder.">folderType</a>() == KMFolderTypeImap || f-&gt;<a class="code" href="classKMFolder.html#f95cbfeb07323847c6fe68d43c5a9276" title="Returns the type of this folder.">folderType</a>() == KMFolderTypeCachedImap ) {
<a name="l00736"></a>00736       <span class="keywordflow">if</span> ( !kmkernel-&gt;askToGoOnline() ) {
<a name="l00737"></a>00737         <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00738"></a>00738       }
<a name="l00739"></a>00739     }
<a name="l00740"></a>00740 
<a name="l00741"></a>00741     <span class="keywordflow">if</span> ( f-&gt;<a class="code" href="classKMFolder.html#f95cbfeb07323847c6fe68d43c5a9276" title="Returns the type of this folder.">folderType</a>() == KMFolderTypeImap ) {
<a name="l00742"></a>00742       KMFolderImap *imap = <span class="keyword">static_cast&lt;</span>KMFolderImap*<span class="keyword">&gt;</span>( f-&gt;<a class="code" href="classKMFolder.html#4c7476219c137471fb93cb8c88061336">storage</a>() );
<a name="l00743"></a>00743       imap-&gt;getAndCheckFolder();
<a name="l00744"></a>00744     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( f-&gt;<a class="code" href="classKMFolder.html#f95cbfeb07323847c6fe68d43c5a9276" title="Returns the type of this folder.">folderType</a>() == KMFolderTypeCachedImap ) {
<a name="l00745"></a>00745       KMFolderCachedImap* cached = <span class="keyword">static_cast&lt;</span>KMFolderCachedImap*<span class="keyword">&gt;</span>( f-&gt;<a class="code" href="classKMFolder.html#4c7476219c137471fb93cb8c88061336">storage</a>() );
<a name="l00746"></a>00746       cached-&gt;account()-&gt;processNewMailSingleFolder( f );
<a name="l00747"></a>00747     }
<a name="l00748"></a>00748   }
<a name="l00749"></a>00749   <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00750"></a>00750 }
<a name="l00751"></a>00751 
<a name="l00752"></a>00752 <span class="comment">/* Used by the resource to query whether folders are writable. */</span>
<a name="l00753"></a>00753 <span class="keywordtype">bool</span> KMailICalIfaceImpl::isWritableFolder( <span class="keyword">const</span> QString&amp; type,
<a name="l00754"></a>00754                                            <span class="keyword">const</span> QString&amp; resource )
<a name="l00755"></a>00755 {
<a name="l00756"></a>00756   <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* f = <a class="code" href="classKMailICalIfaceImpl.html#b3f9595bf285c5a0250daae033d51c67" title="Get the folder that holds *type* entries.">folderFromType</a>( type, resource );
<a name="l00757"></a>00757   <span class="keywordflow">if</span> ( !f )
<a name="l00758"></a>00758     <span class="comment">// Definitely not writable</span>
<a name="l00759"></a>00759     <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00760"></a>00760 
<a name="l00761"></a>00761   <span class="keywordflow">return</span> !f-&gt;<a class="code" href="classKMFolder.html#6fc63ddd905b6d47f348400cb1a61b18" title="Is the folder read-only?">isReadOnly</a>();
<a name="l00762"></a>00762 }
<a name="l00763"></a>00763 
<a name="l00764"></a>00764 <span class="comment">/* Used by the resource to query the storage format of the folder. */</span>
<a name="l00765"></a>00765 KMailICalIfaceImpl::StorageFormat KMailICalIfaceImpl::storageFormat( <span class="keyword">const</span> QString&amp; resource )
<a name="l00766"></a>00766 {
<a name="l00767"></a>00767   StorageFormat format;
<a name="l00768"></a>00768   <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* f = findResourceFolder( resource );
<a name="l00769"></a>00769   <span class="keywordflow">if</span> ( f )
<a name="l00770"></a>00770     format = storageFormat( f );
<a name="l00771"></a>00771   <span class="keywordflow">else</span>
<a name="l00772"></a>00772     format = globalStorageFormat();
<a name="l00773"></a>00773   <span class="keywordflow">return</span> format;
<a name="l00774"></a>00774 }
<a name="l00775"></a>00775 
<a name="l00790"></a><a class="code" href="classKMailICalIfaceImpl.html#eb82d1bac54a94e7d833116a8a277bb5">00790</a> Q_UINT32 <a class="code" href="classKMailICalIfaceImpl.html#eb82d1bac54a94e7d833116a8a277bb5" title="Update a kolab storage entry.">KMailICalIfaceImpl::update</a>( <span class="keyword">const</span> QString&amp; resource,
<a name="l00791"></a>00791                                      Q_UINT32 sernum,
<a name="l00792"></a>00792                                      <span class="keyword">const</span> QString&amp; subject,
<a name="l00793"></a>00793                                      <span class="keyword">const</span> QString&amp; plainTextBody,
<a name="l00794"></a>00794                                      <span class="keyword">const</span> QMap&lt;QCString, QString&gt;&amp; customHeaders,
<a name="l00795"></a>00795                                      <span class="keyword">const</span> QStringList&amp; attachmentURLs,
<a name="l00796"></a>00796                                      <span class="keyword">const</span> QStringList&amp; attachmentMimetypes,
<a name="l00797"></a>00797                                      <span class="keyword">const</span> QStringList&amp; attachmentNames,
<a name="l00798"></a>00798                                      <span class="keyword">const</span> QStringList&amp; deletedAttachments )
<a name="l00799"></a>00799 {
<a name="l00800"></a>00800   Q_UINT32 rc = 0;
<a name="l00801"></a>00801 
<a name="l00802"></a>00802    <span class="keywordflow">if</span>( !mUseResourceIMAP )
<a name="l00803"></a>00803     <span class="keywordflow">return</span> rc;
<a name="l00804"></a>00804 
<a name="l00805"></a>00805   Q_ASSERT( !resource.isEmpty() );
<a name="l00806"></a>00806 
<a name="l00807"></a>00807   kdDebug(5006) &lt;&lt; <span class="stringliteral">"KMailICalIfaceImpl::update( "</span> &lt;&lt; resource &lt;&lt; <span class="stringliteral">", "</span> &lt;&lt; sernum &lt;&lt; <span class="stringliteral">" )\n"</span>;
<a name="l00808"></a>00808   kdDebug(5006) &lt;&lt; attachmentURLs &lt;&lt; <span class="stringliteral">"\n"</span>;
<a name="l00809"></a>00809   kdDebug(5006) &lt;&lt; attachmentMimetypes &lt;&lt; <span class="stringliteral">"\n"</span>;
<a name="l00810"></a>00810   kdDebug(5006) &lt;&lt; attachmentNames &lt;&lt; <span class="stringliteral">"\n"</span>;
<a name="l00811"></a>00811   kdDebug(5006) &lt;&lt; <span class="stringliteral">"deleted attachments:"</span> &lt;&lt; deletedAttachments &lt;&lt; <span class="stringliteral">"\n"</span>;
<a name="l00812"></a>00812 
<a name="l00813"></a>00813   <span class="comment">// Find the folder</span>
<a name="l00814"></a>00814   <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* f = findResourceFolder( resource );
<a name="l00815"></a>00815   <span class="keywordflow">if</span>( !f ) {
<a name="l00816"></a>00816     kdError(5006) &lt;&lt; <span class="stringliteral">"update("</span> &lt;&lt; resource &lt;&lt; <span class="stringliteral">") : Not an IMAP resource folder"</span> &lt;&lt; endl;
<a name="l00817"></a>00817     <span class="keywordflow">return</span> rc;
<a name="l00818"></a>00818   }
<a name="l00819"></a>00819 
<a name="l00820"></a>00820   f-&gt;<a class="code" href="classKMFolder.html#c12a4bb5f265447d87b3e0e9a9482cc6" title="Open folder for access.">open</a>( <span class="stringliteral">"ifaceupdate"</span> );
<a name="l00821"></a>00821 
<a name="l00822"></a>00822   <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a>* msg = 0;
<a name="l00823"></a>00823   <span class="keywordflow">if</span> ( sernum != 0 ) {
<a name="l00824"></a>00824     msg = <a class="code" href="classKMailICalIfaceImpl.html#22b4721deee17c20109256db8f9ace9e" title="Find message matching a given serial number.">findMessageBySerNum</a>( sernum, f );
<a name="l00825"></a>00825     <span class="keywordflow">if</span> ( !msg ) <span class="keywordflow">return</span> 0;
<a name="l00826"></a>00826     <span class="comment">// Message found - make a copy and update it:</span>
<a name="l00827"></a>00827     <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a>* newMsg = <span class="keyword">new</span> <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a>( *msg );
<a name="l00828"></a>00828     newMsg-&gt;<a class="code" href="classKMMessage.html#dc02d16017d248f9f7c9dc980aee25b4">setSubject</a>( subject );
<a name="l00829"></a>00829     QMap&lt;QCString, QString&gt;::ConstIterator ith = customHeaders.begin();
<a name="l00830"></a>00830     <span class="keyword">const</span> QMap&lt;QCString, QString&gt;::ConstIterator ithEnd = customHeaders.begin();
<a name="l00831"></a>00831     <span class="keywordflow">for</span> ( ; ith != ithEnd ; ++ith )
<a name="l00832"></a>00832       newMsg-&gt;<a class="code" href="classKMMessage.html#de227ca74ea9bca2412ddfc63b4025c6" title="Set the header field with the given name to the given value.">setHeaderField</a>( ith.key(), ith.data() );
<a name="l00833"></a>00833     newMsg-&gt;setParent( 0 ); <span class="comment">// workaround strange line in KMMsgBase::assign. newMsg is not in any folder yet.</span>
<a name="l00834"></a>00834     <span class="comment">// Note that plainTextBody isn't used in this branch. We assume it's still valid from when the mail was created.</span>
<a name="l00835"></a>00835 
<a name="l00836"></a>00836     <span class="comment">// Delete some attachments according to list</span>
<a name="l00837"></a>00837     <span class="keywordflow">for</span>( QStringList::ConstIterator it = deletedAttachments.begin();
<a name="l00838"></a>00838          it != deletedAttachments.end();
<a name="l00839"></a>00839          ++it ){
<a name="l00840"></a>00840       <span class="keywordflow">if</span>( !deleteAttachment( *newMsg, *it ) ){
<a name="l00841"></a>00841         <span class="comment">// Note: It is _not_ an error if an attachment was already deleted.</span>
<a name="l00842"></a>00842       }
<a name="l00843"></a>00843     }
<a name="l00844"></a>00844 
<a name="l00845"></a>00845     <span class="keyword">const</span> KMail::FolderContentsType t = f-&gt;<a class="code" href="classKMFolder.html#4c7476219c137471fb93cb8c88061336">storage</a>()-&gt;<a class="code" href="classFolderStorage.html#2e2d90259cf68d278f95b89b8f9e5088">contentsType</a>();
<a name="l00846"></a>00846     <span class="keyword">const</span> QCString type = msg-&gt;<a class="code" href="classKMMessage.html#15644ca49b0cfa3d3a65d9ab3412accd" title="Get or set the &amp;#39;Content-Type&amp;#39; header field The member functions that involve...">typeStr</a>();
<a name="l00847"></a>00847     <span class="keyword">const</span> QCString subtype = msg-&gt;<a class="code" href="classKMMessage.html#e2dfa921f919dbaf97269c8ee4b4aa07" title="Subtype.">subtypeStr</a>();
<a name="l00848"></a>00848     <span class="keyword">const</span> <span class="keywordtype">bool</span> messageWasIcalVcardFormat = ( type.lower() == <span class="stringliteral">"text"</span> &amp;&amp;
<a name="l00849"></a>00849         ( subtype.lower() == <span class="stringliteral">"calendar"</span> || subtype.lower() == <span class="stringliteral">"x-vcard"</span> ) );
<a name="l00850"></a>00850 
<a name="l00851"></a>00851     <span class="keywordflow">if</span> ( storageFormat( f ) == StorageIcalVcard ) {
<a name="l00852"></a>00852       <span class="comment">//kdDebug(5006) &lt;&lt; k_funcinfo &lt;&lt; " StorageFormatIcalVcard " &lt;&lt; endl;</span>
<a name="l00853"></a>00853       <span class="keywordflow">if</span> ( !messageWasIcalVcardFormat ) {
<a name="l00854"></a>00854         setIcalVcardContentTypeHeader( newMsg, t, f );
<a name="l00855"></a>00855       }
<a name="l00856"></a>00856       newMsg-&gt;<a class="code" href="classKMMessage.html#7e6ee8707a192b15c0394b69dcc10fb8" title="Set the message body, encoding it according to the current content transfer encoding...">setBodyEncoded</a>( plainTextBody.utf8() );
<a name="l00857"></a>00857     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( storageFormat( f ) == StorageXML ) {
<a name="l00858"></a>00858       <span class="keywordflow">if</span> ( messageWasIcalVcardFormat ) {
<a name="l00859"></a>00859         <span class="comment">// this was originally an ical event, but the folder changed to xml,</span>
<a name="l00860"></a>00860         <span class="comment">// convert</span>
<a name="l00861"></a>00861        setXMLContentTypeHeader( newMsg, plainTextBody );
<a name="l00862"></a>00862       }
<a name="l00863"></a>00863       <span class="comment">//kdDebug(5006) &lt;&lt; k_funcinfo &lt;&lt; " StorageFormatXML " &lt;&lt; endl;</span>
<a name="l00864"></a>00864       <span class="comment">// Add all attachments by reading them from their temp. files</span>
<a name="l00865"></a>00865       QStringList::ConstIterator iturl = attachmentURLs.begin();
<a name="l00866"></a>00866       QStringList::ConstIterator itmime = attachmentMimetypes.begin();
<a name="l00867"></a>00867       QStringList::ConstIterator itname = attachmentNames.begin();
<a name="l00868"></a>00868       <span class="keywordflow">for</span>( ;
<a name="l00869"></a>00869           iturl != attachmentURLs.end()
<a name="l00870"></a>00870           &amp;&amp; itmime != attachmentMimetypes.end()
<a name="l00871"></a>00871           &amp;&amp; itname != attachmentNames.end();
<a name="l00872"></a>00872           ++iturl, ++itname, ++itmime ){
<a name="l00873"></a>00873         <span class="keywordtype">bool</span> byname = !(*itmime).startsWith( <span class="stringliteral">"application/x-vnd.kolab."</span> );
<a name="l00874"></a>00874         <span class="keywordflow">if</span>( !updateAttachment( *newMsg, *iturl, *itname, *itmime, byname ) ){
<a name="l00875"></a>00875           kdDebug(5006) &lt;&lt; <span class="stringliteral">"Attachment error, can not update attachment "</span> &lt;&lt; *iturl &lt;&lt; endl;
<a name="l00876"></a>00876           <span class="keywordflow">break</span>;
<a name="l00877"></a>00877         }
<a name="l00878"></a>00878       }
<a name="l00879"></a>00879     }
<a name="l00880"></a>00880 
<a name="l00881"></a>00881     <span class="comment">//debugBodyParts( "in update, before cleanup", *newMsg );</span>
<a name="l00882"></a>00882 
<a name="l00883"></a>00883     <span class="comment">// This is necessary for the headers to be readable later on</span>
<a name="l00884"></a>00884     newMsg-&gt;<a class="code" href="classKMMessage.html#c3593abb0275a61f2206eaf51435d64d" title="Removes empty fields from the header, e.g.">cleanupHeader</a>();
<a name="l00885"></a>00885 
<a name="l00886"></a>00886     <span class="comment">//debugBodyParts( "in update, after cleanup", *newMsg );</span>
<a name="l00887"></a>00887 
<a name="l00888"></a>00888     <a class="code" href="classKMailICalIfaceImpl.html#cc85b1f9da1bb38d0e48a97c278721c9" title="Convenience function to delete a message.">deleteMsg</a>( msg );
<a name="l00889"></a>00889     <span class="keywordflow">if</span> ( f-&gt;<a class="code" href="classKMFolder.html#5e7d1aee44132cf435081452c211f1aa" title="Add the given message to the folder.">addMsg</a>( newMsg ) == 0 ) {
<a name="l00890"></a>00890       <span class="comment">// Message stored</span>
<a name="l00891"></a>00891       rc = newMsg-&gt;getMsgSerNum();
<a name="l00892"></a>00892       kdDebug(5006) &lt;&lt; <span class="stringliteral">"forget about "</span> &lt;&lt; sernum &lt;&lt; <span class="stringliteral">", it's "</span> &lt;&lt; rc &lt;&lt; <span class="stringliteral">" now"</span> &lt;&lt; endl;
<a name="l00893"></a>00893     }
<a name="l00894"></a>00894     addFolderChange( f, Contents );
<a name="l00895"></a>00895     syncFolder( f );
<a name="l00896"></a>00896   } <span class="keywordflow">else</span> {
<a name="l00897"></a>00897     <span class="comment">// Message not found - store it newly</span>
<a name="l00898"></a>00898     rc = addIncidenceKolab( *f, subject, plainTextBody, customHeaders,
<a name="l00899"></a>00899                             attachmentURLs,
<a name="l00900"></a>00900                             attachmentNames,
<a name="l00901"></a>00901                             attachmentMimetypes );
<a name="l00902"></a>00902   }
<a name="l00903"></a>00903 
<a name="l00904"></a>00904   f-&gt;<a class="code" href="classKMFolder.html#8d167662bca3ad6315fa5ad67bb9e4dd" title="Close folder.">close</a>(<span class="stringliteral">"ifaceupdate"</span>);
<a name="l00905"></a>00905   <span class="keywordflow">return</span> rc;
<a name="l00906"></a>00906 }
<a name="l00907"></a>00907 
<a name="l00908"></a>00908 KURL KMailICalIfaceImpl::getAttachment( <span class="keyword">const</span> QString&amp; resource,
<a name="l00909"></a>00909                                         Q_UINT32 sernum,
<a name="l00910"></a>00910                                         <span class="keyword">const</span> QString&amp; filename )
<a name="l00911"></a>00911 {
<a name="l00912"></a>00912   <span class="comment">// This finds the attachment with the filename, saves it to a</span>
<a name="l00913"></a>00913   <span class="comment">// temp file and returns a URL to it. It's up to the resource</span>
<a name="l00914"></a>00914   <span class="comment">// to delete the tmp file later.</span>
<a name="l00915"></a>00915   <span class="keywordflow">if</span>( !mUseResourceIMAP )
<a name="l00916"></a>00916     <span class="keywordflow">return</span> KURL();
<a name="l00917"></a>00917 
<a name="l00918"></a>00918   kdDebug(5006) &lt;&lt; <span class="stringliteral">"KMailICalIfaceImpl::getAttachment( "</span>
<a name="l00919"></a>00919                 &lt;&lt; resource &lt;&lt; <span class="stringliteral">", "</span> &lt;&lt; sernum &lt;&lt; <span class="stringliteral">", "</span> &lt;&lt; filename &lt;&lt; <span class="stringliteral">" )\n"</span>;
<a name="l00920"></a>00920 
<a name="l00921"></a>00921   <span class="comment">// Find the folder</span>
<a name="l00922"></a>00922   <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* f = findResourceFolder( resource );
<a name="l00923"></a>00923   <span class="keywordflow">if</span>( !f ) {
<a name="l00924"></a>00924     kdError(5006) &lt;&lt; <span class="stringliteral">"getAttachment("</span> &lt;&lt; resource &lt;&lt; <span class="stringliteral">") : Not an IMAP resource folder"</span> &lt;&lt; endl;
<a name="l00925"></a>00925     <span class="keywordflow">return</span> KURL();
<a name="l00926"></a>00926   }
<a name="l00927"></a>00927   <span class="keywordflow">if</span> ( storageFormat( f ) != StorageXML ) {
<a name="l00928"></a>00928     kdError(5006) &lt;&lt; <span class="stringliteral">"getAttachment("</span> &lt;&lt; resource &lt;&lt; <span class="stringliteral">") : Folder has wrong storage format "</span> &lt;&lt; storageFormat( f ) &lt;&lt; endl;
<a name="l00929"></a>00929     <span class="keywordflow">return</span> KURL();
<a name="l00930"></a>00930   }
<a name="l00931"></a>00931 
<a name="l00932"></a>00932   KURL url;
<a name="l00933"></a>00933 
<a name="l00934"></a>00934   <span class="keywordtype">bool</span> bOK = <span class="keyword">false</span>;
<a name="l00935"></a>00935   <span class="keywordtype">bool</span> quiet = mResourceQuiet;
<a name="l00936"></a>00936   mResourceQuiet = <span class="keyword">true</span>;
<a name="l00937"></a>00937 
<a name="l00938"></a>00938   <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a>* msg = <a class="code" href="classKMailICalIfaceImpl.html#22b4721deee17c20109256db8f9ace9e" title="Find message matching a given serial number.">findMessageBySerNum</a>( sernum, f );
<a name="l00939"></a>00939   <span class="keywordflow">if</span>( msg ) {
<a name="l00940"></a>00940     <span class="comment">// Message found - look for the attachment:</span>
<a name="l00941"></a>00941 
<a name="l00942"></a>00942     DwBodyPart* part = findBodyPart( *msg, filename );
<a name="l00943"></a>00943     <span class="keywordflow">if</span> ( part ) {
<a name="l00944"></a>00944       <span class="comment">// Save the contents of the attachment.</span>
<a name="l00945"></a>00945       KMMessagePart aPart;
<a name="l00946"></a>00946       msg-&gt;<a class="code" href="classKMMessage.html#2b942616accf9ac39e19351ce2bba17d" title="Fill the KMMessagePart structure for a given DwBodyPart.">bodyPart</a>( part, &amp;aPart );
<a name="l00947"></a>00947       QByteArray rawData( aPart.bodyDecodedBinary() );
<a name="l00948"></a>00948 
<a name="l00949"></a>00949       KTempFile file;
<a name="l00950"></a>00950       file.file()-&gt;writeBlock( rawData.data(), rawData.size() );
<a name="l00951"></a>00951 
<a name="l00952"></a>00952       url.setPath( file.name() );
<a name="l00953"></a>00953 
<a name="l00954"></a>00954       bOK = <span class="keyword">true</span>;
<a name="l00955"></a>00955     }
<a name="l00956"></a>00956 
<a name="l00957"></a>00957     <span class="keywordflow">if</span>( !bOK ){
<a name="l00958"></a>00958       kdDebug(5006) &lt;&lt; <span class="stringliteral">"Attachment "</span> &lt;&lt; filename &lt;&lt; <span class="stringliteral">" not found."</span> &lt;&lt; endl;
<a name="l00959"></a>00959     }
<a name="l00960"></a>00960   }<span class="keywordflow">else</span>{
<a name="l00961"></a>00961     kdDebug(5006) &lt;&lt; <span class="stringliteral">"Message not found."</span> &lt;&lt; endl;
<a name="l00962"></a>00962   }
<a name="l00963"></a>00963 
<a name="l00964"></a>00964   mResourceQuiet = quiet;
<a name="l00965"></a>00965   <span class="keywordflow">return</span> url;
<a name="l00966"></a>00966 }
<a name="l00967"></a>00967 
<a name="l00968"></a>00968 QString KMailICalIfaceImpl::attachmentMimetype( <span class="keyword">const</span> QString &amp; resource,
<a name="l00969"></a>00969                                                 Q_UINT32 sernum,
<a name="l00970"></a>00970                                                 <span class="keyword">const</span> QString &amp; filename )
<a name="l00971"></a>00971 {
<a name="l00972"></a>00972   <span class="keywordflow">if</span>( !mUseResourceIMAP )
<a name="l00973"></a>00973     <span class="keywordflow">return</span> QString();
<a name="l00974"></a>00974   <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* f = findResourceFolder( resource );
<a name="l00975"></a>00975   <span class="keywordflow">if</span>( !f || storageFormat( f ) != StorageXML ) {
<a name="l00976"></a>00976     kdError(5006) &lt;&lt; <span class="stringliteral">"attachmentMimetype("</span> &lt;&lt; resource &lt;&lt; <span class="stringliteral">") : Wrong folder"</span> &lt;&lt; endl;
<a name="l00977"></a>00977     <span class="keywordflow">return</span> QString();
<a name="l00978"></a>00978   }
<a name="l00979"></a>00979 
<a name="l00980"></a>00980   <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a>* msg = <a class="code" href="classKMailICalIfaceImpl.html#22b4721deee17c20109256db8f9ace9e" title="Find message matching a given serial number.">findMessageBySerNum</a>( sernum, f );
<a name="l00981"></a>00981   <span class="keywordflow">if</span>( msg ) {
<a name="l00982"></a>00982     <span class="comment">// Message found - look for the attachment:</span>
<a name="l00983"></a>00983     DwBodyPart* part = findBodyPart( *msg, filename );
<a name="l00984"></a>00984     <span class="keywordflow">if</span> ( part ) {
<a name="l00985"></a>00985       KMMessagePart kmPart;
<a name="l00986"></a>00986       msg-&gt;<a class="code" href="classKMMessage.html#2b942616accf9ac39e19351ce2bba17d" title="Fill the KMMessagePart structure for a given DwBodyPart.">bodyPart</a>( part, &amp;kmPart );
<a name="l00987"></a>00987       <span class="keywordflow">return</span> QString( kmPart.typeStr() ) + <span class="stringliteral">"/"</span> + QString( kmPart.subtypeStr() );
<a name="l00988"></a>00988     } <span class="keywordflow">else</span> {
<a name="l00989"></a>00989       kdDebug(5006) &lt;&lt; <span class="stringliteral">"Attachment "</span> &lt;&lt; filename &lt;&lt; <span class="stringliteral">" not found."</span> &lt;&lt; endl;
<a name="l00990"></a>00990     }
<a name="l00991"></a>00991   } <span class="keywordflow">else</span> {
<a name="l00992"></a>00992     kdDebug(5006) &lt;&lt; <span class="stringliteral">"Message not found."</span> &lt;&lt; endl;
<a name="l00993"></a>00993   }
<a name="l00994"></a>00994 
<a name="l00995"></a>00995   <span class="keywordflow">return</span> QString();
<a name="l00996"></a>00996 }
<a name="l00997"></a>00997 
<a name="l00998"></a>00998 QStringList KMailICalIfaceImpl::listAttachments(<span class="keyword">const</span> QString &amp; resource, Q_UINT32 sernum)
<a name="l00999"></a>00999 {
<a name="l01000"></a>01000   QStringList rv;
<a name="l01001"></a>01001   <span class="keywordflow">if</span>( !mUseResourceIMAP )
<a name="l01002"></a>01002     <span class="keywordflow">return</span> rv;
<a name="l01003"></a>01003 
<a name="l01004"></a>01004   <span class="comment">// Find the folder</span>
<a name="l01005"></a>01005   <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* f = findResourceFolder( resource );
<a name="l01006"></a>01006   <span class="keywordflow">if</span>( !f ) {
<a name="l01007"></a>01007     kdError(5006) &lt;&lt; <span class="stringliteral">"listAttachments("</span> &lt;&lt; resource &lt;&lt; <span class="stringliteral">") : Not an IMAP resource folder"</span> &lt;&lt; endl;
<a name="l01008"></a>01008     <span class="keywordflow">return</span> rv;
<a name="l01009"></a>01009   }
<a name="l01010"></a>01010   <span class="keywordflow">if</span> ( storageFormat( f ) != StorageXML ) {
<a name="l01011"></a>01011     kdError(5006) &lt;&lt; <span class="stringliteral">"listAttachment("</span> &lt;&lt; resource &lt;&lt; <span class="stringliteral">") : Folder has wrong storage format "</span> &lt;&lt; storageFormat( f ) &lt;&lt; endl;
<a name="l01012"></a>01012     <span class="keywordflow">return</span> rv;
<a name="l01013"></a>01013   }
<a name="l01014"></a>01014 
<a name="l01015"></a>01015   <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a>* msg = <a class="code" href="classKMailICalIfaceImpl.html#22b4721deee17c20109256db8f9ace9e" title="Find message matching a given serial number.">findMessageBySerNum</a>( sernum, f );
<a name="l01016"></a>01016   <span class="keywordflow">if</span>( msg ) {
<a name="l01017"></a>01017     <span class="keywordflow">for</span> ( DwBodyPart* part = msg-&gt;<a class="code" href="classKMMessage.html#f7412a18d6089e1055bfe50283671714" title="Get the 1st DwBodyPart.">getFirstDwBodyPart</a>(); part; part = part-&gt;Next() ) {
<a name="l01018"></a>01018       <span class="keywordflow">if</span> ( part-&gt;hasHeaders() ) {
<a name="l01019"></a>01019         QString name;
<a name="l01020"></a>01020         DwMediaType&amp; contentType = part-&gt;Headers().ContentType();
<a name="l01021"></a>01021         <span class="keywordflow">if</span> ( QString( contentType.SubtypeStr().c_str() ).startsWith( <span class="stringliteral">"x-vnd.kolab."</span> )
<a name="l01022"></a>01022            || QString( contentType.SubtypeStr().c_str() ).contains( <span class="stringliteral">"tnef"</span> ) )
<a name="l01023"></a>01023           <span class="keywordflow">continue</span>;
<a name="l01024"></a>01024         <span class="keywordflow">if</span> ( !part-&gt;Headers().ContentDisposition().Filename().empty() )
<a name="l01025"></a>01025           name = part-&gt;Headers().ContentDisposition().Filename().c_str();
<a name="l01026"></a>01026         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( !contentType.Name().empty() )
<a name="l01027"></a>01027           name = contentType.Name().c_str();
<a name="l01028"></a>01028         <span class="keywordflow">if</span> ( !name.isEmpty() )
<a name="l01029"></a>01029           rv.append( name );
<a name="l01030"></a>01030       }
<a name="l01031"></a>01031     }
<a name="l01032"></a>01032   } <span class="keywordflow">else</span> {
<a name="l01033"></a>01033     kdDebug(5006) &lt;&lt; <span class="stringliteral">"Message not found."</span> &lt;&lt; endl;
<a name="l01034"></a>01034   }
<a name="l01035"></a>01035 
<a name="l01036"></a>01036   <span class="keywordflow">return</span> rv;
<a name="l01037"></a>01037 }
<a name="l01038"></a>01038 
<a name="l01039"></a>01039 
<a name="l01040"></a>01040 <span class="comment">// ============================================================================</span>
<a name="l01041"></a>01041 
<a name="l01042"></a>01042 <span class="comment">/* KMail part of the interface. These slots are connected to the resource</span>
<a name="l01043"></a>01043 <span class="comment"> * folders and inform us of folders or incidences in them changing, being</span>
<a name="l01044"></a>01044 <span class="comment"> * added or going away. */</span>
<a name="l01045"></a>01045 
<a name="l01046"></a>01046 <span class="keywordtype">void</span> KMailICalIfaceImpl::slotFolderRemoved( <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* folder )
<a name="l01047"></a>01047 {
<a name="l01048"></a>01048   <span class="comment">// pretend the folder just changed back to the mail type, which</span>
<a name="l01049"></a>01049   <span class="comment">// does the right thing, namely remove resource</span>
<a name="l01050"></a>01050   <a class="code" href="classKMailICalIfaceImpl.html#faaf25987bf203741d64954c07be28d1" title="Called when a folders contents have changed.">folderContentsTypeChanged</a>( folder, KMail::ContentsTypeMail );
<a name="l01051"></a>01051   KConfigGroup configGroup( kmkernel-&gt;config(), <span class="stringliteral">"GroupwareFolderInfo"</span> );
<a name="l01052"></a>01052   configGroup.deleteEntry( folder-&gt;<a class="code" href="classKMFolder.html#bab3b6b7c2758c19aa04c2bf72716b27" title="Returns a string that can be used to identify this folder.">idString</a>() + <span class="stringliteral">"-storageFormat"</span> );
<a name="l01053"></a>01053   configGroup.deleteEntry( folder-&gt;<a class="code" href="classKMFolder.html#bab3b6b7c2758c19aa04c2bf72716b27" title="Returns a string that can be used to identify this folder.">idString</a>() + <span class="stringliteral">"-changes"</span> );
<a name="l01054"></a>01054 }
<a name="l01055"></a>01055 
<a name="l01056"></a>01056 <span class="comment">// KMail added a file to one of the groupware folders</span>
<a name="l01057"></a>01057 <span class="keywordtype">void</span> KMailICalIfaceImpl::slotIncidenceAdded( <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* folder,
<a name="l01058"></a>01058                                              Q_UINT32 sernum )
<a name="l01059"></a>01059 {
<a name="l01060"></a>01060   <span class="keywordflow">if</span>( mResourceQuiet || !mUseResourceIMAP )
<a name="l01061"></a>01061     <span class="keywordflow">return</span>;
<a name="l01062"></a>01062 
<a name="l01063"></a>01063 <span class="comment">//  kdDebug(5006) &lt;&lt; "KMailICalIfaceImpl::slotIncidenceAdded" &lt;&lt; endl;</span>
<a name="l01064"></a>01064   QString type = folderContentsType( folder-&gt;<a class="code" href="classKMFolder.html#4c7476219c137471fb93cb8c88061336">storage</a>()-&gt;<a class="code" href="classFolderStorage.html#2e2d90259cf68d278f95b89b8f9e5088">contentsType</a>() );
<a name="l01065"></a>01065   <span class="keywordflow">if</span>( type.isEmpty() ) {
<a name="l01066"></a>01066     kdError(5006) &lt;&lt; <span class="stringliteral">"Not an IMAP resource folder"</span> &lt;&lt; endl;
<a name="l01067"></a>01067     <span class="keywordflow">return</span>;
<a name="l01068"></a>01068   }
<a name="l01069"></a>01069   <span class="comment">// Get the index of the mail</span>
<a name="l01070"></a>01070   <span class="keywordtype">int</span> i = 0;
<a name="l01071"></a>01071   <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* aFolder = 0;
<a name="l01072"></a>01072   <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>( sernum, &amp;aFolder, &amp;i );
<a name="l01073"></a>01073   assert( folder == aFolder );
<a name="l01074"></a>01074 
<a name="l01075"></a>01075   <span class="keywordtype">bool</span> unget = !folder-&gt;<a class="code" href="classKMFolder.html#6dacce907d07e41902f1854e872a5f9d" title="Checks if the message is already &amp;quot;gotten&amp;quot; with getMsg.">isMessage</a>( i );
<a name="l01076"></a>01076   QString s;
<a name="l01077"></a>01077   QString uid( <span class="stringliteral">"UID"</span> );
<a name="l01078"></a>01078   <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>( i );
<a name="l01079"></a>01079   <span class="keywordflow">if</span>( !msg ) <span class="keywordflow">return</span>;
<a name="l01080"></a>01080   <span class="keywordflow">if</span>( msg-&gt;<a class="code" href="classKMMessage.html#03cc096943ae864dd06ad23b05122777" title="Return true if the complete message is available without referring to the backing...">isComplete</a>() ) {
<a name="l01081"></a>01081 
<a name="l01082"></a>01082     <span class="keywordtype">bool</span> ok = <span class="keyword">false</span>;
<a name="l01083"></a>01083     StorageFormat format = storageFormat( folder );
<a name="l01084"></a>01084     <span class="keywordflow">switch</span>( format ) {
<a name="l01085"></a>01085       <span class="keywordflow">case</span> StorageIcalVcard:
<a name="l01086"></a>01086         <span class="comment">// Read the iCal or vCard</span>
<a name="l01087"></a>01087         ok = vPartFoundAndDecoded( msg, s );
<a name="l01088"></a>01088         <span class="keywordflow">if</span> ( ok )
<a name="l01089"></a>01089           vPartMicroParser( s, uid );
<a name="l01090"></a>01090         <span class="keywordflow">break</span>;
<a name="l01091"></a>01091       <span class="keywordflow">case</span> StorageXML:
<a name="l01092"></a>01092         <span class="comment">// Read the XML from the attachment with the given mimetype</span>
<a name="l01093"></a>01093         <span class="keywordflow">if</span> ( kolabXMLFoundAndDecoded( *msg,
<a name="l01094"></a>01094               folderKolabMimeType( folder-&gt;<a class="code" href="classKMFolder.html#4c7476219c137471fb93cb8c88061336">storage</a>()-&gt;<a class="code" href="classFolderStorage.html#2e2d90259cf68d278f95b89b8f9e5088">contentsType</a>() ), s ) ) {
<a name="l01095"></a>01095           uid = 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="l01096"></a>01096           ok = <span class="keyword">true</span>;
<a name="l01097"></a>01097         }
<a name="l01098"></a>01098         <span class="keywordflow">break</span>;
<a name="l01099"></a>01099     }
<a name="l01100"></a>01100     <span class="keywordflow">if</span> ( !ok ) {
<a name="l01101"></a>01101       <span class="keywordflow">if</span> ( unget )
<a name="l01102"></a>01102         folder-&gt;<a class="code" href="classKMFolder.html#55d936471c71f7d03f6e54d2f83a0b52" title="Replace KMMessage with KMMsgInfo and delete KMMessage.">unGetMsg</a>( i );
<a name="l01103"></a>01103       <span class="keywordflow">return</span>;
<a name="l01104"></a>01104     }
<a name="l01105"></a>01105     <span class="keyword">const</span> Q_UINT32 sernum = msg-&gt;getMsgSerNum();
<a name="l01106"></a>01106     mUIDToSerNum.insert( uid, sernum );
<a name="l01107"></a>01107 
<a name="l01108"></a>01108     <span class="comment">// tell the resource if we didn't trigger this ourselves</span>
<a name="l01109"></a>01109     <span class="keywordflow">if</span> ( mInTransit.contains( uid ) ) {
<a name="l01110"></a>01110       mInTransit.remove( uid );
<a name="l01111"></a>01111     }
<a name="l01112"></a>01112     incidenceAdded( type, folder-&gt;<a class="code" href="classKMFolder.html#ee43a9e2a17f7286cb20d81ac2d3f033" title="Returns full path to folder file.">location</a>(), sernum, format, s );
<a name="l01113"></a>01113   } <span class="keywordflow">else</span> {
<a name="l01114"></a>01114     <span class="comment">// go get the rest of it, then try again</span>
<a name="l01115"></a>01115     <span class="comment">// TODO: Till, port me</span>
<a name="l01116"></a>01116     <span class="keywordflow">if</span> ( unget ) mTheUnGetMes.insert( msg-&gt;getMsgSerNum(), true );
<a name="l01117"></a>01117     FolderJob *job = msg-&gt;parent()-&gt;createJob( msg );
<a name="l01118"></a>01118     connect( job, SIGNAL( messageRetrieved( <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a>* ) ),
<a name="l01119"></a>01119         <span class="keyword">this</span>, SLOT( slotMessageRetrieved( <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a>* ) ) );
<a name="l01120"></a>01120     job-&gt;start();
<a name="l01121"></a>01121     <span class="keywordflow">return</span>;
<a name="l01122"></a>01122   }
<a name="l01123"></a>01123   <span class="keywordflow">if</span>( unget ) folder-&gt;<a class="code" href="classKMFolder.html#55d936471c71f7d03f6e54d2f83a0b52" title="Replace KMMessage with KMMsgInfo and delete KMMessage.">unGetMsg</a>(i);
<a name="l01124"></a>01124 }
<a name="l01125"></a>01125 
<a name="l01126"></a>01126 <span class="comment">// KMail deleted a file</span>
<a name="l01127"></a>01127 <span class="keywordtype">void</span> KMailICalIfaceImpl::slotIncidenceDeleted( <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* folder,
<a name="l01128"></a>01128                                                Q_UINT32 sernum )
<a name="l01129"></a>01129 {
<a name="l01130"></a>01130   <span class="keywordflow">if</span>( mResourceQuiet || !mUseResourceIMAP )
<a name="l01131"></a>01131     <span class="keywordflow">return</span>;
<a name="l01132"></a>01132 
<a name="l01133"></a>01133   QString type = folderContentsType( folder-&gt;<a class="code" href="classKMFolder.html#4c7476219c137471fb93cb8c88061336">storage</a>()-&gt;<a class="code" href="classFolderStorage.html#2e2d90259cf68d278f95b89b8f9e5088">contentsType</a>() );
<a name="l01134"></a>01134   <span class="comment">//kdDebug(5006) &lt;&lt; folder &lt;&lt; " " &lt;&lt; type &lt;&lt; " " &lt;&lt; sernum &lt;&lt; endl;</span>
<a name="l01135"></a>01135   <span class="keywordflow">if</span>( !type.isEmpty() ) {
<a name="l01136"></a>01136     <span class="comment">// Get the index of the mail</span>
<a name="l01137"></a>01137     <span class="keywordtype">int</span> i = 0;
<a name="l01138"></a>01138     <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* aFolder = 0;
<a name="l01139"></a>01139     <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>( sernum, &amp;aFolder, &amp;i );
<a name="l01140"></a>01140     assert( folder == aFolder );
<a name="l01141"></a>01141 
<a name="l01142"></a>01142     <span class="comment">// Read the iCal or vCard</span>
<a name="l01143"></a>01143     <span class="keywordtype">bool</span> unget = !folder-&gt;<a class="code" href="classKMFolder.html#6dacce907d07e41902f1854e872a5f9d" title="Checks if the message is already &amp;quot;gotten&amp;quot; with getMsg.">isMessage</a>( i );
<a name="l01144"></a>01144     QString s;
<a name="l01145"></a>01145     <span class="keywordtype">bool</span> ok = <span class="keyword">false</span>;
<a name="l01146"></a>01146     <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>( i );
<a name="l01147"></a>01147     QString uid( <span class="stringliteral">"UID"</span> );
<a name="l01148"></a>01148     <span class="keywordflow">switch</span>( storageFormat( folder ) ) {
<a name="l01149"></a>01149     <span class="keywordflow">case</span> StorageIcalVcard:
<a name="l01150"></a>01150         <span class="keywordflow">if</span>( vPartFoundAndDecoded( msg, s ) ) {
<a name="l01151"></a>01151             vPartMicroParser( s, uid );
<a name="l01152"></a>01152             ok = <span class="keyword">true</span>;
<a name="l01153"></a>01153         }
<a name="l01154"></a>01154         <span class="keywordflow">break</span>;
<a name="l01155"></a>01155     <span class="keywordflow">case</span> StorageXML:
<a name="l01156"></a>01156         <span class="keywordflow">if</span> ( kolabXMLFoundAndDecoded( *msg, folderKolabMimeType( folder-&gt;<a class="code" href="classKMFolder.html#4c7476219c137471fb93cb8c88061336">storage</a>()-&gt;<a class="code" href="classFolderStorage.html#2e2d90259cf68d278f95b89b8f9e5088">contentsType</a>() ), s ) ) {
<a name="l01157"></a>01157           uid = 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="l01158"></a>01158           ok = <span class="keyword">true</span>;
<a name="l01159"></a>01159         }
<a name="l01160"></a>01160         <span class="keywordflow">break</span>;
<a name="l01161"></a>01161     }
<a name="l01162"></a>01162     <span class="keywordflow">if</span> ( ok ) {
<a name="l01163"></a>01163         kdDebug(5006) &lt;&lt; <span class="stringliteral">"Emitting DCOP signal incidenceDeleted( "</span>
<a name="l01164"></a>01164                       &lt;&lt; type &lt;&lt; <span class="stringliteral">", "</span> &lt;&lt; folder-&gt;<a class="code" href="classKMFolder.html#ee43a9e2a17f7286cb20d81ac2d3f033" title="Returns full path to folder file.">location</a>() &lt;&lt; <span class="stringliteral">", "</span> &lt;&lt; uid
<a name="l01165"></a>01165                       &lt;&lt; <span class="stringliteral">" )"</span> &lt;&lt; endl;
<a name="l01166"></a>01166         incidenceDeleted( type, folder-&gt;<a class="code" href="classKMFolder.html#ee43a9e2a17f7286cb20d81ac2d3f033" title="Returns full path to folder file.">location</a>(), uid );
<a name="l01167"></a>01167     }
<a name="l01168"></a>01168     <span class="keywordflow">if</span>( unget ) folder-&gt;<a class="code" href="classKMFolder.html#55d936471c71f7d03f6e54d2f83a0b52" title="Replace KMMessage with KMMsgInfo and delete KMMessage.">unGetMsg</a>(i);
<a name="l01169"></a>01169   } <span class="keywordflow">else</span>
<a name="l01170"></a>01170     kdError(5006) &lt;&lt; <span class="stringliteral">"Not a groupware folder"</span> &lt;&lt; endl;
<a name="l01171"></a>01171 }
<a name="l01172"></a>01172 
<a name="l01173"></a>01173 <span class="comment">// KMail orders a refresh</span>
<a name="l01174"></a>01174 <span class="keywordtype">void</span> KMailICalIfaceImpl::slotRefresh( <span class="keyword">const</span> QString&amp; type )
<a name="l01175"></a>01175 {
<a name="l01176"></a>01176   <span class="keywordflow">if</span>( mUseResourceIMAP ) {
<a name="l01177"></a>01177     signalRefresh( type, QString::null <span class="comment">/* PENDING(bo) folder-&gt;location() */</span> );
<a name="l01178"></a>01178     kdDebug(5006) &lt;&lt; <span class="stringliteral">"Emitting DCOP signal signalRefresh( "</span> &lt;&lt; type &lt;&lt; <span class="stringliteral">" )"</span> &lt;&lt; endl;
<a name="l01179"></a>01179   }
<a name="l01180"></a>01180 }
<a name="l01181"></a>01181 
<a name="l01182"></a>01182 <span class="comment">// This is among other things called when an expunge of a folder happens</span>
<a name="l01183"></a>01183 <span class="keywordtype">void</span> KMailICalIfaceImpl::slotRefreshFolder( <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* folder)
<a name="l01184"></a>01184 {
<a name="l01185"></a>01185   <span class="comment">// TODO: The resources would of course be better off, if only this</span>
<a name="l01186"></a>01186   <span class="comment">// folder would need refreshing. Currently it just orders a reload of</span>
<a name="l01187"></a>01187   <span class="comment">// the type of the folder</span>
<a name="l01188"></a>01188   <span class="keywordflow">if</span>( mUseResourceIMAP &amp;&amp; folder ) {
<a name="l01189"></a>01189     <span class="keywordflow">if</span>( folder == mCalendar || folder == mContacts
<a name="l01190"></a>01190         || folder == mNotes || folder == mTasks
<a name="l01191"></a>01191         || folder == mJournals || mExtraFolders.find( folder-&gt;<a class="code" href="classKMFolder.html#ee43a9e2a17f7286cb20d81ac2d3f033" title="Returns full path to folder file.">location</a>() ) ) {
<a name="l01192"></a>01192       <span class="comment">// Refresh the folder of this type</span>
<a name="l01193"></a>01193       KMail::FolderContentsType ct = folder-&gt;<a class="code" href="classKMFolder.html#4c7476219c137471fb93cb8c88061336">storage</a>()-&gt;<a class="code" href="classFolderStorage.html#2e2d90259cf68d278f95b89b8f9e5088">contentsType</a>();
<a name="l01194"></a>01194       slotRefresh( s_folderContentsType[ct].contentsTypeStr );
<a name="l01195"></a>01195     }
<a name="l01196"></a>01196   }
<a name="l01197"></a>01197 }
<a name="l01198"></a>01198 
<a name="l01199"></a>01199 <span class="comment">/****************************</span>
<a name="l01200"></a>01200 <span class="comment"> * The folder and message stuff code</span>
<a name="l01201"></a>01201 <span class="comment"> */</span>
<a name="l01202"></a>01202 
<a name="l01203"></a><a class="code" href="classKMailICalIfaceImpl.html#b3f9595bf285c5a0250daae033d51c67">01203</a> <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* <a class="code" href="classKMailICalIfaceImpl.html#b3f9595bf285c5a0250daae033d51c67" title="Get the folder that holds *type* entries.">KMailICalIfaceImpl::folderFromType</a>( <span class="keyword">const</span> QString&amp; type,
<a name="l01204"></a>01204                                               <span class="keyword">const</span> QString&amp; folder )
<a name="l01205"></a>01205 {
<a name="l01206"></a>01206   <span class="keywordflow">if</span>( mUseResourceIMAP ) {
<a name="l01207"></a>01207     <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* f = 0;
<a name="l01208"></a>01208     <span class="keywordflow">if</span> ( !folder.isEmpty() ) {
<a name="l01209"></a>01209       f = extraFolder( type, folder );
<a name="l01210"></a>01210       <span class="keywordflow">if</span> ( f )
<a name="l01211"></a>01211         <span class="keywordflow">return</span> f;
<a name="l01212"></a>01212     }
<a name="l01213"></a>01213 
<a name="l01214"></a>01214     <span class="keywordflow">if</span>( type == <span class="stringliteral">"Calendar"</span> ) f = mCalendar;
<a name="l01215"></a>01215     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( type == <span class="stringliteral">"Contact"</span> ) f = mContacts;
<a name="l01216"></a>01216     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( type == <span class="stringliteral">"Note"</span> ) f = mNotes;
<a name="l01217"></a>01217     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( type == <span class="stringliteral">"Task"</span> || type == <span class="stringliteral">"Todo"</span> ) f = mTasks;
<a name="l01218"></a>01218     <span class="keywordflow">else</span> <span class="keywordflow">if</span>( type == <span class="stringliteral">"Journal"</span> ) f = mJournals;
<a name="l01219"></a>01219 
<a name="l01220"></a>01220     <span class="keywordflow">if</span> ( f &amp;&amp; ( folder.isEmpty() || folder == f-&gt;<a class="code" href="classKMFolder.html#ee43a9e2a17f7286cb20d81ac2d3f033" title="Returns full path to folder file.">location</a>() ) )
<a name="l01221"></a>01221       <span class="keywordflow">return</span> f;
<a name="l01222"></a>01222 
<a name="l01223"></a>01223     kdError(5006) &lt;&lt; <span class="stringliteral">"No folder ( "</span> &lt;&lt; type &lt;&lt; <span class="stringliteral">", "</span> &lt;&lt; folder &lt;&lt; <span class="stringliteral">" )\n"</span>;
<a name="l01224"></a>01224   }
<a name="l01225"></a>01225 
<a name="l01226"></a>01226   <span class="keywordflow">return</span> 0;
<a name="l01227"></a>01227 }
<a name="l01228"></a>01228 
<a name="l01229"></a>01229 
<a name="l01230"></a>01230 <span class="comment">// Returns true if folder is a resource folder. If the resource isn't enabled</span>
<a name="l01231"></a>01231 <span class="comment">// this always returns false</span>
<a name="l01232"></a><a class="code" href="classKMailICalIfaceImpl.html#d063e921a9053f1dfdf252516f00a81e">01232</a> <span class="keywordtype">bool</span> <a class="code" href="classKMailICalIfaceImpl.html#d063e921a9053f1dfdf252516f00a81e" title="Returns true if resource mode is enabled and folder is one of the resource folders...">KMailICalIfaceImpl::isResourceFolder</a>( <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* folder )<span class="keyword"> const</span>
<a name="l01233"></a>01233 <span class="keyword"></span>{
<a name="l01234"></a>01234   <span class="keywordflow">return</span> mUseResourceIMAP &amp;&amp; folder &amp;&amp;
<a name="l01235"></a>01235     ( isStandardResourceFolder( folder ) || mExtraFolders.find( folder-&gt;<a class="code" href="classKMFolder.html#ee43a9e2a17f7286cb20d81ac2d3f033" title="Returns full path to folder file.">location</a>() )!=0 );
<a name="l01236"></a>01236 }
<a name="l01237"></a>01237 
<a name="l01238"></a>01238 <span class="keywordtype">bool</span> KMailICalIfaceImpl::isStandardResourceFolder( <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* folder )<span class="keyword"> const</span>
<a name="l01239"></a>01239 <span class="keyword"></span>{
<a name="l01240"></a>01240   <span class="keywordflow">return</span> ( folder == mCalendar || folder == mTasks || folder == mJournals ||
<a name="l01241"></a>01241            folder == mNotes || folder == mContacts );
<a name="l01242"></a>01242 }
<a name="l01243"></a>01243 
<a name="l01244"></a><a class="code" href="classKMailICalIfaceImpl.html#be430b8e86597adff0f65fb6804ab76c">01244</a> <span class="keywordtype">bool</span> <a class="code" href="classKMailICalIfaceImpl.html#be430b8e86597adff0f65fb6804ab76c" title="Returns true if isResourceFolder( folder ) returns true, and imap folders should...">KMailICalIfaceImpl::hideResourceFolder</a>( <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* folder )<span class="keyword"> const</span>
<a name="l01245"></a>01245 <span class="keyword"></span>{
<a name="l01246"></a>01246   <span class="keywordflow">return</span> mHideFolders &amp;&amp; <a class="code" href="classKMailICalIfaceImpl.html#d063e921a9053f1dfdf252516f00a81e" title="Returns true if resource mode is enabled and folder is one of the resource folders...">isResourceFolder</a>( folder );
<a name="l01247"></a>01247 }
<a name="l01248"></a>01248 
<a name="l01249"></a><a class="code" href="classKMailICalIfaceImpl.html#0f7b5a86052a060f25461e26df43511c">01249</a> <span class="keywordtype">bool</span> <a class="code" href="classKMailICalIfaceImpl.html#0f7b5a86052a060f25461e26df43511c" title="Returns true if the given folder is the root of the groupware account, groupware...">KMailICalIfaceImpl::hideResourceAccountRoot</a>( <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* folder )<span class="keyword"> const</span>
<a name="l01250"></a>01250 <span class="keyword"></span>{
<a name="l01251"></a>01251   KMFolderCachedImap *dimapFolder = <span class="keyword">dynamic_cast&lt;</span>KMFolderCachedImap*<span class="keyword">&gt;</span>( folder-&gt;<a class="code" href="classKMFolder.html#4c7476219c137471fb93cb8c88061336">storage</a>() );
<a name="l01252"></a>01252   <span class="keywordtype">bool</span> hide = dimapFolder &amp;&amp; mHideFolders
<a name="l01253"></a>01253        &amp;&amp; (int)dimapFolder-&gt;account()-&gt;id() == GlobalSettings::self()-&gt;theIMAPResourceAccount()
<a name="l01254"></a>01254        &amp;&amp; GlobalSettings::self()-&gt;showOnlyGroupwareFoldersForGroupwareAccount();
<a name="l01255"></a>01255   <span class="keywordflow">return</span> hide;
<a name="l01256"></a>01256 
<a name="l01257"></a>01257 }
<a name="l01258"></a>01258 
<a name="l01259"></a><a class="code" href="classKMailICalIfaceImpl.html#ec5b087d8a90c8a99f4df0cb3ff75c1c">01259</a> KFolderTreeItem::Type <a class="code" href="classKMailICalIfaceImpl.html#ec5b087d8a90c8a99f4df0cb3ff75c1c" title="Returns the resource folder type.">KMailICalIfaceImpl::folderType</a>( <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* folder )<span class="keyword"> const</span>
<a name="l01260"></a>01260 <span class="keyword"></span>{
<a name="l01261"></a>01261   <span class="keywordflow">if</span>( mUseResourceIMAP &amp;&amp; folder ) {
<a name="l01262"></a>01262     <span class="keywordflow">if</span>( folder == mCalendar || folder == mContacts
<a name="l01263"></a>01263         || folder == mNotes || folder == mTasks
<a name="l01264"></a>01264         || folder == mJournals || mExtraFolders.find( folder-&gt;<a class="code" href="classKMFolder.html#ee43a9e2a17f7286cb20d81ac2d3f033" title="Returns full path to folder file.">location</a>() ) ) {
<a name="l01265"></a>01265       KMail::FolderContentsType ct = folder-&gt;<a class="code" href="classKMFolder.html#4c7476219c137471fb93cb8c88061336">storage</a>()-&gt;<a class="code" href="classFolderStorage.html#2e2d90259cf68d278f95b89b8f9e5088">contentsType</a>();
<a name="l01266"></a>01266       <span class="keywordflow">return</span> s_folderContentsType[ct].treeItemType;
<a name="l01267"></a>01267     }
<a name="l01268"></a>01268   }
<a name="l01269"></a>01269 
<a name="l01270"></a>01270   <span class="keywordflow">return</span> KFolderTreeItem::Other;
<a name="l01271"></a>01271 }
<a name="l01272"></a>01272 
<a name="l01273"></a>01273 <span class="comment">// Global tables of foldernames is different languages</span>
<a name="l01274"></a>01274 <span class="comment">// For now: 0-&gt;English, 1-&gt;German, 2-&gt;French, 3-&gt;Dutch</span>
<a name="l01275"></a>01275 <span class="keyword">static</span> QMap&lt;KFolderTreeItem::Type,QString&gt; folderNames[4];
<a name="l01276"></a><a class="code" href="classKMailICalIfaceImpl.html#671e8bb072d196026859f1a849c13f08">01276</a> QString <a class="code" href="classKMailICalIfaceImpl.html#671e8bb072d196026859f1a849c13f08" title="Returns the localized name of a folder of given type.">KMailICalIfaceImpl::folderName</a>( KFolderTreeItem::Type type, <span class="keywordtype">int</span> language )<span class="keyword"> const</span>
<a name="l01277"></a>01277 <span class="keyword"></span>{
<a name="l01278"></a>01278   <span class="comment">// With the XML storage, folders are always (internally) named in English</span>
<a name="l01279"></a>01279   <span class="keywordflow">if</span> ( GlobalSettings::self()-&gt;theIMAPResourceStorageFormat() == GlobalSettings::EnumTheIMAPResourceStorageFormat::XML )
<a name="l01280"></a>01280     language = 0;
<a name="l01281"></a>01281 
<a name="l01282"></a>01282   <span class="keyword">static</span> <span class="keywordtype">bool</span> folderNamesSet = <span class="keyword">false</span>;
<a name="l01283"></a>01283   <span class="keywordflow">if</span>( !folderNamesSet ) {
<a name="l01284"></a>01284     folderNamesSet = <span class="keyword">true</span>;
<a name="l01285"></a>01285     <span class="comment">/* NOTE: If you add something here, you also need to update</span>
<a name="l01286"></a>01286 <span class="comment">       GroupwarePage in configuredialog.cpp */</span>
<a name="l01287"></a>01287 
<a name="l01288"></a>01288     <span class="comment">// English</span>
<a name="l01289"></a>01289     folderNames[0][KFolderTreeItem::Calendar] = QString::fromLatin1(<span class="stringliteral">"Calendar"</span>);
<a name="l01290"></a>01290     folderNames[0][KFolderTreeItem::Tasks] = QString::fromLatin1(<span class="stringliteral">"Tasks"</span>);
<a name="l01291"></a>01291     folderNames[0][KFolderTreeItem::Journals] = QString::fromLatin1(<span class="stringliteral">"Journal"</span>);
<a name="l01292"></a>01292     folderNames[0][KFolderTreeItem::Contacts] = QString::fromLatin1(<span class="stringliteral">"Contacts"</span>);
<a name="l01293"></a>01293     folderNames[0][KFolderTreeItem::Notes] = QString::fromLatin1(<span class="stringliteral">"Notes"</span>);
<a name="l01294"></a>01294 
<a name="l01295"></a>01295     <span class="comment">// German</span>
<a name="l01296"></a>01296     folderNames[1][KFolderTreeItem::Calendar] = QString::fromLatin1(<span class="stringliteral">"Kalender"</span>);
<a name="l01297"></a>01297     folderNames[1][KFolderTreeItem::Tasks] = QString::fromLatin1(<span class="stringliteral">"Aufgaben"</span>);
<a name="l01298"></a>01298     folderNames[1][KFolderTreeItem::Journals] = QString::fromLatin1(<span class="stringliteral">"Journal"</span>);
<a name="l01299"></a>01299     folderNames[1][KFolderTreeItem::Contacts] = QString::fromLatin1(<span class="stringliteral">"Kontakte"</span>);
<a name="l01300"></a>01300     folderNames[1][KFolderTreeItem::Notes] = QString::fromLatin1(<span class="stringliteral">"Notizen"</span>);
<a name="l01301"></a>01301 
<a name="l01302"></a>01302     <span class="comment">// French</span>
<a name="l01303"></a>01303     folderNames[2][KFolderTreeItem::Calendar] = QString::fromLatin1(<span class="stringliteral">"Calendrier"</span>);
<a name="l01304"></a>01304     <span class="comment">// Tasks = Tâches (â == 0xE2 in latin1)</span>
<a name="l01305"></a>01305     folderNames[2][KFolderTreeItem::Tasks] = QString::fromLatin1(<span class="stringliteral">"T\342ches"</span>);
<a name="l01306"></a>01306     folderNames[2][KFolderTreeItem::Journals] = QString::fromLatin1(<span class="stringliteral">"Journal"</span>);
<a name="l01307"></a>01307     folderNames[2][KFolderTreeItem::Contacts] = QString::fromLatin1(<span class="stringliteral">"Contacts"</span>);
<a name="l01308"></a>01308     folderNames[2][KFolderTreeItem::Notes] = QString::fromLatin1(<span class="stringliteral">"Notes"</span>);
<a name="l01309"></a>01309 
<a name="l01310"></a>01310     <span class="comment">// Dutch</span>
<a name="l01311"></a>01311     folderNames[3][KFolderTreeItem::Calendar] = QString::fromLatin1(<span class="stringliteral">"Agenda"</span>);
<a name="l01312"></a>01312     folderNames[3][KFolderTreeItem::Tasks] = QString::fromLatin1(<span class="stringliteral">"Taken"</span>);
<a name="l01313"></a>01313     folderNames[3][KFolderTreeItem::Journals] = QString::fromLatin1(<span class="stringliteral">"Logboek"</span>);
<a name="l01314"></a>01314     folderNames[3][KFolderTreeItem::Contacts] = QString::fromLatin1(<span class="stringliteral">"Contactpersonen"</span>);
<a name="l01315"></a>01315     folderNames[3][KFolderTreeItem::Notes] = QString::fromLatin1(<span class="stringliteral">"Notities"</span>);
<a name="l01316"></a>01316   }
<a name="l01317"></a>01317 
<a name="l01318"></a>01318   <span class="keywordflow">if</span>( language &lt; 0 || language &gt; 3 ) {
<a name="l01319"></a>01319     <span class="keywordflow">return</span> folderNames[mFolderLanguage][type];
<a name="l01320"></a>01320   }
<a name="l01321"></a>01321   <span class="keywordflow">else</span> {
<a name="l01322"></a>01322     <span class="keywordflow">return</span> folderNames[language][type];
<a name="l01323"></a>01323   }
<a name="l01324"></a>01324 }
<a name="l01325"></a>01325 
<a name="l01326"></a>01326 
<a name="l01327"></a>01327 <span class="comment">// Find message matching a given UID</span>
<a name="l01328"></a><a class="code" href="classKMailICalIfaceImpl.html#1f6439c0cd9d340f2266d0f4be8eba6b">01328</a> <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a> *<a class="code" href="classKMailICalIfaceImpl.html#1f6439c0cd9d340f2266d0f4be8eba6b" title="Find message matching a given UID.">KMailICalIfaceImpl::findMessageByUID</a>( <span class="keyword">const</span> QString&amp; uid, <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* folder )
<a name="l01329"></a>01329 {
<a name="l01330"></a>01330   <span class="keywordflow">if</span>( !folder || !mUIDToSerNum.contains( uid ) ) <span class="keywordflow">return</span> 0;
<a name="l01331"></a>01331   <span class="keywordtype">int</span> i;
<a name="l01332"></a>01332   <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a> *aFolder;
<a name="l01333"></a>01333   <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>( mUIDToSerNum[uid], &amp;aFolder, &amp;i );
<a name="l01334"></a>01334   Q_ASSERT( aFolder == folder );
<a name="l01335"></a>01335   <span class="keywordflow">return</span> folder-&gt;<a class="code" href="classKMFolder.html#a0fdfeeed6e8e20eff1cd6445309b2f4" title="Read message at given index.">getMsg</a>( i );
<a name="l01336"></a>01336 }
<a name="l01337"></a>01337 
<a name="l01338"></a>01338 <span class="comment">// Find message matching a given serial number</span>
<a name="l01339"></a><a class="code" href="classKMailICalIfaceImpl.html#22b4721deee17c20109256db8f9ace9e">01339</a> <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a> *<a class="code" href="classKMailICalIfaceImpl.html#22b4721deee17c20109256db8f9ace9e" title="Find message matching a given serial number.">KMailICalIfaceImpl::findMessageBySerNum</a>( Q_UINT32 serNum, <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* folder )
<a name="l01340"></a>01340 {
<a name="l01341"></a>01341   <span class="keywordflow">if</span>( !folder ) <span class="keywordflow">return</span> 0;
<a name="l01342"></a>01342 
<a name="l01343"></a>01343   <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a> *message = 0;
<a name="l01344"></a>01344   <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* aFolder = 0;
<a name="l01345"></a>01345   <span class="keywordtype">int</span> index;
<a name="l01346"></a>01346   <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>( serNum, &amp;aFolder, &amp;index );
<a name="l01347"></a>01347 
<a name="l01348"></a>01348   <span class="keywordflow">if</span>( aFolder &amp;&amp; aFolder != folder ) {
<a name="l01349"></a>01349     kdWarning(5006) &lt;&lt; <span class="stringliteral">"findMessageBySerNum( "</span> &lt;&lt; serNum &lt;&lt; <span class="stringliteral">" ) found it in folder "</span> &lt;&lt; aFolder-&gt;<a class="code" href="classKMFolder.html#ee43a9e2a17f7286cb20d81ac2d3f033" title="Returns full path to folder file.">location</a>() &lt;&lt; <span class="stringliteral">", expected "</span> &lt;&lt; folder-&gt;<a class="code" href="classKMFolder.html#ee43a9e2a17f7286cb20d81ac2d3f033" title="Returns full path to folder file.">location</a>() &lt;&lt; endl;
<a name="l01350"></a>01350   } <span class="keywordflow">else</span> {
<a name="l01351"></a>01351     <span class="keywordflow">if</span>( aFolder )
<a name="l01352"></a>01352       message = aFolder-&gt;<a class="code" href="classKMFolder.html#a0fdfeeed6e8e20eff1cd6445309b2f4" title="Read message at given index.">getMsg</a>( index );
<a name="l01353"></a>01353     <span class="keywordflow">if</span> (!message)
<a name="l01354"></a>01354       kdWarning(5006) &lt;&lt; <span class="stringliteral">"findMessageBySerNum( "</span> &lt;&lt; serNum &lt;&lt; <span class="stringliteral">" ) invalid serial number\n"</span> &lt;&lt; endl;
<a name="l01355"></a>01355   }
<a name="l01356"></a>01356   <span class="keywordflow">return</span> message;
<a name="l01357"></a>01357 }
<a name="l01358"></a>01358 
<a name="l01359"></a><a class="code" href="classKMailICalIfaceImpl.html#cc85b1f9da1bb38d0e48a97c278721c9">01359</a> <span class="keywordtype">void</span> <a class="code" href="classKMailICalIfaceImpl.html#cc85b1f9da1bb38d0e48a97c278721c9" title="Convenience function to delete a message.">KMailICalIfaceImpl::deleteMsg</a>( <a class="code" href="classKMMessage.html" title="This is a Mime Message.">KMMessage</a> *msg )
<a name="l01360"></a>01360 {
<a name="l01361"></a>01361   <span class="keywordflow">if</span>( !msg ) <span class="keywordflow">return</span>;
<a name="l01362"></a>01362   <span class="comment">// Commands are now delayed; can't use that anymore, we need immediate deletion</span>
<a name="l01363"></a>01363   <span class="comment">//( new KMDeleteMsgCommand( msg-&gt;parent(), msg ) )-&gt;start();</span>
<a name="l01364"></a>01364   <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a> *srcFolder = msg-&gt;parent();
<a name="l01365"></a>01365   <span class="keywordtype">int</span> idx = srcFolder-&gt;<a class="code" href="classKMFolder.html#27adedd629ece306415faf3cf5fbc617" title="Returns the index of the given message or -1 if not found.">find</a>(msg);
<a name="l01366"></a>01366   assert(idx != -1);
<a name="l01367"></a>01367   <span class="comment">// kill existing jobs since we are about to delete the message</span>
<a name="l01368"></a>01368   srcFolder-&gt;<a class="code" href="classKMFolder.html#2761d5fed0946f939714f681a8a86060" title="Removes and deletes all jobs associated with the particular message.">ignoreJobsForMessage</a>( msg );
<a name="l01369"></a>01369   <span class="keywordflow">if</span> ( !msg-&gt;<a class="code" href="classKMMessage.html#e1adf17b8b22a8343ed60da3c12ecdb7" title="Return, if the message should not be deleted.">transferInProgress</a>() ) {
<a name="l01370"></a>01370     srcFolder-&gt;<a class="code" href="classKMFolder.html#dcd2d6411b6f5db85711f2a5772adabc" title="Remove (first occurrence of) given message from the folder.">removeMsg</a>(idx);
<a name="l01371"></a>01371     <span class="keyword">delete</span> msg;
<a name="l01372"></a>01372   } <span class="keywordflow">else</span> {
<a name="l01373"></a>01373     kdDebug(5006) &lt;&lt; k_funcinfo &lt;&lt; <span class="stringliteral">"Message cannot be deleted now because it is currently in use "</span> &lt;&lt; msg &lt;&lt; endl;
<a name="l01374"></a>01374     msg-&gt;<a class="code" href="classKMMessage.html#af3691036914696923482190c3fcba11" title="Delete this message as soon as it no longer in use.">deleteWhenUnused</a>();
<a name="l01375"></a>01375   }
<a name="l01376"></a>01376   addFolderChange( srcFolder, Contents );
<a name="l01377"></a>01377 }
<a name="l01378"></a>01378 
<a name="l01379"></a><a class="code" href="classKMailICalIfaceImpl.html#faaf25987bf203741d64954c07be28d1">01379</a> <span class="keywordtype">void</span> <a class="code" href="classKMailICalIfaceImpl.html#faaf25987bf203741d64954c07be28d1" title="Called when a folders contents have changed.">KMailICalIfaceImpl::folderContentsTypeChanged</a>( <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* folder,
<a name="l01380"></a>01380                                                     KMail::FolderContentsType contentsType )
<a name="l01381"></a>01381 {
<a name="l01382"></a>01382   <span class="keywordflow">if</span> ( !mUseResourceIMAP )
<a name="l01383"></a>01383     <span class="keywordflow">return</span>;
<a name="l01384"></a>01384 <span class="comment">//  kdDebug(5006) &lt;&lt; "folderContentsTypeChanged( " &lt;&lt; folder-&gt;name()</span>
<a name="l01385"></a>01385 <span class="comment">//                &lt;&lt; ", " &lt;&lt; contentsType &lt;&lt; ")\n";</span>
<a name="l01386"></a>01386 
<a name="l01387"></a>01387   <span class="comment">// The builtins can't change type</span>
<a name="l01388"></a>01388   <span class="keywordflow">if</span> ( isStandardResourceFolder( folder ) )
<a name="l01389"></a>01389     <span class="keywordflow">return</span>;
<a name="l01390"></a>01390 
<a name="l01391"></a>01391   <span class="comment">// Check if already know that 'extra folder'</span>
<a name="l01392"></a>01392   <span class="keyword">const</span> QString location = folder-&gt;<a class="code" href="classKMFolder.html#ee43a9e2a17f7286cb20d81ac2d3f033" title="Returns full path to folder file.">location</a>();
<a name="l01393"></a>01393   ExtraFolder* ef = mExtraFolders.find( location );
<a name="l01394"></a>01394   <span class="keywordflow">if</span> ( ef &amp;&amp; ef-&gt;folder ) {
<a name="l01395"></a>01395     <span class="comment">// Notify that the old folder resource is no longer available</span>
<a name="l01396"></a>01396     subresourceDeleted(folderContentsType( folder-&gt;<a class="code" href="classKMFolder.html#4c7476219c137471fb93cb8c88061336">storage</a>()-&gt;<a class="code" href="classFolderStorage.html#2e2d90259cf68d278f95b89b8f9e5088">contentsType</a>() ), location );
<a name="l01397"></a>01397 
<a name="l01398"></a>01398     <span class="keywordflow">if</span> ( contentsType == 0 ) {
<a name="l01399"></a>01399       <span class="comment">// Delete the old entry, stop listening and stop here</span>
<a name="l01400"></a>01400       mExtraFolders.remove( location );
<a name="l01401"></a>01401       folder-&gt;disconnect( <span class="keyword">this</span> );
<a name="l01402"></a>01402       <span class="keywordflow">return</span>;
<a name="l01403"></a>01403     }
<a name="l01404"></a>01404     <span class="comment">// So the type changed to another groupware type, ok.</span>
<a name="l01405"></a>01405   } <span class="keywordflow">else</span> {
<a name="l01406"></a>01406     <span class="keywordflow">if</span> ( ef &amp;&amp; !ef-&gt;folder ) <span class="comment">// deleted folder, clean up</span>
<a name="l01407"></a>01407       mExtraFolders.remove( location );
<a name="l01408"></a>01408     <span class="keywordflow">if</span> ( contentsType == 0 )
<a name="l01409"></a>01409         <span class="keywordflow">return</span>;
<a name="l01410"></a>01410 
<a name="l01411"></a>01411     <span class="comment">//kdDebug(5006) &lt;&lt; "registering " &lt;&lt; location &lt;&lt; " as extra folder" &lt;&lt; endl;</span>
<a name="l01412"></a>01412     <span class="comment">// Make a new entry for the list</span>
<a name="l01413"></a>01413     ef = <span class="keyword">new</span> ExtraFolder( folder );
<a name="l01414"></a>01414     mExtraFolders.insert( location, ef );
<a name="l01415"></a>01415 
<a name="l01416"></a>01416     FolderInfo info = readFolderInfo( folder );
<a name="l01417"></a>01417     mFolderInfoMap.insert( folder, info );
<a name="l01418"></a>01418 
<a name="l01419"></a>01419     <span class="comment">// Adjust the folder names of all foo.default folders.</span>
<a name="l01420"></a>01420     <span class="comment">// German users will get Kalender as the name of all default Calendar folders,</span>
<a name="l01421"></a>01421     <span class="comment">// including their own, so that the default calendar folder of their Japanese</span>
<a name="l01422"></a>01422     <span class="comment">// coworker appears as /user/hirohito/Kalender, although Hirohito sees his folder</span>
<a name="l01423"></a>01423     <span class="comment">// in Japanese. On the server the folders are always in English.</span>
<a name="l01424"></a>01424     <span class="keywordflow">if</span> ( folder-&gt;<a class="code" href="classKMFolder.html#f95cbfeb07323847c6fe68d43c5a9276" title="Returns the type of this folder.">folderType</a>() == KMFolderTypeCachedImap ) {
<a name="l01425"></a>01425       QString annotation = <span class="keyword">static_cast&lt;</span>KMFolderCachedImap*<span class="keyword">&gt;</span>( folder-&gt;<a class="code" href="classKMFolder.html#4c7476219c137471fb93cb8c88061336">storage</a>() )-&gt;annotationFolderType();
<a name="l01426"></a>01426       kdDebug(5006) &lt;&lt; <span class="stringliteral">"folderContentsTypeChanged: "</span> &lt;&lt; folder-&gt;name() &lt;&lt; <span class="stringliteral">" has annotation "</span> &lt;&lt; annotation &lt;&lt; endl;
<a name="l01427"></a>01427       <span class="keywordflow">if</span> ( annotation == QString( s_folderContentsType[contentsType].annotation ) + <span class="stringliteral">".default"</span> )
<a name="l01428"></a>01428         folder-&gt;<a class="code" href="classKMFolder.html#3d031323b05f717cb26e441299a5c20f">setLabel</a>( localizedDefaultFolderName( contentsType ) );
<a name="l01429"></a>01429     }
<a name="l01430"></a>01430 
<a name="l01431"></a>01431     connectFolder( folder );
<a name="l01432"></a>01432   }
<a name="l01433"></a>01433   <span class="comment">// Tell about the new resource</span>
<a name="l01434"></a>01434   subresourceAdded( folderContentsType( contentsType ), location, subresourceLabelForPresentation(folder),
<a name="l01435"></a>01435                     !folder-&gt;<a class="code" href="classKMFolder.html#6fc63ddd905b6d47f348400cb1a61b18" title="Is the folder read-only?">isReadOnly</a>(), folderIsAlarmRelevant( folder ) );
<a name="l01436"></a>01436 }
<a name="l01437"></a>01437 
<a name="l01438"></a>01438 <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* KMailICalIfaceImpl::extraFolder( <span class="keyword">const</span> QString&amp; type,
<a name="l01439"></a>01439                                            <span class="keyword">const</span> QString&amp; folder )
<a name="l01440"></a>01440 {
<a name="l01441"></a>01441   <span class="comment">// If an extra folder exists that matches the type and folder location,</span>
<a name="l01442"></a>01442   <span class="comment">// use that</span>
<a name="l01443"></a>01443   <span class="keywordtype">int</span> t = folderContentsType( type );
<a name="l01444"></a>01444   <span class="keywordflow">if</span> ( t &lt; 1 || t &gt; 5 )
<a name="l01445"></a>01445     <span class="keywordflow">return</span> 0;
<a name="l01446"></a>01446 
<a name="l01447"></a>01447   ExtraFolder* ef = mExtraFolders.find( folder );
<a name="l01448"></a>01448   <span class="keywordflow">if</span> ( ef &amp;&amp; ef-&gt;folder &amp;&amp; ef-&gt;folder-&gt;storage()-&gt;contentsType() == t )
<a name="l01449"></a>01449     <span class="keywordflow">return</span> ef-&gt;folder;
<a name="l01450"></a>01450 
<a name="l01451"></a>01451   <span class="keywordflow">return</span> 0;
<a name="l01452"></a>01452 }
<a name="l01453"></a>01453 
<a name="l01454"></a><a class="code" href="classKMailICalIfaceImpl.html#d4457373192eb7f3cabaa0d60fdc3c04">01454</a> KMailICalIfaceImpl::StorageFormat KMailICalIfaceImpl::storageFormat( <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* folder )<span class="keyword"> const</span>
<a name="l01455"></a>01455 <span class="keyword"></span>{
<a name="l01456"></a>01456   FolderInfoMap::ConstIterator it = mFolderInfoMap.find( folder );
<a name="l01457"></a>01457   <span class="keywordflow">if</span> ( it != mFolderInfoMap.end() )
<a name="l01458"></a>01458     <span class="keywordflow">return</span> (*it).mStorageFormat;
<a name="l01459"></a>01459   <span class="keywordflow">return</span> globalStorageFormat();
<a name="l01460"></a>01460 }
<a name="l01461"></a>01461 
<a name="l01462"></a><a class="code" href="classKMailICalIfaceImpl.html#fde3f4df8d069ddf67c46d94d024546a">01462</a> <span class="keywordtype">void</span> <a class="code" href="classKMailICalIfaceImpl.html#fde3f4df8d069ddf67c46d94d024546a" title="Set the storage format of a given folder. Called when seeing the kolab annotation...">KMailICalIfaceImpl::setStorageFormat</a>( <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* folder, StorageFormat format )
<a name="l01463"></a>01463 {
<a name="l01464"></a>01464   FolderInfoMap::Iterator it = mFolderInfoMap.find( folder );
<a name="l01465"></a>01465   <span class="keywordflow">if</span> ( it != mFolderInfoMap.end() ) {
<a name="l01466"></a>01466     (*it).mStorageFormat = format;
<a name="l01467"></a>01467   } <span class="keywordflow">else</span> {
<a name="l01468"></a>01468     FolderInfo info( format, NoChange );
<a name="l01469"></a>01469     mFolderInfoMap.insert( folder, info );
<a name="l01470"></a>01470   }
<a name="l01471"></a>01471   KConfigGroup configGroup( kmkernel-&gt;config(), <span class="stringliteral">"GroupwareFolderInfo"</span> );
<a name="l01472"></a>01472   configGroup.writeEntry( folder-&gt;<a class="code" href="classKMFolder.html#bab3b6b7c2758c19aa04c2bf72716b27" title="Returns a string that can be used to identify this folder.">idString</a>() + <span class="stringliteral">"-storageFormat"</span>,
<a name="l01473"></a>01473                           format == StorageXML ? <span class="stringliteral">"xml"</span> : <span class="stringliteral">"icalvcard"</span> );
<a name="l01474"></a>01474 }
<a name="l01475"></a>01475 
<a name="l01476"></a>01476 <span class="keywordtype">void</span> KMailICalIfaceImpl::addFolderChange( <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* folder, FolderChanges changes )
<a name="l01477"></a>01477 {
<a name="l01478"></a>01478   FolderInfoMap::Iterator it = mFolderInfoMap.find( folder );
<a name="l01479"></a>01479   <span class="keywordflow">if</span> ( it != mFolderInfoMap.end() ) {
<a name="l01480"></a>01480     (*it).mChanges = <span class="keyword">static_cast&lt;</span>FolderChanges<span class="keyword">&gt;</span>( (*it).mChanges | changes );
<a name="l01481"></a>01481   } <span class="keywordflow">else</span> { <span class="comment">// Otherwise, well, it's a folder we don't care about.</span>
<a name="l01482"></a>01482     kdDebug(5006) &lt;&lt; <span class="stringliteral">"addFolderChange: nothing known about folder "</span> &lt;&lt; folder-&gt;<a class="code" href="classKMFolder.html#ee43a9e2a17f7286cb20d81ac2d3f033" title="Returns full path to folder file.">location</a>() &lt;&lt; endl;
<a name="l01483"></a>01483   }
<a name="l01484"></a>01484   KConfigGroup configGroup( kmkernel-&gt;config(), <span class="stringliteral">"GroupwareFolderInfo"</span> );
<a name="l01485"></a>01485   configGroup.writeEntry( folder-&gt;<a class="code" href="classKMFolder.html#bab3b6b7c2758c19aa04c2bf72716b27" title="Returns a string that can be used to identify this folder.">idString</a>() + <span class="stringliteral">"-changes"</span>, (*it).mChanges );
<a name="l01486"></a>01486 }
<a name="l01487"></a>01487 
<a name="l01488"></a>01488 KMailICalIfaceImpl::FolderInfo KMailICalIfaceImpl::readFolderInfo( <span class="keyword">const</span> <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a> * <span class="keyword">const</span> folder )<span class="keyword"> const</span>
<a name="l01489"></a>01489 <span class="keyword"></span>{
<a name="l01490"></a>01490   KConfigGroup configGroup( kmkernel-&gt;config(), <span class="stringliteral">"GroupwareFolderInfo"</span> );
<a name="l01491"></a>01491   QString str = configGroup.readEntry( folder-&gt;<a class="code" href="classKMFolder.html#bab3b6b7c2758c19aa04c2bf72716b27" title="Returns a string that can be used to identify this folder.">idString</a>() + <span class="stringliteral">"-storageFormat"</span>, <span class="stringliteral">"unset"</span> );
<a name="l01492"></a>01492   FolderInfo info;
<a name="l01493"></a>01493   <span class="keywordflow">if</span> ( str == <span class="stringliteral">"unset"</span> ) {
<a name="l01494"></a>01494     info.mStorageFormat = globalStorageFormat();
<a name="l01495"></a>01495     configGroup.writeEntry( folder-&gt;<a class="code" href="classKMFolder.html#bab3b6b7c2758c19aa04c2bf72716b27" title="Returns a string that can be used to identify this folder.">idString</a>() + <span class="stringliteral">"-storageFormat"</span>,
<a name="l01496"></a>01496                             info.mStorageFormat == StorageXML ? <span class="stringliteral">"xml"</span> : <span class="stringliteral">"icalvcard"</span> );
<a name="l01497"></a>01497   } <span class="keywordflow">else</span> {
<a name="l01498"></a>01498     info.mStorageFormat = ( str == <span class="stringliteral">"xml"</span> ) ? StorageXML : StorageIcalVcard;
<a name="l01499"></a>01499   }
<a name="l01500"></a>01500   info.mChanges = (FolderChanges) configGroup.readNumEntry( folder-&gt;<a class="code" href="classKMFolder.html#bab3b6b7c2758c19aa04c2bf72716b27" title="Returns a string that can be used to identify this folder.">idString</a>() + <span class="stringliteral">"-changes"</span> );
<a name="l01501"></a>01501   <span class="keywordflow">return</span> info;
<a name="l01502"></a>01502 }
<a name="l01503"></a>01503 
<a name="l01504"></a>01504 
<a name="l01505"></a>01505 <span class="keywordtype">void</span> KMailICalIfaceImpl::folderSynced( <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* folder, <span class="keyword">const</span> KURL&amp; folderURL )
<a name="l01506"></a>01506 {
<a name="l01507"></a>01507   FolderInfoMap::Iterator it = mFolderInfoMap.find( folder );
<a name="l01508"></a>01508   <span class="keywordflow">if</span> ( it != mFolderInfoMap.end() &amp;&amp; (*it).mChanges ) {
<a name="l01509"></a>01509     handleFolderSynced( folder, folderURL, (*it).mChanges );
<a name="l01510"></a>01510     (*it).mChanges = NoChange;
<a name="l01511"></a>01511   }
<a name="l01512"></a>01512 }
<a name="l01513"></a>01513 
<a name="l01514"></a>01514 <span class="keywordtype">void</span> KMailICalIfaceImpl::handleFolderSynced( <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* folder,
<a name="l01515"></a>01515                                              <span class="keyword">const</span> KURL&amp; folderURL,
<a name="l01516"></a>01516                                              <span class="keywordtype">int</span> _changes )
<a name="l01517"></a>01517 {
<a name="l01518"></a>01518   <span class="comment">// This is done here instead of in the resource, because</span>
<a name="l01519"></a>01519   <span class="comment">// there could be 0, 1, or N kolab resources at this point.</span>
<a name="l01520"></a>01520   <span class="comment">// We can hack the N case, but not the 0 case.</span>
<a name="l01521"></a>01521   <span class="comment">// So the idea of a DCOP signal for this wouldn't work.</span>
<a name="l01522"></a>01522   <span class="keywordflow">if</span> ( ( _changes &amp; KMailICalIface::Contents ) ||
<a name="l01523"></a>01523        ( _changes &amp; KMailICalIface::ACL ) ) {
<a name="l01524"></a>01524     <span class="keywordflow">if</span> ( storageFormat( folder ) == StorageXML &amp;&amp; folder-&gt;<a class="code" href="classKMFolder.html#4c7476219c137471fb93cb8c88061336">storage</a>()-&gt;<a class="code" href="classFolderStorage.html#2e2d90259cf68d278f95b89b8f9e5088">contentsType</a>() == KMail::ContentsTypeCalendar )
<a name="l01525"></a>01525       triggerKolabFreeBusy( folderURL );
<a name="l01526"></a>01526   }
<a name="l01527"></a>01527 }
<a name="l01528"></a>01528 
<a name="l01529"></a>01529 <span class="keywordtype">void</span> KMailICalIfaceImpl::folderDeletedOnServer( <span class="keyword">const</span> KURL&amp; folderURL )
<a name="l01530"></a>01530 {
<a name="l01531"></a>01531   triggerKolabFreeBusy( folderURL );
<a name="l01532"></a>01532 }
<a name="l01533"></a>01533 
<a name="l01534"></a>01534 <span class="keywordtype">void</span> KMailICalIfaceImpl::triggerKolabFreeBusy( <span class="keyword">const</span> KURL&amp; folderURL )
<a name="l01535"></a>01535 {
<a name="l01536"></a>01536   <span class="comment">/* Steffen said: you must issue an authenticated HTTP GET request to</span>
<a name="l01537"></a>01537 <span class="comment">     https://kolabserver/freebusy/trigger/user@domain/Folder/NestedFolder.pfb</span>
<a name="l01538"></a>01538 <span class="comment">     (replace .pfb with .xpfb for extended fb lists). */</span>
<a name="l01539"></a>01539   KURL httpURL( folderURL );
<a name="l01540"></a>01540   <span class="comment">// Keep username ("user@domain"), pass, and host from the imap url</span>
<a name="l01541"></a>01541   httpURL.setProtocol( <span class="stringliteral">"https"</span> );
<a name="l01542"></a>01542   httpURL.setPort( 0 ); <span class="comment">// remove imap port</span>
<a name="l01543"></a>01543 
<a name="l01544"></a>01544   <span class="comment">// IMAP path is either /INBOX/&lt;path&gt; or /user/someone/&lt;path&gt;</span>
<a name="l01545"></a>01545   QString path = folderURL.path( -1 );
<a name="l01546"></a>01546   Q_ASSERT( path.startsWith( <span class="stringliteral">"/"</span> ) );
<a name="l01547"></a>01547   <span class="keywordtype">int</span> secondSlash = path.find( <span class="charliteral">'/'</span>, 1 );
<a name="l01548"></a>01548   <span class="keywordflow">if</span> ( secondSlash == -1 ) {
<a name="l01549"></a>01549     kdWarning() &lt;&lt; <span class="stringliteral">"KCal::ResourceKolab::fromKMailFolderSynced path is too short: "</span> &lt;&lt; path &lt;&lt; endl;
<a name="l01550"></a>01550     <span class="keywordflow">return</span>;
<a name="l01551"></a>01551   }
<a name="l01552"></a>01552   <span class="keywordflow">if</span> ( path.startsWith( <span class="stringliteral">"/INBOX/"</span>, <span class="keyword">false</span> ) ) {
<a name="l01553"></a>01553     <span class="comment">// If INBOX, replace it with the username (which is user@domain)</span>
<a name="l01554"></a>01554     path = path.mid( secondSlash );
<a name="l01555"></a>01555     path.prepend( folderURL.user() );
<a name="l01556"></a>01556   } <span class="keywordflow">else</span> {
<a name="l01557"></a>01557     <span class="comment">// If user, just remove it. So we keep the IMAP-returned username.</span>
<a name="l01558"></a>01558     <span class="comment">// This assumes it's a known user on the same domain.</span>
<a name="l01559"></a>01559     path = path.mid( secondSlash );
<a name="l01560"></a>01560   }
<a name="l01561"></a>01561 
<a name="l01562"></a>01562   httpURL.setPath( <span class="stringliteral">"/freebusy/trigger/"</span> + path + <span class="stringliteral">".pfb"</span> );
<a name="l01563"></a>01563   httpURL.setQuery( QString::null );
<a name="l01564"></a>01564   <span class="comment">// Ensure that we encode everything with UTF8</span>
<a name="l01565"></a>01565   httpURL = KURL( httpURL.url(0,106), 106 );
<a name="l01566"></a>01566   kdDebug() &lt;&lt; <span class="stringliteral">"Triggering PFB update for "</span> &lt;&lt; folderURL &lt;&lt; <span class="stringliteral">" : getting "</span> &lt;&lt; httpURL &lt;&lt; endl;
<a name="l01567"></a>01567   <span class="comment">// "Fire and forget". No need for error handling, nor for explicit deletion.</span>
<a name="l01568"></a>01568   <span class="comment">// Maybe we should try to prevent launching it if it's already running (for this URL) though.</span>
<a name="l01569"></a>01569   <span class="comment">/*KIO::Job* job =*/</span> KIO::get( httpURL, <span class="keyword">false</span>, <span class="keyword">false</span> <span class="comment">/*no progress info*/</span> );
<a name="l01570"></a>01570 }
<a name="l01571"></a>01571 
<a name="l01572"></a>01572 <span class="keywordtype">void</span> KMailICalIfaceImpl::slotFolderPropertiesChanged( <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* folder )
<a name="l01573"></a>01573 {
<a name="l01574"></a>01574   <span class="keywordflow">if</span> ( <a class="code" href="classKMailICalIfaceImpl.html#d063e921a9053f1dfdf252516f00a81e" title="Returns true if resource mode is enabled and folder is one of the resource folders...">isResourceFolder</a>( folder ) ) {
<a name="l01575"></a>01575     <span class="keyword">const</span> QString location = folder-&gt;<a class="code" href="classKMFolder.html#ee43a9e2a17f7286cb20d81ac2d3f033" title="Returns full path to folder file.">location</a>();
<a name="l01576"></a>01576     <span class="keyword">const</span> QString contentsTypeStr = folderContentsType( folder-&gt;<a class="code" href="classKMFolder.html#4c7476219c137471fb93cb8c88061336">storage</a>()-&gt;<a class="code" href="classFolderStorage.html#2e2d90259cf68d278f95b89b8f9e5088">contentsType</a>() );
<a name="l01577"></a>01577     subresourceDeleted( contentsTypeStr, location );
<a name="l01578"></a>01578 
<a name="l01579"></a>01579     subresourceAdded( contentsTypeStr, location, subresourceLabelForPresentation( folder ),
<a name="l01580"></a>01580                       !folder-&gt;<a class="code" href="classKMFolder.html#6fc63ddd905b6d47f348400cb1a61b18" title="Is the folder read-only?">isReadOnly</a>(), folderIsAlarmRelevant( folder ) );
<a name="l01581"></a>01581 
<a name="l01582"></a>01582   }
<a name="l01583"></a>01583 }
<a name="l01584"></a>01584 
<a name="l01585"></a>01585 <span class="comment">// Must only be connected to a signal from KMFolder!</span>
<a name="l01586"></a>01586 <span class="keywordtype">void</span> KMailICalIfaceImpl::slotFolderRenamed()
<a name="l01587"></a>01587 {
<a name="l01588"></a>01588   <span class="keyword">const</span> <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* folder = <span class="keyword">static_cast&lt;</span><span class="keyword">const </span><a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a> *<span class="keyword">&gt;</span>( sender() );
<a name="l01589"></a>01589   slotFolderPropertiesChanged( const_cast&lt;KMFolder*&gt;( folder ) );
<a name="l01590"></a>01590 }
<a name="l01591"></a>01591 
<a name="l01592"></a>01592 <span class="keywordtype">void</span> KMailICalIfaceImpl::slotFolderLocationChanged( <span class="keyword">const</span> QString &amp;oldLocation,
<a name="l01593"></a>01593                                                     <span class="keyword">const</span> QString &amp;newLocation )
<a name="l01594"></a>01594 {
<a name="l01595"></a>01595   <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a> *folder = findResourceFolder( oldLocation );
<a name="l01596"></a>01596   ExtraFolder* ef = mExtraFolders.find( oldLocation );
<a name="l01597"></a>01597   <span class="keywordflow">if</span> ( ef ) {
<a name="l01598"></a>01598     <span class="comment">// reuse the ExtraFolder entry, but adjust the key</span>
<a name="l01599"></a>01599     mExtraFolders.setAutoDelete( <span class="keyword">false</span> );
<a name="l01600"></a>01600     mExtraFolders.remove( oldLocation );
<a name="l01601"></a>01601     mExtraFolders.setAutoDelete( <span class="keyword">true</span> );
<a name="l01602"></a>01602     mExtraFolders.insert( newLocation, ef );
<a name="l01603"></a>01603   }
<a name="l01604"></a>01604   <span class="keywordflow">if</span> (  folder )
<a name="l01605"></a>01605     subresourceDeleted( folderContentsType(  folder-&gt;<a class="code" href="classKMFolder.html#4c7476219c137471fb93cb8c88061336">storage</a>()-&gt;<a class="code" href="classFolderStorage.html#2e2d90259cf68d278f95b89b8f9e5088">contentsType</a>() ), oldLocation );
<a name="l01606"></a>01606 
<a name="l01607"></a>01607 }
<a name="l01608"></a>01608 
<a name="l01609"></a>01609 <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* KMailICalIfaceImpl::findResourceFolder( <span class="keyword">const</span> QString&amp; resource )
<a name="l01610"></a>01610 {
<a name="l01611"></a>01611   <span class="comment">// Try the standard folders</span>
<a name="l01612"></a>01612   <span class="keywordflow">if</span>( mCalendar &amp;&amp; mCalendar-&gt;location() == resource )
<a name="l01613"></a>01613     <span class="keywordflow">return</span> mCalendar;
<a name="l01614"></a>01614   <span class="keywordflow">if</span> ( mContacts &amp;&amp; mContacts-&gt;location() == resource )
<a name="l01615"></a>01615     <span class="keywordflow">return</span> mContacts;
<a name="l01616"></a>01616   <span class="keywordflow">if</span> ( mNotes &amp;&amp; mNotes-&gt;location() == resource )
<a name="l01617"></a>01617     <span class="keywordflow">return</span> mNotes;
<a name="l01618"></a>01618   <span class="keywordflow">if</span> ( mTasks &amp;&amp; mTasks-&gt;location() == resource )
<a name="l01619"></a>01619     <span class="keywordflow">return</span> mTasks;
<a name="l01620"></a>01620   <span class="keywordflow">if</span> ( mJournals &amp;&amp; mJournals-&gt;location() == resource )
<a name="l01621"></a>01621     <span class="keywordflow">return</span> mJournals;
<a name="l01622"></a>01622 
<a name="l01623"></a>01623   <span class="comment">// No luck. Try the extrafolders</span>
<a name="l01624"></a>01624   ExtraFolder* ef = mExtraFolders.find( resource );
<a name="l01625"></a>01625   <span class="keywordflow">if</span> ( ef )
<a name="l01626"></a>01626     <span class="keywordflow">return</span> ef-&gt;folder;
<a name="l01627"></a>01627 
<a name="l01628"></a>01628   <span class="comment">// No luck at all</span>
<a name="l01629"></a>01629   <span class="keywordflow">return</span> 0;
<a name="l01630"></a>01630 }
<a name="l01631"></a>01631 
<a name="l01632"></a>01632 <span class="comment">/****************************</span>
<a name="l01633"></a>01633 <span class="comment"> * The config stuff</span>
<a name="l01634"></a>01634 <span class="comment"> */</span>
<a name="l01635"></a>01635 
<a name="l01636"></a>01636 <span class="keywordtype">void</span> KMailICalIfaceImpl::readConfig()
<a name="l01637"></a>01637 {
<a name="l01638"></a>01638   <span class="keywordtype">bool</span> enabled = GlobalSettings::self()-&gt;theIMAPResourceEnabled() &amp;&amp;
<a name="l01639"></a>01639                  ( GlobalSettings::self()-&gt;theIMAPResourceAccount() != 0 );
<a name="l01640"></a>01640 
<a name="l01641"></a>01641   <span class="keywordflow">if</span>( !enabled ) {
<a name="l01642"></a>01642     <span class="keywordflow">if</span>( mUseResourceIMAP == <span class="keyword">true</span> ) {
<a name="l01643"></a>01643       <span class="comment">// Shutting down</span>
<a name="l01644"></a>01644       mUseResourceIMAP = <span class="keyword">false</span>;
<a name="l01645"></a>01645       <a class="code" href="classKMailICalIfaceImpl.html#d6bc094d610f49dd7413a4fccf01e385" title="Disconnect all slots and close the dirs.">cleanup</a>();
<a name="l01646"></a>01646       reloadFolderTree();
<a name="l01647"></a>01647     }
<a name="l01648"></a>01648     <span class="keywordflow">return</span>;
<a name="l01649"></a>01649   }
<a name="l01650"></a>01650   mUseResourceIMAP = enabled;
<a name="l01651"></a>01651 
<a name="l01652"></a>01652   <span class="comment">// Read remaining options</span>
<a name="l01653"></a>01653   <span class="keyword">const</span> <span class="keywordtype">bool</span> hideFolders = GlobalSettings::self()-&gt;hideGroupwareFolders();
<a name="l01654"></a>01654   QString parentName = GlobalSettings::self()-&gt;theIMAPResourceFolderParent();
<a name="l01655"></a>01655 
<a name="l01656"></a>01656   <span class="comment">// Find the folder parent</span>
<a name="l01657"></a>01657   <a class="code" href="classKMFolderDir.html" title="KMail list that manages the contents of one directory that may contain folders and/or...">KMFolderDir</a>* folderParentDir;
<a name="l01658"></a>01658   KMFolderType <a class="code" href="classKMailICalIfaceImpl.html#ec5b087d8a90c8a99f4df0cb3ff75c1c" title="Returns the resource folder type.">folderType</a>;
<a name="l01659"></a>01659   <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* folderParent = kmkernel-&gt;findFolderById( parentName );
<a name="l01660"></a>01660   <span class="keywordflow">if</span>( folderParent == 0 ) {
<a name="l01661"></a>01661     <span class="comment">// Parent folder not found. It was probably deleted. The user will have to</span>
<a name="l01662"></a>01662     <span class="comment">// configure things again.</span>
<a name="l01663"></a>01663     kdDebug(5006) &lt;&lt; <span class="stringliteral">"Groupware folder "</span> &lt;&lt; parentName &lt;&lt; <span class="stringliteral">" not found. Groupware functionality disabled"</span> &lt;&lt; endl;
<a name="l01664"></a>01664     <span class="comment">// Or maybe the inbox simply wasn't created on the first startup</span>
<a name="l01665"></a>01665     KMAccount* account = kmkernel-&gt;acctMgr()-&gt;find( GlobalSettings::self()-&gt;theIMAPResourceAccount() );
<a name="l01666"></a>01666     Q_ASSERT( account );
<a name="l01667"></a>01667     <span class="keywordflow">if</span> ( account ) {
<a name="l01668"></a>01668       <span class="comment">// just in case we were connected already</span>
<a name="l01669"></a>01669       disconnect( account, SIGNAL( finishedCheck( <span class="keywordtype">bool</span>, CheckStatus ) ),
<a name="l01670"></a>01670                <span class="keyword">this</span>, SLOT( slotCheckDone() ) );
<a name="l01671"></a>01671       connect( account, SIGNAL( finishedCheck( <span class="keywordtype">bool</span>, CheckStatus ) ),
<a name="l01672"></a>01672                <span class="keyword">this</span>, SLOT( slotCheckDone() ) );
<a name="l01673"></a>01673     }
<a name="l01674"></a>01674     mUseResourceIMAP = <span class="keyword">false</span>;
<a name="l01675"></a>01675     <span class="comment">// We can't really call cleanup(), if those folders were completely deleted.</span>
<a name="l01676"></a>01676     mCalendar = 0;
<a name="l01677"></a>01677     mTasks    = 0;
<a name="l01678"></a>01678     mJournals = 0;
<a name="l01679"></a>01679     mContacts = 0;
<a name="l01680"></a>01680     mNotes    = 0;
<a name="l01681"></a>01681     <span class="keywordflow">return</span>;
<a name="l01682"></a>01682   } <span class="keywordflow">else</span> {
<a name="l01683"></a>01683     folderParentDir = folderParent-&gt;<a class="code" href="classKMFolder.html#9342ce04787044b210296c0fbe5e5bd8" title="Create a child folder directory and associates it with this folder.">createChildFolder</a>();
<a name="l01684"></a>01684     folderType = folderParent-&gt;<a class="code" href="classKMFolder.html#f95cbfeb07323847c6fe68d43c5a9276" title="Returns the type of this folder.">folderType</a>();
<a name="l01685"></a>01685   }
<a name="l01686"></a>01686 
<a name="l01687"></a>01687   KMAcctCachedImap::GroupwareType groupwareType = <span class="keyword">dynamic_cast&lt;</span>KMFolderCachedImap *<span class="keyword">&gt;</span>( folderParent-&gt;<a class="code" href="classKMFolder.html#4c7476219c137471fb93cb8c88061336">storage</a>() )-&gt;account()-&gt;groupwareType();
<a name="l01688"></a>01688 
<a name="l01689"></a>01689   <span class="keywordflow">if</span> ( groupwareType == KMAcctCachedImap::GroupwareKolab ) {
<a name="l01690"></a>01690     <span class="comment">// Make sure the folder parent has the subdirs</span>
<a name="l01691"></a>01691     <span class="comment">// Globally there are 3 cases: nothing found, some stuff found by type/name heuristics, or everything found OK</span>
<a name="l01692"></a>01692     <span class="keywordtype">bool</span> noneFound = <span class="keyword">true</span>;
<a name="l01693"></a>01693     <span class="keywordtype">bool</span> mustFix = <span class="keyword">false</span>; <span class="comment">// true when at least one was found by heuristics</span>
<a name="l01694"></a>01694     QValueVector&lt;StandardFolderSearchResult&gt; results( KMail::ContentsTypeLast + 1 );
<a name="l01695"></a>01695     <span class="keywordflow">for</span> ( <span class="keywordtype">int</span> i = 0; i &lt; KMail::ContentsTypeLast+1; ++i ) {
<a name="l01696"></a>01696       <span class="keywordflow">if</span> ( i != KMail::ContentsTypeMail ) {
<a name="l01697"></a>01697         results[i] = findStandardResourceFolder( folderParentDir, static_cast&lt;KMail::FolderContentsType&gt;(i) );
<a name="l01698"></a>01698         <span class="keywordflow">if</span> ( results[i].found == StandardFolderSearchResult::FoundAndStandard )
<a name="l01699"></a>01699           noneFound = <span class="keyword">false</span>;
<a name="l01700"></a>01700         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( results[i].found == StandardFolderSearchResult::FoundByType ||
<a name="l01701"></a>01701                   results[i].found == StandardFolderSearchResult::FoundByName ) {
<a name="l01702"></a>01702           mustFix = <span class="keyword">true</span>;
<a name="l01703"></a>01703           noneFound = <span class="keyword">false</span>;
<a name="l01704"></a>01704         } <span class="keywordflow">else</span> <span class="comment">// NotFound</span>
<a name="l01705"></a>01705           mustFix = <span class="keyword">true</span>;
<a name="l01706"></a>01706       }
<a name="l01707"></a>01707     }
<a name="l01708"></a>01708 
<a name="l01709"></a>01709     <span class="comment">// Check if something changed</span>
<a name="l01710"></a>01710     <span class="keywordflow">if</span>( mUseResourceIMAP &amp;&amp; !noneFound &amp;&amp; !mustFix &amp;&amp; mFolderParentDir == folderParentDir
<a name="l01711"></a>01711         &amp;&amp; mFolderType == folderType ) {
<a name="l01712"></a>01712       <span class="comment">// Nothing changed</span>
<a name="l01713"></a>01713       <span class="keywordflow">if</span> ( hideFolders != mHideFolders ) {
<a name="l01714"></a>01714         <span class="comment">// Well, the folder hiding has changed</span>
<a name="l01715"></a>01715         mHideFolders = hideFolders;
<a name="l01716"></a>01716         reloadFolderTree();
<a name="l01717"></a>01717       }
<a name="l01718"></a>01718       <span class="keywordflow">return</span>;
<a name="l01719"></a>01719     }
<a name="l01720"></a>01720 
<a name="l01721"></a>01721     <span class="keywordflow">if</span>( noneFound || mustFix ) {
<a name="l01722"></a>01722       QString msg;
<a name="l01723"></a>01723       QString parentFolderName = folderParent != 0 ? folderParent-&gt;name() : folderParentDir-&gt;name();
<a name="l01724"></a>01724       <span class="keywordflow">if</span> ( noneFound ) {
<a name="l01725"></a>01725         <span class="comment">// No subfolder was found, so ask if we can make them</span>
<a name="l01726"></a>01726         msg = i18n(<span class="stringliteral">"KMail will now create the required groupware folders"</span>
<a name="l01727"></a>01727                    <span class="stringliteral">" as subfolders of %1; if you do not want this, cancel"</span>
<a name="l01728"></a>01728                    <span class="stringliteral">" and the IMAP resource will be disabled"</span>).arg(parentFolderName);
<a name="l01729"></a>01729       } <span class="keywordflow">else</span> {
<a name="l01730"></a>01730         <span class="comment">// Some subfolders were found, be more precise</span>
<a name="l01731"></a>01731         QString operations = <span class="stringliteral">"&lt;ul&gt;"</span>;
<a name="l01732"></a>01732         <span class="keywordflow">for</span> ( <span class="keywordtype">int</span> i = 0; i &lt; KMail::ContentsTypeLast+1; ++i ) {
<a name="l01733"></a>01733           <span class="keywordflow">if</span> ( i != KMail::ContentsTypeMail ) {
<a name="l01734"></a>01734             QString typeName = localizedDefaultFolderName( static_cast&lt;KMail::FolderContentsType&gt;( i ) );
<a name="l01735"></a>01735             <span class="keywordflow">if</span> ( results[i].found == StandardFolderSearchResult::NotFound )
<a name="l01736"></a>01736               operations += <span class="stringliteral">"&lt;li&gt;"</span> + i18n( <span class="stringliteral">"%1: no folder found. It will be created."</span> ).arg( typeName ) + <span class="stringliteral">"&lt;/li&gt;"</span>;
<a name="l01737"></a>01737             <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( results[i].found == StandardFolderSearchResult::FoundByType || results[i].found == StandardFolderSearchResult::FoundByName )
<a name="l01738"></a>01738               operations += <span class="stringliteral">"&lt;li&gt;"</span> + i18n( <span class="stringliteral">"%1: found folder %2. It will be set as the main groupware folder."</span> ).
<a name="l01739"></a>01739                             arg( typeName ).arg( results[i].folder-&gt;<a class="code" href="classKMFolder.html#34f0beec33715f5a7fa6e1dfa11f6aa0" title="Returns the label of the folder for visualization.">label</a>() ) + <span class="stringliteral">"&lt;/li&gt;"</span>;
<a name="l01740"></a>01740           }
<a name="l01741"></a>01741         }
<a name="l01742"></a>01742         operations += <span class="stringliteral">"&lt;/ul&gt;"</span>;
<a name="l01743"></a>01743 
<a name="l01744"></a>01744         msg = i18n(<span class="stringliteral">"&lt;qt&gt;KMail found the following groupware folders in %1 and needs to perform the following operations: %2"</span>
<a name="l01745"></a>01745                    <span class="stringliteral">"&lt;br&gt;If you do not want this, cancel"</span>
<a name="l01746"></a>01746                    <span class="stringliteral">" and the IMAP resource will be disabled"</span>).arg(parentFolderName, operations);
<a name="l01747"></a>01747 
<a name="l01748"></a>01748       }
<a name="l01749"></a>01749 
<a name="l01750"></a>01750       <span class="keywordflow">if</span>( KMessageBox::questionYesNo( 0, msg,
<a name="l01751"></a>01751                                       i18n(<span class="stringliteral">"Standard Groupware Folders"</span>), KStdGuiItem::cont(), KStdGuiItem::cancel() ) == KMessageBox::No ) {
<a name="l01752"></a>01752 
<a name="l01753"></a>01753         GlobalSettings::self()-&gt;setTheIMAPResourceEnabled( <span class="keyword">false</span> );
<a name="l01754"></a>01754         mUseResourceIMAP = <span class="keyword">false</span>;
<a name="l01755"></a>01755         mFolderParentDir = 0;
<a name="l01756"></a>01756         mFolderParent = 0;
<a name="l01757"></a>01757         reloadFolderTree();
<a name="l01758"></a>01758         <span class="keywordflow">return</span>;
<a name="l01759"></a>01759       }
<a name="l01760"></a>01760     }
<a name="l01761"></a>01761 
<a name="l01762"></a>01762     <span class="comment">// Make the new settings work</span>
<a name="l01763"></a>01763     mUseResourceIMAP = <span class="keyword">true</span>;
<a name="l01764"></a>01764     mFolderLanguage = GlobalSettings::self()-&gt;theIMAPResourceFolderLanguage();
<a name="l01765"></a>01765     <span class="keywordflow">if</span>( mFolderLanguage &gt; 3 ) mFolderLanguage = 0;
<a name="l01766"></a>01766     mFolderParentDir = folderParentDir;
<a name="l01767"></a>01767     mFolderParent = folderParent;
<a name="l01768"></a>01768     mFolderType = folderType;
<a name="l01769"></a>01769     mHideFolders = hideFolders;
<a name="l01770"></a>01770 
<a name="l01771"></a>01771     <span class="comment">// Close the previous folders</span>
<a name="l01772"></a>01772     <a class="code" href="classKMailICalIfaceImpl.html#d6bc094d610f49dd7413a4fccf01e385" title="Disconnect all slots and close the dirs.">cleanup</a>();
<a name="l01773"></a>01773 
<a name="l01774"></a>01774     <span class="comment">// Set the new folders</span>
<a name="l01775"></a>01775     mCalendar = initFolder( KMail::ContentsTypeCalendar );
<a name="l01776"></a>01776     mTasks    = initFolder( KMail::ContentsTypeTask );
<a name="l01777"></a>01777     mJournals = initFolder( KMail::ContentsTypeJournal );
<a name="l01778"></a>01778     mContacts = initFolder( KMail::ContentsTypeContact );
<a name="l01779"></a>01779     mNotes    = initFolder( KMail::ContentsTypeNote );
<a name="l01780"></a>01780 
<a name="l01781"></a>01781     <span class="comment">// Store final annotation (with .default) so that we won't ask again on next startup</span>
<a name="l01782"></a>01782     <span class="keywordflow">if</span> ( mCalendar-&gt;folderType() == KMFolderTypeCachedImap )
<a name="l01783"></a>01783       static_cast&lt;KMFolderCachedImap *&gt;( mCalendar-&gt;storage() )-&gt;updateAnnotationFolderType();
<a name="l01784"></a>01784     <span class="keywordflow">if</span> ( mTasks-&gt;folderType() == KMFolderTypeCachedImap )
<a name="l01785"></a>01785       static_cast&lt;KMFolderCachedImap *&gt;( mTasks-&gt;storage() )-&gt;updateAnnotationFolderType();
<a name="l01786"></a>01786     <span class="keywordflow">if</span> ( mJournals-&gt;folderType() == KMFolderTypeCachedImap )
<a name="l01787"></a>01787       static_cast&lt;KMFolderCachedImap *&gt;( mJournals-&gt;storage() )-&gt;updateAnnotationFolderType();
<a name="l01788"></a>01788     <span class="keywordflow">if</span> ( mContacts-&gt;folderType() == KMFolderTypeCachedImap )
<a name="l01789"></a>01789       static_cast&lt;KMFolderCachedImap *&gt;( mContacts-&gt;storage() )-&gt;updateAnnotationFolderType();
<a name="l01790"></a>01790     <span class="keywordflow">if</span> ( mNotes-&gt;folderType() == KMFolderTypeCachedImap )
<a name="l01791"></a>01791       static_cast&lt;KMFolderCachedImap *&gt;( mNotes-&gt;storage() )-&gt;updateAnnotationFolderType();
<a name="l01792"></a>01792 
<a name="l01793"></a>01793     <span class="comment">// BEGIN TILL TODO The below only uses the dimap folder manager, which</span>
<a name="l01794"></a>01794     <span class="comment">// will fail for all other folder types. Adjust.</span>
<a name="l01795"></a>01795 
<a name="l01796"></a>01796     kdDebug(5006) &lt;&lt; k_funcinfo &lt;&lt; <span class="stringliteral">"mCalendar="</span> &lt;&lt; mCalendar &lt;&lt; <span class="stringliteral">" "</span> &lt;&lt; mCalendar-&gt;location() &lt;&lt; endl;
<a name="l01797"></a>01797     kdDebug(5006) &lt;&lt; k_funcinfo &lt;&lt; <span class="stringliteral">"mContacts="</span> &lt;&lt; mContacts &lt;&lt; <span class="stringliteral">" "</span> &lt;&lt; mContacts-&gt;location() &lt;&lt; endl;
<a name="l01798"></a>01798     kdDebug(5006) &lt;&lt; k_funcinfo &lt;&lt; <span class="stringliteral">"mNotes="</span> &lt;&lt; mNotes &lt;&lt; <span class="stringliteral">" "</span> &lt;&lt; mNotes-&gt;location() &lt;&lt; endl;
<a name="l01799"></a>01799 
<a name="l01800"></a>01800     <span class="comment">// Find all extra folders</span>
<a name="l01801"></a>01801     QStringList folderNames;
<a name="l01802"></a>01802     QValueList&lt;QGuardedPtr&lt;KMFolder&gt; &gt; folderList;
<a name="l01803"></a>01803     kmkernel-&gt;dimapFolderMgr()-&gt;createFolderList(&amp;folderNames, &amp;folderList);
<a name="l01804"></a>01804     <span class="keywordflow">for</span>(QValueList&lt;QGuardedPtr&lt;KMFolder&gt; &gt;::iterator it = folderList.begin();
<a name="l01805"></a>01805         it != folderList.end(); ++it)
<a name="l01806"></a>01806     {
<a name="l01807"></a>01807       <a class="code" href="classFolderStorage.html" title="The FolderStorage class is the bass class for the storage related aspects of a collection...">FolderStorage</a>* storage = (*it)-&gt;storage();
<a name="l01808"></a>01808       <span class="keywordflow">if</span> ( storage-&gt;<a class="code" href="classFolderStorage.html#2e2d90259cf68d278f95b89b8f9e5088">contentsType</a>() != 0 ) {
<a name="l01809"></a>01809         <a class="code" href="classKMailICalIfaceImpl.html#faaf25987bf203741d64954c07be28d1" title="Called when a folders contents have changed.">folderContentsTypeChanged</a>( *it, storage-&gt;<a class="code" href="classFolderStorage.html#2e2d90259cf68d278f95b89b8f9e5088">contentsType</a>() );
<a name="l01810"></a>01810       }
<a name="l01811"></a>01811     }
<a name="l01812"></a>01812 
<a name="l01813"></a>01813     <span class="comment">// If we just created them, they might have been registered as extra folders temporarily.</span>
<a name="l01814"></a>01814     <span class="comment">// -&gt; undo that.</span>
<a name="l01815"></a>01815     mExtraFolders.remove( mCalendar-&gt;location() );
<a name="l01816"></a>01816     mExtraFolders.remove( mTasks-&gt;location() );
<a name="l01817"></a>01817     mExtraFolders.remove( mJournals-&gt;location() );
<a name="l01818"></a>01818     mExtraFolders.remove( mContacts-&gt;location() );
<a name="l01819"></a>01819     mExtraFolders.remove( mNotes-&gt;location() );
<a name="l01820"></a>01820 
<a name="l01821"></a>01821     <span class="comment">// END TILL TODO</span>
<a name="l01822"></a>01822 
<a name="l01823"></a>01823     subresourceAdded( folderContentsType( KMail::ContentsTypeCalendar ), mCalendar-&gt;location(), mCalendar-&gt;label(), <span class="keyword">true</span>, true );
<a name="l01824"></a>01824     subresourceAdded( folderContentsType( KMail::ContentsTypeTask ), mTasks-&gt;location(), mTasks-&gt;label(), <span class="keyword">true</span>, true );
<a name="l01825"></a>01825     subresourceAdded( folderContentsType( KMail::ContentsTypeJournal ), mJournals-&gt;location(), mJournals-&gt;label(), <span class="keyword">true</span>, false );
<a name="l01826"></a>01826     subresourceAdded( folderContentsType( KMail::ContentsTypeContact ), mContacts-&gt;location(), mContacts-&gt;label(), <span class="keyword">true</span>, false );
<a name="l01827"></a>01827     subresourceAdded( folderContentsType( KMail::ContentsTypeNote ), mNotes-&gt;location(), mNotes-&gt;label(), <span class="keyword">true</span>, false );
<a name="l01828"></a>01828   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( groupwareType == KMAcctCachedImap::GroupwareScalix ) {
<a name="l01829"></a>01829     <span class="comment">// Make the new settings work</span>
<a name="l01830"></a>01830     mUseResourceIMAP = <span class="keyword">true</span>;
<a name="l01831"></a>01831     mFolderParentDir = folderParentDir;
<a name="l01832"></a>01832     mFolderParent = folderParent;
<a name="l01833"></a>01833     mFolderType = folderType;
<a name="l01834"></a>01834     mHideFolders = <span class="keyword">false</span>;
<a name="l01835"></a>01835 
<a name="l01836"></a>01836     <span class="comment">// Close the previous folders</span>
<a name="l01837"></a>01837     <a class="code" href="classKMailICalIfaceImpl.html#d6bc094d610f49dd7413a4fccf01e385" title="Disconnect all slots and close the dirs.">cleanup</a>();
<a name="l01838"></a>01838 
<a name="l01839"></a>01839     <span class="comment">// Set the new folders</span>
<a name="l01840"></a>01840     mCalendar = initScalixFolder( KMail::ContentsTypeCalendar );
<a name="l01841"></a>01841     mTasks    = initScalixFolder( KMail::ContentsTypeTask );
<a name="l01842"></a>01842     mJournals = 0;
<a name="l01843"></a>01843     mContacts = initScalixFolder( KMail::ContentsTypeContact );
<a name="l01844"></a>01844     mNotes    = initScalixFolder( KMail::ContentsTypeNote );
<a name="l01845"></a>01845 
<a name="l01846"></a>01846     <span class="comment">// Store final annotation (with .default) so that we won't ask again on next startup</span>
<a name="l01847"></a>01847     <span class="keywordflow">if</span> ( mCalendar-&gt;folderType() == KMFolderTypeCachedImap )
<a name="l01848"></a>01848       static_cast&lt;KMFolderCachedImap *&gt;( mCalendar-&gt;storage() )-&gt;updateAnnotationFolderType();
<a name="l01849"></a>01849     <span class="keywordflow">if</span> ( mTasks-&gt;folderType() == KMFolderTypeCachedImap )
<a name="l01850"></a>01850       static_cast&lt;KMFolderCachedImap *&gt;( mTasks-&gt;storage() )-&gt;updateAnnotationFolderType();
<a name="l01851"></a>01851     <span class="keywordflow">if</span> ( mContacts-&gt;folderType() == KMFolderTypeCachedImap )
<a name="l01852"></a>01852       static_cast&lt;KMFolderCachedImap *&gt;( mContacts-&gt;storage() )-&gt;updateAnnotationFolderType();
<a name="l01853"></a>01853     <span class="keywordflow">if</span> ( mNotes-&gt;folderType() == KMFolderTypeCachedImap )
<a name="l01854"></a>01854       static_cast&lt;KMFolderCachedImap *&gt;( mNotes-&gt;storage() )-&gt;updateAnnotationFolderType();
<a name="l01855"></a>01855 
<a name="l01856"></a>01856     <span class="comment">// BEGIN TILL TODO The below only uses the dimap folder manager, which</span>
<a name="l01857"></a>01857     <span class="comment">// will fail for all other folder types. Adjust.</span>
<a name="l01858"></a>01858 
<a name="l01859"></a>01859     kdDebug(5006) &lt;&lt; k_funcinfo &lt;&lt; <span class="stringliteral">"mCalendar="</span> &lt;&lt; mCalendar &lt;&lt; <span class="stringliteral">" "</span> &lt;&lt; mCalendar-&gt;location() &lt;&lt; endl;
<a name="l01860"></a>01860     kdDebug(5006) &lt;&lt; k_funcinfo &lt;&lt; <span class="stringliteral">"mContacts="</span> &lt;&lt; mContacts &lt;&lt; <span class="stringliteral">" "</span> &lt;&lt; mContacts-&gt;location() &lt;&lt; endl;
<a name="l01861"></a>01861     kdDebug(5006) &lt;&lt; k_funcinfo &lt;&lt; <span class="stringliteral">"mNotes="</span> &lt;&lt; mNotes &lt;&lt; <span class="stringliteral">" "</span> &lt;&lt; mNotes-&gt;location() &lt;&lt; endl;
<a name="l01862"></a>01862 
<a name="l01863"></a>01863     <span class="comment">// Find all extra folders</span>
<a name="l01864"></a>01864     QStringList folderNames;
<a name="l01865"></a>01865     QValueList&lt;QGuardedPtr&lt;KMFolder&gt; &gt; folderList;
<a name="l01866"></a>01866     kmkernel-&gt;dimapFolderMgr()-&gt;createFolderList(&amp;folderNames, &amp;folderList);
<a name="l01867"></a>01867     QValueList&lt;QGuardedPtr&lt;KMFolder&gt; &gt;::iterator it;
<a name="l01868"></a>01868     <span class="keywordflow">for</span>(it = folderList.begin(); it != folderList.end(); ++it)
<a name="l01869"></a>01869     {
<a name="l01870"></a>01870       <a class="code" href="classFolderStorage.html" title="The FolderStorage class is the bass class for the storage related aspects of a collection...">FolderStorage</a> *storage = (*it)-&gt;storage();
<a name="l01871"></a>01871 
<a name="l01872"></a>01872       <span class="keywordflow">if</span> ( (*it)-&gt;folderType() == KMFolderTypeCachedImap ) {
<a name="l01873"></a>01873         KMFolderCachedImap *imapFolder = <span class="keyword">static_cast&lt;</span>KMFolderCachedImap*<span class="keyword">&gt;</span>( storage );
<a name="l01874"></a>01874 
<a name="l01875"></a>01875         <span class="keyword">const</span> QString attributes = imapFolder-&gt;folderAttributes();
<a name="l01876"></a>01876         <span class="keywordflow">if</span> ( attributes.contains( <span class="stringliteral">"X-FolderClass"</span> ) ) {
<a name="l01877"></a>01877           <span class="keywordflow">if</span> ( !attributes.contains( <span class="stringliteral">"X-SpecialFolder"</span> ) || (*it)-&gt;location().contains( <span class="stringliteral">"@"</span> ) ) {
<a name="l01878"></a>01878             <span class="keyword">const</span> <a class="code" href="classScalix_1_1FolderAttributeParser.html" title="This class takes a folder attribute string as argument and provides access to the...">Scalix::FolderAttributeParser</a> parser( attributes );
<a name="l01879"></a>01879             <span class="keywordflow">if</span> ( !parser.folderClass().isEmpty() ) {
<a name="l01880"></a>01880               FolderContentsType type = Scalix::Utils::scalixIdToContentsType( parser.folderClass() );
<a name="l01881"></a>01881               imapFolder-&gt;setContentsType( type );
<a name="l01882"></a>01882               <a class="code" href="classKMailICalIfaceImpl.html#faaf25987bf203741d64954c07be28d1" title="Called when a folders contents have changed.">folderContentsTypeChanged</a>( *it, type );
<a name="l01883"></a>01883             }
<a name="l01884"></a>01884           }
<a name="l01885"></a>01885         }
<a name="l01886"></a>01886       }
<a name="l01887"></a>01887     }
<a name="l01888"></a>01888 
<a name="l01889"></a>01889     <span class="comment">// If we just created them, they might have been registered as extra folders temporarily.</span>
<a name="l01890"></a>01890     <span class="comment">// -&gt; undo that.</span>
<a name="l01891"></a>01891     mExtraFolders.remove( mCalendar-&gt;location() );
<a name="l01892"></a>01892     mExtraFolders.remove( mTasks-&gt;location() );
<a name="l01893"></a>01893     mExtraFolders.remove( mContacts-&gt;location() );
<a name="l01894"></a>01894     mExtraFolders.remove( mNotes-&gt;location() );
<a name="l01895"></a>01895 
<a name="l01896"></a>01896     <span class="comment">// END TILL TODO</span>
<a name="l01897"></a>01897 
<a name="l01898"></a>01898     subresourceAdded( folderContentsType( KMail::ContentsTypeCalendar ), mCalendar-&gt;location(), mCalendar-&gt;label(), <span class="keyword">true</span>, true );
<a name="l01899"></a>01899     subresourceAdded( folderContentsType( KMail::ContentsTypeTask ), mTasks-&gt;location(), mTasks-&gt;label(), <span class="keyword">true</span>, true );
<a name="l01900"></a>01900     subresourceAdded( folderContentsType( KMail::ContentsTypeContact ), mContacts-&gt;location(), mContacts-&gt;label(), <span class="keyword">true</span>, false );
<a name="l01901"></a>01901     subresourceAdded( folderContentsType( KMail::ContentsTypeNote ), mNotes-&gt;location(), mNotes-&gt;label(), <span class="keyword">true</span>, false );
<a name="l01902"></a>01902   }
<a name="l01903"></a>01903 
<a name="l01904"></a>01904   reloadFolderTree();
<a name="l01905"></a>01905 }
<a name="l01906"></a>01906 
<a name="l01907"></a>01907 <span class="keywordtype">void</span> KMailICalIfaceImpl::slotCheckDone()
<a name="l01908"></a>01908 {
<a name="l01909"></a>01909   QString parentName = GlobalSettings::self()-&gt;theIMAPResourceFolderParent();
<a name="l01910"></a>01910   <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* folderParent = kmkernel-&gt;findFolderById( parentName );
<a name="l01911"></a>01911   <span class="comment">//kdDebug(5006) &lt;&lt; k_funcinfo &lt;&lt; " folderParent=" &lt;&lt; folderParent &lt;&lt; endl;</span>
<a name="l01912"></a>01912   <span class="keywordflow">if</span> ( folderParent )  <span class="comment">// cool it exists now</span>
<a name="l01913"></a>01913   {
<a name="l01914"></a>01914     KMAccount* account = kmkernel-&gt;acctMgr()-&gt;find( GlobalSettings::self()-&gt;theIMAPResourceAccount() );
<a name="l01915"></a>01915     <span class="keywordflow">if</span> ( account )
<a name="l01916"></a>01916       disconnect( account, SIGNAL( finishedCheck( <span class="keywordtype">bool</span>, CheckStatus ) ),
<a name="l01917"></a>01917                   <span class="keyword">this</span>, SLOT( slotCheckDone() ) );
<a name="l01918"></a>01918     readConfig();
<a name="l01919"></a>01919   }
<a name="l01920"></a>01920 }
<a name="l01921"></a>01921 
<a name="l01922"></a>01922 <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* KMailICalIfaceImpl::initFolder( KMail::FolderContentsType contentsType )
<a name="l01923"></a>01923 {
<a name="l01924"></a>01924   <span class="comment">// Figure out what type of folder this is supposed to be</span>
<a name="l01925"></a>01925   KMFolderType type = mFolderType;
<a name="l01926"></a>01926   <span class="keywordflow">if</span>( type == KMFolderTypeUnknown ) type = KMFolderTypeMaildir;
<a name="l01927"></a>01927 
<a name="l01928"></a>01928   KFolderTreeItem::Type itemType = s_folderContentsType[contentsType].treeItemType;
<a name="l01929"></a>01929   <span class="comment">//kdDebug(5006) &lt;&lt; "KMailICalIfaceImpl::initFolder " &lt;&lt; folderName( itemType ) &lt;&lt; endl;</span>
<a name="l01930"></a>01930 
<a name="l01931"></a>01931   <span class="comment">// Find the folder</span>
<a name="l01932"></a>01932   StandardFolderSearchResult result = findStandardResourceFolder( mFolderParentDir, contentsType );
<a name="l01933"></a>01933   <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* folder = result.folder;
<a name="l01934"></a>01934 
<a name="l01935"></a>01935   <span class="keywordflow">if</span> ( !folder ) {
<a name="l01936"></a>01936     <span class="comment">// The folder isn't there yet - create it</span>
<a name="l01937"></a>01937     folder =
<a name="l01938"></a>01938       mFolderParentDir-&gt;<a class="code" href="classKMFolderDir.html#1f6317f3f12591c7ae6f2e3dab087d3f" title="Create a mail folder in this directory with given name.">createFolder</a>( localizedDefaultFolderName( contentsType ), <span class="keyword">false</span>, type );
<a name="l01939"></a>01939     <span class="keywordflow">if</span>( mFolderType == KMFolderTypeImap ) {
<a name="l01940"></a>01940       KMFolderImap* parentFolder = <span class="keyword">static_cast&lt;</span>KMFolderImap*<span class="keyword">&gt;</span>( mFolderParent-&gt;<a class="code" href="classKMFolder.html#4c7476219c137471fb93cb8c88061336">storage</a>() );
<a name="l01941"></a>01941       parentFolder-&gt;createFolder( localizedDefaultFolderName( contentsType ) );
<a name="l01942"></a>01942       <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;setAccount( parentFolder-&gt;account() );
<a name="l01943"></a>01943     }
<a name="l01944"></a>01944     <span class="comment">// Groupware folder created, use the global setting for storage format</span>
<a name="l01945"></a>01945     <a class="code" href="classKMailICalIfaceImpl.html#fde3f4df8d069ddf67c46d94d024546a" title="Set the storage format of a given folder. Called when seeing the kolab annotation...">setStorageFormat</a>( folder, globalStorageFormat() );
<a name="l01946"></a>01946   } <span class="keywordflow">else</span> {
<a name="l01947"></a>01947     FolderInfo info = readFolderInfo( folder );
<a name="l01948"></a>01948     mFolderInfoMap.insert( folder, info );
<a name="l01949"></a>01949     <span class="comment">//kdDebug(5006) &lt;&lt; "Found existing folder type " &lt;&lt; itemType &lt;&lt; " : " &lt;&lt; folder-&gt;location()  &lt;&lt; endl;</span>
<a name="l01950"></a>01950   }
<a name="l01951"></a>01951 
<a name="l01952"></a>01952   <span class="keywordflow">if</span>( folder-&gt;<a class="code" href="classKMFolder.html#5d346b829aee4176f16077e2a72fd5f3" title="Check folder for permissions Returns zero if readable and writable.">canAccess</a>() != 0 ) {
<a name="l01953"></a>01953     KMessageBox::sorry(0, i18n(<span class="stringliteral">"You do not have read/write permission to your %1 folder."</span>)
<a name="l01954"></a>01954                        .arg( <a class="code" href="classKMailICalIfaceImpl.html#671e8bb072d196026859f1a849c13f08" title="Returns the localized name of a folder of given type.">folderName</a>( itemType ) ) );
<a name="l01955"></a>01955     <span class="keywordflow">return</span> 0;
<a name="l01956"></a>01956   }
<a name="l01957"></a>01957   folder-&gt;<a class="code" href="classKMFolder.html#4c7476219c137471fb93cb8c88061336">storage</a>()-&gt;<a class="code" href="classFolderStorage.html#289e0f5decbaaa8134472284db60d9f3" title="Set the type of contents held in this folder (mail, calendar, etc.).">setContentsType</a>( contentsType );
<a name="l01958"></a>01958   folder-&gt;<a class="code" href="classKMFolder.html#39dc68ff3092dc5ace99dc67da7074e3">setSystemFolder</a>( <span class="keyword">true</span> );
<a name="l01959"></a>01959   folder-&gt;<a class="code" href="classKMFolder.html#4c7476219c137471fb93cb8c88061336">storage</a>()-&gt;<a class="code" href="classFolderStorage.html#b9819495eefb7713348092932abce37a" title="Write the config file.">writeConfig</a>();
<a name="l01960"></a>01960   folder-&gt;<a class="code" href="classKMFolder.html#c12a4bb5f265447d87b3e0e9a9482cc6" title="Open folder for access.">open</a>(<span class="stringliteral">"ifacefolder"</span>);
<a name="l01961"></a>01961   connectFolder( folder );
<a name="l01962"></a>01962   <span class="keywordflow">return</span> folder;
<a name="l01963"></a>01963 }
<a name="l01964"></a>01964 
<a name="l01965"></a>01965 <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* KMailICalIfaceImpl::initScalixFolder( KMail::FolderContentsType contentsType )
<a name="l01966"></a>01966 {
<a name="l01967"></a>01967   <span class="comment">// Figure out what type of folder this is supposed to be</span>
<a name="l01968"></a>01968   KMFolderType type = mFolderType;
<a name="l01969"></a>01969   <span class="keywordflow">if</span>( type == KMFolderTypeUnknown ) type = KMFolderTypeMaildir;
<a name="l01970"></a>01970 
<a name="l01971"></a>01971   <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* folder = 0;
<a name="l01972"></a>01972 
<a name="l01973"></a>01973   <span class="comment">// Find all extra folders</span>
<a name="l01974"></a>01974   QStringList folderNames;
<a name="l01975"></a>01975   QValueList&lt;QGuardedPtr&lt;KMFolder&gt; &gt; folderList;
<a name="l01976"></a>01976   Q_ASSERT( kmkernel );
<a name="l01977"></a>01977   Q_ASSERT( kmkernel-&gt;dimapFolderMgr() );
<a name="l01978"></a>01978   kmkernel-&gt;dimapFolderMgr()-&gt;createFolderList(&amp;folderNames, &amp;folderList);
<a name="l01979"></a>01979   QValueList&lt;QGuardedPtr&lt;KMFolder&gt; &gt;::iterator it = folderList.begin();
<a name="l01980"></a>01980   <span class="keywordflow">for</span>(; it != folderList.end(); ++it)
<a name="l01981"></a>01981   {
<a name="l01982"></a>01982     <a class="code" href="classFolderStorage.html" title="The FolderStorage class is the bass class for the storage related aspects of a collection...">FolderStorage</a> *storage = (*it)-&gt;storage();
<a name="l01983"></a>01983 
<a name="l01984"></a>01984     <span class="keywordflow">if</span> ( (*it)-&gt;folderType() == KMFolderTypeCachedImap ) {
<a name="l01985"></a>01985       KMFolderCachedImap *imapFolder = <span class="keyword">static_cast&lt;</span>KMFolderCachedImap*<span class="keyword">&gt;</span>( storage );
<a name="l01986"></a>01986 
<a name="l01987"></a>01987       <span class="keyword">const</span> QString attributes = imapFolder-&gt;folderAttributes();
<a name="l01988"></a>01988       <span class="keywordflow">if</span> ( attributes.contains( <span class="stringliteral">"X-SpecialFolder"</span> ) ) {
<a name="l01989"></a>01989         <span class="keyword">const</span> <a class="code" href="classScalix_1_1FolderAttributeParser.html" title="This class takes a folder attribute string as argument and provides access to the...">Scalix::FolderAttributeParser</a> parser( attributes );
<a name="l01990"></a>01990         <span class="keywordflow">if</span> ( contentsType == Scalix::Utils::scalixIdToContentsType( parser.folderClass() ) ) {
<a name="l01991"></a>01991           folder = *it;
<a name="l01992"></a>01992           <span class="keywordflow">break</span>;
<a name="l01993"></a>01993         }
<a name="l01994"></a>01994       }
<a name="l01995"></a>01995     }
<a name="l01996"></a>01996   }
<a name="l01997"></a>01997 
<a name="l01998"></a>01998   <span class="keywordflow">if</span> ( !folder ) {
<a name="l01999"></a>01999     <span class="keywordflow">return</span> 0;
<a name="l02000"></a>02000   } <span class="keywordflow">else</span> {
<a name="l02001"></a>02001     FolderInfo info = readFolderInfo( folder );
<a name="l02002"></a>02002     mFolderInfoMap.insert( folder, info );
<a name="l02003"></a>02003     <span class="comment">//kdDebug(5006) &lt;&lt; "Found existing folder type " &lt;&lt; itemType &lt;&lt; " : " &lt;&lt; folder-&gt;location()  &lt;&lt; endl;</span>
<a name="l02004"></a>02004   }
<a name="l02005"></a>02005 
<a name="l02006"></a>02006   <span class="keywordflow">if</span>( folder-&gt;<a class="code" href="classKMFolder.html#5d346b829aee4176f16077e2a72fd5f3" title="Check folder for permissions Returns zero if readable and writable.">canAccess</a>() != 0 ) {
<a name="l02007"></a>02007     KMessageBox::sorry(0, i18n(<span class="stringliteral">"You do not have read/write permission to your folder."</span>) );
<a name="l02008"></a>02008     <span class="keywordflow">return</span> 0;
<a name="l02009"></a>02009   }
<a name="l02010"></a>02010   folder-&gt;<a class="code" href="classKMFolder.html#4c7476219c137471fb93cb8c88061336">storage</a>()-&gt;<a class="code" href="classFolderStorage.html#289e0f5decbaaa8134472284db60d9f3" title="Set the type of contents held in this folder (mail, calendar, etc.).">setContentsType</a>( contentsType );
<a name="l02011"></a>02011   folder-&gt;<a class="code" href="classKMFolder.html#39dc68ff3092dc5ace99dc67da7074e3">setSystemFolder</a>( <span class="keyword">true</span> );
<a name="l02012"></a>02012   folder-&gt;<a class="code" href="classKMFolder.html#4c7476219c137471fb93cb8c88061336">storage</a>()-&gt;<a class="code" href="classFolderStorage.html#b9819495eefb7713348092932abce37a" title="Write the config file.">writeConfig</a>();
<a name="l02013"></a>02013   folder-&gt;<a class="code" href="classKMFolder.html#c12a4bb5f265447d87b3e0e9a9482cc6" title="Open folder for access.">open</a>( <span class="stringliteral">"scalixfolder"</span> );
<a name="l02014"></a>02014   connectFolder( folder );
<a name="l02015"></a>02015   <span class="keywordflow">return</span> folder;
<a name="l02016"></a>02016 }
<a name="l02017"></a>02017 
<a name="l02018"></a>02018 <span class="keywordtype">void</span> KMailICalIfaceImpl::connectFolder( <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* folder )
<a name="l02019"></a>02019 {
<a name="l02020"></a>02020   <span class="comment">// avoid multiple connections</span>
<a name="l02021"></a>02021   disconnect( folder, SIGNAL( msgAdded( <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>*, Q_UINT32 ) ),
<a name="l02022"></a>02022               <span class="keyword">this</span>, SLOT( slotIncidenceAdded( <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>*, Q_UINT32 ) ) );
<a name="l02023"></a>02023   disconnect( folder, SIGNAL( msgRemoved( <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>*, Q_UINT32 ) ),
<a name="l02024"></a>02024               <span class="keyword">this</span>, SLOT( slotIncidenceDeleted( <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>*, Q_UINT32 ) ) );
<a name="l02025"></a>02025   disconnect( folder, SIGNAL( expunged( <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* ) ),
<a name="l02026"></a>02026               <span class="keyword">this</span>, SLOT( slotRefreshFolder( <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* ) ) );
<a name="l02027"></a>02027   disconnect( folder-&gt;<a class="code" href="classKMFolder.html#4c7476219c137471fb93cb8c88061336">storage</a>(), SIGNAL( readOnlyChanged( <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* ) ),
<a name="l02028"></a>02028               <span class="keyword">this</span>, SLOT( slotFolderPropertiesChanged( <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* ) ) );
<a name="l02029"></a>02029   disconnect( folder, SIGNAL( nameChanged() ),
<a name="l02030"></a>02030               <span class="keyword">this</span>, SLOT( slotFolderRenamed() ) );
<a name="l02031"></a>02031   disconnect( folder-&gt;<a class="code" href="classKMFolder.html#4c7476219c137471fb93cb8c88061336">storage</a>(), SIGNAL( locationChanged( <span class="keyword">const</span> QString&amp;, <span class="keyword">const</span> QString&amp;) ),
<a name="l02032"></a>02032               <span class="keyword">this</span>, SLOT( slotFolderLocationChanged( <span class="keyword">const</span> QString&amp;, <span class="keyword">const</span> QString&amp;) ) );
<a name="l02033"></a>02033 
<a name="l02034"></a>02034   <span class="comment">// Setup the signals to listen for changes</span>
<a name="l02035"></a>02035   connect( folder, SIGNAL( msgAdded( <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>*, Q_UINT32 ) ),
<a name="l02036"></a>02036            <span class="keyword">this</span>, SLOT( slotIncidenceAdded( <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>*, Q_UINT32 ) ) );
<a name="l02037"></a>02037   connect( folder, SIGNAL( msgRemoved( <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>*, Q_UINT32 ) ),
<a name="l02038"></a>02038            <span class="keyword">this</span>, SLOT( slotIncidenceDeleted( <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>*, Q_UINT32 ) ) );
<a name="l02039"></a>02039   connect( folder, SIGNAL( expunged( <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* ) ),
<a name="l02040"></a>02040            <span class="keyword">this</span>, SLOT( slotRefreshFolder( <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* ) ) );
<a name="l02041"></a>02041   connect( folder-&gt;<a class="code" href="classKMFolder.html#4c7476219c137471fb93cb8c88061336">storage</a>(), SIGNAL( readOnlyChanged( <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* ) ),
<a name="l02042"></a>02042            <span class="keyword">this</span>, SLOT( slotFolderPropertiesChanged( <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* ) ) );
<a name="l02043"></a>02043   connect( folder, SIGNAL( nameChanged() ),
<a name="l02044"></a>02044            <span class="keyword">this</span>, SLOT( slotFolderRenamed() ) );
<a name="l02045"></a>02045   connect( folder-&gt;<a class="code" href="classKMFolder.html#4c7476219c137471fb93cb8c88061336">storage</a>(), SIGNAL( locationChanged( <span class="keyword">const</span> QString&amp;, <span class="keyword">const</span> QString&amp;) ),
<a name="l02046"></a>02046            <span class="keyword">this</span>, SLOT( slotFolderLocationChanged( <span class="keyword">const</span> QString&amp;, <span class="keyword">const</span> QString&amp;) ) );
<a name="l02047"></a>02047 
<a name="l02048"></a>02048 }
<a name="l02049"></a>02049 
<a name="l02050"></a>02050 <span class="keyword">static</span> <span class="keywordtype">void</span> cleanupFolder( <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* folder, <a class="code" href="classKMailICalIfaceImpl.html" title="The implementation of the interface.">KMailICalIfaceImpl</a>* _this )
<a name="l02051"></a>02051 {
<a name="l02052"></a>02052   <span class="keywordflow">if</span>( folder ) {
<a name="l02053"></a>02053     folder-&gt;<a class="code" href="classKMFolder.html#39dc68ff3092dc5ace99dc67da7074e3">setSystemFolder</a>( <span class="keyword">false</span> );
<a name="l02054"></a>02054     folder-&gt;disconnect( _this );
<a name="l02055"></a>02055     folder-&gt;<a class="code" href="classKMFolder.html#8d167662bca3ad6315fa5ad67bb9e4dd" title="Close folder.">close</a>(<span class="stringliteral">"ifacefolder"</span>);
<a name="l02056"></a>02056   }
<a name="l02057"></a>02057 }
<a name="l02058"></a>02058 
<a name="l02059"></a><a class="code" href="classKMailICalIfaceImpl.html#d6bc094d610f49dd7413a4fccf01e385">02059</a> <span class="keywordtype">void</span> <a class="code" href="classKMailICalIfaceImpl.html#d6bc094d610f49dd7413a4fccf01e385" title="Disconnect all slots and close the dirs.">KMailICalIfaceImpl::cleanup</a>()
<a name="l02060"></a>02060 {
<a name="l02061"></a>02061   cleanupFolder( mContacts, <span class="keyword">this</span> );
<a name="l02062"></a>02062   cleanupFolder( mCalendar, <span class="keyword">this</span> );
<a name="l02063"></a>02063   cleanupFolder( mNotes, <span class="keyword">this</span> );
<a name="l02064"></a>02064   cleanupFolder( mTasks, <span class="keyword">this</span> );
<a name="l02065"></a>02065   cleanupFolder( mJournals, <span class="keyword">this</span> );
<a name="l02066"></a>02066 
<a name="l02067"></a>02067   mContacts = mCalendar = mNotes = mTasks = mJournals = 0;
<a name="l02068"></a>02068 }
<a name="l02069"></a>02069 
<a name="l02070"></a><a class="code" href="classKMailICalIfaceImpl.html#008df130aa278de038a41df8d84611e7">02070</a> QString <a class="code" href="classKMailICalIfaceImpl.html#008df130aa278de038a41df8d84611e7" title="Returns the name of the standard icon for a folder of given type or QString::null...">KMailICalIfaceImpl::folderPixmap</a>( KFolderTreeItem::Type type )<span class="keyword"> const</span>
<a name="l02071"></a>02071 <span class="keyword"></span>{
<a name="l02072"></a>02072   <span class="keywordflow">if</span>( !mUseResourceIMAP )
<a name="l02073"></a>02073     <span class="keywordflow">return</span> QString::null;
<a name="l02074"></a>02074 
<a name="l02075"></a>02075   <span class="keywordflow">if</span>( type == KFolderTreeItem::Contacts )
<a name="l02076"></a>02076     <span class="keywordflow">return</span> QString::fromLatin1( <span class="stringliteral">"kmgroupware_folder_contacts"</span> );
<a name="l02077"></a>02077   <span class="keywordflow">else</span> <span class="keywordflow">if</span>( type == KFolderTreeItem::Calendar )
<a name="l02078"></a>02078     <span class="keywordflow">return</span> QString::fromLatin1( <span class="stringliteral">"kmgroupware_folder_calendar"</span> );
<a name="l02079"></a>02079   <span class="keywordflow">else</span> <span class="keywordflow">if</span>( type == KFolderTreeItem::Notes )
<a name="l02080"></a>02080     <span class="keywordflow">return</span> QString::fromLatin1( <span class="stringliteral">"kmgroupware_folder_notes"</span> );
<a name="l02081"></a>02081   <span class="keywordflow">else</span> <span class="keywordflow">if</span>( type == KFolderTreeItem::Tasks )
<a name="l02082"></a>02082     <span class="keywordflow">return</span> QString::fromLatin1( <span class="stringliteral">"kmgroupware_folder_tasks"</span> );
<a name="l02083"></a>02083   <span class="keywordflow">else</span> <span class="keywordflow">if</span>( type == KFolderTreeItem::Journals )
<a name="l02084"></a>02084     <span class="keywordflow">return</span> QString::fromLatin1( <span class="stringliteral">"kmgroupware_folder_journals"</span> );
<a name="l02085"></a>02085 
<a name="l02086"></a>02086   <span class="keywordflow">return</span> QString::null;
<a name="l02087"></a>02087 }
<a name="l02088"></a>02088 
<a name="l02089"></a>02089 <span class="keyword">static</span> <span class="keywordtype">void</span> reloadFolderTree()
<a name="l02090"></a>02090 {
<a name="l02091"></a>02091   <span class="comment">// Make the folder tree show the icons or not</span>
<a name="l02092"></a>02092   kmkernel-&gt;folderMgr()-&gt;contentsChanged();
<a name="l02093"></a>02093 }
<a name="l02094"></a>02094 
<a name="l02095"></a>02095 <span class="comment">// This is a very light-weight and fast 'parser' to retrieve</span>
<a name="l02096"></a>02096 <span class="comment">// a data entry from a vCal taking continuation lines</span>
<a name="l02097"></a>02097 <span class="comment">// into account</span>
<a name="l02098"></a>02098 <span class="keyword">static</span> <span class="keywordtype">void</span> vPartMicroParser( <span class="keyword">const</span> QString&amp; str, QString&amp; s )
<a name="l02099"></a>02099 {
<a name="l02100"></a>02100   QString line;
<a name="l02101"></a>02101   uint len = str.length();
<a name="l02102"></a>02102 
<a name="l02103"></a>02103   <span class="keywordflow">for</span>( uint i=0; i&lt;len; ++i){
<a name="l02104"></a>02104     <span class="keywordflow">if</span>( str[i] == <span class="charliteral">'\r'</span> || str[i] == <span class="charliteral">'\n'</span> ){
<a name="l02105"></a>02105       <span class="keywordflow">if</span>( str[i] == <span class="charliteral">'\r'</span> )
<a name="l02106"></a>02106         ++i;
<a name="l02107"></a>02107       <span class="keywordflow">if</span>( i+1 &lt; len &amp;&amp; str[i+1] == <span class="charliteral">' '</span> ){
<a name="l02108"></a>02108         <span class="comment">// found a continuation line, skip it's leading blanc</span>
<a name="l02109"></a>02109         ++i;
<a name="l02110"></a>02110       }<span class="keywordflow">else</span>{
<a name="l02111"></a>02111         <span class="comment">// found a logical line end, process the line</span>
<a name="l02112"></a>02112         <span class="keywordflow">if</span>( line.startsWith( s ) ) {
<a name="l02113"></a>02113           s = line.mid( s.length() + 1 );
<a name="l02114"></a>02114           <span class="keywordflow">return</span>;
<a name="l02115"></a>02115         }
<a name="l02116"></a>02116         line = <span class="stringliteral">""</span>;
<a name="l02117"></a>02117       }
<a name="l02118"></a>02118     } <span class="keywordflow">else</span> {
<a name="l02119"></a>02119       line += str[i];
<a name="l02120"></a>02120     }
<a name="l02121"></a>02121   }
<a name="l02122"></a>02122 
<a name="l02123"></a>02123   <span class="comment">// Not found. Clear it</span>
<a name="l02124"></a>02124   s.truncate(0);
<a name="l02125"></a>02125 }
<a name="l02126"></a>02126 
<a name="l02127"></a>02127 <span class="comment">// Returns the first child folder having the given annotation</span>
<a name="l02128"></a>02128 <span class="keyword">static</span> <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* findFolderByAnnotation( <a class="code" href="classKMFolderDir.html" title="KMail list that manages the contents of one directory that may contain folders and/or...">KMFolderDir</a>* folderParentDir, <span class="keyword">const</span> QString&amp; annotation )
<a name="l02129"></a>02129 {
<a name="l02130"></a>02130     QPtrListIterator&lt;KMFolderNode&gt; it( *folderParentDir );
<a name="l02131"></a>02131     <span class="keywordflow">for</span> ( ; it.current(); ++it ) {
<a name="l02132"></a>02132       <span class="keywordflow">if</span> ( !it.current()-&gt;isDir() ) {
<a name="l02133"></a>02133         <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>( it.current() );
<a name="l02134"></a>02134         <span class="keywordflow">if</span> ( folder-&gt;<a class="code" href="classKMFolder.html#f95cbfeb07323847c6fe68d43c5a9276" title="Returns the type of this folder.">folderType</a>() == KMFolderTypeCachedImap ) {
<a name="l02135"></a>02135           QString folderAnnotation = <span class="keyword">static_cast&lt;</span>KMFolderCachedImap*<span class="keyword">&gt;</span>( folder-&gt;<a class="code" href="classKMFolder.html#4c7476219c137471fb93cb8c88061336">storage</a>() )-&gt;annotationFolderType();
<a name="l02136"></a>02136           <span class="comment">//kdDebug(5006) &lt;&lt; "findStandardResourceFolder: " &lt;&lt; folder-&gt;name() &lt;&lt; " has annotation " &lt;&lt; folderAnnotation &lt;&lt; endl;</span>
<a name="l02137"></a>02137           <span class="keywordflow">if</span> ( folderAnnotation == annotation )
<a name="l02138"></a>02138             <span class="keywordflow">return</span> folder;
<a name="l02139"></a>02139         }
<a name="l02140"></a>02140       }
<a name="l02141"></a>02141     }
<a name="l02142"></a>02142     <span class="keywordflow">return</span> 0;
<a name="l02143"></a>02143 }
<a name="l02144"></a>02144 
<a name="l02145"></a>02145 KMailICalIfaceImpl::StandardFolderSearchResult KMailICalIfaceImpl::findStandardResourceFolder( <a class="code" href="classKMFolderDir.html" title="KMail list that manages the contents of one directory that may contain folders and/or...">KMFolderDir</a>* folderParentDir, KMail::FolderContentsType contentsType )
<a name="l02146"></a>02146 {
<a name="l02147"></a>02147   <span class="keywordflow">if</span> ( GlobalSettings::self()-&gt;theIMAPResourceStorageFormat() == GlobalSettings::EnumTheIMAPResourceStorageFormat::XML )
<a name="l02148"></a>02148   {
<a name="l02149"></a>02149     <span class="comment">// Look for a folder with an annotation like "event.default"</span>
<a name="l02150"></a>02150     <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* folder = findFolderByAnnotation( folderParentDir, QString( s_folderContentsType[contentsType].annotation ) + <span class="stringliteral">".default"</span> );
<a name="l02151"></a>02151     <span class="keywordflow">if</span> ( folder )
<a name="l02152"></a>02152       <span class="keywordflow">return</span> StandardFolderSearchResult( folder, StandardFolderSearchResult::FoundAndStandard );
<a name="l02153"></a>02153 
<a name="l02154"></a>02154     <span class="comment">// Fallback: look for a folder with an annotation like "event"</span>
<a name="l02155"></a>02155     folder = findFolderByAnnotation( folderParentDir, QString( s_folderContentsType[contentsType].annotation ) );
<a name="l02156"></a>02156     <span class="keywordflow">if</span> ( folder )
<a name="l02157"></a>02157       <span class="keywordflow">return</span> StandardFolderSearchResult( folder, StandardFolderSearchResult::FoundByType );
<a name="l02158"></a>02158 
<a name="l02159"></a>02159     <span class="comment">// Fallback: look for the folder by name (we'll need to change its type)</span>
<a name="l02160"></a>02160     KMFolderNode* node = folderParentDir-&gt;<a class="code" href="classKMFolderDir.html#50e1a67d4410b3d83f9a0b5ee6fce110" title="Returns folder with given name or zero if it does not exist.">hasNamedFolder</a>( localizedDefaultFolderName( contentsType ) );
<a name="l02161"></a>02161     <span class="keywordflow">if</span> ( node &amp;&amp; !node-&gt;isDir() )
<a name="l02162"></a>02162       <span class="keywordflow">return</span> StandardFolderSearchResult( static_cast&lt;KMFolder *&gt;( node ), StandardFolderSearchResult::FoundByName );
<a name="l02163"></a>02163 
<a name="l02164"></a>02164     kdDebug(5006) &lt;&lt; <span class="stringliteral">"findStandardResourceFolder: found no resource folder for "</span> &lt;&lt; s_folderContentsType[contentsType].annotation &lt;&lt; endl;
<a name="l02165"></a>02165     <span class="keywordflow">return</span> StandardFolderSearchResult( 0, StandardFolderSearchResult::NotFound );
<a name="l02166"></a>02166   }
<a name="l02167"></a>02167   <span class="keywordflow">else</span> <span class="comment">// icalvcard: look up standard resource folders by name</span>
<a name="l02168"></a>02168   {
<a name="l02169"></a>02169     KFolderTreeItem::Type itemType = s_folderContentsType[contentsType].treeItemType;
<a name="l02170"></a>02170     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> folderLanguage = GlobalSettings::self()-&gt;theIMAPResourceFolderLanguage();
<a name="l02171"></a>02171     <span class="keywordflow">if</span>( folderLanguage &gt; 3 ) folderLanguage = 0;
<a name="l02172"></a>02172     KMFolderNode* node = folderParentDir-&gt;<a class="code" href="classKMFolderDir.html#50e1a67d4410b3d83f9a0b5ee6fce110" title="Returns folder with given name or zero if it does not exist.">hasNamedFolder</a>( <a class="code" href="classKMailICalIfaceImpl.html#671e8bb072d196026859f1a849c13f08" title="Returns the localized name of a folder of given type.">folderName</a>( itemType, folderLanguage ) );
<a name="l02173"></a>02173     <span class="keywordflow">if</span> ( !node || node-&gt;isDir() )
<a name="l02174"></a>02174       <span class="keywordflow">return</span> StandardFolderSearchResult( 0, StandardFolderSearchResult::NotFound );
<a name="l02175"></a>02175     <span class="keywordflow">return</span> StandardFolderSearchResult( static_cast&lt;KMFolder*&gt;( node ), StandardFolderSearchResult::FoundAndStandard );
<a name="l02176"></a>02176   }
<a name="l02177"></a>02177 }
<a name="l02178"></a>02178 
<a name="l02179"></a>02179 <span class="comment">/* We treat all folders as relevant wrt alarms for which we have Administer</span>
<a name="l02180"></a>02180 <span class="comment"> * rights or for which the "Incidences relevant for everyone" annotation has</span>
<a name="l02181"></a>02181 <span class="comment"> * been set. It can be reasonably assumed that those are "ours". All local folders</span>
<a name="l02182"></a>02182 <span class="comment"> * must be ours anyhow. */</span>
<a name="l02183"></a>02183 <span class="keywordtype">bool</span> KMailICalIfaceImpl::folderIsAlarmRelevant( <span class="keyword">const</span> <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a> *folder )
<a name="l02184"></a>02184 {
<a name="l02185"></a>02185   <span class="keywordtype">bool</span> administerRights = <span class="keyword">true</span>;
<a name="l02186"></a>02186   <span class="keywordtype">bool</span> relevantForOwner = <span class="keyword">true</span>;
<a name="l02187"></a>02187   <span class="keywordtype">bool</span> relevantForEveryone = <span class="keyword">false</span>;
<a name="l02188"></a>02188   <span class="keywordflow">if</span> ( folder-&gt;<a class="code" href="classKMFolder.html#f95cbfeb07323847c6fe68d43c5a9276" title="Returns the type of this folder.">folderType</a>() == KMFolderTypeImap ) {
<a name="l02189"></a>02189     <span class="keyword">const</span> KMFolderImap *imapFolder = <span class="keyword">static_cast&lt;</span><span class="keyword">const </span>KMFolderImap*<span class="keyword">&gt;</span>( folder-&gt;<a class="code" href="classKMFolder.html#4c7476219c137471fb93cb8c88061336">storage</a>() );
<a name="l02190"></a>02190     administerRights =
<a name="l02191"></a>02191       imapFolder-&gt;userRights() &lt;= 0 || imapFolder-&gt;userRights() &amp; KMail::ACLJobs::Administer;
<a name="l02192"></a>02192   }
<a name="l02193"></a>02193   <span class="keywordflow">if</span> ( folder-&gt;<a class="code" href="classKMFolder.html#f95cbfeb07323847c6fe68d43c5a9276" title="Returns the type of this folder.">folderType</a>() == KMFolderTypeCachedImap ) {
<a name="l02194"></a>02194     <span class="keyword">const</span> KMFolderCachedImap *dimapFolder = <span class="keyword">static_cast&lt;</span><span class="keyword">const </span>KMFolderCachedImap*<span class="keyword">&gt;</span>( folder-&gt;<a class="code" href="classKMFolder.html#4c7476219c137471fb93cb8c88061336">storage</a>() );
<a name="l02195"></a>02195     administerRights =
<a name="l02196"></a>02196       dimapFolder-&gt;userRights() &lt;= 0 || dimapFolder-&gt;userRights() &amp; KMail::ACLJobs::Administer;
<a name="l02197"></a>02197     relevantForOwner = !dimapFolder-&gt;alarmsBlocked() &amp;&amp; ( dimapFolder-&gt;incidencesFor () == KMFolderCachedImap::IncForAdmins );
<a name="l02198"></a>02198     relevantForEveryone = !dimapFolder-&gt;alarmsBlocked() &amp;&amp; ( dimapFolder-&gt;incidencesFor() == KMFolderCachedImap::IncForReaders );
<a name="l02199"></a>02199   }
<a name="l02200"></a>02200 <span class="preprocessor">#if 0</span>
<a name="l02201"></a>02201 <span class="preprocessor"></span>  kdDebug(5006) &lt;&lt; k_funcinfo &lt;&lt; endl;
<a name="l02202"></a>02202   kdDebug(5006) &lt;&lt; <span class="stringliteral">"Folder: "</span> &lt;&lt; folder-&gt;<a class="code" href="classKMFolder.html#34f0beec33715f5a7fa6e1dfa11f6aa0" title="Returns the label of the folder for visualization.">label</a>() &lt;&lt; <span class="stringliteral">" has administer rights: "</span> &lt;&lt; administerRights &lt;&lt; endl;
<a name="l02203"></a>02203   kdDebug(5006) &lt;&lt; <span class="stringliteral">"and is relevant for owner: "</span> &lt;&lt; relevantForOwner &lt;&lt;  endl;
<a name="l02204"></a>02204   kdDebug(5006) &lt;&lt; <span class="stringliteral">"and relevant for everyone: "</span>  &lt;&lt; relevantForEveryone &lt;&lt; endl;
<a name="l02205"></a>02205 <span class="preprocessor">#endif</span>
<a name="l02206"></a>02206 <span class="preprocessor"></span>  <span class="keywordflow">return</span> ( administerRights &amp;&amp; relevantForOwner ) || relevantForEveryone;
<a name="l02207"></a>02207 }
<a name="l02208"></a>02208 
<a name="l02209"></a>02209 <span class="keywordtype">void</span> KMailICalIfaceImpl::setResourceQuiet(<span class="keywordtype">bool</span> q)
<a name="l02210"></a>02210 {
<a name="l02211"></a>02211   mResourceQuiet = q;
<a name="l02212"></a>02212 }
<a name="l02213"></a>02213 
<a name="l02214"></a>02214 <span class="keywordtype">bool</span> KMailICalIfaceImpl::isResourceQuiet()<span class="keyword"> const</span>
<a name="l02215"></a>02215 <span class="keyword"></span>{
<a name="l02216"></a>02216   <span class="keywordflow">return</span> mResourceQuiet;
<a name="l02217"></a>02217 }
<a name="l02218"></a>02218 
<a name="l02219"></a>02219 
<a name="l02220"></a>02220 <span class="keywordtype">bool</span> KMailICalIfaceImpl::addSubresource( <span class="keyword">const</span> QString&amp; resource,
<a name="l02221"></a>02221                                          <span class="keyword">const</span> QString&amp; parent,
<a name="l02222"></a>02222                                          <span class="keyword">const</span> QString&amp; contentsType )
<a name="l02223"></a>02223 {
<a name="l02224"></a>02224   kdDebug(5006) &lt;&lt; <span class="stringliteral">"Adding subresource to parent: "</span> &lt;&lt; parent &lt;&lt; <span class="stringliteral">" with name: "</span> &lt;&lt; resource &lt;&lt; endl;
<a name="l02225"></a>02225   kdDebug(5006) &lt;&lt; <span class="stringliteral">"contents type: "</span> &lt;&lt; contentsType &lt;&lt; endl;
<a name="l02226"></a>02226   <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a> *folder = findResourceFolder( parent );
<a name="l02227"></a>02227   <a class="code" href="classKMFolderDir.html" title="KMail list that manages the contents of one directory that may contain folders and/or...">KMFolderDir</a> *parentFolderDir = !parent.isEmpty() &amp;&amp; folder ? folder-&gt;<a class="code" href="classKMFolder.html#9342ce04787044b210296c0fbe5e5bd8" title="Create a child folder directory and associates it with this folder.">createChildFolder</a>(): mFolderParentDir;
<a name="l02228"></a>02228   <span class="keywordflow">if</span> ( !parentFolderDir || parentFolderDir-&gt;<a class="code" href="classKMFolderDir.html#50e1a67d4410b3d83f9a0b5ee6fce110" title="Returns folder with given name or zero if it does not exist.">hasNamedFolder</a>( resource ) ) <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l02229"></a>02229 
<a name="l02230"></a>02230   KMFolderType type = mFolderType;
<a name="l02231"></a>02231   <span class="keywordflow">if</span>( type == KMFolderTypeUnknown ) type = KMFolderTypeMaildir;
<a name="l02232"></a>02232 
<a name="l02233"></a>02233   <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a>* newFolder = parentFolderDir-&gt;<a class="code" href="classKMFolderDir.html#1f6317f3f12591c7ae6f2e3dab087d3f" title="Create a mail folder in this directory with given name.">createFolder</a>( resource, <span class="keyword">false</span>, type );
<a name="l02234"></a>02234   <span class="keywordflow">if</span> ( !newFolder ) <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l02235"></a>02235   <span class="keywordflow">if</span>( mFolderType == KMFolderTypeImap )
<a name="l02236"></a>02236     <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;createFolder( resource );
<a name="l02237"></a>02237 
<a name="l02238"></a>02238   StorageFormat defaultFormat = GlobalSettings::self()-&gt;theIMAPResourceStorageFormat() == GlobalSettings::EnumTheIMAPResourceStorageFormat::XML ? StorageXML : StorageIcalVcard;
<a name="l02239"></a>02239   <a class="code" href="classKMailICalIfaceImpl.html#fde3f4df8d069ddf67c46d94d024546a" title="Set the storage format of a given folder. Called when seeing the kolab annotation...">setStorageFormat</a>( newFolder, folder ? storageFormat( folder ) : defaultFormat );
<a name="l02240"></a>02240   newFolder-&gt;<a class="code" href="classKMFolder.html#4c7476219c137471fb93cb8c88061336">storage</a>()-&gt;<a class="code" href="classFolderStorage.html#289e0f5decbaaa8134472284db60d9f3" title="Set the type of contents held in this folder (mail, calendar, etc.).">setContentsType</a>( folderContentsType( contentsType ) );
<a name="l02241"></a>02241   newFolder-&gt;<a class="code" href="classKMFolder.html#4c7476219c137471fb93cb8c88061336">storage</a>()-&gt;<a class="code" href="classFolderStorage.html#b9819495eefb7713348092932abce37a" title="Write the config file.">writeConfig</a>();
<a name="l02242"></a>02242   newFolder-&gt;<a class="code" href="classKMFolder.html#c12a4bb5f265447d87b3e0e9a9482cc6" title="Open folder for access.">open</a>( <span class="stringliteral">"ical_subresource"</span> );
<a name="l02243"></a>02243   connectFolder( newFolder );
<a name="l02244"></a>02244   reloadFolderTree();
<a name="l02245"></a>02245 
<a name="l02246"></a>02246   <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l02247"></a>02247 }
<a name="l02248"></a>02248 
<a name="l02249"></a>02249 <span class="keywordtype">bool</span> KMailICalIfaceImpl::removeSubresource( <span class="keyword">const</span> QString&amp; location )
<a name="l02250"></a>02250 {
<a name="l02251"></a>02251   kdDebug(5006) &lt;&lt; k_funcinfo &lt;&lt; endl;
<a name="l02252"></a>02252 
<a name="l02253"></a>02253   <a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a> *folder = findResourceFolder( location );
<a name="l02254"></a>02254 
<a name="l02255"></a>02255   <span class="comment">// We don't allow the default folders to be deleted, so check for</span>
<a name="l02256"></a>02256   <span class="comment">// those first. It would be nicer to produce a more meaningful error,</span>
<a name="l02257"></a>02257   <span class="comment">// or prevent deletion of the builtin folders from the gui already.</span>
<a name="l02258"></a>02258   <span class="keywordflow">if</span> ( !folder || isStandardResourceFolder( folder ) )
<a name="l02259"></a>02259       <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l02260"></a>02260 
<a name="l02261"></a>02261   <span class="comment">// the folder will be removed, which implies closed, so make sure</span>
<a name="l02262"></a>02262   <span class="comment">// nothing is using it anymore first</span>
<a name="l02263"></a>02263   subresourceDeleted( folderContentsType( folder-&gt;<a class="code" href="classKMFolder.html#4c7476219c137471fb93cb8c88061336">storage</a>()-&gt;<a class="code" href="classFolderStorage.html#2e2d90259cf68d278f95b89b8f9e5088">contentsType</a>() ), location );
<a name="l02264"></a>02264   mExtraFolders.remove( location );
<a name="l02265"></a>02265   folder-&gt;disconnect( <span class="keyword">this</span> );
<a name="l02266"></a>02266 
<a name="l02267"></a>02267   <span class="keywordflow">if</span> ( folder-&gt;<a class="code" href="classKMFolder.html#f95cbfeb07323847c6fe68d43c5a9276" title="Returns the type of this folder.">folderType</a>() == KMFolderTypeImap )
<a name="l02268"></a>02268     kmkernel-&gt;imapFolderMgr()-&gt;remove( folder );
<a name="l02269"></a>02269   <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( folder-&gt;<a class="code" href="classKMFolder.html#f95cbfeb07323847c6fe68d43c5a9276" title="Returns the type of this folder.">folderType</a>() == KMFolderTypeCachedImap ) {
<a name="l02270"></a>02270     <span class="comment">// Deleted by user -&gt; tell the account (see KMFolderCachedImap::listDirectory2)</span>
<a name="l02271"></a>02271     KMFolderCachedImap* storage = <span class="keyword">static_cast&lt;</span>KMFolderCachedImap*<span class="keyword">&gt;</span>( folder-&gt;<a class="code" href="classKMFolder.html#4c7476219c137471fb93cb8c88061336">storage</a>() );
<a name="l02272"></a>02272     KMAcctCachedImap* acct = storage-&gt;<a class="code" href="classFolderStorage.html#ff4a7c1dd017934161f8e054d1fb8b37">account</a>();
<a name="l02273"></a>02273     <span class="keywordflow">if</span> ( acct )
<a name="l02274"></a>02274       acct-&gt;addDeletedFolder( folder );
<a name="l02275"></a>02275     kmkernel-&gt;dimapFolderMgr()-&gt;remove( folder );
<a name="l02276"></a>02276   }
<a name="l02277"></a>02277   <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l02278"></a>02278 }
<a name="l02279"></a>02279 
<a name="l02280"></a>02280 <span class="keywordtype">void</span> KMailICalIfaceImpl::syncFolder(<a class="code" href="classKMFolder.html" title="Mail folder.">KMFolder</a> * folder)<span class="keyword"> const</span>
<a name="l02281"></a>02281 <span class="keyword"></span>{
<a name="l02282"></a>02282   <span class="keywordflow">if</span> ( kmkernel-&gt;isOffline() || !GlobalSettings::immediatlySyncDIMAPOnGroupwareChanges() )
<a name="l02283"></a>02283     <span class="keywordflow">return</span>;
<a name="l02284"></a>02284   KMFolderCachedImap *dimapFolder = <span class="keyword">dynamic_cast&lt;</span>KMFolderCachedImap*<span class="keyword">&gt;</span>( folder-&gt;<a class="code" href="classKMFolder.html#4c7476219c137471fb93cb8c88061336">storage</a>() );
<a name="l02285"></a>02285   <span class="keywordflow">if</span> ( !dimapFolder )
<a name="l02286"></a>02286     <span class="keywordflow">return</span>;
<a name="l02287"></a>02287   <span class="comment">// check if the folder exists already, otherwise sync its parent as well to create it</span>
<a name="l02288"></a>02288   <span class="keywordflow">if</span> ( dimapFolder-&gt;imapPath().isEmpty() ) {
<a name="l02289"></a>02289     <span class="keywordflow">if</span> ( folder-&gt;parent() &amp;&amp; folder-&gt;parent()-&gt;owner() )
<a name="l02290"></a>02290       syncFolder( folder-&gt;parent()-&gt;owner() );
<a name="l02291"></a>02291     <span class="keywordflow">else</span>
<a name="l02292"></a>02292       <span class="keywordflow">return</span>;
<a name="l02293"></a>02293   }
<a name="l02294"></a>02294   dimapFolder-&gt;account()-&gt;processNewMailSingleFolder( folder );
<a name="l02295"></a>02295 }
<a name="l02296"></a>02296 
<a name="l02297"></a>02297 <span class="preprocessor">#include "kmailicalifaceimpl.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>