diff -r 000000000000 -r 8e480a14352b messagingfw/msgsrvnstore/server/inc/indexcontext.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingfw/msgsrvnstore/server/inc/indexcontext.h Mon Jan 18 20:36:02 2010 +0200 @@ -0,0 +1,243 @@ +// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +#if !defined(__INDEXCONTEXT_H__) +#define __INDEXCONTEXT_H__ + +#include +#include +#include +#include +#include "msventryfreepool.h" +#include "msvindexadapter.h" + +class CMsvServer; +class CMsvIndexAdapter; + +//********************************** +// TMsvConfig +//********************************** + +class TMsvConfig +/** +@internalComponent +@released +*/ + { +public: + TDriveUnit iDrive; + TUint iUniqueID; + TBool iDebug; + +// these are used to compare against the above so we know if we have to write the data. + TDriveUnit iDriveAsLoaded; + TUint iUniqueIDAsLoaded; + TBool iDebugAsLoaded; + }; + +//********************************** +// MMsvContextObserver +//********************************** + +class MMsvContextObserver +/** +@internalComponent +@released +*/ + { +public: + virtual void ContextComplete(TInt aError, TBool aRunMailInit)=0; +#if (defined SYMBIAN_MSGS_ENHANCED_REMOVABLE_MEDIA_SUPPORT) + virtual void ChangeDriveComplete(TInt aError, TBool aRunMailInit, TDriveNumber aNewDrive)=0; +#endif + }; + +//********************************** +// CMsvIndexContext +//********************************** + +class CMsvIndexContext : public CActive +/** +@internalComponent +@released +*/ + { +public: + static CMsvIndexContext* NewLC(CMsvServer& aServer, MMsvContextObserver& aObserver); + static CMsvIndexContext* NewL(CMsvServer& aServer, MMsvContextObserver& aObserver); + ~CMsvIndexContext(); + + inline const CMsvEntrySelection& Update() const; + inline CMsvEntrySelection& Update(); + // + inline const CMsvEntrySelection& Remove() const; + inline CMsvEntrySelection& Remove(); + // + inline TBool Initialized() const; + inline void Initialized(TBool aInitialized); + + // + inline const TDesC& MessageFolder() const; + inline TMsvIndexLoadProgress::TIndexState State() const; + inline const TMsvConfig& Config() const; + + const TMsvIndexLoadProgress& Progress(); + // + const TDesC &IndexFileName() const; + CPermanentFileStore &IndexStore(); + // + void LocalizeStandardFoldersL(); + TBool GetAndClearIndexCorruptFlagL(); + +// Code changes for PREQ 557. +#if (defined SYMBIAN_MSGS_ENHANCED_REMOVABLE_MEDIA_SUPPORT) + void CreateIndexL(); + void UpdateDriveStatusL(TUint aDriveIndex, TDriveState& aStoreStatus); + TInt ChangeDrive(TUint aNewDriveIndex, TRequestStatus& aStatus); + TInt ChangeDrive(TUint aNewDriveIndex, TBool aIsRemovePartial = ETrue, TBool aAsync = EFalse); + void GetInPreparationIds(TUint aDriveId); + inline void MessageFolder(TUint aDriveId, TDes& aName) const; +#else + TInt LoadStoreConfig(TBool aLoad); + void CreateIndexL(TInt aDrive, TRequestStatus& aStatus); + void CreateIndexL(TInt aDrive, TBool aSync); +#endif // #if (defined SYMBIAN_MSGS_ENHANCED_REMOVABLE_MEDIA_SUPPORT) + + inline CMsvIndexAdapter*& IndexAdapter(); + inline CMsvIndexAdapter* IndexAdapter() const; +private: + + void ConstructL(); + CMsvIndexContext(CMsvServer& aServer, MMsvContextObserver& aObserver); + +// Changes for PREQ 557. +#if (defined SYMBIAN_MSGS_ENHANCED_REMOVABLE_MEDIA_SUPPORT) + void DoCreateIndexL(); + void IndexLoadingCompleted(); + void ChangeDriveCompleted(TInt aError); + void DoCreateServiceDirsL(TUint aDriveId); + void CreateStoreDeleteFile(TDriveNumber aDriveNum); + void CreateStandardEntriesFromResourceFileL(TUint aDriveId); + void DoChangeDriveL(TUint aNewDriveIndex, TBool aIsRemovePartial, TDriveNumber& aNewDriveNumber); +#else + void DoStoreConfigL(); + void DoCreateServiceDirsL(); + void CreateStoreDeleteFile(); + void IndexFailedToLoad(TInt aError); + void IndexLoadingCompleted(TInt aError); +#endif + + void ResetAndCreateNewMailStoreL(TBool aDelete = ETrue); + // + void IndexLoaded(TMsvServerChangeNotificationType aNotification); + // + void DoCancel(); + void RunL(); + +private: + CMsvEntrySelection* iUpdateEntryStreams; + CMsvEntrySelection* iRemoveEntries; + // + CMsvServer& iServer; + MMsvContextObserver& iObserver; + // + TFileName iMessageFolder; + TMsvIndexLoadProgress iProgress; + TMsvConfig iConfig; + TRequestStatus* iObserverStatus; + TBool iSyncLoad; + TBool iRunMailInit; + TBool iInitialized; + HBufC8* iBuf; + CMsvIndexAdapter* iIndexAdapter; + +#if (defined SYMBIAN_MESSAGESTORE_UNIT_TESTCODE) + friend class CTestIndexContext; + friend class CTestSearchSortDBadapter; +#endif + }; + +inline const TDesC& CMsvIndexContext::MessageFolder() const + { + return iMessageFolder; + } + +inline const CMsvEntrySelection& CMsvIndexContext::Update() const + { + return *iUpdateEntryStreams; + } + +inline CMsvEntrySelection& CMsvIndexContext::Update() + { + return *iUpdateEntryStreams; + } + +inline const CMsvEntrySelection& CMsvIndexContext::Remove() const + { + return *iRemoveEntries; + } + +inline CMsvEntrySelection& CMsvIndexContext::Remove() + { + return *iRemoveEntries; + } + +inline TMsvIndexLoadProgress::TIndexState CMsvIndexContext::State() const + { + return iProgress.iState; + } + +inline const TMsvConfig& CMsvIndexContext::Config() const + { + return iConfig; + } + +inline TBool CMsvIndexContext::Initialized() const + { + return iInitialized; + } + +inline void CMsvIndexContext::Initialized(TBool aInitialized) + { + iInitialized=aInitialized; + } + +inline CMsvIndexAdapter*& CMsvIndexContext::IndexAdapter() + { + CMsvEntryFreePool::Instance()->FlushExcessMemory(); + return iIndexAdapter; + } + +inline CMsvIndexAdapter* CMsvIndexContext::IndexAdapter() const + { + CMsvEntryFreePool::Instance()->FlushExcessMemory(); + return iIndexAdapter; + } + + + +#if (defined SYMBIAN_MSGS_ENHANCED_REMOVABLE_MEDIA_SUPPORT) +inline void CMsvIndexContext::MessageFolder(TUint aDriveId, TDes& aName) const + { + TParse parse; + TDriveNumber driveNum; + CMsvPreferredDriveList::GetDriveList()->GetDriveNumber(aDriveId, driveNum); + TPtrC drive(TDriveUnit(driveNum).Name()); + parse.Set(KMsvDefaultIndexFile2(), &drive, NULL); + aName = parse.DriveAndPath(); + } +#endif // #if (defined SYMBIAN_MSGS_ENHANCED_REMOVABLE_MEDIA_SUPPORT) + +#endif