diff -r a3a1ae9acec6 -r da5135c61bad meetingrequest/mrcalremoteattachment/api/inc/ccalremoteattachmentapi.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/meetingrequest/mrcalremoteattachment/api/inc/ccalremoteattachmentapi.inl Wed Mar 31 21:08:33 2010 +0300 @@ -0,0 +1,80 @@ +/* +* Copyright (c) 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: +* +*/ + +#include +#include + +// simple wrapper class with array deletion on close +class RImplInfoPtrArrayCalRemoteAttachment : public RImplInfoPtrArray + { + public: + void Close() + { + ResetAndDestroy(); + RImplInfoPtrArray::Close(); + } + }; + +// ----------------------------------------------------------------------------- +// CCalRemoteAttachmentApi::NewL +// ----------------------------------------------------------------------------- +// +inline CCalRemoteAttachmentApi* CCalRemoteAttachmentApi::NewL( + const TDesC8& aUri ) + { + TAny* ptr( NULL ); + + RImplInfoPtrArrayCalRemoteAttachment implArray; + CleanupClosePushL( implArray ); + REComSession::ListImplementationsL( + TUid::Uid( KCalRemoteAttachmentAPIInterface ), + implArray ); + + TInt implCount( implArray.Count() ); + if ( !implCount ) + { + User::Leave( KErrNotFound ); + } + + for ( TInt i(0); i < implCount && !ptr; ++i ) + { + TPtrC8 datatype( implArray[i]->DataType() ); + if ( KErrNotFound != aUri.Find( datatype) ) + { + TInt32 keyOffset = _FOFF( CCalRemoteAttachmentApi, iDtor_ID_Key ); + TUid implUid = implArray[i]->ImplementationUid(); + ptr = REComSession::CreateImplementationL( implUid, + keyOffset, + NULL ); + } + } + + User::LeaveIfNull( ptr ); + CleanupStack::PopAndDestroy( &implArray ); + return reinterpret_cast(ptr); + } + +// ----------------------------------------------------------------------------- +// CCalRemoteAttachmentApi::~CCalRemoteAttachmentApi +// ----------------------------------------------------------------------------- +// +inline CCalRemoteAttachmentApi::~CCalRemoteAttachmentApi() + { + REComSession::DestroyedImplementation( iDtor_ID_Key ); + } + +// EOF