--- /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 <e32base.h>
+#include <f32file.h>
+#include <msvipc.h>
+#include <barsread.h>
+#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