messagingfw/msgsrvnstore/server/inc/indexcontext.h
changeset 0 8e480a14352b
--- /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