kmail

kmfolderindex.h
1 /*
2  This file is part of KMail, the KDE mail client.
3  Copyright (c) 2000 Don Sanders <sanders@kde.org>
4 
5  KMail is free software; you can redistribute it and/or modify it
6  under the terms of the GNU General Public License, version 2, as
7  published by the Free Software Foundation.
8 
9  KMail is distributed in the hope that it will be useful, but
10  WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  General Public License for more details.
13 
14  You should have received a copy of the GNU General Public License
15  along with this program; if not, write to the Free Software
16  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 */
18 // Virtual base class for mail folder with .*.index style index
19 
20 #ifndef kmfolderindex_h
21 #define kmfolderindex_h
22 
23 #include "folderstorage.h"
24 #include "kmmsglist.h"
25 
38 {
39  Q_OBJECT
40 
41  //TODO:Have to get rid of this friend declaration and add necessary pure
42  //virtuals to kmfolder.h so that KMMsgBase::parent() can be a plain KMFolder
43  //rather than a KMFolderIndex. Need this for database indices.
44  friend class ::KMMsgBase;
45 public:
46 
50  enum IndexStatus { IndexOk,
51  IndexMissing,
52  IndexCorrupt,
53  IndexTooOld
54  };
55 
59  KMFolderIndex(KMFolder* folder, const char* name=0);
60  virtual ~KMFolderIndex();
61  virtual int count(bool cache = false) const;
62 
63  virtual KMMsgBase* takeIndexEntry( int idx ) { return mMsgList.take( idx ); }
64  virtual KMMsgInfo* setIndexEntry( int idx, KMMessage *msg );
65  virtual void clearIndex(bool autoDelete=true, bool syncDict = false);
66  virtual void truncateIndex();
67 
68  virtual const KMMsgBase* getMsgBase(int idx) const { return mMsgList[idx]; }
69  virtual KMMsgBase* getMsgBase(int idx) { return mMsgList[idx]; }
70 
71  virtual int find(const KMMsgBase* msg) const { return mMsgList.find((KMMsgBase*)msg); }
72  int find( const KMMessage * msg ) const { return FolderStorage::find( msg ); }
73 
75  int serialIndexId() const { return mIndexId; }
76 
77  uchar *indexStreamBasePtr() { return mIndexStreamPtr; }
78 
79  bool indexSwapByteOrder() { return mIndexSwapByteOrder; }
80  int indexSizeOfLong() { return mIndexSizeOfLong; }
81 
82  virtual TQString indexLocation() const;
83  virtual int writeIndex( bool createEmptyIndex = false );
84 
85  void recreateIndex( bool readIndexAfterwards = true );
86  void silentlyRecreateIndex();
87 
94  virtual IndexStatus indexStatus() = 0;
95 
96 public slots:
98  virtual int updateIndex();
99 
100 protected:
101  bool readIndex();
102 
104  bool readIndexHeader(int *gv=0);
105 
109  virtual int createIndexFromContents() = 0;
110 
111  bool updateIndexStreamPtr(bool just_close=FALSE);
112 
117  virtual void fillMessageDict();
118 
123 
126 
127  uchar *mIndexStreamPtr;
128  int mIndexStreamPtrLength, mIndexId;
129  bool mIndexSwapByteOrder; // Index file was written with swapped byte order
130  int mIndexSizeOfLong; // Index file was written with longs of this size
131 
132 private:
133  void updateInvitationAndAddressFieldsFromContents();
134 
135 };
136 
137 #endif /*kmfolderindex_h*/
virtual TQString indexLocation() const
Returns full path to index file.
virtual int find(const KMMsgBase *msg) const
Returns the index of the given message or -1 if not found.
Definition: kmfolderindex.h:71
off_t mHeaderOffset
offset of header of index file
A FolderStorage with an index for faster access to often used message properties. ...
Definition: kmfolderindex.h:37
IndexStatus
This enum indicates the status of the index file.
Definition: kmfolderindex.h:50
virtual int updateIndex()
Incrementally update the index if possible else call writeIndex.
bool readIndexHeader(int *gv=0)
Read index header.
FILE * mIndexStream
table of contents file
bool readIndex()
Read index file and fill the message-info list mMsgList.
virtual int writeIndex(bool createEmptyIndex=false)
Write index to index-file.
virtual const KMMsgBase * getMsgBase(int idx) const
Provides access to the basic message fields that are also stored in the index.
Definition: kmfolderindex.h:68
Mail folder.
Definition: kmfolder.h:68
KMMsgBase * take(unsigned int idx)
Returns message at given index and removes it from the list.
Definition: kmmsglist.cpp:161
KMMsgList mMsgList
list of index entries or messages
int serialIndexId() const
Registered unique serial number for the index file.
Definition: kmfolderindex.h:75
KMFolderIndex(KMFolder *folder, const char *name=0)
Usually a parent is given.
An abstraction of an array of pointers to messages.
Definition: kmmsglist.h:37
The FolderStorage class is the bass class for the storage related aspects of a collection of mail (a ...
Definition: folderstorage.h:79
virtual void fillMessageDict()
Inserts messages into the message dictionary by iterating over the message list.
virtual int createIndexFromContents()=0
Create index file from messages file and fill the message-info list mMsgList.
This is a Mime Message.
Definition: kmmessage.h:67
virtual int find(const KMMsgBase *msg) const =0
Returns the index of the given message or -1 if not found.
virtual IndexStatus indexStatus()=0
Tests whether the contents of this folder is newer than the index.
virtual int count(bool cache=false) const
Number of messages in this folder.