diff -r 000000000000 -r 3e07fef1e154 testexecfw/useremul/src/Logger.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/testexecfw/useremul/src/Logger.cpp Mon Mar 08 15:03:44 2010 +0800 @@ -0,0 +1,260 @@ +/*------------------------------------------------------------------ + - + * 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: Logger.cpp + * + * Created: 13/08/2009 + * Author(s): Marcell Kiss, Reshma Sandeep Das + * + * Description: + * This class is used for logging purposes + *------------------------------------------------------------------ + - + * + */ + +//System Includes +#include // CEikonEnv +#include // TParsePtrC +#include // BaflUtils +#include + +//User Includes +#include "Logger.h" +#include "Settings.h" + +//Constants +_LIT8(KTimeFormat,"%04d-%02d-%02d, %02d:%02d:%02d:%02d"); +_LIT8(KHashTimeFormat,"#%04d-%02d-%02d, %02d:%02d:%02d:%02d"); +_LIT(KDriveError, "Drive might be locked. Missing or incomplete log file possible."); +const TInt KTimeRecordSize = 26; +// ----------------------------------------------------------------------------- +// CLogger::ConstructL +// ----------------------------------------------------------------------------- +// +void CLogger::ConstructL() +{ + TParsePtrC parser(iSettings.iLogPath); + BaflUtils::EnsurePathExistsL(iEEnv->FsSession(), parser.DriveAndPath()); + User::LeaveIfError(iFs.Connect()); + iDriveLockError = EFalse; +} + +// ----------------------------------------------------------------------------- +// CLogger::CLogger +// ----------------------------------------------------------------------------- +// +CLogger::CLogger(CUserEmulatorScriptsView& aScriptView,CSettings& aSettings, CEikonEnv* aEikonEnv) + : iScriptView(aScriptView),iSettings(aSettings),iEEnv(aEikonEnv) +{ +} + +// ----------------------------------------------------------------------------- +// CLogger::~CLogger +// ----------------------------------------------------------------------------- +// +CLogger::~CLogger() +{ + iFile.Close(); + iFs.Close(); +} +// ----------------------------------------------------------------------------- +// CLogger::WriteLogL +// ----------------------------------------------------------------------------- +// +void CLogger::WriteLogL(const TDesC16& aText, TBool aHeader, TBool aHash) +{ + if(Write(aText,aHeader,aHash)!=KErrNone) + { + if(!iDriveLockError) + { + iDriveLockError=ETrue; + CAknErrorNote* errorNote = new (ELeave) CAknErrorNote(ETrue); + errorNote->ExecuteLD(KDriveError); + } + } + else + iDriveLockError=EFalse; +} +// ----------------------------------------------------------------------------- +// CLogger::Write +// ----------------------------------------------------------------------------- +// +TInt CLogger::Write(const TDesC16& aText, TBool aHeader, TBool aHash) +{ + if( iSettings.iLogStatus) + { + TBool bExists = BaflUtils::FileExists(iFs, iSettings.iLogPath); + if(!bExists) + { + TParsePtrC parser(iSettings.iLogPath); + TRAPD(err, BaflUtils::EnsurePathExistsL(iEEnv->FsSession(), parser.DriveAndPath())); + if(err != KErrNone) + return err; + CloseFileHandles(); + TInt err1=iFile.Replace(iFs, iSettings.iLogPath, EFileShareAny | EFileWrite); + if(err1 != KErrNone) + return err1; + + TRAPD(err2,iScriptView.CmdGetSystemInfoL(ETrue)); + } + else + { + //File exists..Check if the file is already open + TBool isOpen; + TInt err = iFs.IsFileOpen(iSettings.iLogPath,isOpen); + TInt err1=KErrNone; + if(err != KErrNone) + return err; + + if(!isOpen) + { + err1=iFile.Replace(iFs, iSettings.iLogPath, EFileShareAny | EFileWrite); + if(err1!=KErrNone) + return err1; + TRAPD(err,iScriptView.CmdGetSystemInfoL(ETrue)); + } + + } + + iLogBuffer.Copy(aText); + + if(!aHeader) + { + TTime time; + time.HomeTime(); + TDateTime dateTime; + dateTime = time.DateTime(); + TBuf8 timeRecord; + if(aHash) + timeRecord.Format(KHashTimeFormat, dateTime.Year(), dateTime.Month()+1, + dateTime.Day()+1, dateTime.Hour(), dateTime.Minute(), dateTime.Second(),dateTime.MicroSecond()/1000); + else + timeRecord.Format(KTimeFormat, dateTime.Year(), dateTime.Month()+1, + dateTime.Day()+1, dateTime.Hour(), dateTime.Minute(), dateTime.Second(),dateTime.MicroSecond()/1000); + timeRecord.Append(KComma); + iLogBuffer.Insert(0, timeRecord); + } + TInt res=iFile.Write(iLogBuffer); + if(res!=KErrNone) + return res; + res=iFile.Flush(); + if(res!=KErrNone) + return res; + } + return KErrNone; +} +// ----------------------------------------------------------------------------- +// CLogger::WriteLogL +// ----------------------------------------------------------------------------- +// +void CLogger::WriteLogL(const TDesC8& aText, TBool aHeader, TBool aHash) +{ + if(Write(aText,aHeader,aHash)!=KErrNone) + { + if(!iDriveLockError) + { + iDriveLockError=ETrue; + CAknErrorNote* errorNote = new (ELeave) CAknErrorNote(ETrue); + errorNote->ExecuteLD(KDriveError); + } + } + else + iDriveLockError=EFalse; +} +// ----------------------------------------------------------------------------- +// CLogger::Write +// ----------------------------------------------------------------------------- +// +TInt CLogger::Write(const TDesC8& aText, TBool aHeader, TBool aHash) +{ + if( iSettings.iLogStatus) + { + TBool bExists = BaflUtils::FileExists(iFs, iSettings.iLogPath); + if(!bExists) + { + TParsePtrC parser(iSettings.iLogPath); + TRAPD(err, BaflUtils::EnsurePathExistsL(iEEnv->FsSession(), parser.DriveAndPath())); + if(err != KErrNone) + return err; + CloseFileHandles(); + TInt err1=iFile.Replace(iFs, iSettings.iLogPath, EFileShareAny | EFileWrite); + if(err1 != KErrNone) + return err1; + + TRAPD(err2,iScriptView.CmdGetSystemInfoL(ETrue)); + } + else + { + //File exists..Check if the file is already open + TBool isOpen; + TInt err = iFs.IsFileOpen(iSettings.iLogPath,isOpen); + TInt err1=KErrNone; + if(err != KErrNone) + return err; + + if(!isOpen) + { + err1=iFile.Replace(iFs, iSettings.iLogPath, EFileShareAny | EFileWrite); + if(err1!=KErrNone) + return err1; + TRAPD(err,iScriptView.CmdGetSystemInfoL(ETrue)); + } + } + iLogBuffer.Copy(aText); + + //Log Date and time + _LIT8(KComma, ","); + _LIT8(KTimeFormat,"%04d-%02d-%02d %02d:%02d:%02d:%02d"); + _LIT8(KHashTimeFormat,"#%04d-%02d-%02d %02d:%02d:%02d:%02d"); + + const TInt KTimeRecordSize = 20; + + if(!aHeader) + { + TTime time; + time.HomeTime(); + TDateTime dateTime; + dateTime = time.DateTime(); + TBuf8 timeRecord; + if(aHash) + timeRecord.Format(KHashTimeFormat, dateTime.Year(), dateTime.Month()+1, + dateTime.Day()+1, dateTime.Hour(), dateTime.Minute(), dateTime.Second(),dateTime.MicroSecond()/1000); + else + timeRecord.Format(KTimeFormat, dateTime.Year(), dateTime.Month()+1, + dateTime.Day()+1, dateTime.Hour(), dateTime.Minute(), dateTime.Second(),dateTime.MicroSecond()/1000); + timeRecord.Append(KComma); + iLogBuffer.Insert(0, timeRecord); + } + + TInt res=iFile.Write(iLogBuffer); + if(res!=KErrNone) + return res; + res=iFile.Flush(); + if(res!=KErrNone) + return res; + + } + return KErrNone; +} +// ----------------------------------------------------------------------------- +// CLogger::CloseFileHandles +// ----------------------------------------------------------------------------- +// +void CLogger::CloseFileHandles() +{ + iFile.Close(); +}