wvuing/wvuieng/EngSrc/CCALoggerHeadersInterface.cpp
changeset 0 094583676ce7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wvuing/wvuieng/EngSrc/CCALoggerHeadersInterface.cpp	Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,326 @@
+/*
+* Copyright (c) 2003-2005 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:  Offers information regarding a given header to the UI.
+*
+*/
+
+
+// INCLUDE FILES
+#include "CCALoggerHeadersInterface.h"
+#include "CALoggerManagerFactory.h"
+#include "MCALoggerReadInterface.h"
+#include "CCALoggerMessageHeader.h"
+#include "CCAMessageBase.h"
+#include "MCAChatInterface.h"
+#include "MCASettings.h"
+#include "MCAMessagesWriteInterface.h"
+#include "privateenginedefinitions.h"
+
+
+// ================= HELPER FUNCTIONS =======================
+
+// -----------------------------------------------------------------------------
+// CleanupCArrayPtrCGulIcon
+// helper method for ResetAndDestroying the CSeletionItemList array
+// -----------------------------------------------------------------------------
+//
+void CleanupRPointerMCALoggerMessageArray( TAny* aArray )
+    {
+    RPointerArray<MCALoggerMessage>* items =
+        static_cast<RPointerArray<MCALoggerMessage>*>( aArray );
+    if ( items )
+        {
+        items->ResetAndDestroy();
+        }
+    }
+
+// ================= MEMBER FUNCTIONS =======================
+
+// -----------------------------------------------------------------------------
+// CCALoggerHeadersInterface::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CCALoggerHeadersInterface* CCALoggerHeadersInterface::NewL(
+    MCAChatInterface& aChatInterface,
+    MCASettings* aSettingsAPI )
+    {
+    CCALoggerHeadersInterface* self =
+        new ( ELeave ) CCALoggerHeadersInterface( aChatInterface,
+                                                  aSettingsAPI );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CCALoggerHeadersInterface::~CCALoggerHeadersInterface
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CCALoggerHeadersInterface::~CCALoggerHeadersInterface()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CCALoggerHeadersInterface::ConstructL
+// Construction
+// -----------------------------------------------------------------------------
+//
+void CCALoggerHeadersInterface::ConstructL()
+    {
+    //Messagefactory must be setted to loggermanager so it does not have to be
+    //setted here.
+    iLogger = CALoggerManagerFactory::ReadInstanceL();
+    iLogger->GetLoggerMessageHeaderArray( iHeaderArray );
+
+    //If header array is not valid -> leave with KErrNotFound.
+    if ( !iHeaderArray )
+        {
+        User::Leave( KErrNotFound );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CCALoggerHeadersInterface::CCALoggerHeadersInterface
+// Default Construction
+// -----------------------------------------------------------------------------
+//
+CCALoggerHeadersInterface::CCALoggerHeadersInterface(
+    MCAChatInterface& aChatInterface,
+    MCASettings* aSettingsAPI )
+        : iChatInterface( aChatInterface ),
+        iSettingsAPI( aSettingsAPI )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CCALoggerHeadersInterface::LoggerMessageHeader
+// Return header in index.
+// -----------------------------------------------------------------------------
+//
+CCALoggerMessageHeader* CCALoggerHeadersInterface::LoggerMessageHeader(
+    TInt aIndex ) const
+    {
+    __ASSERT_DEBUG( ( aIndex >= 0 && aIndex < iHeaderArray->Count() ),
+                    User::Panic( KCAEnginePanicCategory,
+                                 EApplicationUserSentThisIndexNotInValidRange ) );
+
+    // WVLogger does not identify header classes in array. It is clients
+    // responsibility to know type of header classes used in headerarray.
+    // In this case, header array is filled by CCALoggerMessageHeader classes.
+    return static_cast< CCALoggerMessageHeader* >( ( *iHeaderArray )[ aIndex ] );
+    }
+
+// -----------------------------------------------------------------------------
+// CCALoggerHeadersInterface::ResetAndDestroyMessages
+//
+// -----------------------------------------------------------------------------
+//
+void CCALoggerHeadersInterface::ResetAndDestroyMessages( TAny* aObject )
+    {
+    reinterpret_cast<RPointerArray< MCALoggerMessage >*>( aObject )->ResetAndDestroy();
+    }
+
+// -----------------------------------------------------------------------------
+// CCALoggerHeadersInterface::Name
+//
+// -----------------------------------------------------------------------------
+//
+const TDesC& CCALoggerHeadersInterface::Name( TInt aIndex ) const
+    {
+    return LoggerMessageHeader( aIndex )->Name();
+    }
+
+// -----------------------------------------------------------------------------
+// CCALoggerHeadersInterface::StartTime
+//
+// -----------------------------------------------------------------------------
+//
+TTime CCALoggerHeadersInterface::StartTime( TInt aIndex ) const
+    {
+    return LoggerMessageHeader( aIndex )->StartTime();
+    }
+
+// -----------------------------------------------------------------------------
+// CCALoggerHeadersInterface::EndTime
+//
+// -----------------------------------------------------------------------------
+//
+TTime CCALoggerHeadersInterface::EndTime( TInt aIndex ) const
+    {
+    return LoggerMessageHeader( aIndex )->EndTime();
+    }
+
+// -----------------------------------------------------------------------------
+// CCALoggerHeadersInterface::Identification
+//
+// -----------------------------------------------------------------------------
+//
+const TDesC& CCALoggerHeadersInterface::Identification( TInt aIndex ) const
+    {
+    return LoggerMessageHeader( aIndex )->Identification();
+    }
+
+// -----------------------------------------------------------------------------
+// CCALoggerHeadersInterface::Count
+//
+// -----------------------------------------------------------------------------
+//
+TInt CCALoggerHeadersInterface::HeaderCount() const
+    {
+    return iHeaderArray->Count();
+    }
+
+// -----------------------------------------------------------------------------
+// CCALoggerHeadersInterface::ChatType
+//
+// -----------------------------------------------------------------------------
+//
+TChatType CCALoggerHeadersInterface::ChatType( TInt aIndex ) const
+    {
+    return LoggerMessageHeader( aIndex )->ChatType();
+    }
+
+// -----------------------------------------------------------------------------
+// CCALoggerHeadersInterface::DeleteHistoryFileL
+//
+// -----------------------------------------------------------------------------
+//
+void CCALoggerHeadersInterface::DeleteHistoryFileL( TInt aIndex )
+    {
+    iLogger->DeleteHistoryFileL( *LoggerMessageHeader( aIndex ) );
+    }
+
+// -----------------------------------------------------------------------------
+// CCALoggerHeadersInterface::GetMessageForSendingViaMTML
+//
+// -----------------------------------------------------------------------------
+//
+void CCALoggerHeadersInterface::GetMessageForSendingViaMTML( TInt aIndex,
+                                                             RWriteStream& aStream )
+    {
+    RPointerArray< MCALoggerMessage > array;
+    TBool showTimestamps = iSettingsAPI->Value( MCASettings::EShowTimeStamps );
+
+    TCleanupItem cleanupItem( CleanupRPointerMCALoggerMessageArray, &array );
+    CleanupStack::PushL( cleanupItem );
+
+    iLogger->CreateLoggerMessagesL( array, *LoggerMessageHeader( aIndex ) );
+
+    TInt arrayCount( array.Count() );
+    for ( TInt a( 0 ); a < arrayCount; ++a )
+        {
+        // CALogger does not identify message classes in array. It is clients
+        // responsibility to know type of message classes used in messagearray.
+        // In this case, message array is filled by CCAMessageBase classes.
+        static_cast< CCAMessageBase* >( array[ a ] )->
+        ExternalizeForMTML( aStream,
+                            showTimestamps );
+        }
+
+    CleanupStack::PopAndDestroy( 1 ); //cleanupItem
+    }
+
+// -----------------------------------------------------------------------------
+// CCALoggerHeadersInterface::MessagesInterfaceL
+//
+// -----------------------------------------------------------------------------
+//
+MCAMessagesReadInterface& CCALoggerHeadersInterface::MessagesInterfaceL(
+    TInt aIndex )
+    {
+    //Clear old one if exists
+    RPointerArray< MCALoggerMessage > messages;
+    CleanupStack::PushL( TCleanupItem( ResetAndDestroyMessages, &messages ) );
+
+    iChatInterface.DeleteChatL( KNullDesC, KNullDesC, KLoggerBufferId );
+    MCAMessagesWriteInterface& writeInterface =
+        iChatInterface.MessageWriteInterfaceL( KNullDesC, KNullDesC,
+                                               KLoggerBufferId );
+    writeInterface.LockBufferMemoryHandling( ETrue );
+    iLogger->CreateLoggerMessagesL( messages, *LoggerMessageHeader( aIndex ) );
+
+    while ( messages.Count() )
+        {
+        CCAMessageBase* baseMessage =
+            static_cast< CCAMessageBase* >( messages[ 0 ] );
+        MCAMessage* message = baseMessage;
+        messages.Remove( 0 );
+        writeInterface.AppendL( message );
+        }
+
+    CleanupStack::PopAndDestroy(); // messages.ResetAndDestroy()
+
+    return iChatInterface.MessageReadInterfaceL( KNullDesC, KNullDesC,
+                                                 KLoggerBufferId );
+    }
+
+// -----------------------------------------------------------------------------
+// CCALoggerHeadersInterface::DeleteRecordedChatContainerL
+// -----------------------------------------------------------------------------
+//
+void CCALoggerHeadersInterface::DeleteRecordedChatContainerL()
+    {
+    iChatInterface.DeleteChatL( KNullDesC, KNullDesC, KLoggerBufferId );
+    }
+
+// -----------------------------------------------------------------------------
+// CCALoggerHeadersInterface::Index
+// -----------------------------------------------------------------------------
+//
+TInt CCALoggerHeadersInterface::Index( const TDesC& aName ) const
+    {
+    TInt headerCount = iHeaderArray->Count();
+
+    for ( TInt i = 0; i < headerCount; i++ )
+        {
+        if ( aName.CompareC( Name( i ), KCollationLevel, NULL ) == 0 )
+            {
+            return i;
+            }
+        }
+
+    return KErrNotFound;
+    }
+
+//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."
+// -----------------------------------------------------------------------------
+// CCALoggerHeadersInterface::ReLoggingL
+// -----------------------------------------------------------------------------
+//
+void CCALoggerHeadersInterface::ReLoggingL( TInt aIndex )
+    {
+    MCALoggerMessageHeader& msgHeader( *LoggerMessageHeader( aIndex ) );
+
+    MCAMessagesReadInterface& readInterface =
+        iChatInterface.MessageReadInterfaceL( KNullDesC, KNullDesC,
+                                              KLoggerBufferId );
+
+    readInterface.ReLoggingL( msgHeader );
+
+    if ( readInterface.IsLoggingOn() )
+        {
+        readInterface.EndReLoggingL();
+        }
+
+
+    }
+//  End of File