diff -r a0713522ab97 -r b276298d5729 idlefw/src/framework/aicpscommandbuffer.cpp --- a/idlefw/src/framework/aicpscommandbuffer.cpp Wed Apr 14 16:16:44 2010 +0300 +++ b/idlefw/src/framework/aicpscommandbuffer.cpp Tue Apr 27 16:57:49 2010 +0300 @@ -17,15 +17,14 @@ // System includes - -// User includes -#include #include #include #include +// User includes #include "caicpscommandbuffer.h" #include "aicpsexecuteparam.h" +#include // Constants _LIT8( KCPSConfigurationIf, "IContentPublishing" ); @@ -33,6 +32,7 @@ _LIT8( KExecuteAction, "ExecuteAction" ); _LIT8( KExecuteMultipleActions, "ExecuteMultipleActions" ); _LIT8( KFilters, "filters" ); + // ======== LOCAL FUNCTIONS ======== // ======== MEMBER FUNCTIONS ======== @@ -88,26 +88,38 @@ { // Flush any pending commands Flush(); + if ( iCpsInterface ) { // Close interface iCpsInterface->Close(); } - if ( iServiceHandler && iCpsService ) - { - // Detach services from the handler - RCriteriaArray interestList; - - TRAP_IGNORE( interestList.AppendL( iCpsService ); - iServiceHandler->DetachL( interestList ); ); - - interestList.Reset(); - } + TRAP_IGNORE( DetachL() ); delete iCpsService; - delete iServiceHandler; - + delete iServiceHandler; + } + +// --------------------------------------------------------------------------- +// CAiCpsCommandBuffer::DetachL +// +// --------------------------------------------------------------------------- +// +void CAiCpsCommandBuffer::DetachL() + { + if ( iServiceHandler && iCpsService ) + { + // Detach services from the handler + RCriteriaArray list; + CleanupClosePushL( list ); + + list.AppendL( iCpsService ); + + iServiceHandler->DetachL( list ); + + CleanupStack::PopAndDestroy( &list ); + } } // --------------------------------------------------------------------------- @@ -117,23 +129,31 @@ // void CAiCpsCommandBuffer::GetCPSInterfaceL() { - iServiceHandler = CLiwServiceHandler::NewL(); + if ( iCpsInterface ) + { + return; + } RCriteriaArray interestList; + CleanupClosePushL( interestList ); - // Attach to CPS: - iCpsService = CLiwCriteriaItem::NewL( 1, KCPSConfigurationIf, KCPS ); - iCpsService->SetServiceClass( TUid::Uid( KLiwClassBase ) ); + CLiwServiceHandler* serviceHandler = CLiwServiceHandler::NewL(); + CleanupStack::PushL( serviceHandler ); + + // Attach to CPS: + CLiwCriteriaItem* cpsService = CLiwCriteriaItem::NewL( 1, KCPSConfigurationIf, KCPS ); + CleanupStack::PushL( cpsService ); - interestList.AppendL( iCpsService ); - iServiceHandler->AttachL( interestList ); - interestList.Reset(); + cpsService->SetServiceClass( TUid::Uid( KLiwClassBase ) ); - CLiwGenericParamList& inParamList( iServiceHandler->InParamListL() ); - CLiwGenericParamList& outParamList( iServiceHandler->OutParamListL() ); + interestList.AppendL( cpsService ); + serviceHandler->AttachL( interestList ); + + CLiwGenericParamList& inParamList( serviceHandler->InParamListL() ); + CLiwGenericParamList& outParamList( serviceHandler->OutParamListL() ); - iServiceHandler->ExecuteServiceCmdL( - *iCpsService, + serviceHandler->ExecuteServiceCmdL( + *cpsService, inParamList, outParamList ); @@ -142,17 +162,25 @@ outParamList.FindFirst( pos, KCPSConfigurationIf ); if ( pos != KErrNotFound ) - { - iCpsInterface = (outParamList)[pos].Value().AsInterface(); - inParamList.Reset(); - outParamList.Reset(); - } + { + iCpsInterface = (outParamList)[pos].Value().AsInterface(); + inParamList.Reset(); + outParamList.Reset(); + } else - { - inParamList.Reset(); - outParamList.Reset(); - User::Leave( KErrNotFound ); - } + { + inParamList.Reset(); + outParamList.Reset(); + User::Leave( KErrNotFound ); + } + + CleanupStack::Pop( cpsService ); + iCpsService = cpsService; + + CleanupStack::Pop( serviceHandler ); + iServiceHandler = serviceHandler; + + CleanupStack::PopAndDestroy( &interestList ); } // --------------------------------------------------------------------------- @@ -172,16 +200,37 @@ } // --------------------------------------------------------------------------- +// CAiCpsCommandBuffer::ServiceHandler +// +// --------------------------------------------------------------------------- +// +CLiwServiceHandler* CAiCpsCommandBuffer::ServiceHandler() const + { + return iServiceHandler; + } + +// --------------------------------------------------------------------------- +// CAiCpsCommandBuffer::CpsInterface +// +// --------------------------------------------------------------------------- +// +MLiwInterface* CAiCpsCommandBuffer::CpsInterface() const + { + return iCpsInterface; + } + +// --------------------------------------------------------------------------- // CAiCpsCommandBuffer::DoAddCommandL // // --------------------------------------------------------------------------- // void CAiCpsCommandBuffer::DoAddCommandL( const TDesC& aPluginId, - const TDesC& aType, CLiwDefaultMap* aFilter, - const TDesC8& aAction ) + const TDesC& aType, CLiwDefaultMap* aFilter, + const TDesC8& aAction ) { - TInt found = KErrNotFound; - for (TInt i=0; i< iPlugins.Count(); i++) + TInt found( KErrNotFound ); + + for ( TInt i = 0; i < iPlugins.Count(); i++ ) { if ( aPluginId == iPlugins[i]->PluginId() ) { @@ -203,8 +252,7 @@ param->AddActionL( aAction ); iPlugins.AppendL( param ); CleanupStack::Pop( param ); - } - + } } // --------------------------------------------------------------------------- @@ -215,10 +263,12 @@ void CAiCpsCommandBuffer::Flush() { __PRINTS( "CAiCpsCommandBuffer::Flush, start" ); + if ( iPlugins.Count() > 0 ) { TRAP_IGNORE( DoFlushL() ); } + __PRINTS( "CAiCpsCommandBuffer::Flush - done" ); } @@ -229,40 +279,38 @@ // void CAiCpsCommandBuffer::DoFlushL() { - if ( !iCpsInterface ) + if ( !iCpsInterface ) { GetCPSInterfaceL(); } - if(iCpsInterface) + if ( iCpsInterface ) { - __PRINTS( "CAiCpsCommandBuffer::DoFlush : Execute" ); - TInt pluginCount = iPlugins.Count(); + __PRINTS( "CAiCpsCommandBuffer::DoFlush : Execute" ); + + TInt pluginCount( iPlugins.Count() ); + CLiwDefaultList* pluginCmdList = CLiwDefaultList::NewLC(); - for (TInt i=0; i < pluginCount; i++ ) + for ( TInt i = 0; i < pluginCount; i++ ) { CLiwDefaultMap* inParamMap = iPlugins[i]->InParamMapLC(); pluginCmdList->AppendL( inParamMap ); CleanupStack::PopAndDestroy( inParamMap ); } + CLiwGenericParamList* inParamList = CLiwGenericParamList::NewLC(); CLiwGenericParamList* outParamList = CLiwGenericParamList::NewLC(); - TLiwGenericParam item( KFilters, TLiwVariant ( pluginCmdList)); - inParamList->AppendL( item ); + TLiwGenericParam item( KFilters, TLiwVariant ( pluginCmdList ) ); + inParamList->AppendL( item ); iCpsInterface->ExecuteCmdL( KExecuteMultipleActions, *inParamList, *outParamList); - CleanupStack::PopAndDestroy( outParamList ); - CleanupStack::PopAndDestroy( inParamList ); - CleanupStack::PopAndDestroy( pluginCmdList ); - } - else - { - User::Leave( KErrNotSupported ); - } - iPlugins.ResetAndDestroy(); + CleanupStack::PopAndDestroy( 3, pluginCmdList ); // outparamList, inParamList + + iPlugins.ResetAndDestroy(); + } } // End of file