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
00034 #ifndef KMAILICALIFACEIMPL_H
00035 #define KMAILICALIFACEIMPL_H
00036
00037 #include "kmailicalIface.h"
00038 #include "kmfoldertype.h"
00039 #include <kfoldertree.h>
00040
00041 #include <qdict.h>
00042 #include <qguardedptr.h>
00043
00044 class QTextCodec;
00045 class KMFolder;
00046 class KMMessage;
00047 class KMFolderDir;
00048 class KMFolderTreeItem;
00049
00050 namespace {
00051
00052
00053 class ExtraFolder {
00054 public:
00055 ExtraFolder( KMFolder* f ) : folder( f ) {}
00056 QGuardedPtr<KMFolder> folder;
00057 };
00058
00059 }
00060
00061 class KMailICalIfaceImpl : public QObject, virtual public KMailICalIface {
00062 Q_OBJECT
00063 public:
00064 KMailICalIfaceImpl();
00065
00066 bool addIncidence( const QString& type, const QString& folder,
00067 const QString& uid, const QString& ical );
00068 bool deleteIncidence( const QString& type, const QString& folder,
00069 const QString& uid );
00070 QStringList incidences( const QString& type, const QString& folder );
00071
00072 QStringList subresources( const QString& type );
00073
00074 bool isWritableFolder( const QString& type, const QString& resource );
00075
00076
00077
00078 bool update( const QString& type, const QString& folder,
00079 const QStringList& entries );
00080
00081
00082 bool update( const QString& type, const QString& folder,
00083 const QString& uid, const QString& entry );
00084
00090 Q_UINT32 update( const QString& resource,
00091 Q_UINT32 sernum,
00092 const QString& subject,
00093 const QString& plainTextBody,
00094 const QMap<QCString, QString>& customHeaders,
00095 const QStringList& attachmentURLs,
00096 const QStringList& attachmentMimetypes,
00097 const QStringList& attachmentNames,
00098 const QStringList& deletedAttachments );
00099
00100 bool deleteIncidenceKolab( const QString& resource,
00101 Q_UINT32 sernum );
00102 int incidencesKolabCount( const QString& mimetype,
00103 const QString& resource );
00104 QMap<Q_UINT32, QString> incidencesKolab( const QString& mimetype,
00105 const QString& resource,
00106 int startIndex,
00107 int nbMessages );
00108
00109 QValueList<SubResource> subresourcesKolab( const QString& contentsType );
00110
00111
00112
00113 KURL getAttachment( const QString& resource,
00114 Q_UINT32 sernum,
00115 const QString& filename );
00116
00117 bool removeSubresource( const QString& );
00118
00119 bool addSubresource( const QString& resource,
00120 const QString& parent,
00121 const QString& contentsType );
00122
00123
00124 void msgRemoved( KMFolder*, KMMessage* );
00125
00127 void initFolders();
00128
00130 void cleanup();
00131
00136 bool isResourceFolder( KMFolder* folder ) const;
00137
00142 bool isStandardResourceFolder( KMFolder* folder ) const;
00143
00148 bool hideResourceImapFolder( KMFolder* folder ) const;
00149
00155 bool hideResourceAccountRoot( KMFolder* folder ) const;
00156
00161 KFolderTreeItem::Type folderType( KMFolder* folder ) const;
00162
00167 QString folderPixmap( KFolderTreeItem::Type type ) const;
00168
00171 QString folderName( KFolderTreeItem::Type type, int language = -1 ) const;
00172
00174 KMFolder* folderFromType( const QString& type, const QString& folder );
00175
00177 static KMMessage* findMessageByUID( const QString& uid, KMFolder* folder );
00178
00180 static KMMessage* findMessageBySerNum( Q_UINT32 serNum, KMFolder* folder );
00181
00183 void deleteMsg( KMMessage* msg );
00184
00185 bool isEnabled() const { return mUseResourceIMAP; }
00186
00188 void folderContentsTypeChanged( KMFolder*, KMail::FolderContentsType );
00189
00191 StorageFormat storageFormat( KMFolder* folder ) const;
00193 void setStorageFormat( KMFolder* folder, StorageFormat format );
00194
00195 static const char* annotationForContentsType( KMail::FolderContentsType type );
00196
00197
00198 void folderSynced( KMFolder* folder, const KURL& folderURL );
00199
00200
00201 void folderDeletedOnServer( const KURL& folderURL );
00202 void addFolderChange( KMFolder* folder, FolderChanges changes );
00203
00204
00205 bool isResourceQuiet() const;
00206 void setResourceQuiet(bool q);
00207
00208 public slots:
00209
00210 void readConfig();
00211 void slotFolderRemoved( KMFolder* folder );
00212
00213 void slotIncidenceAdded( KMFolder* folder, Q_UINT32 sernum );
00214 void slotIncidenceDeleted( KMFolder* folder, Q_UINT32 sernum );
00215 void slotRefresh( const QString& type);
00216
00217
00218
00219 void slotFolderPropertiesChanged( KMFolder* folder );
00220
00221 private slots:
00222 void slotRefreshFolder( KMFolder* );
00223 void slotCheckDone();
00224 void slotFolderLocationChanged( const QString&, const QString& );
00225 void slotFolderRenamed();
00226
00227 private:
00229 KMFolder* initFolder( const char* typeString, KMail::FolderContentsType contentsType );
00230
00231 void connectFolder( KMFolder* folder );
00232
00233 KMFolder* extraFolder( const QString& type, const QString& folder );
00234
00235 struct StandardFolderSearchResult
00236 {
00237 enum FoundEnum { FoundAndStandard, NotFound, FoundByType, FoundByName };
00238 StandardFolderSearchResult() : folder( 0 ) {}
00239 StandardFolderSearchResult( KMFolder* f, FoundEnum e ) : folder( f ), found( e ) {}
00240 KMFolder* folder;
00241 FoundEnum found;
00242 };
00243
00244 StandardFolderSearchResult findStandardResourceFolder( KMFolderDir* folderParentDir, KMail::FolderContentsType contentsType );
00245 KMFolder* findResourceFolder( const QString& resource );
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 static bool folderIsAlarmRelevant( const KMFolder * );
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
00282
00283
00284 struct FolderInfo {
00285 FolderInfo() {}
00286 FolderInfo( StorageFormat f, FolderChanges c ) :
00287 mStorageFormat( f ), mChanges( c ) {}
00288 StorageFormat mStorageFormat;
00289 FolderChanges mChanges;
00290 };
00291
00292 typedef QMap<KMFolder*, FolderInfo> FolderInfoMap;
00293 FolderInfoMap mFolderInfoMap;
00294
00295 unsigned int mFolderLanguage;
00296
00297 KMFolderDir* mFolderParentDir;
00298 KMFolderType mFolderType;
00299
00300 bool mUseResourceIMAP;
00301 bool mResourceQuiet;
00302 bool mHideFolders;
00303 const QTextCodec* mUTF8Codec;
00304 };
00305
00306 #endif // KMAILICALIFACEIMPL_H