epoc32/include/mw/msvstd.h
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
parent 3 e1b950c65cb4
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
williamr@2
     1
// Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
williamr@2
     2
// All rights reserved.
williamr@2
     3
// This component and the accompanying materials are made available
williamr@4
     4
// under the terms of "Eclipse Public License v1.0"
williamr@2
     5
// which accompanies this distribution, and is available
williamr@4
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
williamr@2
     7
//
williamr@2
     8
// Initial Contributors:
williamr@2
     9
// Nokia Corporation - initial contribution.
williamr@2
    10
//
williamr@2
    11
// Contributors:
williamr@2
    12
//
williamr@2
    13
// Description:
williamr@4
    14
// MSVSTD.H
williamr@2
    15
//
williamr@4
    16
/**
williamr@4
    17
 * @file 
williamr@4
    18
 * @publishedAll
williamr@4
    19
 * @released
williamr@4
    20
 */
williamr@2
    21
#ifndef __MSVSTD_H__
williamr@2
    22
#define __MSVSTD_H__
williamr@2
    23
williamr@2
    24
#include <e32base.h>
williamr@2
    25
#include <s32file.h>
williamr@4
    26
#include <msvstd.hrh>
williamr@2
    27
williamr@2
    28
/**
williamr@2
    29
Specifies an entry in the Message Server index.
williamr@2
    30
@publishedAll
williamr@2
    31
@released
williamr@2
    32
@see #KMsvNullIndexEntryId
williamr@2
    33
@see #KMsvTempIndexEntryId
williamr@2
    34
@see #KMsvRootIndexEntryId
williamr@2
    35
@see #KMsvLocalServiceIndexEntryId
williamr@2
    36
@see #KMsvGlobalInBoxIndexEntryId
williamr@2
    37
@see #KMsvGlobalOutBoxIndexEntryId
williamr@2
    38
@see #KMsvDraftEntryId
williamr@2
    39
@see #KMsvSentEntryId
williamr@2
    40
@see #KMsvDeletedEntryFolderEntryId
williamr@2
    41
@see #KMsvUnknownServiceIndexEntryId
williamr@2
    42
*/
williamr@2
    43
typedef TInt32 TMsvId;
williamr@2
    44
williamr@2
    45
/** Identifies an asynchronous messaging operation. 
williamr@2
    46
williamr@2
    47
This ID is unique within a 
williamr@2
    48
Message Server session. The ID of an operation can be obtained from CMsvOperation::Id(). */
williamr@2
    49
typedef TInt32 TMsvOp;
williamr@2
    50
williamr@2
    51
/** Supplies the standard values for the message priority index entry field. 
williamr@2
    52
@publishedAll
williamr@2
    53
@released
williamr@2
    54
*/
williamr@2
    55
enum TMsvPriority {	
williamr@2
    56
	/** High message priority */
williamr@2
    57
					EMsvHighPriority,
williamr@2
    58
	/** Medium message priority */
williamr@2
    59
					EMsvMediumPriority,
williamr@2
    60
	/** Low message priority */
williamr@2
    61
					EMsvLowPriority};	
williamr@2
    62
williamr@2
    63
class CRichText;
williamr@2
    64
class CMsvStore;
williamr@2
    65
class CMsvEntry;
williamr@2
    66
class CMsvMove;
williamr@2
    67
class CMsvServer;
williamr@2
    68
class CMsvServerEntry;
williamr@2
    69
williamr@2
    70
_LIT(KMsvDefaultFolder, "\\Private\\1000484b\\Mail\\");
williamr@2
    71
_LIT(KMsvDefaultIndexFile, "\\Private\\1000484b\\Mail\\Index");
williamr@2
    72
_LIT(KMsvDefaultFolder2, "\\Private\\1000484b\\Mail2\\");
williamr@2
    73
_LIT(KMsvDefaultIndexFile2, "\\Private\\1000484b\\Mail2\\Index");
williamr@2
    74
_LIT(KMsvDirectoryExt, "_S\\");
williamr@2
    75
_LIT(KMsvBinaryFolderExt, "_F\\");
williamr@2
    76
williamr@2
    77
const TInt KFileNameFixedWidth=8;
williamr@2
    78
const TInt KMaxSubjectSkipStringLength=8; // For subject based email thread sorting
williamr@2
    79
_LIT(KSendAsRenderedImage, "Image");
williamr@2
    80
williamr@2
    81
// Server name and moving semaphore
williamr@2
    82
_LIT(KMsvServerName, "!MsvServer");
williamr@2
    83
_LIT(KMsvMovingSemaphore, "MsvMovingSemaphore");
williamr@2
    84
williamr@2
    85
_LIT_SECURE_ID(KMsvServerId, 0x1000484B);
williamr@2
    86
williamr@2
    87
williamr@2
    88
/** Represents an entry in the Message Server index.
williamr@2
    89
williamr@2
    90
MTM implementations and message client applications use it to access and manipulate 
williamr@2
    91
index entry values. Note that a TMsvEntry is effectively a local cache of 
williamr@2
    92
the index entry, and changes to it are not automatically written into the 
williamr@2
    93
index. To commit changes to the Message Server, you need to call CMsvEntry::ChangeL() 
williamr@2
    94
(or CMsvServerEntry::ChangeEntry()).
williamr@2
    95
williamr@2
    96
To avoid repetition, the functions and data members are simply listed here, 
williamr@2
    97
without detailed explanation of the fields. The public data members can be 
williamr@2
    98
used to get and set the values of some index entry fields. 
williamr@2
    99
@publishedAll
williamr@2
   100
@released
williamr@2
   101
*/
williamr@2
   102
class TMsvEntry
williamr@2
   103
	{
williamr@2
   104
public: 
williamr@2
   105
	IMPORT_C TMsvEntry(); 
williamr@2
   106
	IMPORT_C TMsvEntry(const TMsvEntry& aEntry);
williamr@2
   107
	IMPORT_C TMsvEntry& operator=(const TMsvEntry& aEntry);
williamr@2
   108
	IMPORT_C TBool operator==(const TMsvEntry& aEntry) const;
williamr@2
   109
	IMPORT_C TBool PermanentDataUnchanged(const TMsvEntry& aEntry) const;
williamr@2
   110
	//
williamr@2
   111
	IMPORT_C TMsvPriority Priority() const;
williamr@2
   112
	IMPORT_C void SetPriority(TMsvPriority aPriority);
williamr@2
   113
	// 
williamr@2
   114
	IMPORT_C void InternalizeL(RReadStream& aStream);
williamr@2
   115
	IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
williamr@2
   116
	// Read only for clients
williamr@2
   117
	inline TMsvId Id() const;
williamr@2
   118
	inline TMsvId Parent() const;
williamr@2
   119
	inline TBool Owner() const;
williamr@2
   120
	inline TBool Deleted() const;
williamr@2
   121
	// Read & write for clients
williamr@2
   122
	inline TBool Complete() const;
williamr@2
   123
	inline void SetComplete(TBool aComplete);
williamr@2
   124
	inline TBool New() const;
williamr@2
   125
	inline void SetNew(TBool aNew);
williamr@2
   126
	inline TBool Unread() const;
williamr@2
   127
	inline void SetUnread(TBool aUnread);
williamr@2
   128
	inline TBool Failed() const;
williamr@2
   129
	inline void SetFailed(TBool aFailed);
williamr@2
   130
	inline TBool Operation() const;
williamr@2
   131
	inline void SetOperation(TBool aOperation);
williamr@2
   132
	inline TBool Visible() const;
williamr@2
   133
	inline void SetVisible(TBool aVisble);
williamr@2
   134
	inline TBool MultipleRecipients() const;
williamr@2
   135
	inline void SetMultipleRecipients(TBool aMultipleRecipient);
williamr@2
   136
	inline TBool ReadOnly() const;
williamr@2
   137
	inline void SetReadOnly(TBool aReadOnly);
williamr@2
   138
	inline TBool StandardFolder() const;
williamr@2
   139
	inline void SetStandardFolder(TBool aStanardFolder);
williamr@2
   140
	inline TBool Attachment() const;
williamr@2
   141
	inline void SetAttachment(TBool aAttachmentFlag);
williamr@2
   142
	inline TBool Connected() const;
williamr@2
   143
	inline void SetConnected(TBool aConnected);
williamr@2
   144
	inline TBool InPreparation() const;
williamr@2
   145
	inline void SetInPreparation(TBool aInPreparation);
williamr@2
   146
	//
williamr@2
   147
	inline TInt PcSyncCount() const;
williamr@2
   148
	inline void DecPcSyncCount();
williamr@2
   149
	inline void IncPcSyncCount();
williamr@2
   150
	//
williamr@2
   151
	inline TBool OffPeak() const;
williamr@2
   152
	inline void SetOffPeak(TBool aOffPeak);
williamr@2
   153
	inline TBool Scheduled() const;
williamr@2
   154
	inline void SetScheduled(TBool aScheduled);
williamr@2
   155
	inline TUint SendingState() const;
williamr@2
   156
	inline void SetSendingState(TUint aSendingState);
williamr@2
   157
	inline TBool PendingDelete() const;
williamr@2
   158
	inline void SetPendingDelete(TBool aPendingDelete);
williamr@2
   159
	
williamr@2
   160
	/** This method sets bit 24 of iMtmData1, if you are using this bit elsewhere don't call this method.*/
williamr@2
   161
	inline void SetDeleteProtected(TBool aDeleteProtected);
williamr@2
   162
	inline TBool DeleteProtected() const;
williamr@2
   163
	/** This method sets bit 31 of iMtmData1, if you are using this bit elsewhere don't call this method.*/
williamr@2
   164
	inline void SetForwarded(TBool aForwarded);
williamr@2
   165
	inline TBool Forwarded() const;
williamr@2
   166
	/** This method sets bit 32 of iMtmData1, if you are using this bit elsewhere don't call this method.*/
williamr@2
   167
	inline void SetLocallyDeleted(TBool aLocallyDeleted);
williamr@2
   168
	inline TBool LocallyDeleted() const;
williamr@4
   169
	inline void SetVisibleFolderFlag(TBool aReadOnly);
williamr@4
   170
	inline TBool VisibleFolderFlag() const;
williamr@2
   171
	
williamr@2
   172
	IMPORT_C TBool PendingConditions() const;
williamr@2
   173
	IMPORT_C void SetPendingConditions(TBool aPendingConditions);
williamr@2
   174
	//
williamr@2
   175
	IMPORT_C TInt32 MtmData1() const;
williamr@2
   176
	IMPORT_C TInt32 MtmData2() const;
williamr@2
   177
	IMPORT_C TInt32 MtmData3() const;
williamr@4
   178
williamr@2
   179
	IMPORT_C void SetMtmData1(TInt32 aMtmData);
williamr@2
   180
	IMPORT_C void SetMtmData2(TInt32 aMtmData);
williamr@2
   181
	IMPORT_C void SetMtmData3(TInt32 aMtmData);
williamr@2
   182
	//
williamr@2
   183
protected:
williamr@2
   184
	// only the server will be able to set the following
williamr@2
   185
	inline void SetId(TMsvId aId);
williamr@2
   186
	inline void SetParent(TMsvId aId);
williamr@2
   187
	inline void SetOwner(TBool aAttachment);
williamr@2
   188
	inline void SetDeleted(TBool aDeletedFlag);
williamr@2
   189
	//
williamr@2
   190
	inline TUint PersistedFlags() const;
williamr@2
   191
	inline TUint TemporaryFlags() const;
williamr@2
   192
	//
williamr@2
   193
private:
williamr@2
   194
	void Copy(const TMsvEntry& aEntry);
williamr@2
   195
	//
williamr@2
   196
private:
williamr@2
   197
	TMsvId iId;
williamr@2
   198
	TMsvId iParentId;  
williamr@2
   199
	TInt32 iData;         
williamr@2
   200
	TInt32 iPcSyncCount;
williamr@2
   201
	TInt32 iReserved; // reserved for future proofing
williamr@2
   202
public: 
williamr@2
   203
	/** Service ID. */
williamr@2
   204
	TMsvId iServiceId; 
williamr@2
   205
	/** Related folder ID. */
williamr@2
   206
	TMsvId iRelatedId; 
williamr@2
   207
	/** Entry type */
williamr@2
   208
	TUid   iType;        
williamr@2
   209
	/** MTM */
williamr@2
   210
	TUid   iMtm;     
williamr@2
   211
	/** Time */
williamr@2
   212
	TTime  iDate;       
williamr@2
   213
	/** Size */
williamr@2
   214
	TInt32 iSize;      
williamr@2
   215
	/** Error */
williamr@2
   216
	TInt32 iError;
williamr@2
   217
	/** BIO message type */
williamr@2
   218
	TInt32 iBioType;
williamr@2
   219
	// following three can be used by MTM
williamr@2
   220
	/** MTM data 1: this can be used for any purpose by an MTM. This member must 
williamr@2
   221
	only be accessed through the predefined set and get functions. If you must 
williamr@2
   222
	write data to a bit that has no meaning in the predefined derived classes 
williamr@2
   223
	then you must derive your own class from TMsvEntry.
williamr@2
   224
	*/
williamr@2
   225
	TInt32 iMtmData1; 
williamr@2
   226
	/** MTM data 2: this can be used for any purpose by an MTM. This member must 
williamr@2
   227
	only be accessed through the predefined set and get functions. If you must 
williamr@2
   228
	write data to a bit that has no meaning in the predefined derived classes 
williamr@2
   229
	then you must derive your own class from TMsvEntry.
williamr@2
   230
	*/
williamr@2
   231
	TInt32 iMtmData2; 
williamr@2
   232
	/** MTM data 3: this can be used for any purpose by an MTM. This member must 
williamr@2
   233
	only be accessed through the predefined set and get functions. If you must 
williamr@2
   234
	write data to a bit that has no meaning in the predefined derived classes 
williamr@2
   235
	then you must derive your own class from TMsvEntry.
williamr@2
   236
	*/
williamr@2
   237
	TInt32 iMtmData3; 
williamr@2
   238
public:
williamr@2
   239
	// The TPtrC must be kept at end of class to simplify comparisons and initialisation
williamr@2
   240
	/** Description */
williamr@2
   241
	TPtrC iDescription;
williamr@2
   242
	/** Details */
williamr@2
   243
	TPtrC iDetails;    
williamr@2
   244
	//
williamr@2
   245
	//
williamr@2
   246
private:
williamr@2
   247
	//
williamr@4
   248
	
williamr@4
   249
williamr@2
   250
friend class CMsvEntry;
williamr@2
   251
friend class CMsvServer;
williamr@2
   252
friend class CMsvServerEntry;
williamr@2
   253
friend class CMsvClientEntry;
williamr@2
   254
friend class CMsvServerSession;
williamr@2
   255
friend class TMsvServerEntry; 
williamr@2
   256
friend class CMsvServerIndex;
williamr@2
   257
friend class RMsvServerSession;
williamr@2
   258
friend class CMsvLocalCopyOperation;
williamr@2
   259
friend class CMsvMove;
williamr@2
   260
friend class CMsvIndexRebuild;
williamr@2
   261
friend class CMsvCopyEntry;
williamr@2
   262
friend class CMsvDelete;
williamr@2
   263
friend class CMsvIndexContext;
williamr@2
   264
friend class CMsvEntryArray;
williamr@4
   265
friend class CMsvIndexAdapter;
williamr@4
   266
friend class CMsvDBAdapter;
williamr@4
   267
friend class TSearchSortDbWrapper;
williamr@4
   268
williamr@4
   269
#if (defined SYMBIAN_MESSAGESTORE_UNIT_TESTCODE)
williamr@4
   270
friend class CTestIndexAdapter;
williamr@4
   271
friend class CTestDbAdapter;
williamr@4
   272
friend class CTestVisibleFolder;
williamr@4
   273
friend class CTestIndexTableEntry;
williamr@4
   274
friend class CTestEntryFreePool;
williamr@4
   275
friend class CTestIndexContext;
williamr@4
   276
friend class CTestMsvServer;
williamr@4
   277
friend class CTestMsvEntry;
williamr@4
   278
friend class CTestSearchSortCacheEntry;
williamr@4
   279
friend class CTestSearchSortCacheManager;
williamr@4
   280
friend class CTestSearchSortDeltaCache;
williamr@4
   281
friend class CTestSearchSortOperation;
williamr@4
   282
friend class CTestSearchSortDBadapter;
williamr@4
   283
friend class CTestSearchSortCacheManager;
williamr@4
   284
friend class CTestSearchSortDeltaCache;
williamr@4
   285
friend class CTestHeaderSearchSortOperation;
williamr@4
   286
friend class CTestHeaderEntry;
williamr@4
   287
#endif
williamr@4
   288
williamr@4
   289
#if (defined SYMBIAN_MESSAGESTORE_HEADER_BODY_USING_SQLDB)
williamr@4
   290
	friend class CMsvVersion0Version1Converter;
williamr@4
   291
#if (defined SYMBIAN_MESSAGESTORE_UNIT_TESTCODE)
williamr@4
   292
	friend class CTestConverterDBAdapter;
williamr@4
   293
#endif
williamr@4
   294
#endif
williamr@2
   295
private:
williamr@2
   296
	//
williamr@2
   297
enum {	KMsvEntryPriorityMask=			0x00000003,
williamr@2
   298
		KMsvEntryHighPriority=			0x00000002,
williamr@2
   299
		KMsvEntryMediumPriority=		0x00000001,
williamr@2
   300
		KMsvEntryLowPriority=			0x00000000,
williamr@2
   301
		KMsvEntryClearFlag=				0x00000000,
williamr@2
   302
		KMsvOffPeakFlag=				0x00000004,
williamr@2
   303
		KMsvEntryNotCompleteFlag=		0x00000008,
williamr@2
   304
		KMsvEntryNewFlag=				0x00000010,
williamr@2
   305
		KMsvEntryUnreadFlag=			0x00000020,
williamr@2
   306
		KMsvEntryFailedFlag=			0x00000040,
williamr@2
   307
		KMsvEntryOperationFlag=			0x00000080,
williamr@2
   308
		KMsvEntryOwnerFlag=				0x00000100,
williamr@2
   309
		KMsvEntryInvisibleFlag=			0x00000200,
williamr@2
   310
		KMsvEntryMultipleRecipientFlag=	0x00000400,
williamr@2
   311
		KMsvScheduledFlag=				0x00000800,
williamr@2
   312
		KMsvEntryReadOnlyFlag=			0x00001000,
williamr@2
   313
		KMsvEntryDeletedFlag=			0x00002000,
williamr@2
   314
		KMsvEntryStandardFolderFlag=	0x00004000,
williamr@2
   315
		KMsvEntryAttachmentFlag=		0x00008000,
williamr@2
   316
		KMsvEntryInPreparationFlag=		0x00010000,
williamr@2
   317
		KMsvSendingStateFlags=			0x001E0000, // Note: Sending state is shifted KMsvSendingStateShift places left
williamr@2
   318
		KMsvEntryPersistedFlags=		0x00FFFFFF,
williamr@2
   319
		KMsvEntryPendingConditionsFlag=	0x00800000,		
williamr@2
   320
		KMsvEntryTemporaryFlags=		0xFF000000,
williamr@2
   321
		KMsvEntryConnectedFlag=			0x01000000,
williamr@4
   322
		KMsvEntryPendingDeleteFlag=		0x02000000,
williamr@4
   323
	    KMsvVisibleFolderNodeFlag=      0x04000000
williamr@4
   324
	   };
williamr@4
   325
	   
williamr@2
   326
	};
williamr@2
   327
enum 
williamr@2
   328
	{
williamr@2
   329
		KMsvEntryDeleteProtected=		0x800000,
williamr@2
   330
		KMsvEntryForwarded=				0x40000000,
williamr@2
   331
		KMsvEntryLocallyDeleted=		0x80000000
williamr@2
   332
	};
williamr@2
   333
williamr@2
   334
const TUint KMsvSendingStateShift=0x11; // Places to shift sending state
williamr@2
   335
williamr@4
   336
#if (defined SYMBIAN_MSGS_ENHANCED_REMOVABLE_MEDIA_SUPPORT)
williamr@4
   337
	const TInt KDriveMask = 0x0fffffff;
williamr@4
   338
	const TInt KCurrentDriveId = 1;
williamr@4
   339
#endif
williamr@4
   340
williamr@2
   341
/** Defines sending state flags. 
williamr@2
   342
@publishedAll
williamr@2
   343
@released
williamr@2
   344
*/
williamr@2
   345
enum TMsvSendState
williamr@2
   346
	{
williamr@2
   347
	/** State unknown. */
williamr@2
   348
	KMsvSendStateUnknown		= 0x0,
williamr@2
   349
	/** Message will be sent on request. */
williamr@2
   350
	KMsvSendStateUponRequest	= 0x1,
williamr@2
   351
	/** Waiting to be sent.
williamr@2
   352
	
williamr@2
   353
	Messages in the outbox with this state can be sent automatically by the relevant 
williamr@2
   354
	MTM once an appropriate connection is established. */
williamr@2
   355
	KMsvSendStateWaiting		= 0x2,
williamr@2
   356
	/** Sending in progress. */
williamr@2
   357
	KMsvSendStateSending		= 0x3,
williamr@2
   358
	/** Sending scheduled. */
williamr@2
   359
	KMsvSendStateScheduled		= 0x4,
williamr@2
   360
	/** Resending. */
williamr@2
   361
	KMsvSendStateResend			= 0x5,
williamr@2
   362
	/** Sending suspended. */
williamr@2
   363
	KMsvSendStateSuspended		= 0x6,
williamr@2
   364
	/** Sending failed. */
williamr@2
   365
	KMsvSendStateFailed			= 0x7,
williamr@2
   366
	/** Sending complete. */
williamr@2
   367
	KMsvSendStateSent			= 0x8,
williamr@2
   368
	/** Not applicable. */
williamr@2
   369
	KMsvSendStateNotApplicable	= 0x9
williamr@2
   370
	};
williamr@2
   371
williamr@2
   372
const TUint KMsvSendStateLast = KMsvSendStateNotApplicable;
williamr@2
   373
const TUint KMsvSendStateMax = 0x0F;
williamr@4
   374
// Message Database Version.
williamr@4
   375
#if (defined SYMBIAN_MESSAGESTORE_HEADER_BODY_USING_SQLDB)
williamr@4
   376
const TUint KCurrentDatabaseVersion = 2;
williamr@4
   377
#else
williamr@4
   378
const TUint KCurrentDatabaseVersion = 1;
williamr@4
   379
#endif
williamr@2
   380
williamr@2
   381
/** Supplies values for bitmasks that allows the rapid setting or clearing of a 
williamr@2
   382
number of TMsvEntry fields.
williamr@2
   383
williamr@2
   384
The fields that can be manipulated are:
williamr@2
   385
williamr@2
   386
1. PC synchronisation
williamr@2
   387
williamr@2
   388
2. Visibility flag
williamr@2
   389
williamr@2
   390
3. Read flag
williamr@2
   391
williamr@2
   392
4. In-preparation flag
williamr@2
   393
williamr@2
   394
5. Connected flag
williamr@2
   395
williamr@2
   396
6. Pending deletion flag.
williamr@2
   397
williamr@2
   398
7. New flag
williamr@2
   399
williamr@2
   400
@see TMsvEntry
williamr@2
   401
@see CMsvSession::ChangeAttributesL()
williamr@2
   402
@see CMsvServerEntry::ChangeAttributes() 
williamr@2
   403
@publishedAll
williamr@2
   404
@released
williamr@2
   405
*/
williamr@2
   406
enum TMsvAttribute    { 
williamr@2
   407
	/** PC synchronisation field. */
williamr@2
   408
						KMsvPcSyncCountAttribute	=0x00000001,
williamr@2
   409
	/** Visibility flag field. */
williamr@2
   410
						KMsvVisibilityAttribute		=0x00000200,
williamr@2
   411
	/** Read flag field. */
williamr@2
   412
						KMsvUnreadAttribute			=0x00000020,
williamr@2
   413
	/** In-preparation field. */
williamr@2
   414
						KMsvInPreparationAttribute	=0x00010000,
williamr@2
   415
	/** Connected flag field. */
williamr@2
   416
						KMsvConnectedAttribute		=0x01000000,
williamr@2
   417
	/** Pending deletion flag. */
williamr@2
   418
						KMsvPendingDeleteAttribute	=0x02000000,
williamr@2
   419
	/** New flag field. */
williamr@2
   420
						KMsvNewAttribute			=0x00000010};
williamr@2
   421
williamr@2
   422
/** Defines the sort order options for a TMsvSelectionOrdering object. Options 
williamr@2
   423
are set through TMsvSelectionOrdering::SetSorting().
williamr@2
   424
williamr@2
   425
@see TMsvSelectionOrdering 
williamr@2
   426
@publishedAll
williamr@2
   427
@released
williamr@2
   428
*/
williamr@2
   429
enum TMsvSorting 
williamr@2
   430
	{
williamr@2
   431
	/** Don't sort */
williamr@2
   432
	EMsvSortByNone=0,				// Don't sort
williamr@2
   433
	/** Date (earliest-latest) */
williamr@2
   434
	EMsvSortByDate,					// Date (earliest-latest)
williamr@2
   435
	/** Date (latest-earliest) */
williamr@2
   436
	EMsvSortByDateReverse,			// Date (latest-earliest)
williamr@2
   437
	/** Size (smallest-largest) */
williamr@2
   438
	EMsvSortBySize,					// Size (smallest-largest)
williamr@2
   439
	/** Size (largest-smallest) */
williamr@2
   440
	EMsvSortBySizeReverse,			// Size (largest-smallest)
williamr@2
   441
	/** To/From (A-Z folded) */
williamr@2
   442
	EMsvSortByDetails,				// ToFrom (A-Z collated)
williamr@2
   443
	/** To/From (Z-A folded) */
williamr@2
   444
	EMsvSortByDetailsReverse,		// ToFrom (Z-A collated)
williamr@2
   445
	/** Description (A-Z folded) */
williamr@2
   446
	EMsvSortByDescription,			// Description (A-Z collated)
williamr@2
   447
	/** Description (Z-A folded) */
williamr@2
   448
	EMsvSortByDescriptionReverse,	// Description (Z-A collated)
williamr@2
   449
	/** Sort by message ID. */
williamr@2
   450
	EMsvSortById,			        // Id (lowest-highest)
williamr@2
   451
	/** Sort in reverse order by message ID. */
williamr@2
   452
	EMsvSortByIdReverse	            // Id (highest-lowest)
williamr@2
   453
	};
williamr@2
   454
williamr@2
   455
/** Defines grouping order options for a TMsvEntrySelection object. Grouping options 
williamr@2
   456
can be combined in a bitmask and set through the TMsvEntrySelection constructor 
williamr@2
   457
@publishedAll
williamr@2
   458
@released
williamr@2
   459
*/
williamr@2
   460
enum TMsvGrouping
williamr@2
   461
	{
williamr@2
   462
	/** No grouping */
williamr@2
   463
	KMsvNoGrouping=0,				// No grouping
williamr@2
   464
	/** Group by entry type, in order, services, folders, messages, attachments */
williamr@2
   465
	KMsvGroupByType=0x2,			// Folder, Message, Attachment
williamr@2
   466
	/** Place standard folders first, in the order they were created */
williamr@2
   467
	KMsvGroupByStandardFolders=0x6,	// Standrad folders first (must have sorting by type set aswell)
williamr@2
   468
	/** Group by message priority, in order, high, medium, then low */
williamr@2
   469
	KMsvGroupByPriority=0x8,		// High, Mediem, Low
williamr@2
   470
	/** Group by MTM, either in the order set by CMsvEntry::SetMtmListL() or by MTM 
williamr@2
   471
	Uid value */
williamr@2
   472
	KMsvGroupByMtm=0x10,			// By increasing uid value
williamr@2
   473
	};
williamr@2
   474
williamr@2
   475
/** Defines the sorting and grouping rules used to prepare a selection of entries.
williamr@2
   476
 
williamr@2
   477
It is used in the interfaces of CMsvEntry and CMsvServerEntry to set the ordering 
williamr@2
   478
of an entry's children.
williamr@2
   479
williamr@2
   480
Firstly, the entries will be grouped, if the appropriate grouping option is 
williamr@2
   481
set, by:
williamr@2
   482
williamr@2
   483
1. Standard folders: any entries marked as standard folders are placed first, 
williamr@2
   484
in the order they were created.
williamr@2
   485
williamr@2
   486
2. Entry type: in the order services, folders, messages, attachments, unknown
williamr@2
   487
williamr@2
   488
3. Priority: in the order high, medium, then low
williamr@2
   489
williamr@2
   490
4. MTM: either in the MTM order set by CMsvEntry::SetMtmListL() or just in MTM 
williamr@2
   491
Uid value
williamr@2
   492
williamr@2
   493
Grouping options are simply Boolean flags that can be set on or off by functions 
williamr@2
   494
of this class.
williamr@2
   495
williamr@2
   496
Secondly, the order of entries within these groups is defined by a sorting 
williamr@2
   497
order option.
williamr@2
   498
williamr@2
   499
@see CMsvEntry
williamr@2
   500
@see CMsvServerEntry 
williamr@2
   501
@publishedAll
williamr@2
   502
@released
williamr@2
   503
*/
williamr@2
   504
class TMsvSelectionOrdering
williamr@2
   505
	{
williamr@2
   506
public:
williamr@2
   507
	IMPORT_C TMsvSelectionOrdering();
williamr@2
   508
	IMPORT_C TMsvSelectionOrdering(TInt aGroupingKey, TMsvSorting aSorting, TBool aShowInvisible=EFalse);
williamr@2
   509
	IMPORT_C void InternalizeL(RReadStream& aStream);
williamr@2
   510
	IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
williamr@2
   511
	IMPORT_C TBool operator==(const TMsvSelectionOrdering& aOrdering) const;
williamr@2
   512
	IMPORT_C void SetSubjectSkipString(const TDesC& aSubjectSkipString);
williamr@2
   513
	IMPORT_C const TDesC& SubjectSkipString() const;
williamr@2
   514
williamr@2
   515
	//
williamr@2
   516
	inline TMsvSorting Sorting() const;
williamr@2
   517
	inline TBool GroupByType() const;
williamr@2
   518
	inline TBool GroupStandardFolders() const;
williamr@2
   519
	inline TBool GroupByPriority() const;
williamr@2
   520
	inline TBool GroupByMtm() const;
williamr@2
   521
	inline TBool ShowInvisibleEntries() const;
williamr@2
   522
	inline TBool GroupingOn() const;
williamr@2
   523
	// 
williamr@2
   524
	inline void SetGroupByType(TBool aFlag);
williamr@2
   525
	inline void SetGroupStandardFolders(TBool aFlag);
williamr@2
   526
	inline void SetGroupByPriority(TBool aFlag);
williamr@2
   527
	inline void SetGroupByMtm(TBool aFlag);
williamr@2
   528
	inline void SetShowInvisibleEntries(TBool aFlag);
williamr@2
   529
	inline void SetSorting(TMsvSorting aSortType);
williamr@2
   530
williamr@2
   531
	//
williamr@2
   532
	//
williamr@2
   533
private:
williamr@2
   534
williamr@2
   535
	enum TMsvGroupingPrivate
williamr@2
   536
		{
williamr@2
   537
		KMsvInvisibleFlag=0x1,
williamr@2
   538
		KMsvStandardFolders=0x4,
williamr@2
   539
		KMsvAllGroupingFlags=0x1e
williamr@2
   540
		};
williamr@2
   541
	TInt iGrouping;
williamr@2
   542
	TMsvSorting iSortType;
williamr@2
   543
 	TBuf<KMaxSubjectSkipStringLength>	iSubjectSkipString;
williamr@2
   544
	};
williamr@2
   545
williamr@2
   546
const TInt KMsvInvisibleFlag=1;
williamr@2
   547
williamr@2
   548
/** Encapsulates an array of entry IDs. 
williamr@2
   549
williamr@2
   550
An object of this type is commonly passed to a function to indicate the set 
williamr@2
   551
of entries on which the function should operate. The array base class (CArrayFixFlat<TMsvId>) 
williamr@2
   552
provide methods to access, sort, and manipulate members of the array.
williamr@2
   553
 
williamr@2
   554
@publishedAll
williamr@2
   555
@released
williamr@2
   556
*/
williamr@2
   557
class CMsvEntrySelection : public CArrayFixFlat<TMsvId>
williamr@2
   558
	{ 
williamr@2
   559
public: 
williamr@2
   560
	IMPORT_C CMsvEntrySelection();
williamr@2
   561
	IMPORT_C CMsvEntrySelection* CopyL()  const;
williamr@2
   562
	IMPORT_C CMsvEntrySelection* CopyLC() const;
williamr@2
   563
	IMPORT_C TInt Find(TMsvId aId) const;
williamr@2
   564
	};
williamr@2
   565
williamr@2
   566
/** Specifies a default service for a MTM.
williamr@2
   567
williamr@2
   568
@publishedAll
williamr@2
   569
@released
williamr@2
   570
*/
williamr@2
   571
class TMsvDefaultService
williamr@2
   572
	{
williamr@2
   573
public:
williamr@2
   574
	/** MTM for which the default service is specified. */
williamr@2
   575
	TUid iMtm;
williamr@2
   576
	/** ID of the default service. */
williamr@2
   577
	TMsvId iService;
williamr@2
   578
	};
williamr@2
   579
williamr@2
   580
williamr@2
   581
williamr@2
   582
/** Used to query the Message Server for entries that match the specification defined 
williamr@2
   583
in the filter. 
williamr@2
   584
williamr@2
   585
It allows a query to be performed on service, MTM, type and last change date. 
williamr@2
   586
The filter also enables the specification of the order in which the entries 
williamr@2
   587
are returned. 
williamr@2
   588
williamr@2
   589
@see CMsvSession::GetChildIdsL() 
williamr@2
   590
@publishedAll
williamr@2
   591
@released
williamr@2
   592
*/
williamr@2
   593
class CMsvEntryFilter : public CBase
williamr@2
   594
	{
williamr@2
   595
public:
williamr@2
   596
	IMPORT_C static CMsvEntryFilter* NewLC();
williamr@2
   597
	IMPORT_C static CMsvEntryFilter* NewL();
williamr@2
   598
	//
williamr@2
   599
public:
williamr@2
   600
	inline TMsvId Service() const;
williamr@2
   601
	inline void SetService(TMsvId aServiceId);
williamr@2
   602
	//
williamr@2
   603
	inline TUid Mtm() const;
williamr@2
   604
	inline void SetMtm(TUid aMtm);
williamr@2
   605
	//
williamr@2
   606
	inline TUid Type() const;
williamr@2
   607
	inline void SetType(TUid aType);
williamr@2
   608
	//
williamr@2
   609
	inline const TTime& LastChangeDate() const;
williamr@2
   610
	inline void SetLastChangeDate(const TTime& aLastChange);
williamr@2
   611
	//
williamr@2
   612
	inline const TMsvSelectionOrdering& Order() const;
williamr@2
   613
	inline void SetOrder(const TMsvSelectionOrdering& aOrder);
williamr@2
   614
	//
williamr@2
   615
	inline TUid SortMtm() const;
williamr@2
   616
	inline void SetSortMtm(TUid aSortMtm);
williamr@2
   617
	//
williamr@2
   618
private:
williamr@2
   619
	CMsvEntryFilter();
williamr@2
   620
	//
williamr@2
   621
private:
williamr@2
   622
	TMsvId iServiceId;
williamr@2
   623
	TUid iMtm;
williamr@2
   624
	TUid iType;
williamr@2
   625
	TTime iLastChange;
williamr@2
   626
	TMsvSelectionOrdering iOrdering;
williamr@2
   627
	TUid iSortMtm;
williamr@2
   628
	};
williamr@2
   629
williamr@2
   630
// Error resolver leave codes -7000 to -7127
williamr@2
   631
/** Defines error codes that relate to the Message Server.
williamr@2
   632
williamr@2
   633
@see MMsvEntryObserver::EMsvContextInvalid 
williamr@2
   634
@publishedAll
williamr@2
   635
@released
williamr@2
   636
*/
williamr@2
   637
enum TMsvResolverLeave
williamr@2
   638
	{
williamr@2
   639
	/** There is no disk in the drive containing the Message Server index. */
williamr@2
   640
	KMsvMediaUnavailable = -7000,
williamr@2
   641
	/** There is a disk in the drive containing the Message Server index, but it is 
williamr@2
   642
	the wrong one. */
williamr@2
   643
	KMsvMediaIncorrect = -7001,
williamr@2
   644
	/** A CMsvEntry context is no longer valid because the location of the Message Server's 
williamr@2
   645
	index has changed.
williamr@2
   646
	
williamr@2
   647
	Such contexts will need refreshing by the client.
williamr@2
   648
	
williamr@2
   649
	@see MMsvEntryObserver::EMsvContextInvalid */
williamr@2
   650
	KMsvMediaChanged = -7002,
williamr@2
   651
	KMsvIndexBackup      = -7003,
williamr@2
   652
	KMsvIndexRestore     = -7004
williamr@2
   653
	};
williamr@2
   654
williamr@4
   655
#if (defined SYMBIAN_MESSAGESTORE_HEADER_BODY_USING_SQLDB)
williamr@4
   656
williamr@4
   657
enum EFieldType
williamr@4
   658
/**
williamr@4
   659
Allowed field types.
williamr@4
   660
This class is also used at the server side.
williamr@4
   661
 
williamr@4
   662
@publishedAll
williamr@4
   663
@released
williamr@4
   664
*/
williamr@4
   665
	{
williamr@4
   666
	EIntegerField,
williamr@4
   667
	ETextField,
williamr@4
   668
	EDateField
williamr@4
   669
	};
williamr@4
   670
williamr@4
   671
williamr@4
   672
williamr@4
   673
// Common class used by both client and server.
williamr@4
   674
class CFieldPair: public CBase
williamr@4
   675
/**
williamr@4
   676
Allowed field types.
williamr@4
   677
This class is also used at the server side.
williamr@4
   678
 
williamr@4
   679
@publishedAll
williamr@4
   680
@released
williamr@4
   681
*/
williamr@4
   682
	{
williamr@4
   683
public:
williamr@4
   684
	~CFieldPair()
williamr@4
   685
		{
williamr@4
   686
		if(iFieldName)
williamr@4
   687
			{
williamr@4
   688
			delete iFieldName;
williamr@4
   689
			}
williamr@4
   690
		if(iFieldTextValue)
williamr@4
   691
			{
williamr@4
   692
			delete iFieldTextValue;
williamr@4
   693
			}
williamr@4
   694
		}
williamr@4
   695
	HBufC* iFieldName;			// Column name
williamr@4
   696
	EFieldType iFieldType;		// Column type
williamr@4
   697
	TInt64 iFieldNumValue;		// Column value in number
williamr@4
   698
	HBufC* iFieldTextValue;		// Column value in text
williamr@4
   699
	};
williamr@4
   700
	
williamr@4
   701
williamr@4
   702
williamr@4
   703
class CHeaderFields: public CBase
williamr@4
   704
	{
williamr@4
   705
public:
williamr@4
   706
	~CHeaderFields()
williamr@4
   707
		{
williamr@4
   708
		iFieldPairList.ResetAndDestroy();
williamr@4
   709
		}
williamr@4
   710
	RPointerArray<CFieldPair> iFieldPairList;
williamr@4
   711
	TUid iUid;
williamr@4
   712
	};
williamr@4
   713
	
williamr@4
   714
williamr@4
   715
/*
williamr@4
   716
// Used for CMsvEntry::ReadDBStoreL() and CMsvEntry::ReadDBStoreL()
williamr@4
   717
// Used for CMsvServerEntry::ReadDBStoreL() and CMsvServerEntry::ReadDBStoreL()
williamr@4
   718
williamr@4
   719
@publishedAll
williamr@4
   720
@released
williamr@4
   721
*/
williamr@4
   722
williamr@4
   723
enum TEntryStoreType
williamr@4
   724
	{
williamr@4
   725
	EHeaderEntry,
williamr@4
   726
	EBodyEntry,
williamr@4
   727
	EUnknownEntry,
williamr@4
   728
	EHeaderAndBodyEntry		
williamr@4
   729
	};
williamr@4
   730
williamr@4
   731
williamr@4
   732
#endif 				// #if (defined SYMBIAN_MESSAGESTORE_HEADER_BODY_USING_SQLDB)
williamr@4
   733
williamr@4
   734
/**
williamr@4
   735
Temporary ID used for testing purpose
williamr@4
   736
@publishedAll
williamr@4
   737
@released
williamr@4
   738
@see TMsvId
williamr@4
   739
@see KMsvTempIndexEntryIdValue
williamr@4
   740
*/
williamr@4
   741
const TMsvId KMsvTempIndexEntryId = KMsvTempIndexEntryIdValue;//1
williamr@4
   742
williamr@4
   743
/**
williamr@4
   744
@publishedAll
williamr@4
   745
@released
williamr@4
   746
@see TMsvId
williamr@4
   747
*/
williamr@4
   748
const TMsvId KFirstFreeEntryId=0x100000;
williamr@4
   749
		
williamr@4
   750
williamr@2
   751
#include <msvstd.inl>
williamr@2
   752
williamr@2
   753
#endif