diff -r 000000000000 -r 3e07fef1e154 testexecfw/useremul/src/Settings.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/testexecfw/useremul/src/Settings.cpp Mon Mar 08 15:03:44 2010 +0800 @@ -0,0 +1,202 @@ +/*------------------------------------------------------------------ + - + * Software Name : UserEmulator + * Version : v4.2.1309 + * + * Copyright (c) 2009 France Telecom. All rights reserved. + * This software is distributed under the License + * "Eclipse Public License - v 1.0" the text of which is available + * at the URL "http://www.eclipse.org/legal/epl-v10.html". + * + * Initial Contributors: + * France Telecom + * + * Contributors: + *------------------------------------------------------------------ + - + * File Name: Settings.cpp + * + * Created: 13/08/2009 + * Author(s): Marcell Kiss, Reshma Sandeep Das + * + * Description: + * This class is used for storing the settings information of the application + *------------------------------------------------------------------ + - + * + */ + +//System Includes +#include // CCoeEnv +#include + +//User Includes +#include "Settings.h" +#include "UserEmulatorApplication.h" +#include "UserEmulator.hrh" + +//Constants +_LIT(KFormat,":\\"); +_LIT(KFakeFileName,"filename.csv"); + +// ----------------------------------------------------------------------------- +// CSettings::CSettings +// Constructor +// ----------------------------------------------------------------------------- +// +CSettings::CSettings(CApaApplication& aApp, CEikonEnv* aEikonEnv) : iApp(aApp), iEEnv(aEikonEnv) +{ +} +// ----------------------------------------------------------------------------- +// CSettings::ConstructL +// ----------------------------------------------------------------------------- +// +void CSettings::ConstructL() +{ + LoadL(); +} +// ----------------------------------------------------------------------------- +// CSettings::CheckDrive +// Function to validate the correct drive +// ----------------------------------------------------------------------------- +// +TInt CSettings::CheckDrive(const TDesC& aPath) +{ + TInt err; + TVolumeInfo volumeInfo; + + TInt pos = aPath.FindF(KFormat); + if(pos == KErrNotFound) + return KErrNotReady; + + TPtrC drive = aPath.Left(pos); + if(drive.Length()!= 1) + err = KErrNotReady; + else + { + TUint driveLetter = drive.operator [](0); + TInt driveNumber = 0; + iEEnv->FsSession().CharToDrive((TChar)driveLetter,driveNumber); + if(driveNumber == EDriveD) + return KErrNotReady; + err = iEEnv->FsSession().Volume(volumeInfo,driveNumber); + } + return err; +} +// ----------------------------------------------------------------------------- +// CSettings::CheckPathL +// Function to validate the scripts or log file path +// ----------------------------------------------------------------------------- +// +TBool CSettings::CheckPathL(const TDesC& aPath) +{ + TBuf TempPath; + TempPath.Copy(aPath); + // Just because of IsValidName. (Without filename it fails) + TempPath.Append(KFakeFileName); + if(iEEnv->FsSession().IsValidName(TempPath)) + { + TBuf path; + TBuf tempPath; + TBool space=EFalse; + TInt pos; + _LIT(KSpace," "); + + // No space before backslash in path + tempPath.Copy(aPath); + while((pos=tempPath.LocateReverse('\\'))!=KErrNotFound) + { + TPtrC a = tempPath.Mid(pos-1,1); + if(a.Compare(KSpace)==0) + { + space=ETrue; + break; + } + tempPath.Copy(tempPath.Left(pos)); + } + + if(!space) + { + TInt pos=aPath.LocateReverse('\\')+1; + if(pos!=KErrNotFound) + path.Copy(aPath.Left(pos)); + else + return EFalse; + TRAPD(err,BaflUtils::EnsurePathExistsL(iEEnv->FsSession(), path)); + if(err==KErrNone) + return ETrue; + } + } + return EFalse; +} +// ----------------------------------------------------------------------------- +// CSettings::LoadL +// Function to Load the User Emulator settings +// ----------------------------------------------------------------------------- +// +void CSettings::LoadL() +{ + CDictionaryStore* iniFile = iApp.OpenIniFileLC(CCoeEnv::Static()->FsSession()); + + if (iniFile->IsPresentL(KUidUserEmulatorApp)) + { + RDictionaryReadStream readStream; + readStream.OpenLC(*iniFile, KUidUserEmulatorApp); + + TInt len = static_cast (readStream.ReadInt32L()); + readStream.ReadL(iScriptsPath,len); + + TInt ScriptPath = CheckDrive(iScriptsPath); + if(ScriptPath == KErrNotReady) + iScriptsPath = KDefaultPath; + + iLogStatus = static_cast (readStream.ReadInt8L()); + TInt logLen = static_cast (readStream.ReadInt32L()); + readStream.ReadL(iLogPath,logLen); + + TInt err = CheckDrive(iLogPath); + + if(err == KErrNotReady) + iLogPath = KDefaultLogPath; + + iRandomTestAppIdStatus = static_cast (readStream.ReadInt8L()); + TInt IDLen = static_cast (readStream.ReadInt32L()); + readStream.ReadL(iRandomTestAppID,IDLen); + + CleanupStack::PopAndDestroy(&readStream); + } + else + { + iScriptsPath = KDefaultPath; + iLogStatus = ETrue; + iLogPath = KDefaultLogPath; + iRandomTestAppIdStatus = EFalse; + } + + CleanupStack::PopAndDestroy(iniFile); +} +// ----------------------------------------------------------------------------- +// CSettings::StoreL +// Function to Store the User Emulator settings +// ----------------------------------------------------------------------------- +// +void CSettings::StoreL() +{ + CDictionaryStore* iniFile = iApp.OpenIniFileLC(CCoeEnv::Static()->FsSession()); + RDictionaryWriteStream writeStream; + writeStream.AssignLC(*iniFile, KUidUserEmulatorApp); + + writeStream.WriteInt32L(iScriptsPath.Length()); + writeStream.WriteL(iScriptsPath); + writeStream.WriteInt8L(iLogStatus); + writeStream.WriteInt32L(iLogPath.Length()); + writeStream.WriteL(iLogPath); + writeStream.WriteInt8L(iRandomTestAppIdStatus); + writeStream.WriteInt32L(iRandomTestAppID.Length()); + writeStream.WriteL(iRandomTestAppID); + + writeStream.CommitL(); + iniFile->CommitL(); + + CleanupStack::PopAndDestroy(2, iniFile); +}