diff -r e1b950c65cb4 -r 837f303aceeb epoc32/include/mw/msvapi.h --- a/epoc32/include/mw/msvapi.h Wed Mar 31 12:27:01 2010 +0100 +++ b/epoc32/include/mw/msvapi.h Wed Mar 31 12:33:34 2010 +0100 @@ -1,9 +1,9 @@ // Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies). // All rights reserved. // This component and the accompanying materials are made available -// under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members +// under the terms of "Eclipse Public License v1.0" // which accompanies this distribution, and is available -// at the URL "http://www.symbianfoundation.org/legal/licencesv10.html". +// at the URL "http://www.eclipse.org/legal/epl-v10.html". // // Initial Contributors: // Nokia Corporation - initial contribution. @@ -11,7 +11,13 @@ // Contributors: // // Description: +// MSVAPI.H // +/** + * @file + * @publishedAll + * @released + */ #ifdef _DEBUG #undef _NO_SESSION_LOGGING_ @@ -36,6 +42,7 @@ #include #include #include +#include // Forward declarations class CMsvSession; @@ -45,6 +52,9 @@ class CMsvEntryArray; class CMsvServer; class CMsvServerEntry; +class CMsvSearchSortOperation; + + // Remove these to remove client logging //#define _NO_SESSION_LOGGING_ @@ -484,8 +494,9 @@ All clients must close their sessions immediately. */ EMsvServerTerminated, - /** The Message Server has automatically changed the index location to use the - internal disk. + /** This notification is sent whenever Message Server current drive is changed. + Upon receiving this event, the client should delete the current context of operations + and refresh its view of messaging. aArg1 is a TDriveNumber value that identifies the drive used by the Message Server to hold the index prior to the change. @@ -526,6 +537,23 @@ @see EMsvCorruptedIndexRebuilt */ EMsvCorruptedIndexRebuilding +#if (defined SYMBIAN_MSGS_ENHANCED_REMOVABLE_MEDIA_SUPPORT) + /** A media with pre-SQLite message store index has been inserted into a drive in the + priority drive list. */ + ,EMsvMessageStoreNotSupported, + /** A media with corrupt message store has been inserted into a drive in the priority + drive list and will be deleted. */ + EMsvMessageStoreCorrupt, + /** The client needs to refresh its view of messaging either due to a drive with a + valid message store being added or removed from the priority drive list, or a disk with + a valid message store being inserted or removed from a drive with priority less than + the current drive. */ + EMsvRefreshMessageView, + /** Media is not available in the drive that has been added to the priority drive list. */ + EMsvDiskNotAvailable, + /** A media insertion/removal event is received by server which it is unable to handle. */ + EMsvUnableToProcessDiskNotification +#endif }; public: /** Indicates an event has occurred. @@ -607,6 +635,9 @@ IMPORT_C void RemoveObserver(MMsvSessionObserver& aObserver); IMPORT_C TInt SetReceiveEntryEvents(TBool aReceive); // --- Utility functions --- +#if (defined SYMBIAN_MSGS_ENHANCED_REMOVABLE_MEDIA_SUPPORT) + IMPORT_C CMsvEntry* GetEntryL(TMsvId aEntId, TBool aChildrenOfAvailableDrives); +#endif IMPORT_C CMsvEntry* GetEntryL(TMsvId aEntId); IMPORT_C TInt GetEntry(TMsvId aId, TMsvId& aService, TMsvEntry& aEntry); @@ -626,7 +657,7 @@ IMPORT_C void CleanupEntryPop(TInt aCount=1); IMPORT_C void RemoveEntry(TMsvId aId); - /// MTM functions + // MTM functions IMPORT_C TInt InstallMtmGroup(const TDesC& aFullName); IMPORT_C TInt DeInstallMtmGroup(const TDesC& aFullName); @@ -646,7 +677,31 @@ IMPORT_C TBool MessageStoreDrivePresentL(); IMPORT_C TInt ServiceAccessPointId(TMsvId aServiceId, TUint32& aAccessPointId); + + // Changed for PREQ 557. + // ---- Preferred list related APIs. +#if (defined SYMBIAN_MSGS_ENHANCED_REMOVABLE_MEDIA_SUPPORT) + IMPORT_C void CurrentDriveInfoL(TDriveNumber& aDriveNumber, TUint& aPriority); + IMPORT_C void DriveListL(RArray& aDriveList); + IMPORT_C void AvailableDriveListL(RArray& aDriveList); + IMPORT_C void AddDriveL(TDriveNumber aDriveNumber, TUint& aPriority); + IMPORT_C void RemoveDriveL(TDriveNumber aDriveNumber); + IMPORT_C void UpdateDrivePriorityL(TDriveNumber aDriveNumber, TUint& aPriority); + IMPORT_C void GetChildIdsAllL(TMsvId aId, const CMsvEntryFilter& aFilter, CMsvEntrySelection& aSelection); +#if (defined SYMBIAN_MESSAGESTORE_UNIT_TESTCODE) + IMPORT_C void ResetRepositoryL(); + IMPORT_C void PrintCache(); +#endif +#endif + + // change for PREQ 2073 Converter +#if (defined SYMBIAN_MESSAGESTORE_HEADER_BODY_USING_SQLDB) + IMPORT_C void GetConvertibleDriveListL(RArray& aDriveList); + IMPORT_C void ConvertMessageStore(TDriveNumber aDrive,TRequestStatus& aStatus); + IMPORT_C void GetConversionStatusL(TDriveNumber aDrive); + IMPORT_C TInt CancelConversion(TDriveNumber aDrive); +#endif // #if (defined SYMBIAN_MESSAGESTORE_HEADER_BODY_USING_SQLDB) protected: CMsvSession(MMsvSessionObserver& aObserver); CMsvSession(MMsvSessionObserver& aObserver, RFs& aFs); @@ -673,11 +728,15 @@ void HandleNotifyL(); void DoHandleNotifyL(TMsvNotifBuffer& aBuffer); void GetMessageFolderL(); + // private: TInt iOperationId; RFs iFs; - RMsvServerSession iSession; + RMsvServerSession* iSession; + TInt dummy1; + TInt dummy2; + TInt dummy3; TMsvNotifBuffer iChange; MMsvSessionObserver& iMainObserver; CArrayPtrFlat* iObservers; @@ -705,7 +764,17 @@ friend class CMsvOperation; friend class CMsvEntryOperation; friend class CObserverRegistry; - // +friend class CMsvSearchSortOperation; +friend class CMsvSearchsortOpOnHeaderBody; +#if (defined SYMBIAN_MESSAGESTORE_HEADER_BODY_USING_SQLDB) +friend class CMsvHeaderStore; +#endif +#if (defined SYMBIAN_MESSAGESTORE_UNIT_TESTCODE) + friend class CTestMsvSession; +#if (defined SYMBIAN_MESSAGESTORE_HEADER_BODY_USING_SQLDB) + friend class CTestHeaderEntry; +#endif +#endif }; @@ -819,7 +888,17 @@ */ { public: // Public member functions +#if (defined SYMBIAN_MSGS_ENHANCED_REMOVABLE_MEDIA_SUPPORT) + IMPORT_C static CMsvEntry* NewL(CMsvSession& aMsvSession, TMsvId aMsvId, const TMsvSelectionOrdering& aOrdering, TBool aChildrenOfAvailableDrives); + IMPORT_C void SetStandardFolderEntryL(TMsvId aId); + IMPORT_C CMsvEntrySelection* ChildrenOfAvailableDrivesL() const; +#endif IMPORT_C static CMsvEntry* NewL(CMsvSession& aMsvSession, TMsvId aMsvId, const TMsvSelectionOrdering& aOrdering); +#if (defined SYMBIAN_MSGS_ENHANCED_REMOVABLE_MEDIA_SUPPORT) + IMPORT_C void SetEntryNoCheckL(TMsvId aId, TBool aChildrenOfAvailableDrives=EFalse); +#else + IMPORT_C void SetEntryNoCheckL(TMsvId aId); +#endif IMPORT_C ~CMsvEntry(); // // --- Observer functions --- @@ -865,6 +944,7 @@ IMPORT_C CMsvEntrySelection* ChildrenWithServiceL(TMsvId aServiceId) const; IMPORT_C CMsvEntrySelection* ChildrenWithMtmL(TUid aMtm) const; IMPORT_C CMsvEntrySelection* ChildrenWithTypeL(TUid aType) const; + inline TInt Count() const; IMPORT_C const TMsvEntry& ChildDataL(TMsvId aId) const; IMPORT_C const TMsvEntry& operator[](TInt aIndex) const; @@ -888,12 +968,15 @@ IMPORT_C TBool HasStoreL() const; - // - /** @internalTechnology */ - IMPORT_C void SetEntryNoCheckL(TMsvId aId); + // private: // Private members +#if (defined SYMBIAN_MSGS_ENHANCED_REMOVABLE_MEDIA_SUPPORT) + CMsvEntry(CMsvSession& aMsvSession, const TMsvSelectionOrdering& aOrdering, TBool aChildrenOfAvailableDrives); + inline TUint GetDriveId(TMsvId aMaskedId) const; +#endif CMsvEntry(CMsvSession& aMsvSession, const TMsvSelectionOrdering& aOrdering); + void ConstructL(TMsvId aMsvId); // void NotifyAllObserversL(MMsvEntryObserver::TMsvEntryEvent aEvent, TAny* aArg1, TAny* aArg2, TAny* aArg3); @@ -923,6 +1006,7 @@ TInt MoveOneL(TMsvId aMsvId, TMsvId aTargetId); TInt CopyOneL(TMsvId aMsvId, TMsvId aTargetId); TInt DeleteOneL(TMsvId aMsvId); + // private: enum TEntryState { EValid, @@ -948,6 +1032,11 @@ CArrayFixFlat* iMtmList; TMsvId iOwningService; TUint32 iNotifySequence; +#if (defined SYMBIAN_MSGS_ENHANCED_REMOVABLE_MEDIA_SUPPORT) + /* If this flag is set, child entries from all available drives + in the preferred drive list will be fetched. */ + TBool iChildrenOfAvailableDrives; +#endif }; //********************************** @@ -972,6 +1061,9 @@ IMPORT_C static TBool DriveContainsStore(RFs& aFs, TInt aDrive); IMPORT_C static TInt CurrentDriveL(RFs& aFs); IMPORT_C static TBool IsMessageStoreDrivePresentL(RFs& aFs); +#if (defined SYMBIAN_MSGS_ENHANCED_REMOVABLE_MEDIA_SUPPORT) + IMPORT_C static TBool IsMessageStoreSupported(TDriveNumber aDrive); +#endif }; //********************************** @@ -997,6 +1089,71 @@ IMPORT_C static TMsvId GetProgressIdL(CMsvOperation& aOperation); }; + + + + +#if (defined SYMBIAN_MESSAGESTORE_HEADER_BODY_USING_SQLDB) + +/** + * The class allows client MTMs to communicate the header structure + * to the message server. It provides API to add various fields to the + * header structure. Finally it provides API to create header store in + * the messaging DB. The store will always be created in the message + * server current drive. In order to create store in non-current drive + * the user should perform ChangeDrive() operation. + + * The header store should be created immediately after creating the + * mail account. The server will create separate header store for each + * MTM type. The function does not return an error if the header store + * being created already exist. + + @publishedAll + @released + */ +class CMsvHeaderStore : public CBase + { +public: + + /** + * Common Header Fields + * @publishedAll + * @released + */ + enum TCommonHeaderField + { + EFrom = 0x001, + ETo = 0x002, + ECC = 0x004, + EBCC = 0x008, + ESubject = 0x010 + }; + + + IMPORT_C static CMsvHeaderStore* NewL(const TUid& aMtmId, CMsvSession& aSession); + IMPORT_C static CMsvHeaderStore* NewLC(const TUid& aMtmId, CMsvSession& aSession); + ~CMsvHeaderStore(); + + IMPORT_C void AddFieldL(HBufC* aFieldName, EFieldType aFieldType); + IMPORT_C void AddFieldL(TCommonHeaderField aCommonHeaderFieldName); + IMPORT_C void CreateStoreL(); + IMPORT_C static TBool DoesStoreExistsL(const TUid& aMtmId, CMsvSession& aSession); + IMPORT_C TPtrC LastErrorMessageL(); + +private: + CMsvHeaderStore(TUid aMtmId, CMsvSession& aSession); + void ConstructL(); + +private: + + TUid iMtmUid; + CMsvSession& iSessionRef; + RPointerArray iFieldDetails; + HBufC* iLastErrorMessage; + }; + + +#endif // #if (defined SYMBIAN_MESSAGESTORE_HEADER_BODY_USING_SQLDB) #include #endif // __MSVAPI_H__