--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/imstutils/imconversationview/imcvuiengine/src/cimcvenginestoragelistener.cpp Wed Sep 01 12:33:36 2010 +0100
@@ -0,0 +1,282 @@
+/*
+* Copyright (c) 2008-2009 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: active object class for interacting with servicetab for link and Display Name
+*
+*/
+
+// INCLUDE FILES
+
+#include "cimcvenginestoragelistener.h"
+#include "cimcvenginemessagehandler.h"
+#include "imcvlogger.h"
+
+//system includes
+
+// ================= MEMBER FUNCTIONS =======================
+
+// --------------------------------------------------------------------------
+// CIMCVEngineStorageListener::CIMCVEngineStorageListener
+// --------------------------------------------------------------------------
+//
+CIMCVEngineStorageListener::CIMCVEngineStorageListener(MIMCVEngineStorageObserver& aObserver )
+ : CActive( CActive::EPriorityStandard ),
+ iObserver( aObserver )
+ {
+ CActiveScheduler::Add( this );
+ }
+
+
+// --------------------------------------------------------------------------
+// CIMCVEngineStorageListener::ConstructL
+// --------------------------------------------------------------------------
+//
+void CIMCVEngineStorageListener::ConstructL()
+ {
+ IM_CV_LOGS(TXT("CIMCVEngineStorageListener::ConstructL : start"));
+ TInt err = RProperty::Define(KConvViewUID,KXspIdServiceIDKey,RProperty::EText);
+ if(KErrAlreadyExists != err && KErrNone != err )
+ {
+ User::LeaveIfError(err);
+ }
+ //define properties that engine will publish.
+ err = RProperty::Define(KConvViewUID,KContactLinkDisplayNameKey,RProperty::ELargeText);
+ if(KErrAlreadyExists != err && KErrNone != err )
+ {
+ User::LeaveIfError(err);
+ }
+ //Attaching iProperty with the property published by engine to get contact link and display name.
+ err = iProperty.Attach(KConvViewUID,KContactLinkDisplayNameKey);
+ User::LeaveIfError(err);
+ IM_CV_LOGS(TXT("CIMCVEngineStorageListener::ConstructL : end"));
+ }
+// --------------------------------------------------------------------------
+// CIMCVEngineStorageListener::NewL
+// --------------------------------------------------------------------------
+//
+CIMCVEngineStorageListener* CIMCVEngineStorageListener::NewL(MIMCVEngineStorageObserver& aObserver)
+ {
+ CIMCVEngineStorageListener* self = new(ELeave) CIMCVEngineStorageListener( aObserver );
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+// --------------------------------------------------------------------------
+// CIMCVEngineStorageListener::GetContactLinkInfoL
+// --------------------------------------------------------------------------
+//
+void CIMCVEngineStorageListener::GetContactLinkInfoL(TInt aServiceId, const TDesC& aXspID)
+ {
+ IM_CV_LOGS(TXT("CIMCVEngineStorageListener::GetContactLinkInfoL : start"));
+ IM_CV_LOGS(TXT("CIMCVEngineStorageListener::GetContactLinkInfoL aServiceId= %d"),aServiceId );
+ IM_CV_LOGS(TXT("CIMCVEngineStorageListener::GetContactLinkInfoL aXspID= %S"),&aXspID );
+ StartListening();
+
+ TInt length = KMaxServiceIdLength + aXspID.Length() + KDelimiter().Length();
+ HBufC* userDetails = HBufC::NewLC(length);
+
+ TPtr userDetailsPtr = userDetails->Des();
+ userDetailsPtr.Zero();
+ userDetailsPtr.AppendNum(aServiceId);
+ userDetailsPtr.Append(KDelimiter());
+ userDetailsPtr.Append(aXspID);
+
+ RProperty::Set(KConvViewUID,KXspIdServiceIDKey,userDetails->Des());
+ if( !iWait.IsStarted() )
+ {
+ // codescanner warning can be ignored, we are not starting an active object but
+ // CActiveSchedulerWait.
+ iWait.Start();
+ }
+ CleanupStack::PopAndDestroy(userDetails);
+ IM_CV_LOGS(TXT("CIMCVEngineStorageListener::GetContactLinkInfoL : end"));
+ }
+
+// ---------------------------------------------------------
+// CIMCVEngineStorageListener::~CIMCVEngineStorageListener()
+// C++ Destructor
+// ---------------------------------------------------------
+//
+CIMCVEngineStorageListener::~CIMCVEngineStorageListener()
+ {
+ if( iWait.IsStarted() )
+ {
+ // codescanner warning can be ignored, we are not starting an active object but
+ // this is CActiveSchedulerWait.
+ iWait.AsyncStop();
+ }
+ StopListening(); // Cancel any request, if outstanding
+ // delete the earlier defined property
+ RProperty::Delete(KConvViewUID,KXspIdServiceIDKey);
+ RProperty::Delete(KConvViewUID,KContactLinkDisplayNameKey);
+ iProperty.Close(); // Destroy the property object
+ }
+
+// ---------------------------------------------------------
+// CIMCVEngineStorageListener::RunL()
+// ---------------------------------------------------------
+//
+void CIMCVEngineStorageListener::RunL()
+ {
+ IM_CV_LOGS(TXT("CIMCVEngineStorageListener::RunL : start"));
+ if( iStatus.Int() == KErrNone )
+ {
+ // TBuf <KMaxDisplayNameContactLinkLength> servId_usrId_name_link;
+ HBufC16* servId_usrId_name_link = HBufC16::New(KMaxDisplayNameContactLinkLength);
+ TPtr servId_usrId_name_linkPtr( servId_usrId_name_link->Des() );
+ //Get the property in "ServiceId:UserId:Name:ContactLink" formate
+ iProperty.Get(KConvViewUID,KContactLinkDisplayNameKey,servId_usrId_name_linkPtr );
+
+ IM_CV_LOGS(TXT("CIMCVEngineStorageListener::RunL received property = %S"),&servId_usrId_name_linkPtr );
+
+ TInt posOfDelimiter = servId_usrId_name_link->Find(KDelimiter);
+ if(KErrNotFound != posOfDelimiter )
+ {
+ TInt serviceId;
+ HBufC16* userID = NULL;
+ HBufC16* contactLink = NULL;
+ HBufC16* displayName = NULL;
+
+ TBuf<KMaxServiceIdLength> serviceIdBuf;
+ TPtrC ptr(servId_usrId_name_link->Left(posOfDelimiter));
+ serviceIdBuf = ptr;
+ TLex16 lex(serviceIdBuf);
+ lex.Val(serviceId);
+
+ TPtrC usrId_name_link = servId_usrId_name_link->Right(servId_usrId_name_link->Length() - (posOfDelimiter+ 1) );
+ posOfDelimiter = usrId_name_link.Find(KDelimiter);
+ //extracting user id
+ if(KErrNotFound != posOfDelimiter )
+ {
+ userID = (usrId_name_link.Left(posOfDelimiter)).AllocLC();
+ }
+
+ //extracting display name.
+ TPtrC name_link = usrId_name_link.Right(usrId_name_link.Length() - (posOfDelimiter+ 1) );
+ posOfDelimiter = name_link.Find(KDelimiter);
+ if(KErrNotFound != posOfDelimiter )
+ {
+ displayName = (name_link.Left(posOfDelimiter)).AllocLC();
+ }
+
+ //extracting contact link
+ TPtrC link = name_link.Right(name_link.Length() - (posOfDelimiter+ 1) );
+ contactLink = link.AllocLC();
+
+ HBufC8* convertedLink = NULL;
+
+ if(contactLink)
+ {
+ convertedLink = HBufC8::NewLC(contactLink->Length());
+ TPtr8 convertedLinkPtr = convertedLink->Des();
+ convertedLinkPtr.Copy(*contactLink);
+ }
+ if( !convertedLink )
+ {
+ convertedLink = KNullDesC8().AllocLC();
+ }
+
+ if(convertedLink && userID && displayName)
+ {
+ iObserver.HandleServiceBuddyDetailsFetchedL( serviceId,*userID,*convertedLink,*displayName);
+
+ IM_CV_LOGS(TXT("storage listener RunL userID = %S"),&(*userID) );
+ IM_CV_LOGS(TXT("storage listener RunL convertedLink = %S"),&(*convertedLink) );
+ IM_CV_LOGS(TXT("storage listener RunL displayName = %S"),&(*displayName) );
+
+ }
+ delete (servId_usrId_name_link);
+ //delete all alocated memory
+ if(convertedLink)
+ {
+ CleanupStack::PopAndDestroy(convertedLink);
+ }
+ if(contactLink)
+ {
+ CleanupStack::PopAndDestroy(contactLink);
+ }
+ if(displayName)
+ {
+ CleanupStack::PopAndDestroy(displayName);
+ }
+ if(userID)
+ {
+ CleanupStack::PopAndDestroy(userID);
+ }
+ }
+ }
+ if( iWait.IsStarted() )
+ {
+ // codescanner warning can be ignored, we are not starting an active object but
+ // this is CActiveSchedulerWait.
+ iWait.AsyncStop();
+ }
+
+ IM_CV_LOGS(TXT("CIMCVEngineStorageListener::RunL : end"));
+ }
+
+// ---------------------------------------------------------
+// CIMCVEngineStorageListener::RunL()
+// ---------------------------------------------------------
+//
+void CIMCVEngineStorageListener::DoCancel()
+ {
+ iProperty.Cancel();
+ }
+
+// ---------------------------------------------------------
+// CIMCVEngineStorageListener::StartListening()
+// ---------------------------------------------------------
+//
+void CIMCVEngineStorageListener::StartListening()
+ {
+ if( !IsActive() )
+ {
+ iProperty.Subscribe(iStatus);
+ SetActive(); // Tell scheduler a request is active
+ }
+ }
+
+// ---------------------------------------------------------
+// CIMCVEngineStorageListener::StopListening()
+// ---------------------------------------------------------
+//
+void CIMCVEngineStorageListener::StopListening()
+ {
+ if( IsActive() )
+ {
+ Cancel(); // Cancel any request, if outstanding
+ }
+ }
+
+// ---------------------------------------------------------
+// CIMCVEngineStorageListener::StopListening()
+// ---------------------------------------------------------
+//
+TInt CIMCVEngineStorageListener::RunError( TInt aError )
+ {
+ IM_CV_LOGS(TXT("CIMCVEngineStorageListener::RunError : start"));
+ IM_CV_LOGS(TXT("CIMCVEngineStorageListener::RunError : end"));
+ if( iWait.IsStarted() )
+ {
+ // codescanner warning can be ignored, we are not starting an active object but
+ // this is CActiveSchedulerWait.
+ iWait.AsyncStop();
+ }
+ return aError;
+ }
+
+
+// End of File
+