--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/wvuing/wvuiprocess/Src/ccagrouppc.cpp Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,612 @@
+/*
+* Copyright (c) 2006 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: Implementation for PC Group Interface
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "ccagrouppc.h"
+#include "MCAStoredGroups.h"
+#include "CCAStorageManagerFactory.h"
+#include "mcagroupobserverpc.h"
+#include "CCAEngine.h"
+#include "MCAChatInterface.h"
+#include "mcamessageswriteinterface.h"
+#include "mcamessagecontainerinfo.h"
+#include "MCAStoredGroup.h"
+#include "MCAMessage.h"
+#include "MCAStoredContacts.h"
+#include "MCAGroupEventObserverPC.h"
+#include "MCAGroupOperations.h"
+#include "MCAGroupManagerInterface.h"
+#include "MCAExtendedStoredGroup.h"
+#include "MCAMessageUtils.h"
+#include "MCAMessageErrorInformer.h"
+#include "MCAMessageCreator.h"
+#include "CAUtils.h"
+#include "CCAServerContactsArrayPC.h"
+#include "CAPresenceManager.h"
+#include "MCAPresence.h"
+
+
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+
+// -----------------------------------------------------------------------------
+// CCAGroupPC: Constructor
+// -----------------------------------------------------------------------------
+//
+CCAGroupPC::CCAGroupPC( MCAGroupManagerInterface* aGroupInterface,
+ MCAChatInterface& aChatInterface,
+ const MCAMessageUtils& aMessageUtils )
+ : iGroupInterface( aGroupInterface ),
+ iChatInterface( aChatInterface ),
+ iMessageUtils( aMessageUtils )
+
+ {
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCAGroupPC: NewL
+// -----------------------------------------------------------------------------
+//
+CCAGroupPC* CCAGroupPC::NewL( MCAGroupManagerInterface* aGroupInterface,
+ MCAChatInterface& aChatInterface,
+ const MCAMessageUtils& aMessageUtils )
+ {
+ CCAGroupPC* self = new ( ELeave ) CCAGroupPC( aGroupInterface,
+ aChatInterface, aMessageUtils );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CCAGroupPC: ConstructL
+// -----------------------------------------------------------------------------
+//
+void CCAGroupPC::ConstructL( )
+ {
+ iStoredGroups = CCAStorageManagerFactory::GroupListInterfaceL();
+ iStoredContacts = CCAStorageManagerFactory::ContactListInterfaceL();
+ }
+
+// -----------------------------------------------------------------------------
+// CCAGroupPC: Destructor
+// -----------------------------------------------------------------------------
+//
+CCAGroupPC::~CCAGroupPC()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CCAGroupPC: RegisterGroupObserver
+// -----------------------------------------------------------------------------
+//
+void CCAGroupPC::RegisterGroupObserver( MCAGroupObserverPC* aGroupObserverPC )
+ {
+ ASSERT( aGroupObserverPC );
+ iGroupObserverPC = aGroupObserverPC;
+ }
+
+// -----------------------------------------------------------------------------
+// CCAGroupPC: UnRegisterGroupObserver
+// -----------------------------------------------------------------------------
+//
+void CCAGroupPC::UnRegisterGroupObserver()
+ {
+ iGroupObserverPC = NULL;
+ }
+
+// -----------------------------------------------------------------------------
+// CCAGroupPC: SetGroupEventObserverL
+// -----------------------------------------------------------------------------
+//
+void CCAGroupPC::SetGroupEventObserverL( MCAGroupEventObserverPC* aGroupEventObserverPC,
+ const TDesC& aGroupId )
+ {
+ iGroupEventObserverPC = aGroupEventObserverPC;
+
+ if ( !iGroupInterface )
+ {
+ return;
+ }
+
+ // Register this as chat observer
+ if ( iGroupEventObserverPC )
+ {
+ iGroupInterface->SetGroupEventObserverL( aGroupId, this );
+ }
+ else
+ {
+ iGroupInterface->SetGroupEventObserverL( aGroupId, NULL );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CCAGroupPC: ActiveGroupId
+// -----------------------------------------------------------------------------
+//
+const TDesC& CCAGroupPC::ActiveGroupId()
+ {
+ return iReadInterface->TargetId().Target();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCAGroupPC: ScreenName
+// -----------------------------------------------------------------------------
+//
+const TDesC& CCAGroupPC::ScreenName() const
+ {
+
+ if ( iReadInterface )
+ {
+ return iReadInterface->TargetId().ScreenName();
+ }
+
+
+ // Fix warning: #940-D: missing return statement at end of non-void function
+ else
+ {
+ return KNullDesC();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CCAGroupPC: IsLoggingOn
+// -----------------------------------------------------------------------------
+//
+TBool CCAGroupPC::IsLoggingOn() const
+ {
+ return iReadInterface->IsLoggingOn();
+ }
+
+// -----------------------------------------------------------------------------
+// CCAGroupPC: EndLoggingL
+// -----------------------------------------------------------------------------
+//
+void CCAGroupPC::EndLoggingL()
+ {
+ iReadInterface->EndLoggingL();
+ }
+
+// -----------------------------------------------------------------------------
+// CCAGroupPC: SaveChatL
+// -----------------------------------------------------------------------------
+//
+void CCAGroupPC::SaveChatL( const TDesC& aLogFilename )
+ {
+ iReadInterface->StartLoggingL( aLogFilename );
+
+ if ( iReadInterface->IsLoggingOn() )
+ {
+ iReadInterface->EndLoggingL();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CCAGroupPC: GetPropertiesL
+// -----------------------------------------------------------------------------
+//
+TInt CCAGroupPC::GetPropertiesL( TBool& aIsGroupProps )
+ {
+ if ( !iGrOps )
+ {
+ return KErrGeneral;
+ }
+
+ TInt err( KErrNone );
+ err = iGrOps->GetPropertiesL( iGroupProps, iPrivateProps );
+ if ( iGroupProps )
+ {
+ aIsGroupProps = ETrue;
+ }
+ else
+ {
+ aIsGroupProps = EFalse;
+ }
+ return err;
+
+ }
+
+// -----------------------------------------------------------------------------
+// CCAGroupPC: GroupName
+// -----------------------------------------------------------------------------
+//
+TPtrC CCAGroupPC::GroupName( ) const
+ {
+ if ( !iGroupProps )
+ {
+ return KNullDesC();
+ }
+ return iGroupProps->GroupName();
+ }
+
+// -----------------------------------------------------------------------------
+// CCAGroupPC: IsPrivateAllowed
+// -----------------------------------------------------------------------------
+//
+TEnumsPC::TImpsPropertyBoolPC CCAGroupPC::IsPrivateAllowed()
+ {
+ return ConvertTImpsPropertyBoolToTEnumsPC( iGroupProps->IsPrivateAllowed() );
+ }
+
+// -----------------------------------------------------------------------------
+// CCAGroupPC: IsOpen
+// -----------------------------------------------------------------------------
+//
+TEnumsPC::TImpsPropertyBoolPC CCAGroupPC::IsOpen()
+ {
+ return ConvertTImpsPropertyBoolToTEnumsPC( iGroupProps->IsOpen() );
+ }
+
+// -----------------------------------------------------------------------------
+// CCAGroupPC::ConvertTImpsPropertyBoolToTEnumsPC
+// -----------------------------------------------------------------------------
+//
+TEnumsPC::TImpsPropertyBoolPC CCAGroupPC::ConvertTImpsPropertyBoolToTEnumsPC
+( TImpsPropertyBool aEventSource )
+ {
+
+ switch ( aEventSource )
+ {
+ case EImpsPropUndef:
+ {
+ return TEnumsPC::EImpsPropUndef;
+ }
+ case EImpsPropNo:
+ {
+ return TEnumsPC::EImpsPropNo;
+ }
+ case EImpsPropYes:
+ {
+ return TEnumsPC::EImpsPropYes;
+ }
+
+ default:
+ {
+ return TEnumsPC::EImpsPropUndef;
+ }
+ }
+ }
+
+
+// ---------------------------------------------------------
+// CCAGroupPC::GroupCount
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CCAGroupPC::GroupCount( TBool aOnlyVisible ) const
+ {
+ return iStoredGroups->GroupCount( aOnlyVisible );
+ }
+
+
+// ---------------------------------------------------------
+// CCAGroupPC::ContactCount
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CCAGroupPC::ContactCount( TBool aSkipOfflineContacts ) const
+ {
+ return iStoredContacts->ContactCount( aSkipOfflineContacts );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCAGroupPC: InitialiseResourcesL
+// -----------------------------------------------------------------------------
+//
+void CCAGroupPC::InitialiseResourcesL( const TDesC& aGroupId )
+ {
+ //can be used as data member if used many times
+ if ( iGroupId )
+ {
+ delete iGroupId ;
+ iGroupId = NULL;
+ }
+ iGroupId = aGroupId.AllocL();
+
+ // resolve message read interface
+ //read/write interface can be done in ctor after complete refactoring
+ iReadInterface =
+ &( iChatInterface.MessageReadInterfaceL( KNullDesC, KNullDesC, *iGroupId ) );
+ iWriteInterface =
+ &( iChatInterface.MessageWriteInterfaceL( KNullDesC, KNullDesC ) );
+
+ iStoredGroup = iStoredGroups->FindGroup( *iGroupId );
+ if ( iGroupInterface )
+ {
+ iGrOps = iGroupInterface->GroupOperationsL( *iGroupId );
+ }
+ // Register this as chat observer
+ iChatInterface.RegisterChatObserver( this );
+ //register this as message error observer
+ iMessageUtils.MessageErrorInformer().RegisterObserver( this );
+ }
+
+// -----------------------------------------------------------------------------
+// CCAGroupPC: ReleaseResources
+// -----------------------------------------------------------------------------
+//
+void CCAGroupPC::ReleaseResources()
+ {
+ iChatInterface.UnregisterChatObserver( this );
+ iMessageUtils.MessageErrorInformer().UnregisterObserver( this );
+
+ delete iGroupId;
+ iGroupId = NULL;
+ }
+
+// -----------------------------------------------------------------------------
+// CCAGroupPC: ReadInterface
+// -----------------------------------------------------------------------------
+//
+MCAMessagesReadInterface& CCAGroupPC::ReadInterfaceL() const
+ {
+ if ( !iReadInterface )
+ {
+ User::Leave( KErrGeneral );
+ }
+ return *iReadInterface;
+ }
+
+// -----------------------------------------------------------------------------
+// CCAGroupPC: WriteInterface
+// -----------------------------------------------------------------------------
+//
+MCAMessagesWriteInterface& CCAGroupPC::WriteInterfaceL() const
+ {
+ if ( !iWriteInterface )
+ {
+ User::Leave( KErrGeneral );
+ }
+ return *iWriteInterface;
+ }
+
+// -----------------------------------------------------------------------------
+// CCAGroupPC: HandleChatEvent
+// -----------------------------------------------------------------------------
+//
+void CCAGroupPC::HandleChatEvent( TChatEventType aEvent, MCAMessage* aMessage )
+ {
+
+ if ( aEvent == EUnreadCountChanged && aMessage )
+ {
+ if ( aMessage->MessageType() != MCAMessage::EMessagePTOP )
+ {
+ // don't show flasher if this isn't p2p message
+ // or if there's no container (this view isn't active)
+ return;
+ }
+
+ const TDesC& wvid( aMessage->Sender() );
+
+ // nickname or wv-less contact id
+
+ if ( iGroupObserverPC && iStoredContacts )
+ {
+ iGroupObserverPC->HandleChatEvent( wvid ,
+ iStoredContacts->Identification( wvid ) ) ;
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CCAGroupPC::HandleGroupLeft
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCAGroupPC::HandleGroupLeft( TInt aReason )
+ {
+ if ( iGroupEventObserverPC )
+ {
+ iGroupEventObserverPC->HandleGroupLeft( aReason );
+ }
+ }
+
+// ---------------------------------------------------------
+// CCAGroupPC::HandleGroupPropertiesChanged()
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCAGroupPC::HandleGroupPropertiesChanged()
+ {
+ if ( iGroupEventObserverPC )
+ {
+ iGroupEventObserverPC->HandleGroupPropertiesChanged( );
+ }
+
+ }
+
+// ---------------------------------------------------------
+// CCAGroupPC::HandleMessageError()
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCAGroupPC::HandleMessageError( TInt aError, MCAMessage* aMessage )
+ {
+ TPtrC nick( KNullDesC );
+
+ if ( !iGroupObserverPC )
+ {
+ return;
+ }
+
+ if ( aMessage )
+ {
+ if ( aMessage->ContentType() == MCAMessage::EContentPicture )
+ {
+ iGroupObserverPC->HandleMessageError( aError );
+
+ return;
+ }
+
+ nick.Set( iStoredContacts->Identification( aMessage->Recipient() ) );
+ }
+
+ iGroupObserverPC->HandleMessageError( aError, nick );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCAGroupPC: SendMessageL
+// -----------------------------------------------------------------------------
+//
+void CCAGroupPC::SendMessageL( const TDesC& aMessageBuffer,
+ CDesCArrayFlat& aRecipients )
+ {
+
+ MCAMessageCreator& creator = iMessageUtils.MessageCreator();
+
+ const MCAMessageContainerInfo& info = iReadInterface->TargetId();
+
+ MCAMessageCreator::SMessageData data =
+ {
+ KMessageDataVersion,
+ 0,
+ KNullDesC,
+ KNullDesC,
+ info.ScreenName(), // Sender
+ info.Target(), // Recipient
+ NULL,
+ &aRecipients,
+ aMessageBuffer,
+ KNullDesC8,
+ KNullDesC8,
+ MCAMessage::EMessageSent
+ };
+
+ iWriteInterface->AppendL( creator.CreateMessageL( data ) );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCAGroupPC: SetActiveGroupChatL
+// -----------------------------------------------------------------------------
+//
+void CCAGroupPC::SetActiveGroupChatL( const TDesC& aGroupId )
+ {
+ if ( iGroupId )
+ {
+ delete iGroupId;
+
+ iGroupId = NULL;
+ }
+
+
+ iGroupId = aGroupId.AllocL();
+
+ iReadInterface =
+ &( iChatInterface.MessageReadInterfaceL( KNullDesC, KNullDesC, *iGroupId ) );
+
+ iStoredGroup = iStoredGroups->FindGroup( *iGroupId );
+
+ iGrOps = iGroupInterface->GroupOperationsL( *iGroupId );
+
+
+ if ( !iGroupId )
+ {
+ iGroupId = KNullDesC().AllocL();
+ }
+
+ }
+
+// -----------------------------------------------------------------------------
+// CCAGroupPC::GetGroupPairArrayLC
+// -----------------------------------------------------------------------------
+//
+MCAServerContactsArrayPC* CCAGroupPC::GetGroupPairArrayLC()
+ {
+ RPointerArray<MCAStoredGroup> groupList;
+
+ CDesCArray* groupNames = new ( ELeave ) CDesCArrayFlat( KArrayGranularity );
+ CleanupStack::PushL( groupNames );
+ CDesCArray* groupIds = new ( ELeave ) CDesCArrayFlat( KArrayGranularity );
+ CleanupStack::PushL( groupIds );
+
+ CleanupClosePushL( groupList );
+ iStoredGroups->PopulateGroupsListL( groupList );
+
+ TInt count( groupList.Count() );
+ for ( TInt index( 0 ); index < count; index++ )
+ {
+ if ( 0 != groupList[ index ]->GroupId().CompareC( *iGroupId ) )
+ {
+ // other than current group
+ groupNames->AppendL( groupList[ index ]->GroupName() );
+ groupIds->AppendL( groupList[ index ]->GroupId() );
+ }
+ }
+ //Codescanner warning ignored
+ CleanupStack::PopAndDestroy(); // groupList.Close()
+ //Codescanner warning ignored
+ CleanupStack::Pop( 2, groupNames ); //groupIds,groupNames
+
+ CCAServerContactsArrayPC* pairsArray =
+ CCAServerContactsArrayPC::NewL( groupNames, groupIds, KNullDesC );
+
+ //Not owned. Transfer ownership of pairsArray to the caller.
+ //since we return as MCAServerContactsArrayPC object sliciing will happen
+ //so its better to push the original data onto stack
+ CleanupStack::PushL( pairsArray );
+
+ return pairsArray;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCAGroupPC::IsActiveGroupChat
+// -----------------------------------------------------------------------------
+//
+TBool CCAGroupPC::IsActiveGroupChat( const TDesC& aGroupId )
+
+ {
+ TBool retValue = EFalse;
+
+ if ( iGroupId )
+ {
+ if ( !CAUtils::NeutralCompare( aGroupId, *iGroupId ) )
+ {
+ retValue = ETrue;
+ }
+ }
+
+ return retValue;
+ }
+
+
+//-----------------------------------------------------------
+//CCAGroupPC::MessageCount
+//-----------------------------------------------------------
+TInt CCAGroupPC::MessageCount()
+ {
+ if ( iReadInterface )
+ {
+ return iReadInterface->MessageCount();
+ }
+
+ return 0;
+
+ }
+
+// End of File
+