00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00038 #ifndef KMAILICALIFACEIMPL_H
00039 #define KMAILICALIFACEIMPL_H
00040
00041 #include "kmailicalIface.h"
00042 #include "kmfoldertype.h"
00043 #include <kfoldertree.h>
00044
00045 #include <qdict.h>
00046 #include <qguardedptr.h>
00047 #include <qmap.h>
00048
00049 class KMFolder;
00050 class KMMessage;
00051 class KMFolderDir;
00052 class KMFolderTreeItem;
00053
00054 namespace {
00055
00056
00057 class ExtraFolder {
00058 public:
00059 ExtraFolder( KMFolder* f ) : folder( f ) {}
00060 QGuardedPtr<KMFolder> folder;
00061 };
00062
00063 class Accumulator {
00064 public:
00065 Accumulator( const QString& t, const QString& f, int c )
00066 :type( t ), folder( f ), count( c ) {}
00067
00068 void add( const QString& incidence ) {
00069 incidences << incidence;
00070 count--;
00071 }
00072 bool isFull() { return count == 0; }
00073
00074 const QString type;
00075 const QString folder;
00076 QStringList incidences;
00077 int count;
00078 };
00079
00080 }
00081
00083 class KMailICalIfaceImpl : public QObject, virtual public KMailICalIface {
00084 Q_OBJECT
00085 public:
00086 KMailICalIfaceImpl();
00087
00088 bool isWritableFolder( const QString& type, const QString& resource );
00089
00090 StorageFormat storageFormat( const QString &resource );
00091
00097 Q_UINT32 update( const QString& resource,
00098 Q_UINT32 sernum,
00099 const QString& subject,
00100 const QString& plainTextBody,
00101 const QMap<QCString, QString>& customHeaders,
00102 const QStringList& attachmentURLs,
00103 const QStringList& attachmentMimetypes,
00104 const QStringList& attachmentNames,
00105 const QStringList& deletedAttachments );
00106
00107 bool deleteIncidenceKolab( const QString& resource,
00108 Q_UINT32 sernum );
00109 int incidencesKolabCount( const QString& mimetype,
00110 const QString& resource );
00111 QMap<Q_UINT32, QString> incidencesKolab( const QString& mimetype,
00112 const QString& resource,
00113 int startIndex,
00114 int nbMessages );
00115
00116 QValueList<SubResource> subresourcesKolab( const QString& contentsType );
00117
00118 bool triggerSync( const QString& contentsType );
00119
00120
00121
00122 KURL getAttachment( const QString& resource,
00123 Q_UINT32 sernum,
00124 const QString& filename );
00125
00126
00127
00128 void msgRemoved( KMFolder*, KMMessage* );
00129
00131 void initFolders();
00132
00134 void cleanup();
00135
00140 bool isResourceFolder( KMFolder* folder ) const;
00141
00142
00143
00144 bool isStandardResourceFolder( KMFolder* folder ) const;
00145
00150 bool hideResourceFolder( KMFolder* folder ) const;
00151
00156 KFolderTreeItem::Type folderType( KMFolder* folder ) const;
00157
00162 QString folderPixmap( KFolderTreeItem::Type type ) const;
00163
00166 QString folderName( KFolderTreeItem::Type type, int language = -1 ) const;
00167
00169 KMFolder* folderFromType( const QString& type, const QString& folder );
00170
00172 QString icalFolderType( KMFolder* folder ) const;
00173
00175 KMMessage* findMessageByUID( const QString& uid, KMFolder* folder );
00177 static KMMessage* findMessageBySerNum( Q_UINT32 serNum, KMFolder* folder );
00178
00180 void deleteMsg( KMMessage* msg );
00181
00182 bool isEnabled() const { return mUseResourceIMAP; }
00183
00185 void folderContentsTypeChanged( KMFolder*, KMail::FolderContentsType );
00186
00188 StorageFormat storageFormat( KMFolder* folder ) const;
00190 void setStorageFormat( KMFolder* folder, StorageFormat format );
00191
00192
00193 static const char* annotationForContentsType( KMail::FolderContentsType type );
00194
00195
00196 void folderSynced( KMFolder* folder, const KURL& folderURL );
00197
00198
00199 void folderDeletedOnServer( const KURL& folderURL );
00200 void addFolderChange( KMFolder* folder, FolderChanges changes );
00201
00202
00203 bool isResourceQuiet() const;
00204 void setResourceQuiet(bool q);
00205
00206 public slots:
00207
00208 void readConfig();
00209 void slotFolderRemoved( KMFolder* folder );
00210
00211 void slotIncidenceAdded( KMFolder* folder, Q_UINT32 sernum );
00212 void slotIncidenceDeleted( KMFolder* folder, Q_UINT32 sernum );
00213 void slotRefresh( const QString& type);
00214
00215
00216
00217 void slotFolderPropertiesChanged( KMFolder* folder );
00218
00219 private slots:
00220 void slotRefreshFolder( KMFolder* );
00221 void slotCheckDone();
00222 void slotFolderLocationChanged( const QString&, const QString& );
00223 void slotFolderRenamed();
00224 void slotMessageRetrieved( KMMessage* );
00225
00226 private:
00228 KMFolder* initFolder( KMail::FolderContentsType contentsType );
00229
00230 void connectFolder( KMFolder* folder );
00231
00232 KMFolder* extraFolder( const QString& type, const QString& folder );
00233
00234 struct StandardFolderSearchResult
00235 {
00236 enum FoundEnum { FoundAndStandard, NotFound, FoundByType, FoundByName };
00237 StandardFolderSearchResult() : folder( 0 ) {}
00238 StandardFolderSearchResult( KMFolder* f, FoundEnum e ) : folder( f ), found( e ) {}
00239 KMFolder* folder;
00240 FoundEnum found;
00241 };
00242
00243 StandardFolderSearchResult findStandardResourceFolder( KMFolderDir* folderParentDir, KMail::FolderContentsType contentsType );
00244 KMFolder* findResourceFolder( const QString& resource );
00245
00246
00247 bool updateAttachment( KMMessage& msg,
00248 const QString& attachmentURL,
00249 const QString& attachmentName,
00250 const QString& attachmentMimetype,
00251 bool lookupByName );
00252 bool deleteAttachment( KMMessage& msg,
00253 const QString& attachmentURL );
00254 Q_UINT32 addIncidenceKolab( KMFolder& folder,
00255 const QString& subject,
00256 const QString& plainTextBody,
00257 const QMap<QCString, QString>& customHeaders,
00258 const QStringList& attachmentURLs,
00259 const QStringList& attachmentNames,
00260 const QStringList& attachmentMimetypes );
00261 static bool kolabXMLFoundAndDecoded( const KMMessage& msg, const QString& mimetype, QString& s );
00262
00263 void handleFolderSynced( KMFolder* folder,
00264 const KURL& folderURL,
00265 int _changes );
00266 void triggerKolabFreeBusy( const KURL& folderURL );
00267
00268 StorageFormat globalStorageFormat() const;
00269
00270 private:
00271 QGuardedPtr<KMFolder> mContacts;
00272 QGuardedPtr<KMFolder> mCalendar;
00273 QGuardedPtr<KMFolder> mNotes;
00274 QGuardedPtr<KMFolder> mTasks;
00275 QGuardedPtr<KMFolder> mJournals;
00276
00277
00278
00279 QDict<ExtraFolder> mExtraFolders;
00280
00281 QDict<Accumulator> mAccumulators;
00282
00283
00284
00285 struct FolderInfo {
00286 FolderInfo() {}
00287 FolderInfo( StorageFormat f, FolderChanges c ) :
00288 mStorageFormat( f ), mChanges( c ) {}
00289 StorageFormat mStorageFormat;
00290 FolderChanges mChanges;
00291 };
00292
00293 typedef QMap<KMFolder*, FolderInfo> FolderInfoMap;
00294
00295 FolderInfo readFolderInfo( const KMFolder * const folder ) const;
00296
00297 FolderInfoMap mFolderInfoMap;
00298
00299 unsigned int mFolderLanguage;
00300
00301 KMFolderDir* mFolderParentDir;
00302 KMFolder* mFolderParent;
00303 KMFolderType mFolderType;
00304
00305 bool mUseResourceIMAP;
00306 bool mResourceQuiet;
00307 bool mHideFolders;
00308
00309
00310
00311
00312
00313
00314
00315 QMap<QString, Q_UINT32> mUIDToSerNum;
00316 QMap<Q_UINT32, bool> mTheUnGetMes;
00317 QMap<QString, QString> mPendingUpdates;
00318 QMap<QString, bool> mInTransit;
00319
00320 };
00321
00322 #endif // KMAILICALIFACEIMPL_H