mmlibs/mmfw/tsrc/mmvalidationsuite/mmvalidationsuiteapp/src/SettingsManager.cpp
changeset 0 40261b775718
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmlibs/mmfw/tsrc/mmvalidationsuite/mmvalidationsuiteapp/src/SettingsManager.cpp	Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,390 @@
+// Copyright (c) 2005-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:
+// SettingsManage.cpp
+// Part of the MVS Application for TechView
+//
+
+#include "SettingsManager.h"
+#include "MVSAppUI.h"
+#include "MVSConfigAudioFormatDialog.h"
+#include "MVSConfigVideoFormatDialog.h"
+
+_LIT(KFullPathOfFileStore,"C:\\private\\102737E8\\MvsSettings.dat");	
+
+CSettingsManager::CSettingsManager()
+:iStore(0),iHasSettings(1)
+	{	
+	
+	}
+
+CSettingsManager::~CSettingsManager()
+	{
+	iFsSession.Close();  //close the file session
+	iArrUid.Close();
+	iArrStreamId.Close();
+	if(iStore)
+		{
+		
+		}
+	}
+
+void CSettingsManager::ConstructL()
+	{
+	User::LeaveIfError(iFsSession.Connect()); // start a file session
+	}
+	
+CSettingsManager* CSettingsManager::NewL()
+	{
+	CSettingsManager* self = new(ELeave) CSettingsManager();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+
+TBool CSettingsManager::OpenStore2ReadLC()
+	{
+	TParse	fileStoreName;
+	iFsSession.Parse(KFullPathOfFileStore,fileStoreName);
+	
+	iStore = CPermanentFileStore::OpenLC(iFsSession,
+										fileStoreName.FullName(),
+										EFileRead );
+	iHasSettings = ETrue;
+	return iHasSettings;
+	}
+
+void CSettingsManager::OpenStore2WriteLC()
+	{
+	TPath privatePath(KFullPathOfFileStore);
+	iFsSession.PrivatePath(privatePath);
+	TParse	fileStoreName;
+	iFsSession.MkDirAll(KFullPathOfFileStore);
+	iFsSession.Parse(KFullPathOfFileStore,fileStoreName);
+	
+	if(iHasSettings)
+		{
+		iStore = CPermanentFileStore::OpenLC(iFsSession,
+											fileStoreName.FullName(),
+											EFileWrite );
+		}
+	else
+		{
+		iStore = CPermanentFileStore::CreateLC(iFsSession,
+											fileStoreName.FullName(),
+											EFileWrite );
+		}
+	
+	iStore->SetTypeL(KPermanentFileStoreLayoutUid);	 	
+	}
+
+
+TBool CSettingsManager::HasSettings()
+	{
+	return iHasSettings;
+	}
+
+void CSettingsManager::ReadGeneralSettingsL(CMVSAppUi* aAppUI)
+	{
+	if(!FileExists())
+		return;
+	OpenStore2ReadLC();
+	RStoreReadStream instream;
+	iRootId = iStore->Root();
+	instream.OpenLC(*iStore,iRootId); //open root stream for reading
+	instream >> iGenSettingsId;
+	CleanupStack::PopAndDestroy();			
+	
+	//check for the validity of the streamid
+	if(!iGenSettingsId.Value())
+		{
+		CleanupStack::PopAndDestroy();
+		return;
+		}
+	
+	//open the stream for general settings
+	instream.OpenLC(*iStore,iGenSettingsId); 
+	aAppUI->InternalizeL(instream);
+	CleanupStack::PopAndDestroy(2);	
+	}
+
+
+void CSettingsManager::WriteGeneralSettingsL(CMVSAppUi* aAppUI)
+	{	
+	OpenStore2WriteLC();
+	
+	RStoreWriteStream outstream;
+	/*
+	if already there is stream id for general settings open the existing
+	stream; otherwise create new stream id 
+	*/
+	TBool updation = iGenSettingsId.Value();
+	if(updation)
+		{
+		outstream.ReplaceLC(*iStore,iGenSettingsId);
+		}
+	else
+		{
+		iGenSettingsId = outstream.CreateLC(*iStore);
+		}
+	
+	//write the general settings
+	aAppUI->ExternalizeL(outstream);
+	outstream.CommitL();
+	CleanupStack::PopAndDestroy();
+	
+	if(!updation)
+		{
+		outstream.ReplaceLC(*iStore,iStore->Root());
+		TUid tempUid;
+		TStreamId tempStreamId(0);
+		WriteIndexL(outstream,tempUid,tempStreamId);
+		CleanupStack::PopAndDestroy();	
+		}		
+						
+	iStore->CommitL();// commit the changes to the store
+	CleanupStack::PopAndDestroy(); //for iStore 
+	iFsSession.Close(); //close the file session
+	}	  
+
+/*
+ *This function assumes that the index doesn't exist
+ */
+void CSettingsManager::MakeSeedIndexL()
+	{
+	OpenStore2WriteLC();
+	RStoreWriteStream outstream;
+	TStreamId invalidId(0); //caution: confirm the reliability of this value
+	iRootId = outstream.CreateLC(*iStore);		
+	
+	//write an invalid  stream index for general settings i.e.iGenSettingsId
+	outstream << invalidId;	 
+		
+	//write no. of controllers as 0
+	outstream.WriteInt8L(0);
+	
+	outstream.CommitL(); //commit stream changes
+	CleanupStack::PopAndDestroy();
+	
+	iStore->SetRootL(iRootId);
+	iStore->CommitL(); //commit changes to store
+	
+	CleanupStack::PopAndDestroy(); //for iStore	
+	}
+
+// the stream should be in the beginning of controller section
+void CSettingsManager::ReadControllerTableL(RReadStream& aStream)
+	{
+	iControllerCnt = aStream.ReadInt8L();	
+	TStreamId tempId;
+	iArrUid.Reset();
+	iArrStreamId.Reset();
+	//read the available pairs of Uid - Streamd Ids.
+	for(TInt8 i = 0; i < iControllerCnt;i++)
+		{
+		iArrUid.AppendL(TUid::Uid(aStream.ReadInt32L()));
+		aStream >> tempId;
+		iArrStreamId.AppendL(tempId);
+		}
+	}
+
+
+TBool CSettingsManager::IsControllerAvailableL(const TUid& aUid,
+													  TStreamId&  aStreamId)
+	{
+	 // if there is no Store fiel return false
+	if(!FileExists())
+		return 0;
+	OpenStore2ReadLC();
+	RStoreReadStream instream;
+	iRootId = iStore->Root();
+	instream.OpenLC(*iStore,iRootId); //open root stream for reading
+	instream >> iGenSettingsId;	 //read this to move to controller section
+	ReadControllerTableL(instream);
+	CleanupStack::PopAndDestroy(2);			
+	for(TUint8 i = 0; i < iControllerCnt; i++)
+		{
+		if(iArrUid[i] == aUid)
+			{
+		  	aStreamId = iArrStreamId[i];
+		  	return 1;	
+			}					
+	 	}
+	return 0;
+	}
+
+
+TInt CSettingsManager::ReadAudioDataL(CMVSConfigAudioFormatDialog* aAudioFormatDlg,
+ 							                 const TUid& aUid)
+	{
+	TStreamId controllerId;
+	// if the controller settings is not available return
+	if(!IsControllerAvailableL(aUid,controllerId))
+		return 0;
+	
+	//open the store to read
+	if(!FileExists())
+		return 0;
+	OpenStore2ReadLC();
+	//open the stream of the given controller for reading
+	RStoreReadStream instream;
+	instream.OpenLC(*iStore,controllerId);
+	aAudioFormatDlg->InternalizeL(instream);
+	CleanupStack::PopAndDestroy(2);
+	return 1;
+	}
+
+void CSettingsManager::WriteAudioDataL(CMVSConfigAudioFormatDialog* aAudioFormat,
+					  				const TUid& aUid)
+	{
+	TStreamId controllerId;		
+	RStoreWriteStream outstream;
+	TBool existingController = IsControllerAvailableL(aUid,controllerId);
+	OpenStore2WriteLC();	
+	if(!existingController)
+		{
+		//if controller settings is not available create new stream
+		controllerId = outstream.CreateLC(*iStore);		
+		}
+	else //open the existing for updation
+		{
+		outstream.ReplaceLC(*iStore,controllerId); 				
+		}
+	aAudioFormat->ExternalizeL(outstream);
+	outstream.CommitL();
+	CleanupStack::PopAndDestroy();
+	
+    /*
+    if there is no updation for controller i.e. new controller settings 
+    is entered
+    */
+	if(!existingController)
+		{
+		outstream.ReplaceLC(*iStore,iRootId); 					
+		WriteIndexL(outstream,aUid,controllerId);
+		CleanupStack::PopAndDestroy();		
+		}
+	iStore->CommitL();
+	CleanupStack::PopAndDestroy(); //for iStore
+	}	
+
+void CSettingsManager::WriteIndexL(RWriteStream& aStream,
+								  const TUid& aUid,
+								  TStreamId& aStreamId)
+	{
+	TBool bNewPlugin = aStreamId.Value();
+	TUint8 uchExistingPluginCnt = iControllerCnt;
+	//write root index
+	aStream << iGenSettingsId;
+	
+	if(bNewPlugin)
+		{
+		iControllerCnt++;		
+		}
+	
+	aStream.WriteInt8L(iControllerCnt);
+	
+	//write the uid-streamid for existing plugins
+	for(TUint8 i = 0; i < uchExistingPluginCnt; i++)
+		{
+		aStream.WriteInt32L(iArrUid[i].iUid); //write uid
+		aStream << 	iArrStreamId[i];	 //write streamid
+		}
+	
+	if(!bNewPlugin)
+		{
+		aStream.CommitL();
+		return;	
+		}
+	
+	//write uid-streamId for new plugin
+	aStream.WriteInt32L(aUid.iUid); //write uid
+	aStream << aStreamId;			//write streamid
+		
+	iArrUid.AppendL(aUid);
+	iArrStreamId.AppendL(aStreamId);	
+	aStream.CommitL();		
+	}
+
+
+TBool CSettingsManager::ReadVideoDataL(CMVSConfigVideoFormatDialog* aVideoFormatDlg,
+ 							          const TUid& aUid)
+	{
+	TStreamId controllerId;
+	// if the controller settings is not available return
+	if(!IsControllerAvailableL(aUid,controllerId))
+		return 0;
+	
+	//open the store to read
+	if(!FileExists())
+		return 0;
+	OpenStore2ReadLC();
+	//open the stream of the given controller for reading
+	RStoreReadStream instream;
+	instream.OpenLC(*iStore,controllerId);
+	aVideoFormatDlg->InternalizeL(instream);
+	CleanupStack::PopAndDestroy(2); 
+	return 1;
+	}
+
+
+void  CSettingsManager::WriteVideoDataL( CMVSConfigVideoFormatDialog* aVideoFormatDlg,
+						 				const TUid& aUid)
+	{
+	TStreamId controllerId;		
+	RStoreWriteStream outstream;
+	TBool existingController = IsControllerAvailableL(aUid,controllerId);
+	OpenStore2WriteLC();	
+	if(!existingController)
+		{
+		//if controller settings is not available create new stream
+		controllerId = outstream.CreateLC(*iStore);		
+		}
+	else //open the existing for updation
+		{
+		outstream.ReplaceLC(*iStore,controllerId); 				
+		}
+	aVideoFormatDlg->ExternalizeL(outstream);
+	outstream.CommitL();
+	CleanupStack::PopAndDestroy();
+	
+    /*
+    if there is no updation for controller i.e. new controller settings 
+    is entered
+    */
+	if(!existingController)
+		{
+		outstream.ReplaceLC(*iStore,iRootId); 					
+		WriteIndexL(outstream,aUid,controllerId);
+		CleanupStack::PopAndDestroy();		
+		}
+	iStore->CommitL();
+	CleanupStack::PopAndDestroy(); //for iStore	
+	}
+
+TBool CSettingsManager::FileExists()
+	{
+	TParse fileStoreName;
+	iFsSession.Parse(KFullPathOfFileStore,fileStoreName);
+	//check whether a settings file already exists
+	RFile file;
+	if(file.Open(iFsSession,fileStoreName.FullName(),EFileRead)!= KErrNone) // if the file doesn't exist already
+		{
+		iHasSettings = 0;
+		return EFalse;
+		}
+	file.Close();
+	return ETrue;
+	}