diff -r 000000000000 -r 094583676ce7 wvuing/wvlogger/Src/CCALoggerWriter.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wvuing/wvlogger/Src/CCALoggerWriter.cpp Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,255 @@ +/* +* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "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: History file writer class +* +*/ + + +// INCLUDE FILES + +#include +#include +#include "CCALoggerWriter.h" +#include "MCALoggerWriteObserver.h" +#include "MCALoggerMessageHeader.h" +#include "MCALoggerMessage.h" +#include "PrivateDefinitions.h" + +//for debug +#include "ChatDebugPrint.h" + +#ifdef RD_MULTIPLE_DRIVE +#include +#include +#include +#include +#include +#include +#include +#include +#include // StringLoader +#include "IMDialogUtils.h" +#include +#include + +const TInt KErrNotSaved = -999; + +#endif +//CONSTANTS + +// ================= MEMBER FUNCTIONS ======================= + +// ----------------------------------------------------------------------------- +// Destructor +// ----------------------------------------------------------------------------- +// +CCALoggerWriter::~CCALoggerWriter() + { + CHAT_DP_TXT( "CCALoggerWriter::~CCALoggerWriter" ); + + if ( iLoggingOn ) + { + //Must not leave here so trap all leaves no matter what. + TInt ignore( KErrNone ); + TRAP( ignore, EndLoggingL() ); + } + } + +// ----------------------------------------------------------------------------- +// Two phase creation. +// ----------------------------------------------------------------------------- +// +CCALoggerWriter* CCALoggerWriter::NewL( MCALoggerWriteObserver& aObserver, + RFs& aFileSession ) + { + CHAT_DP_TXT( "CCALoggerWriter::NewL" ); + CCALoggerWriter* self = new ( ELeave ) CCALoggerWriter( aObserver, + aFileSession ); + return self; + } + +// ----------------------------------------------------------------------------- +// Constructor +// ----------------------------------------------------------------------------- +// +CCALoggerWriter::CCALoggerWriter( MCALoggerWriteObserver& aObserver, + RFs& aFileSession ) + : iManager( aObserver ), iFileSession( aFileSession ) + { + CHAT_DP_TXT( "CCALoggerWriter::CCALoggerWriterL" ); + } + +// ================= INHERITED FUNCTIONS ======================= + +// From MCALoggerWriteInterface. + +// ----------------------------------------------------------------------------- +// Logging starts here. Header information should be written. +// ----------------------------------------------------------------------------- +// +void CCALoggerWriter::StartLoggingL( MCALoggerMessageHeader* aFile ) + { + CHAT_DP_TXT( "CCALoggerWriter::StartLoggingL" ); + + if ( ! aFile ) + { + User::Leave( KErrArgument ); + } + + CleanupDeletePushL( aFile ); + + //Ownership of aFile is transfered to this component so push it to stack + + if ( iLoggingOn ) + { + User::Leave( KErrInUse ); + } + + HBufC* logFileName = iManager.CreateNewFilenameL(); // we should get the correct file name only.... +#ifdef RD_MULTIPLE_DRIVE + + if ( logFileName == NULL ) + { + CleanupStack::Pop( aFile ); + User::Leave( KErrNotSaved ); + return; + } +#endif + + CleanupStack::PushL( logFileName ); + + aFile->SetFilenameL( *logFileName ); + + CleanupStack::PopAndDestroy( logFileName ); + + // Try to create the file + TInt error = iFileStream.Create( iFileSession, aFile->FilenameL(), EFileWrite ); + if ( error != KErrNone ) + { + User::LeaveIfError( error ); + } + + //Transfer ownership of aFile to iManager + TFileRelation relation; + + relation.iFile = aFile; + relation.iWriter = this; + + CleanupStack::Pop( aFile ); + + iManager.AddFileL( relation ); + + iLoggingOn = ETrue; + } + +// ----------------------------------------------------------------------------- +// Logging ends here. File should be closed after this. +// ----------------------------------------------------------------------------- +// +void CCALoggerWriter::EndLoggingL() + { + CHAT_DP_TXT( "CCALoggerWriter::EndLoggingL" ); + + //set Logginstate off. + iLoggingOn = EFalse; + + //Close the file + iFileStream.Close(); + + //Inform manager that file is not needed anymore. + iManager.RemoveFileL( *this ); + } + +// ----------------------------------------------------------------------------- +// Is logging on. ETrue if on, EFalse if off. +// ----------------------------------------------------------------------------- +// +TBool CCALoggerWriter::IsLoggingOn() + { + CHAT_DP_TXT( "CCALoggerWriter::IsLoggingL" ); + return iLoggingOn; + } + +// ----------------------------------------------------------------------------- +// Logging the message. +// ----------------------------------------------------------------------------- +// +void CCALoggerWriter::MakeLogL( MCALoggerMessage& aMessage ) + { + CHAT_DP_TXT( "CCALoggerWriter::MakeLogL" ); + + if ( ! iLoggingOn ) + { + User::Leave( KErrNotReady ); + } + + if ( iManager.CheckMemoryL( aMessage.MessageSizeInBytesL() ) ) + { + aMessage.ExternalizeL( iFileStream ); + iFileStream.CommitL(); + } + else + { + User::Leave( KErrDiskFull ); + } + } + +//fix - refer Ui Spec Approved Version 1.0 (Instant Messaging NG 001 151006.pdf) +//Section 10.2.10 Pg 131 - +//"In case user has saved the image already or sent it by himself, +// this option(save) is not available." +// ----------------------------------------------------------------------------- +// ReLogging the message. +// ----------------------------------------------------------------------------- +// +void CCALoggerWriter::ReLoggingL( MCALoggerMessageHeader& aFile ) + { + CHAT_DP_TXT( "CCALoggerWriter::StartLoggingL" ); + + if ( iLoggingOn ) + { + User::Leave( KErrInUse ); + } + + // Try to create the file + + User::LeaveIfError( iFileStream.Replace( iFileSession, + aFile.FilenameL(), + EFileWrite ) ); + + iLoggingOn = ETrue; + + } + +//fix - refer Ui Spec Approved Version 1.0 (Instant Messaging NG 001 151006.pdf) +//Section 10.2.10 Pg 131 - +//"In case user has saved the image already or sent it by himself, +// this option(save) is not available." +// ----------------------------------------------------------------------------- +// Logging ends here. File should be closed after this. +// ----------------------------------------------------------------------------- +// +void CCALoggerWriter::EndReLogging() + { + CHAT_DP_TXT( "CCALoggerWriter::EndLoggingL" ); + + //set Logginstate off. + iLoggingOn = EFalse; + + //Close the file + iFileStream.Close(); + + } + +//end of file