IMPSengine/imapi/src/imstatusimpl.cpp
changeset 0 094583676ce7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/IMPSengine/imapi/src/imstatusimpl.cpp	Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,323 @@
+/*
+* Copyright (c) 2004 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: Implements the CIMStatusFetcher and the MImStatusList interface.
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "imstatusimpl.h"
+#include "apiutils.h"
+#include "imconnectionimpl.h"
+#include "cntdbreader.h"
+#include "impserrors.h"
+#include "imerrors.h"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CIMStatusFetcherImpl::CIMStatusFetcherImpl
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CIMStatusFetcherImpl::CIMStatusFetcherImpl( CImConnectionImpl* aImConnection )
+        :   iImConnection( aImConnection )
+    {
+#ifdef _DEBUG
+    CImApiLogger::Log( _L( "CIMStatusFetcherImpl: Construction" ) );
+#endif
+
+    }
+
+// -----------------------------------------------------------------------------
+// CIMStatusFetcherImpl::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CIMStatusFetcherImpl::ConstructL()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CIMStatusFetcherImpl::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CIMStatusFetcherImpl* CIMStatusFetcherImpl::NewL( CImConnectionImpl* aImConnection )
+    {
+    CIMStatusFetcherImpl* self = new( ELeave ) CIMStatusFetcherImpl( aImConnection );
+    CleanupStack::PushL( self );
+
+    self->ConstructL();
+    CleanupStack::Pop();
+
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CIMStatusFetcherImpl::~CIMStatusFetcherImpl
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CIMStatusFetcherImpl::~CIMStatusFetcherImpl()
+    {
+#ifdef _DEBUG
+    CImApiLogger::Log( _L( "CIMStatusFetcherImpl: Destruction" ) );
+#endif
+
+    }
+
+// -----------------------------------------------------------------------------
+// CIMStatusFetcherImpl::RegisterL
+// Starts the registration sequence
+// -----------------------------------------------------------------------------
+//
+TInt CIMStatusFetcherImpl::RegisterObserverL( MImStatusObserver* aObserver )
+    {
+
+#ifdef _DEBUG
+    CImApiLogger::Log( _L( "CIMStatusFetcherImpl: RegisterL" ) );
+#endif
+
+    if ( iClientObserver )
+        {
+        return KImApiErrAllreadyRegistered;
+        }
+
+    iClientObserver = aObserver;
+    iPresenceClient.RegisterL(
+        ImpsEngine(),
+        ImpsPresenceHandler(),
+        ClientId(),
+        ETrue,
+        0 );
+
+    iPresenceClient.RegisterErrorObserverL( ImpsErrorHandler() );
+
+    return KErrNone;
+
+
+    }
+
+// -----------------------------------------------------------------------------
+// CIMStatusFetcherImpl::UnregisterL
+// Unregisters the client from the WV engine
+// -----------------------------------------------------------------------------
+//
+TInt CIMStatusFetcherImpl::UnregisterObserverL()
+    {
+#ifdef _DEBUG
+    CImApiLogger::Log( _L( "CIMStatusFetcherImpl: UnregisterL" ) );
+#endif
+
+    iPresenceClient.Unregister();
+    iPresenceClient.UnregisterErrorObserverL();
+
+    return KErrNone;
+
+    }
+
+// -----------------------------------------------------------------------------
+// CIMStatusFetcherImpl::GetOnlineStatusL
+// Fetches the online status of the WV users given by WV user IDs in async way
+// -----------------------------------------------------------------------------
+//
+TInt CIMStatusFetcherImpl::GetOnlineStatusL( const CDesCArray& aUserIds )
+    {
+#ifdef _DEBUG
+    CImApiLogger::Log( _L( "CIMStatusFetcherImpl: GetOnlineStatusL" ) );
+#endif
+    iPresenceClient.GetPresenceL( aUserIds );
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CIMStatusFetcherImpl::GetOnlineStatusL
+// Fetches the online status of the WV users given by contact IDs in async way
+// -----------------------------------------------------------------------------
+//
+TInt CIMStatusFetcherImpl::GetOnlineStatusL( const CContactIdArray& aContactIds )
+    {
+
+#ifdef _DEBUG
+    CImApiLogger::Log( _L( "CIMStatusFetcherImpl: GetOnlineStatusL" ) );
+    CImApiLogger::Log( _L( "    Item count: %d" ), aContactIds.Count() );
+#endif
+
+    CDesCArraySeg* userIds = new ( ELeave ) CDesCArraySeg( 1 );
+    CleanupStack::PushL( userIds );
+    iImConnection->ContactDBReader().ReadWVIdsL( aContactIds, *userIds );
+
+#ifdef _DEBUG
+    for ( TInt i( 0 ); i < userIds->MdcaCount(); ++i )
+        {
+        TPtrC tmp = ( *userIds )[i];
+        CImApiLogger::Log( _L( "    User ID: %S" ), &tmp );
+        }
+#endif
+
+    TInt opId( 0 );
+
+    TRAPD( err, opId = iPresenceClient.GetPresenceL( *userIds ) );
+    CleanupStack::PopAndDestroy(); // >> userIds
+
+
+    if ( err != KErrNone )
+        {
+        return opId;
+        }
+
+    return KErrGeneral;
+    }
+
+// -----------------------------------------------------------------------------
+// CIMStatusFetcherImpl::HandleCompleteL
+// Implementation of MImpsPresenceHandler::HandleCompleteL
+// -----------------------------------------------------------------------------
+//
+void CIMStatusFetcherImpl::HandleCompleteL( TInt /*aStatus*/,
+                                            TInt /*aOpId*/ )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CIMStatusFetcherImpl::HandleNewPresenceL
+// Implementation of MImpsPresenceHandler::HandleNewPresenceL
+// Creates the CIMStatusList object with the IM statuses
+// -----------------------------------------------------------------------------
+//
+void CIMStatusFetcherImpl::HandleNewPresenceL( TInt aStatus,
+                                               TInt aOpId,
+                                               CImpsPresenceList& aPresList )
+    {
+#ifdef _DEBUG
+    CImApiLogger::Log( _L( "CIMStatusFetcherImpl: HandleNewPresenceL" ) );
+#endif
+
+    CIMStatusListImpl* statusList = CIMStatusListImpl::NewL( aPresList );
+    CleanupStack::PushL( statusList );
+
+    if ( iClientObserver )
+        {
+        TRAPD( err, iClientObserver->HandleGetOnlineStatusL(
+                   aOpId,
+                   aStatus,
+                   statusList ) );
+        }
+
+    CleanupStack::PopAndDestroy();
+    }
+
+// -----------------------------------------------------------------------------
+// CIMStatusFetcherImpl::HandleErrorL
+// Implementation of MImpsPresenceHandler::HandleErrorL
+// -----------------------------------------------------------------------------
+//
+void CIMStatusFetcherImpl::HandleErrorL( TInt aStatus,
+                                         TInt aOpId,
+                                         const TDesC* /*aDescription*/,
+                                         const CImpsDetailed* /*aDetailedRes*/ )
+    {
+#ifdef _DEBUG
+    CImApiLogger::Log( _L( "CIMStatusFetcherImpl: Error received: %d" ), aStatus );
+#endif
+
+    TInt apiError;
+
+    switch ( aStatus )
+        {
+        case KImpsErrorNotLogged:
+            apiError = KImApiErrNotLogged;
+            break;
+
+        default:
+            apiError = KImApiGeneralError;
+        }
+
+
+    if ( iClientObserver )
+        {
+        TRAPD( err, iClientObserver->HandleGetOnlineStatusL(
+                   aOpId,
+                   apiError,
+                   NULL ) );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CIMStatusFetcherImpl::ImpsPresenceHandler
+//
+// -----------------------------------------------------------------------------
+//
+MImpsPresenceHandler* CIMStatusFetcherImpl::ImpsPresenceHandler()
+    {
+    return this;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CIMStatusFetcherImpl::ImpsErrorHandler
+//
+// -----------------------------------------------------------------------------
+//
+MImpsErrorHandler& CIMStatusFetcherImpl::ImpsErrorHandler()
+    {
+    return *this;
+    }
+
+// -----------------------------------------------------------------------------
+// CIMStatusFetcherImpl::ImpsPresenceClient
+//
+// -----------------------------------------------------------------------------
+//
+RImpsPresenceClient& CIMStatusFetcherImpl::ImpsPresenceClient()
+    {
+    return iPresenceClient;
+    }
+
+// -----------------------------------------------------------------------------
+// CIMStatusFetcherImpl::ImpsEngine
+//
+// -----------------------------------------------------------------------------
+//
+RImpsEng& CIMStatusFetcherImpl::ImpsEngine()
+    {
+    return iImConnection->ImpsEngine();
+    }
+
+// -----------------------------------------------------------------------------
+// CIMStatusFetcherImpl::ClientId
+//
+// -----------------------------------------------------------------------------
+//
+TDesC& CIMStatusFetcherImpl::ClientId()
+    {
+    return *iClientId;
+    }
+
+// -----------------------------------------------------------------------------
+// CIMStatusFetcherImpl::ClientObserver
+//
+// -----------------------------------------------------------------------------
+//
+MImStatusObserver* CIMStatusFetcherImpl::ClientObserver()
+    {
+    return iClientObserver;
+    }
+
+
+//  End of File