diff -r 000000000000 -r 094583676ce7 wvuing/wvuiprocess/Src/CCAInvitationPC.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wvuing/wvuiprocess/Src/CCAInvitationPC.cpp Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,544 @@ +/* +* 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: Singleton base class +* +*/ + + + +// INCLUDE FILES +#include "CCAInvitationPC.h" +#include "MCAInvitationObserverPC.h" + +#include "MCAMessage.h" +#include "CCAStorageManagerFactory.h" +#include "MCAStoredContact.h" +#include "MCAStoredContacts.h" +#include "MCAInvite.h" + +#include "MCAMainViewArrayPC.h" +#include "MCAInvitation.h" + +#include "ChatDebugAssert.h" +#include "ChatDebugPrint.h" + + +#include "MCAChatInterface.h" +#include "MCAProcessManager.h" +#include "CCAProcessManagerFactory.h" +#include "CAUtils.h" +#include "CCAEngine.h" +#include "CCALoginPC.h" +#include + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CCAInvitationPC::CCAInvitationPC +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CCAInvitationPC::CCAInvitationPC( CCAEngine& aEngine, MCAChatInterface& aChatInterface ) + : iEngine( aEngine ), + iChatInterface( aChatInterface ), + iInviteInterface( *iEngine.GetInvitationInterface() ) + { + } + + +// ----------------------------------------------------------------------------- +// CCAInvitationPC::CCAInvitationPC +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CCAInvitationPC* CCAInvitationPC::NewL( CCAEngine& aEngine, MCAChatInterface& aChatInterface ) + { + CCAInvitationPC* self = new ( ELeave ) CCAInvitationPC( aEngine, aChatInterface ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CCAInvitationPC::~CCAInvitationPC +// Destructor +// ----------------------------------------------------------------------------- +// +CCAInvitationPC::~CCAInvitationPC() + { + + iInvitationArray.Reset(); + iInvitationArray.Close(); + iEngine.GetInvitationInterface()->RemoveInviteObserver( this ); + } + +// ----------------------------------------------------------------------------- +// CCAInvitationPC::ConstructL +// ----------------------------------------------------------------------------- +// +void CCAInvitationPC::ConstructL( ) + { + // codescanner warning can be ignored + iInviteInterface.PopulateInviteList( iInvitationArray ); + iCurrentActiveInvitation = 0; + iEngine.GetInvitationInterface()->AddInviteObserver( this ); + } + +// ----------------------------------------------------------------------------- +// CCAInvitationPC::RegisterObserver +// ----------------------------------------------------------------------------- +// +void CCAInvitationPC::RegisterObserver( MCAInvitationObserverPC* aObserver ) + { + ASSERT( aObserver ); + + iObserver = aObserver; + } + +// ----------------------------------------------------------------------------- +// CCAInvitationPC::UnRegisterObserver +// ----------------------------------------------------------------------------- +// +void CCAInvitationPC::UnRegisterObserver() + { + + iObserver = NULL; + } + + + +// --------------------------------------------------------- +// CCAInvitationPC::InvitationUserIDL +// --------------------------------------------------------- +// +const TDesC& CCAInvitationPC::InvitationUserIDL( TInt aIndex ) + { + if ( aIndex < 0 || aIndex >= iInvitationArray.Count() ) + { + CHAT_DP( D_CHAT_LIT( "!!! check your logic, trying to delete at %d !!!" ), + aIndex ); + return KNullDesC(); + } + + MCAInvitation* inv = iInvitationArray[ aIndex ]; + return inv->UserID(); + } + +// --------------------------------------------------------- +// CCAInvitationPC::InvUserIdentificationL +// --------------------------------------------------------- +// +TPtrC CCAInvitationPC::InvUserIdentificationL( TInt aIndex ) + { + + if ( aIndex < 0 || aIndex >= iInvitationArray.Count() ) + { + CHAT_DP( D_CHAT_LIT( "!!! check your logic, trying to delete at %d !!!" ), + aIndex ); + return KNullDesC(); + } + MCAInvitation* inv = iInvitationArray[ aIndex ]; + MCAStoredContacts* contacts = CCAStorageManagerFactory::ContactListInterfaceL(); + return contacts->Identification( inv->UserID() ); + } + +// --------------------------------------------------------- +// CCAInvitationPC::ReceivedAt +// --------------------------------------------------------- +// +TTime CCAInvitationPC::ReceivedAt( TInt aIndex ) + { + TTime receviedat( 0 ); + if ( aIndex < 0 || aIndex >= iInvitationArray.Count() ) + { + CHAT_DP( D_CHAT_LIT( "!!! check your logic, trying to delete at %d !!!" ), + aIndex ); + return receviedat; + } + MCAInvitation* inv = iInvitationArray[ aIndex ]; + receviedat = inv->ReceivedAt(); + return receviedat; + } + +// --------------------------------------------------------- +// CCAInvitationPC::Message +// --------------------------------------------------------- +// +const TDesC& CCAInvitationPC::Message( TInt aIndex ) + { + + if ( aIndex < 0 || aIndex >= iInvitationArray.Count() ) + { + CHAT_DP( D_CHAT_LIT( "!!! check your logic, trying to delete at %d !!!" ), + aIndex ); + return KNullDesC; + } + MCAInvitation* inv = iInvitationArray[ aIndex ]; + return inv->Message(); + } + +// --------------------------------------------------------- +// CCAInvitationPC::ReceivedAt +// --------------------------------------------------------- +// +const TDesC& CCAInvitationPC::GroupName( TInt aIndex ) + { + if ( aIndex < 0 || aIndex >= iInvitationArray.Count() ) + { + CHAT_DP( D_CHAT_LIT( "!!! check your logic, trying to delete at %d !!!" ), + aIndex ); + return KNullDesC; + } + MCAInvitation* inv = iInvitationArray[ aIndex ]; + return inv->GroupId(); + } + +// ----------------------------------------------------------------------------- +// CCAInvitationPC: SetActiveInvitation +// ----------------------------------------------------------------------------- +// +void CCAInvitationPC::SetActiveInvitation( const TInt aIndex ) + { + iCurrentActiveInvitation = aIndex; + + } + +// --------------------------------------------------------- +// CCAPrivateChatListContainer::HandleInvitation() +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CCAInvitationPC::HandleInvitationEventL( + TInviteEventType aEvent, const MCAInvitation* aInvitation ) + { + TInt count = iInvitationArray.Count(); + switch ( aEvent ) + { + case ENewInvite: + { + iInvitationArray.Append( aInvitation ); + + if ( iObserver ) + { + iObserver->HandleInvitationEventL( TEnumsPC::ENewInvite, count ); + } + break; + } + case EInviteCancel: // Flowthrough + case EInviteExpired: + { + TInt inviteIndex = FindIndexForInvitation( aInvitation ); + if ( inviteIndex != KErrNotFound ) + { + Delete( inviteIndex ); + } + break; + } + + default: + { + break; + } + } + } + +// --------------------------------------------------------- +// CCAInvitationPC::HandleInvitationResponse() +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CCAInvitationPC::HandleInvitationResponse( + TBool /*aAcceptance*/, + const TDesC& /*aUserId*/, + const TDesC& /*aGroupName*/, + const TDesC& /*aResponse*/ ) + { + // nothing to do here since CCAppUi shows the dialog + } + + +// --------------------------------------------------------- +// CCAInvitationPC::GetActiveInvitationIndex() +// (other items were commented in a header). +// --------------------------------------------------------- +// +TInt CCAInvitationPC::GetActiveInvitationIndex() + { + return iCurrentActiveInvitation; + } + +// --------------------------------------------------------- +// CCAInvitationPC::IsInvitationUnread() +// (other items were commented in a header). +// --------------------------------------------------------- +// +TBool CCAInvitationPC::IsInvitationUnread( TInt aIndex ) + { + if ( aIndex < 0 || aIndex >= iInvitationArray.Count() ) + { + CHAT_DP( D_CHAT_LIT( "!!! check your logic, trying to delete at %d !!!" ), + aIndex ); + return KErrGeneral; + } + MCAInvitation* inv = iInvitationArray[ aIndex ]; + return inv->IsRead(); + } + +// --------------------------------------------------------- +// CCAInvitationPC::SetInvitationAsReadL() +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CCAInvitationPC::SetInvitationAsReadL( TInt aIndex ) + { + if ( aIndex < 0 || aIndex >= iInvitationArray.Count() ) + { + CHAT_DP( D_CHAT_LIT( "!!! check your logic, trying to delete at %d !!!" ), + aIndex ); + return; + } + MCAInvitation* inv = iInvitationArray[ aIndex ]; + inv->SetInvitationAsReadL(); + } + +// --------------------------------------------------------- +// CCAInvitationPC::GetInvitationIndex() +// Resolves the tabindex to invitationarrayindex. +// (other items were commented in a header). +// --------------------------------------------------------- +// +TInt CCAInvitationPC::GetInvitationIndex( TInt aTabIndex ) + { + TInt count = InvitationCount(); + TInt invitationIndex = ( count - 1 ) - aTabIndex; + return invitationIndex; + } + +// ----------------------------------------------------------------------------- +// CCAInvitationPC: InvitationCount +// ----------------------------------------------------------------------------- +// +TInt CCAInvitationPC::InvitationCount( ) + { + return iInvitationArray.Count(); + } + +// ----------------------------------------------------------------------------- +// CCAInvitationPC: InvitationCount +// ----------------------------------------------------------------------------- +// +void CCAInvitationPC::DeleteInvitationL( TInt aInvitationIndex ) + { + if ( aInvitationIndex < 0 ) // negative indices shouldn't exist + { + CHAT_DP( D_CHAT_LIT( "!!! check your logic, trying to delete at %d !!!" ), + aInvitationIndex ); + return; + } + + MCAInvitation* inv = iInvitationArray[ aInvitationIndex ]; + MCAMainViewArrayPC* mainViewArrayPC = CCAProcessManagerFactory::InstanceL()-> + GetProcessManager()->GetArrayInterface(); + + mainViewArrayPC->FindInvitationAndDelete( inv->InviteID() ); + + iInviteInterface.RemoveInvitationL( inv ); + iInvitationArray.Remove( aInvitationIndex ); + + } + +// ----------------------------------------------------------------------------- +// CCAInvitationPC: RejectInvitationL() +// ----------------------------------------------------------------------------- +// +void CCAInvitationPC::ReplyInvitationL( const TInt aInvitationIndex, + const TBool aInviteAccepted, + const TDesC& aResponse, + const TDesC& aScreenName ) + { + if ( aInvitationIndex < 0 || aInvitationIndex >= iInvitationArray.Count() ) + { + CHAT_DP( D_CHAT_LIT( "!!! check your logic, trying to delete at %d !!!" ), + aInvitationIndex ); + return; + } + MCAInvitation* inv = iInvitationArray[ aInvitationIndex ]; + MCAMainViewArrayPC* mainViewArrayPC = CCAProcessManagerFactory::InstanceL()-> + GetProcessManager()->GetArrayInterface(); + mainViewArrayPC->FindInvitationAndDelete( inv->InviteID() ); + + iInviteInterface.ReplyInvitationL( inv, aInviteAccepted, aResponse, aScreenName ); + iInvitationArray.Remove( aInvitationIndex ); + + } + +// ----------------------------------------------------------------------------- +// CCAInvitationPC: RejectReason() +// ----------------------------------------------------------------------------- +// +HBufC* CCAInvitationPC::RejectReason() + { + return iInviteInterface.RejectReasonPtr(); + } + +// ----------------------------------------------------------------------------- +// CCAInvitationPC::FindIndexForInvitation +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CCAInvitationPC::FindIndexForInvitation( + const MCAInvitation* aInvitation ) const + { + return iInvitationArray.Find( aInvitation ); + } + +// --------------------------------------------------------- +// CCAInvitationPC::Delete +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CCAInvitationPC::Delete( TInt aIndex ) + { + if ( aIndex < 0 ) // negative indices shouldn't exist + { + CHAT_DP( D_CHAT_LIT( "!!! check your logic, trying to delete at %d !!!" ), + aIndex ); + return; + } + else if ( aIndex < iInvitationArray.Count() ) + { + iInvitationArray.Remove( aIndex ); + } + } + +// --------------------------------------------------------- +// CCAInvitationPC::DeleteSingleListViewInvitationL +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CCAInvitationPC::DeleteSingleListViewInvitationL( const TDesC& aInviteID /*TInt aIndex*/ ) + { + for ( TInt index = 0; index < iInvitationArray.Count();index++ ) + { + MCAInvitation* inviteItem = + dynamic_cast( iInvitationArray[ index ] ); + + if ( CAUtils::NeutralCompare( aInviteID, inviteItem->InviteID() ) == 0 ) + { + iInviteInterface.RemoveInvitationL( inviteItem ); + iInvitationArray.Remove( index ); + break; + } + } + } + +// --------------------------------------------------------- +// CCAInvitationPC::FindInvitationIndex +// (other items were commented in a header). +// --------------------------------------------------------- +// +TInt CCAInvitationPC::FindInvitationIndex( const TDesC& aWvId, TTime aInviteTime ) + { + for ( TInt index = 0; index < iInvitationArray.Count(); index++ ) + { + MCAInvitation* inv = iInvitationArray[ index ]; + + if ( ( CAUtils::NeutralCompare( aWvId, inv->UserID() ) == 0 ) && + ( inv->ReceivedAt() == aInviteTime ) ) + { + return index; + } + } + + return -1; + + } + + +// --------------------------------------------------------- +// CCAInvitationPC::FindInvitationIndex +// Based on invite id. The ablove method based on user id and +// time will be removed. +// --------------------------------------------------------- +// +TInt CCAInvitationPC::FindInvitationIndex( const TDesC& aInviteId ) + { + for ( TInt index = 0; index < iInvitationArray.Count(); index++ ) + { + MCAInvitation* inv = iInvitationArray[ index ]; + + if ( CAUtils::NeutralCompare( aInviteId, inv->InviteID() ) == 0 ) + { + return index; + } + } + + return -1; + + } +// --------------------------------------------------------- +// CCAInvitationPC::UnreadInvitesCount +// (other items were commented in a header). +// --------------------------------------------------------- +// +TInt CCAInvitationPC::UnreadInvitesCount() const + { + return iEngine.GetInvitationInterface()->UnreadInvitesCount(); + } + +// --------------------------------------------------------- +// CCAInvitationPC::UnreadInvitesCount +// (other items were commented in a header). +// --------------------------------------------------------- + +const TDesC& CCAInvitationPC::UnresdInvitationInfo() + { + for ( TInt index = 0; index < iInvitationArray.Count(); index++ ) + { + MCAInvitation* inv = iInvitationArray[ index ]; + if ( ! inv->IsRead() ) + { + return inv->InviteID(); + } + } + + return KNullDesC(); + } + +// --------------------------------------------------------- +// CCAInvitationPC::UnreadInvitesCount +// (other items were commented in a header). +// --------------------------------------------------------- +// +const TDesC& CCAInvitationPC::GetInviteID( TInt aInvitationIndex ) + { + for ( TInt index = 0; index < iInvitationArray.Count(); index++ ) + { + if ( index == aInvitationIndex ) + { + MCAInvitation* inv = iInvitationArray[ index ]; + return inv->InviteID(); + } + } + + return KNullDesC(); + } + + + +//End Of File