00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef kmfolderindex_h
00021 #define kmfolderindex_h
00022
00023 #include "folderstorage.h"
00024 #include "kmmsglist.h"
00025
00037 class KMFolderIndex: public FolderStorage
00038 {
00039 Q_OBJECT
00040
00041
00042
00043
00044 friend class ::KMMsgBase;
00045 public:
00046
00050 enum IndexStatus { IndexOk,
00051 IndexMissing,
00052 IndexCorrupt,
00053 IndexTooOld
00054 };
00055
00059 KMFolderIndex(KMFolder* folder, const char* name=0);
00060 virtual ~KMFolderIndex();
00061 virtual int count(bool cache = false) const;
00062
00063 virtual KMMsgBase* takeIndexEntry( int idx ) { return mMsgList.take( idx ); }
00064 virtual KMMsgInfo* setIndexEntry( int idx, KMMessage *msg );
00065 virtual void clearIndex(bool autoDelete=true, bool syncDict = false);
00066 virtual void truncateIndex();
00067
00068 virtual const KMMsgBase* getMsgBase(int idx) const { return mMsgList[idx]; }
00069 virtual KMMsgBase* getMsgBase(int idx) { return mMsgList[idx]; }
00070
00071 virtual int find(const KMMsgBase* msg) const { return mMsgList.find((KMMsgBase*)msg); }
00072 int find( const KMMessage * msg ) const { return FolderStorage::find( msg ); }
00073
00075 int serialIndexId() const { return mIndexId; }
00076
00077 uchar *indexStreamBasePtr() { return mIndexStreamPtr; }
00078
00079 bool indexSwapByteOrder() { return mIndexSwapByteOrder; }
00080 int indexSizeOfLong() { return mIndexSizeOfLong; }
00081
00082 virtual TQString indexLocation() const;
00083 virtual int writeIndex( bool createEmptyIndex = false );
00084
00085 void recreateIndex( bool readIndexAfterwards = true );
00086 void silentlyRecreateIndex();
00087
00094 virtual IndexStatus indexStatus() = 0;
00095
00096 public slots:
00098 virtual int updateIndex();
00099
00100 protected:
00101 bool readIndex();
00102
00104 bool readIndexHeader(int *gv=0);
00105
00109 virtual int createIndexFromContents() = 0;
00110
00111 bool updateIndexStreamPtr(bool just_close=FALSE);
00112
00117 virtual void fillMessageDict();
00118
00120 FILE* mIndexStream;
00122 KMMsgList mMsgList;
00123
00125 off_t mHeaderOffset;
00126
00127 uchar *mIndexStreamPtr;
00128 int mIndexStreamPtrLength, mIndexId;
00129 bool mIndexSwapByteOrder;
00130 int mIndexSizeOfLong;
00131
00132 private:
00133 void updateInvitationAndAddressFieldsFromContents();
00134
00135 };
00136
00137 #endif