diff -r 6297cdf66332 -r d39add9822e2 webengine/webkitutils/stmgesturefw/src/filelogger.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/webengine/webkitutils/stmgesturefw/src/filelogger.cpp Tue Feb 02 00:56:45 2010 +0200 @@ -0,0 +1,187 @@ +/* +* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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: Gesture helper implementation +* +*/ +#include "filelogger.h" + +#include +#include + +_LIT(KLogFolder, "logs\\"); +_LIT(KLogFileExt, ".log"); +_LIT8(KLineEnd, "\r\n"); + +const TInt KTimeRecordSize = 25; + +_LIT8(KTimeFormat,"%04d-%02d-%02d %02d:%02d:%02d.%03d "); +_LIT8(KLogStart, "--== New %S log ==--\r\n"); + +CFileLogger::CFileLogger() +{ +} + +TBool CFileLogger::Construct() +{ + TInt err = iFs.Connect(); + if (!err) + { + TFileName logFileName; + err = !GetLogFileNameWithoutExt(logFileName); + if(!err) + { + logFileName.Append(KLogFileExt); + err = iFile.Create(iFs, logFileName, EFileShareAny | EFileWrite); + if(!err) + { + TInt pos(0); + iFile.Seek(ESeekEnd, pos); + TBuf8 appName; + appName.Copy(BaflUtils::ExtractAppNameFromFullName(RThread().FullName())); + iLogBuffer.AppendFormat(KLogStart, &appName); + err = iFile.Write(iLogBuffer); + } + } + } + return (!err); +} + +CFileLogger* CFileLogger::Logger() +{ + CFileLogger* logger = (CFileLogger*)Dll::Tls(); + if (!logger) + { + logger = new CFileLogger; + if (logger) + { + if (logger->Construct()) + { + Dll::SetTls(logger); + } + else + { + delete logger; + logger = NULL; + } + } + } + return logger; +} + +void CFileLogger::Close() +{ + delete (CFileLogger*)Dll::Tls(); + Dll::FreeTls(); +} + +CFileLogger::~CFileLogger() +{ + iFile.Close(); + iFs.Close(); +} + +TBool CFileLogger::GetLogFileNameWithoutExt(TDes& aFileName) +{ + TFileName path = PathInfo::MemoryCardRootPath() ; + path.Append(PathInfo::OthersPath()) ; // Put the log in the "Others" directory + aFileName.Append(path); + aFileName.Append(KLogFolder); + TBool res = BaflUtils::FolderExists(iFs, aFileName); + if (!res) + { + aFileName.Zero(); + aFileName.Append(path) ; // put it then directly to Others folder + res = ETrue ; + } + TPtrC fileName(BaflUtils::ExtractAppNameFromFullName(RThread().FullName())); + aFileName.Append(fileName); + TTime time; + time.HomeTime(); + TDateTime dateTime; + dateTime = time.DateTime(); + // add timestamp to the name (then one has to clear them manually) + aFileName.AppendNum(dateTime.Month()+1) ; + aFileName.AppendNum(dateTime.Day()+1) ; + aFileName.AppendNum(dateTime.Hour()) ; + aFileName.AppendNum(dateTime.Minute()) ; + aFileName.AppendNum(dateTime.Second()) ; + return res; +} + +void CFileLogger::Write(const TDesC8& aText) +{ + CFileLogger* logger = Logger(); + if(logger) + { + logger->iLogBuffer.Copy(aText); + logger->DoWrite(); + } +} + +void CFileLogger::Write(const TDesC16& aText) +{ + CFileLogger* logger = Logger(); + if(logger) + { + logger->iLogBuffer.Copy(aText); + logger->DoWrite(); + } +} + +void CFileLogger::Write(TRefByValue aFmt,...) +{ + CFileLogger* logger = Logger(); + if (logger) + { + VA_LIST list; + VA_START(list, aFmt); + logger->iLogBuffer.FormatList(aFmt, list); + logger->DoWrite(); + VA_END(list); + } +} + +void CFileLogger::DoWrite() +{ + if(iFile.SubSessionHandle()) + { + TTime time; + time.HomeTime(); + TDateTime dateTime; + dateTime = time.DateTime(); + TBuf8 timeRecord; + timeRecord.Format(KTimeFormat, dateTime.Year(), dateTime.Month()+1, dateTime.Day()+1, + dateTime.Hour(), dateTime.Minute(), dateTime.Second(), + dateTime.MicroSecond()/1000); + iLogBuffer.Insert(0, timeRecord); + iLogBuffer.Append(KLineEnd); + iFile.Write(iLogBuffer); + } +} +void CFileLogger::DoFlush() +{ + if(iFile.SubSessionHandle()) + { + iFile.Flush(); + } + +} +void CFileLogger::Flush() +{ + CFileLogger* logger = Logger(); + if (logger) + { + logger->DoFlush() ; + } +}