--- /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 <E32DEF.H>
+#include <e32std.h>
+#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 <centralrepository.h>
+#include <IMPSServiceSettingsUINGInternalCRKeys.h>
+#include <E32std.h>
+#include <EIKAPP.H>
+#include <eikappui.h>
+#include <eikenv.h>
+#include <eikbtgpc.h>
+#include <driveinfo.h>
+#include <StringLoader.h> // StringLoader
+#include "IMDialogUtils.h"
+#include <CAknMemorySelectionDialogMultiDrive.h>
+#include <rsfwmountman.h>
+
+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