--- /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 <e32std.h>
+
+
+// ============================ 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<MCAInvitation*>( 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