--- /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 <bautils.h>
+#include <pathinfo.h>
+
+_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<KMaxFullName> 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<const TDesC8> 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<KTimeRecordSize> 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() ;
+ }
+}