diff -r c2817bb2a55c -r cb506ec2d869 idlefw/plugins/sapidataplugin/src/sapidata.cpp --- a/idlefw/plugins/sapidataplugin/src/sapidata.cpp Wed Mar 31 13:30:40 2010 +0300 +++ b/idlefw/plugins/sapidataplugin/src/sapidata.cpp Wed May 12 13:35:37 2010 +0300 @@ -22,6 +22,7 @@ #include // User includes +#include #include "sapidata.h" #include "sapidatapluginconst.h" #include "sapidataobserver.h" @@ -103,10 +104,8 @@ void CSapiData::ConstructL(CSapiDataPlugin* aPlugin) { iPlugin = aPlugin; - iCommandName = NULL; - iContentId = NULL; - iContentType = NULL; iUpdateNeeded = EFalse; + iGetMenuItems = ETrue; } // --------------------------------------------------------------------------- @@ -116,40 +115,29 @@ // CSapiData::~CSapiData() { - delete iCommandName; delete iPublisher; - delete iContentType; delete iContentId; delete iStartupReason; if(iPubObserver) { - TRAP_IGNORE(iPubObserver->ReleaseL() ); delete iPubObserver; iPubObserver = NULL; } if(iContentObserver) { - TRAP_IGNORE(iContentObserver->ReleaseL() ); delete iContentObserver; iContentObserver = NULL; } - if( iInterface ) - { - iInterface->Close(); - iInterface = NULL; - } - if( iServiceHandler ) - { - iServiceHandler->Reset(); - delete iServiceHandler; - iServiceHandler = NULL; - } iMenuItems.ResetAndDestroy(); iMenuTriggers.ResetAndDestroy(); iItemList.ResetAndDestroy(); // not owned iPlugin = NULL; + iInterface = NULL; + iServiceHandler = NULL; + iCpsExecute = NULL; + } // --------------------------------------------------------------------------- @@ -158,30 +146,13 @@ // void CSapiData::ConfigureL(RAiSettingsItemArray& aConfigurations ) { - HBufC8* serviceName = NULL; - HBufC8* interfaceName = NULL; - TInt count = aConfigurations.Count(); - for(TInt i = 0;iAiPluginConfigurationItem(); - // if owner is plugin then it (key,value) is for plugin configurations items if(confItem.Owner() == KPlugin()) { - if(confItem.Name() == KService()) - { - serviceName = CnvUtfConverter::ConvertFromUnicodeToUtf8L(confItem.Value()); - } - else if( confItem.Name() == KInterface() ) - { - interfaceName = CnvUtfConverter::ConvertFromUnicodeToUtf8L(confItem.Value()); - } - else if( confItem.Name() == KCommand() ) - { - iCommandName = CnvUtfConverter::ConvertFromUnicodeToUtf8L(confItem.Value()); - } - else if( confItem.Name() == KPublisher16() ) + if( confItem.Name() == KPublisher16() ) { iPublisher = confItem.Value().AllocL(); } @@ -201,54 +172,12 @@ CleanupStack::PopAndDestroy(objectId); } } - iItemCount = iItemList.Count(); - - if( !serviceName || !interfaceName || !iCommandName - || !iContentId || !iPublisher || !iItemCount ) + if( iPublisher->Des().Length() == 0 ) { // No service to offer without plugin configurations User::Leave( KErrNotSupported ); } - iServiceHandler = CLiwServiceHandler::NewL(); - - // for convenience keep pointers to Service Handler param lists - CLiwGenericParamList* inParamList = &iServiceHandler->InParamListL(); - CLiwGenericParamList* outParamList = &iServiceHandler->OutParamListL(); - - CLiwCriteriaItem* criteriaItem = CLiwCriteriaItem::NewLC( KLiwCmdAsStr, *interfaceName , *serviceName ); - criteriaItem->SetServiceClass( TUid::Uid( KLiwClassBase ) ); - // Interface name - RCriteriaArray criteriaArray; - criteriaArray.AppendL( criteriaItem ); - // attach Liw criteria - iServiceHandler->AttachL( criteriaArray ); - iServiceHandler->ExecuteServiceCmdL( *criteriaItem, *inParamList, *outParamList ); - - CleanupStack::PopAndDestroy(criteriaItem); - criteriaArray.Reset(); - - // extract CPS interface from output params - TInt pos( 0 ); - outParamList->FindFirst( pos, *interfaceName ); - if( pos != KErrNotFound ) - { - //iInterface is MLiwInterface* - iInterface = (*outParamList)[pos].Value().AsInterface(); - User::LeaveIfNull( iInterface ); - } - else - { - User::Leave( KErrNotFound ); - } - inParamList->Reset(); - outParamList->Reset(); - delete interfaceName; - delete serviceName; - - //Gets the menu items from the publisher registry - GetMenuItemsL(); - iContentObserver = CSapiDataObserver::NewL( iInterface, this ); iPubObserver = CSapiDataObserver::NewL( iInterface, this ); } @@ -266,7 +195,7 @@ // SetStartupReasonL // --------------------------------------------------------------------------- // -void CSapiData::SetStartupReasonL(const TDesC& aStartupReason) +void CSapiData::SetStartupReasonL(const TDesC8& aStartupReason) { delete iStartupReason; iStartupReason = NULL; @@ -442,6 +371,13 @@ // TBool CSapiData::HasMenuItem(const TDesC& aMenuItem ) { + if ( iGetMenuItems ) + { + //Gets the menu items from the publisher registry + TRAP_IGNORE( GetMenuItemsL() ); + iGetMenuItems = EFalse; + } + TBool found = EFalse; for (TInt i = 0; i < iMenuItems.Count(); i++ ) { @@ -570,27 +506,24 @@ void CSapiData::ExecuteCommandL(const TDesC& aRegistry, CLiwDefaultMap* aInFilter, CLiwGenericParamList* aOutParamList) { - CLiwGenericParamList* inParamList = &iServiceHandler->InParamListL(); - - TLiwGenericParam type( KType, TLiwVariant( aRegistry ) ); - inParamList->AppendL( type ); - - //append filter to input param - TLiwGenericParam item( KFilter, TLiwVariant( aInFilter )); - inParamList->AppendL( item ); - - // execute service.It is assumed that iInterface is already initiated - if(iInterface) - { - iInterface->ExecuteCmdL( *iCommandName, *inParamList, *aOutParamList); - } - else - { - User::Leave( KErrNotSupported ); - } - type.Reset(); - item.Reset(); - inParamList->Reset(); + if( iInterface == NULL ) + { + User::Leave( KErrNotSupported ); + } + CLiwGenericParamList* inParamList = &iServiceHandler->InParamListL(); + + TLiwGenericParam type( KType, TLiwVariant( aRegistry ) ); + inParamList->AppendL( type ); + + //append filter to input param + TLiwGenericParam item( KFilter, TLiwVariant( aInFilter )); + inParamList->AppendL( item ); + + // execute service.It is assumed that iInterface is already initiated + iInterface->ExecuteCmdL( KGetList, *inParamList, *aOutParamList); + type.Reset(); + item.Reset(); + inParamList->Reset(); } // --------------------------------------------------------------------------- @@ -599,6 +532,10 @@ // void CSapiData::ExecuteActionL(const TDesC& aObjectId, const TDesC& aTrigger ) { + if( iInterface == NULL ) + { + User::Leave( KErrNotSupported ); + } HBufC8* triggerName = HBufC8::NewLC( KSAPIContentNameMaxLength ); CLiwGenericParamList* inParamList = &iServiceHandler->InParamListL(); @@ -674,7 +611,7 @@ if ( iItemCount > 0) { CLiwDefaultMap* pubRegFilter = CreateFilterLC( KAll(), KAll() ); - pubRegFilter->InsertL( KOperation, TLiwVariant( KUpdate ) ); + pubRegFilter->InsertL( KOperation, TLiwVariant( KAddUpdate ) ); iPubObserver->RegisterL( pubRegFilter, KPubData() ); CleanupStack::PopAndDestroy( pubRegFilter ); } @@ -721,45 +658,58 @@ } // --------------------------------------------------------------------------- -// PublisherStatusL +// ChangePublisherStatusL // --------------------------------------------------------------------------- // -void CSapiData::ChangePublisherStatusL(const TDesC& aStatus) +void CSapiData::ChangePublisherStatusL(const TDesC8& aStatus) { + if( iCpsExecute == NULL ) + { + User::Leave( KErrNotSupported ); + } + if ( aStatus == KResume && iUpdateNeeded ) { iPlugin->PublishL(); iUpdateNeeded = EFalse; } + CLiwDefaultMap* filter = CreateFilterLC( KWidget() ); + // Add execute command triggers. Idle framework will execute + iCpsExecute->AddCommand( *iContentId, KPubData, filter, aStatus ); + CleanupStack::PopAndDestroy( filter ); + + } + +// --------------------------------------------------------------------------- +// ChangePublisherStatusL +// --------------------------------------------------------------------------- +// +void CSapiData::ChangePublisherStatusL(CLiwDefaultList* aActionsList) + { + if( iInterface == NULL ) + { + User::Leave( KErrNotSupported ); + } CLiwGenericParamList* inParamList = &iServiceHandler->InParamListL(); CLiwGenericParamList* outParamList = &iServiceHandler->OutParamListL(); - HBufC8* triggerName = CnvUtfConverter::ConvertFromUnicodeToUtf8L(aStatus); - CleanupStack::PushL( triggerName ); - + TLiwGenericParam type( KType, TLiwVariant( KPubData ) ); inParamList->AppendL( type ); - + CLiwDefaultMap* filter = CreateFilterLC( KWidget() ); - filter->InsertL(KActionTrigger, TLiwVariant(triggerName->Des()) ); - + // add list of action triggers to execute + filter->InsertL(KActionTrigger, TLiwVariant(aActionsList) ); + TLiwGenericParam item( KFilter, TLiwVariant( filter )); inParamList->AppendL( item ); - - if(iInterface) - { - iInterface->ExecuteCmdL( KExecuteAction, *inParamList, *outParamList); - } - else - { - User::Leave( KErrNotSupported ); - } - + + iInterface->ExecuteCmdL( KExecuteAction, *inParamList, *outParamList); CleanupStack::PopAndDestroy( filter ); - CleanupStack::PopAndDestroy( triggerName ); + outParamList->Reset(); inParamList->Reset(); - outParamList->Reset(); - } + + } // --------------------------------------------------------------------------- // TriggerActiveL @@ -767,29 +717,29 @@ // void CSapiData::TriggerActiveL() { - - CLiwGenericParamList* inParamList = &iServiceHandler->InParamListL(); - CLiwGenericParamList* outParamList = &iServiceHandler->OutParamListL(); - - TLiwGenericParam type( KType, TLiwVariant( KPubData ) ); - inParamList->AppendL( type ); - - CLiwDefaultMap* filter = CreateFilterLC( KAll(), KAll() ); - filter->InsertL(KActionTrigger, TLiwVariant( KActive() )); - - TLiwGenericParam item( KFilter, TLiwVariant( filter )); - inParamList->AppendL( item ); if(iInterface) - { - iInterface->ExecuteCmdL( KExecuteAction, *inParamList, *outParamList, KDisableNotification ); + { + CLiwGenericParamList* inParamList = &iServiceHandler->InParamListL(); + CLiwGenericParamList* outParamList = &iServiceHandler->OutParamListL(); + + TLiwGenericParam type( KType, TLiwVariant( KPubData ) ); + inParamList->AppendL( type ); + + CLiwDefaultMap* filter = CreateFilterLC( KAll(), KAll() ); + filter->InsertL(KActionTrigger, TLiwVariant( KActive() )); + + TLiwGenericParam item( KFilter, TLiwVariant( filter )); + inParamList->AppendL( item ); + iInterface->ExecuteCmdL( KExecuteAction, *inParamList, *outParamList, KDisableNotification ); + + CleanupStack::PopAndDestroy( filter ); + inParamList->Reset(); + outParamList->Reset(); } else { User::Leave( KErrNotSupported ); } - CleanupStack::PopAndDestroy( filter ); - inParamList->Reset(); - outParamList->Reset(); } // --------------------------------------------------------------------------- // UpdatePublisherStatusL @@ -798,31 +748,34 @@ void CSapiData::UpdatePublisherStatusL( TDesC& aPublisher ) { if ( aPublisher == iPublisher ) - { - // Resend the plugin status to publisher - ChangePublisherStatusL( KActive ); + { + // Resend the plugin status to publisher + CLiwDefaultList* actionsToLaunch = CLiwDefaultList::NewLC(); + actionsToLaunch->AppendL( TLiwVariant( KActive )); if( iStartupReason->Length() != 0 ) { - ChangePublisherStatusL( *iStartupReason ); + actionsToLaunch->AppendL( TLiwVariant( *iStartupReason )); } - if ( iPlugin->IsActive() ) { - ChangePublisherStatusL( KResume ); + actionsToLaunch->AppendL( TLiwVariant( KResume )); } else { - ChangePublisherStatusL( KSuspend ); + actionsToLaunch->AppendL(TLiwVariant( KSuspend )); } // forward the network status if it uses. if ( iPlugin->NetworkStatus() == CSapiDataPlugin::EOnline ) { - ChangePublisherStatusL( KOnLine ); + actionsToLaunch->AppendL(TLiwVariant( KOnLine )); } else if ( iPlugin->NetworkStatus() == CSapiDataPlugin::EOffline ) { - ChangePublisherStatusL( KOffLine ); + actionsToLaunch->AppendL(TLiwVariant( KOffLine )); } + + ChangePublisherStatusL( actionsToLaunch ); + CleanupStack::PopAndDestroy( actionsToLaunch ); } } @@ -912,3 +865,19 @@ { iUpdateNeeded = aStatus; } + +// --------------------------------------------------------------------------- +// SetCommandBuffer +// --------------------------------------------------------------------------- +// +void CSapiData::SetCommandBuffer(TAny* aAny) + { + iCpsExecute = reinterpret_cast ( aAny ); + if ( iCpsExecute ) + { + iInterface = iCpsExecute->CpsInterface(); + iServiceHandler = iCpsExecute->ServiceHandler(); + } + } + +// End of file