webengine/webkitutils/stmgesturefw/src/filelogger.cpp
changeset 42 d39add9822e2
--- /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() ;
+    }
+}