wvuing/wvuiprocess/Src/CCAInvitationPC.cpp
changeset 0 094583676ce7
--- /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