diff -r 951a5db380a0 -r e0b5df5c0969 videditor/VideoEditorCommon/src/logfile.cpp --- a/videditor/VideoEditorCommon/src/logfile.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,413 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "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: -* Ixonos Plc -* -* Description: -* -*/ - - - -#include -#include -#include -#include "logfile.h" -#include "logfile.pan" - -_LIT8(KCrLf8, "\r\n"); -_LIT(KCrLf, "\r\n"); - -static const TInt KAsciiStart = 0x20; -static const TInt KAsciiEnd = 0x7f; -static const TInt KHexCharLeft = '<'; -static const TInt KHexCharRight = '>'; - -//static const TInt KNumberOfDecimalPlaces = 3; - -EXPORT_C CLogFile* CLogFile::NewL(const TDesC& aFileName, TBool aInitialiseLog) - { - CLogFile* self = NewLC(aFileName, aInitialiseLog); - CleanupStack::Pop(self); - return(self); - } - - -EXPORT_C CLogFile* CLogFile::NewLC(const TDesC& aFileName, TBool aInitialiseLog) - { - CLogFile* self = new (ELeave) CLogFile(); - CleanupStack::PushL(self); - self->ConstructL(aFileName, aInitialiseLog); - return(self); - } - - -CLogFile::CLogFile() - { - // No implementation required - } - - -EXPORT_C CLogFile::~CLogFile() - { - iLogFile.Flush(); - iLogFile.Close(); - iSession.Close(); - } - - -void CLogFile::ConstructL(const TDesC& aFileName, TBool aInitialiseLog) - { - -#ifdef ORIGINAL_TIMESTAMP - TInt period; - User::LeaveIfError(HAL::Get(HALData::ESystemTickPeriod, period)); - - iLogMillisecsPerTick = period / 1000; - - if (iLogMillisecsPerTick == 0) - { - iLogMillisecsPerTick = 1; - } -#endif - - User::LeaveIfError(iSession.Connect()); - - if (aInitialiseLog) - { - User::LeaveIfError(iLogFile.Replace(iSession, aFileName, EFileShareAny | EFileWrite)); - } - else - { - TInt err = iLogFile.Open(iSession, aFileName, EFileShareAny | EFileWrite); - - switch (err) - { - case KErrNone: // Opened ok, so seek to end of file - { - TInt position = 0; - User::LeaveIfError(iLogFile.Seek(ESeekEnd, position)); - } - break; - - case KErrNotFound: // File doesn't exist, so create it - User::LeaveIfError(iLogFile.Create(iSession, aFileName, EFileShareAny | EFileWrite)); - break; - - default: // Unexepected error - User::Leave(err); - break; - } - } - } - - -EXPORT_C void CLogFile::LogTime() - { - StartWrite(); - LogTimeInternal(); - EndWrite(); - } - - -EXPORT_C void CLogFile::Log(const TDesC8& aText) - { - StartWrite(); - LogTextInternal(aText); - EndWrite(); - } - - -EXPORT_C void CLogFile::Log(const TDesC& aText) - { - StartWrite(); - - TRAP_IGNORE( DoLogTextL(aText) ); - - EndWrite(); - } - -void CLogFile::DoLogTextL(const TDesC& aText) - { - // Create character converter - CCnvCharacterSetConverter* characterConverter = CCnvCharacterSetConverter::NewLC(); - CCnvCharacterSetConverter::TAvailability converterAvailability; - converterAvailability = characterConverter->PrepareToConvertToOrFromL(KCharacterSetIdentifierAscii, iSession); - - for (TInt i = 0; i < aText.Length(); i++) - { - if (aText.Mid(i).Find(KCrLf) == 0) - { - LogNewline(); - i++; - } - else if (converterAvailability == CCnvCharacterSetConverter::EAvailable) - { - // Convert character from unicode - TBuf<1> unicodeBuffer; - TBuf8<10> asciiBuffer; - - unicodeBuffer.Append(aText[i]); - TInt status = characterConverter->ConvertFromUnicode(asciiBuffer, unicodeBuffer); - - if (status >= 0) - { - LogTextInternal(asciiBuffer); - } - } - else // character converter not available - { - TBuf8<1> asciiBuffer; - asciiBuffer.Append(static_cast(aText[i])); - LogTextInternal(asciiBuffer); - } - } - - CleanupStack::PopAndDestroy(characterConverter); - } - -EXPORT_C void CLogFile::Log(TUint8 aByte) - { - StartWrite(); - LogByteInternal(aByte); - EndWrite(); - } - - -EXPORT_C void CLogFile::Log(TUint aNumber) - { - StartWrite(); - LogIntInternal(aNumber); - EndWrite(); - } - - -EXPORT_C void CLogFile::LogBytes(const TDesC8& aBuffer) - { - StartWrite(); - - for (TInt i = 0; i < aBuffer.Length(); i++) - { - LogByteInternal(aBuffer[i]); - } - - EndWrite(); - } - - -void CLogFile::LogTimeInternal() - { - TBuf8<50> text; - -#ifdef ORIGINAL_TIMESTAMP - - TInt timeInMillisecs = User::TickCount() * iLogMillisecsPerTick; - TInt secs = timeInMillisecs / 1000; - TInt millisecs = timeInMillisecs % 1000; - text.Num(secs); - text.Append('.'); - Write(text); - text.Num(millisecs); - - while (text.Length() < KNumberOfDecimalPlaces) - { - text.Insert(0, _L8("0")); - } - - text.Append('-'); - Write(text); - -#else - - TTime time; - time.HomeTime(); - TBuf<31> dateString; - _LIT(KDateString4,"%-B%:0%J%:1%T%:2%S%.%*C4%:3%+B "); - TRAPD(err, time.FormatL(dateString,KDateString4) ); - if (KErrNone == err) - { - text.Append(dateString); - } - else - { - text.Append( _L("### date string format error: ") ); - text.AppendNum(err); - } - Write(text); - -#endif // ORIGINAL_TIMESTAMP - } - - -void CLogFile::LogTextInternal(const TDesC8& aText) - { - TPtrC8 tail(aText.Ptr(), aText.Length()); - - TInt newLinePosition = tail.Find(KCrLf8); - while (newLinePosition != KErrNotFound) - { - if (newLinePosition > 0) - { - Write(tail.Left(newLinePosition)); - tail.Set(aText.Ptr() + newLinePosition, tail.Length() - newLinePosition); - } - LogNewline(); - tail.Set(aText.Ptr() + KCrLf8.iTypeLength, tail.Length() - KCrLf8.iTypeLength); - - newLinePosition = tail.Find(KCrLf8); - } - - // No more newlines left so print remainder - Write(tail); - - } - - -void CLogFile::LogByteInternal(TUint8 aByte) - { - if ((aByte >= KAsciiStart) && (aByte < KAsciiEnd)) - { - // Display as ASCII char - TBuf8<1> str; - str.Append(aByte); - Write(str); - } - else - { - // Display as hex number - TBuf8<4> str; - str.Append(KHexCharLeft); - str.AppendNum((TUint)aByte, EHex); - str.Append(KHexCharRight); - Write(str); - } - } - - -void CLogFile::LogIntInternal(TUint aNumber) - { - // Display as ASCII char - TBuf8<20> str; - str.Append(KHexCharLeft); - str.AppendNum(aNumber, EHex); - str.Append(KHexCharRight); - Write(str); - } - - -EXPORT_C void CLogFile::LogNewline() - { - Write(KCrLf8); - - if (iAutoTimestamp) - { - LogTimeInternal(); - } - } - - -void CLogFile::StartWrite() - { - ASSERT(iCheckNestDepth == 0); - iCheckNestDepth++; - - if (iAutoNewline) - { - LogNewline(); - } - } - - -void CLogFile::EndWrite() - { - if (iAutoFlush) - { - iLogFile.Flush(); - } - - iCheckNestDepth--; - ASSERT(iCheckNestDepth == 0); - } - -void CLogFile::Write(const TDesC8& aText) - { - - if (iLogFile.Write(aText) != KErrNone) - { - // As the framework may be trapping User::Panic we need to - // produce the panic at a lower level. - RThread().Panic(KLogFilePanic, ELogFileWriteFailed); - } - } - -EXPORT_C void CLogFile::SetAutoFlush(TBool aOn) - { - iAutoFlush = aOn; - } - - -EXPORT_C void CLogFile::SetAutoTimeStamp(TBool aOn) - { - iAutoTimestamp = aOn; - } - - -EXPORT_C void CLogFile::SetAutoNewline(TBool aOn) - { - iAutoNewline = aOn; - } - - -EXPORT_C void CLogFile::StaticLog(const TDesC& aFileName, const TDesC8& aText) - { - // This needs to be inside a TRAP statement. Calling StaticLogL - // from certain places, for example AppUi destructors, - // would result in E32USER-CBase 66 panic. - TRAP_IGNORE( CLogFile::StaticLogL(aFileName,aText) ); - } - - -EXPORT_C void CLogFile::StaticLog(const TDesC& aFileName, const TDesC& aText) - { - // This needs to be inside a TRAP statement. Calling StaticLogL - // from certain places, for example AppUi destructors, - // would result in E32USER-CBase 66 panic. - TRAP_IGNORE( CLogFile::StaticLogL(aFileName,aText) ); - } - - -EXPORT_C void CLogFile::StaticLogL(const TDesC& aFileName, const TDesC8& aText) - { - CLogFile* logFile = NewLC(aFileName, EFalse); - logFile->SetAutoNewline(ETrue); - logFile->SetAutoTimeStamp(ETrue); - logFile->Log(aText); - CleanupStack::PopAndDestroy(logFile); - } - - -EXPORT_C void CLogFile::StaticLogL(const TDesC& aFileName, const TDesC& aText) - { - CLogFile* logFile = NewLC(aFileName, EFalse); - logFile->SetAutoNewline(ETrue); - logFile->SetAutoTimeStamp(ETrue); - logFile->Log(aText); - CleanupStack::PopAndDestroy(logFile); - } - -void CLogFile::GetFileName(TDes& aFileName) const - { - iLogFile.FullName(aFileName); - } - - -// End of File