diff -r 000000000000 -r 8466d47a6819 emailservices/emailserver/cmailhandlerplugin/src/cmailcpsif.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/emailservices/emailserver/cmailhandlerplugin/src/cmailcpsif.cpp Thu Dec 17 08:39:21 2009 +0200 @@ -0,0 +1,872 @@ +/* +* 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: handles interface to LIW and Content Publishing Service +* +*/ + +#include +#include +#include +#include +#include +#include + +#include "emailtrace.h" +#include "CFSMailClient.h" +#include "cmailcpsif.h" +#include "cmailcpsifconsts.h" +#include "FreestyleEmailUiConstants.h" +#include "cmailwidgetcenrepkeysinternal.h" + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CMailCpsIf::NewL +// --------------------------------------------------------------------------- +// +CMailCpsIf* CMailCpsIf::NewL( CMailCpsHandler* aMailCpsHandler ) + { + FUNC_LOG; + CMailCpsIf* self = new(ELeave) CMailCpsIf( aMailCpsHandler ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// CMailCpsIf::CMailCpsIf +// --------------------------------------------------------------------------- +// +CMailCpsIf::CMailCpsIf( CMailCpsHandler* aMailCpsHandler ) : + iMailCpsHandler( aMailCpsHandler ), + iMsgInterface ( NULL ), + iIgnoreHsNotifications( EFalse ) + { + FUNC_LOG; + } + +// --------------------------------------------------------------------------- +// CMailCpsIf::ConstructL +// --------------------------------------------------------------------------- +// +void CMailCpsIf::ConstructL() + { + FUNC_LOG; + for (TInt i=0; iClose(); + iMsgInterface = NULL; + } + delete iServiceHandler; + iInstIdList.ResetAndDestroy(); + CCoeEnv::Static()->DeleteResourceFile( iResourceFileOffset ); + } + +// --------------------------------------------------------- +// CMailCpsIf::AllocateResourcesL +// --------------------------------------------------------- +// +void CMailCpsIf::AllocateResourcesL() + { + FUNC_LOG; + // create resourcefile + CCoeEnv* env = CCoeEnv::Static(); + + TFileName resourceFile; + TParse parse; + + parse.Set( KResourceFile, &KDC_ECOM_RESOURCE_DIR, NULL ); + resourceFile = parse.FullName(); + + BaflUtils::NearestLanguageFile( env->FsSession(), resourceFile ); + iResourceFileOffset = env->AddResourceFileL( resourceFile ); + } + + +// --------------------------------------------------------------------------- +// CMailCpsIf::GetMessagingInterfaceL +// --------------------------------------------------------------------------- +// +MLiwInterface* CMailCpsIf::GetMessagingInterfaceL() + { + FUNC_LOG; + if ( !iServiceHandler ) + { + iServiceHandler = CLiwServiceHandler::NewL(); + } + + CLiwGenericParamList* inParam = CLiwGenericParamList::NewL(); + CleanupStack::PushL( inParam ); + CLiwGenericParamList* outParam = CLiwGenericParamList::NewL(); + CleanupStack::PushL( outParam ); + CLiwCriteriaItem* crit = CLiwCriteriaItem::NewL( KLiwCmdAsStr, KCPInterface, + KCPService ); + crit->SetServiceClass( TUid::Uid(KLiwClassBase) ); + + RCriteriaArray criteriaArray; + criteriaArray.AppendL( crit ); + + iServiceHandler->AttachL( criteriaArray ); + iServiceHandler->ExecuteServiceCmdL( *crit, *inParam, *outParam ); + + delete crit; + crit = NULL; + criteriaArray.Reset(); + + // find service interface + TInt pos = 0; + MLiwInterface* msgInterface = NULL; + outParam->FindFirst( pos, KCPInterface ); + if ( pos != KErrNotFound ) + { + msgInterface = (*outParam)[pos].Value().AsInterface(); // indexing should be safe + } + outParam->Reset(); + inParam->Reset(); + + if( !msgInterface ) + { + User::Leave( KErrNotFound ); + } + + CleanupStack::PopAndDestroy( outParam ); + CleanupStack::PopAndDestroy( inParam ); + return msgInterface; + } + +// --------------------------------------------------------------------------- +// CMailCpsIf::PublishSetupWizardL +// --------------------------------------------------------------------------- +// +void CMailCpsIf::PublishSetupWizardL(TInt instance) + { + FUNC_LOG; + TFSMailMsgId mailBoxId; + TFSMailMsgId folderId; + + HBufC* setupEmail = StringLoader::LoadLC(R_EMAILWIDGET_TEXT_SETUP_EMAIL); + + iSetupUid = PublishDescriptorL( + KPubId, KContTypeSetupText, + iInstIdList[instance]->Des(), + *setupEmail, + KKeySetupText, KTriggerWizard8, NULL, mailBoxId, folderId); + + PublishImageL( + iInstIdList[instance]->Des(), + KContTypeSetupIcon, + KKeySetupIcon, + EMbmCmailhandlerpluginQgn_prop_cmail_new_mailbox, + EMbmCmailhandlerpluginQgn_prop_cmail_new_mailbox_mask, + mailBoxId); + + CleanupStack::PopAndDestroy(setupEmail); + } + +// --------------------------------------------------------------------------- +// CMailCpsIf::PublishActiveMailboxNameL +// --------------------------------------------------------------------------- +// +void CMailCpsIf::PublishActiveMailboxNameL( + const TInt aInstance, + const TInt aRowNumber, + const TDesC& aMailboxName, + const TInt aMailBoxCount, + TFSMailMsgId aMailBoxId, + TFSMailMsgId aFolderId) + { + FUNC_LOG; + + TBuf row; + row.Num(aRowNumber); + + TBuf contentType; + contentType.Copy(KContTypeBodyText); + contentType.Append(row); + + TBuf textKey; + textKey.Copy(KKeyBodyText); + textKey.Append(row); + + iMailboxNameUid = PublishDescriptorL( + KPubId, contentType, + iInstIdList[aInstance]->Des(), + aMailboxName, + textKey, KTriggerEmailUi8, aMailBoxCount, + aMailBoxId, aFolderId); + } + +// --------------------------------------------------------------------------- +// CMailCpsIf::PublishIndicatorIconL +// --------------------------------------------------------------------------- +// +void CMailCpsIf::PublishIndicatorIconL( const TInt aInstance, + const TInt aRowNumber, + const TInt aIcon ) + { + FUNC_LOG; + TFSMailMsgId mailBoxId; + + TBuf row; + row.Num(aRowNumber); + + TBuf contentType; + contentType.Copy(KContTypeIndicatorIcon); + contentType.Append(row); + + TBuf8 row8; + row8.Num(aRowNumber); + + TBuf8 key; + key.Copy(KKeyIndicatorIcon); + key.Append(row8); + + PublishImageL( + iInstIdList[aInstance]->Des(), + contentType, + key, + aIcon, + aIcon + 1, + mailBoxId); + } + +// --------------------------------------------------------------------------- +// CMailCpsIf::PublishMailboxIconL +// --------------------------------------------------------------------------- +// +void CMailCpsIf::PublishMailboxIconL( const TInt aInstance, + const TInt aRowNumber, + const TInt aIcon, + TFSMailMsgId aMailBoxId ) + { + FUNC_LOG; + + TBuf row; + row.Num(aRowNumber); + + TBuf contentType; + contentType.Copy(KContTypeMailboxIcons); + contentType.Append(row); + + TBuf8 row8; + row8.Num(aRowNumber); + + TBuf8 key; + key.Copy(KKeyMailboxIcons); + key.Append(row8); + + PublishImageL( + iInstIdList[aInstance]->Des(), + contentType, + key, + aIcon, + aIcon + 1, + aMailBoxId); + } + +// --------------------------------------------------------------------------- +// CMailCpsIf::PublishMailDetailL +// --------------------------------------------------------------------------- +// +void CMailCpsIf::PublishMailDetailL( const TInt aInstance, + const TInt aRowNumber, + const TDesC& aText, + TWidgetMailDetails aDetail) + { + FUNC_LOG; + + TBuf row; + row.Num(aRowNumber); + + TBuf contentType; + if (aDetail == ETime) + { + contentType.Copy(KContTypeTime); + } + else + { + contentType.Copy(KContTypeBodyText); + } + contentType.Append(row); + + TBuf textKey; + if (aDetail == ETime) + { + textKey.Copy(KKeyTime); + } + else + { + textKey.Copy(KKeyBodyText); + } + textKey.Append(row); + + TFSMailMsgId mailBoxId; + TFSMailMsgId folderId; + + iMailboxNameUid = PublishDescriptorL( + KPubId, contentType, + iInstIdList[aInstance]->Des(), + aText, + textKey, KNullDes8, NULL, + mailBoxId, folderId); + } + +// --------------------------------------------------------------------------- +// CMailCpsIf::ResetMessageL +// --------------------------------------------------------------------------- +// +void CMailCpsIf::ResetMessageL( TInt /*aRowNumber*/ ) + { + FUNC_LOG; + RemoveL( iMsgUid ); + iMsgUid = 0; + } + +// --------------------------------------------------------------------------- +// CMailCpsIf::ExtractItemId +// --------------------------------------------------------------------------- +// +TUint CMailCpsIf::ExtractItemId( + const CLiwGenericParamList& aInParamList ) + { + FUNC_LOG; + TUint result ( 0 ); + TInt pos( 0 ); + aInParamList.FindFirst( pos, KItemId ); + if ( pos != KErrNotFound ) + { + // item id present - extract and return + aInParamList[pos].Value().Get( result ); // indexing should be safe + } + return result; + } + +// --------------------------------------------------------------------------- +// CMailCpsIf::PublishDescriptorL +// --------------------------------------------------------------------------- +// +TUint CMailCpsIf::PublishDescriptorL( + const TDesC& aPublisherId, + const TDesC& aContentType, + const TDesC& aContentId, + const TDesC& aTextToAdd, + const TDesC& aKey, + const TDesC8& aTrigger, + const TInt /*aMailBoxCount*/, + TFSMailMsgId /*aMailBoxId*/, + TFSMailMsgId /*aFolderId*/ ) + { + FUNC_LOG; + + CLiwGenericParamList* inparam = &(iServiceHandler->InParamListL()); + CLiwGenericParamList* outparam = &(iServiceHandler->OutParamListL()); + TUint id(0); + TBuf8 key; + key.Copy(aKey); + if ( iMsgInterface ) + { + TLiwGenericParam cptype( KType, TLiwVariant( KCpData )); + inparam->AppendL( cptype ); + CLiwDefaultMap* cpdatamap = CLiwDefaultMap::NewLC(); + CLiwDefaultMap* map = CLiwDefaultMap::NewLC(); + map->InsertL( key, TLiwVariant( aTextToAdd ) ); + cpdatamap->InsertL( KPublisherId, TLiwVariant( aPublisherId )); + cpdatamap->InsertL( KContentType, TLiwVariant( aContentType )); + cpdatamap->InsertL( KContentId, TLiwVariant( aContentId )); + cpdatamap->InsertL( KDataMap, TLiwVariant( map ) ); + + if( aTrigger.Length() > 0 ) + { + CLiwDefaultMap* mapAction = CLiwDefaultMap::NewLC(); + CLiwDefaultMap* mapInterface = CLiwDefaultMap::NewLC(); + CLiwDefaultMap* mapPlugin = CLiwDefaultMap::NewLC(); + mapInterface ->InsertL( KDataForActionHandler, TLiwVariant( mapPlugin ) ); + mapAction->InsertL( aTrigger, TLiwVariant( mapInterface ) ); + cpdatamap->InsertL( KActionMap, TLiwVariant(mapAction) ); + } + + TLiwGenericParam item( KItem, TLiwVariant( cpdatamap )); + inparam->AppendL( item ); + + // Execute command + iMsgInterface->ExecuteCmdL( KAdd , *inparam, *outparam ); + + id = ExtractItemId(*outparam ); + + if( aTrigger.Length() > 0 ) + { + CleanupStack::PopAndDestroy( 3 ); // action + } + + CleanupStack::PopAndDestroy( map ); + CleanupStack::PopAndDestroy( cpdatamap ); + item.Reset(); + cptype.Reset(); + } + outparam->Reset(); + inparam->Reset(); + return id; + } + +// --------------------------------------------------------- +// CMailCpsIf::PublishImageL +// --------------------------------------------------------- +// +void CMailCpsIf::PublishImageL( + const TDesC& aContentId, + const TDesC& aContentType, + const TDesC8& aKey, + TInt aBitmapId, + TInt aBitmapMaskId, + TFSMailMsgId aMailBoxId ) + { + FUNC_LOG; + + TBuf iconIds(KNullDesC); + + if ( aBitmapId == EMbmCmailhandlerpluginQgn_indi_cmail_drop_email_account ) + { + // This is mailbox icon. Try finding branded mailbox icon. + TInt error(KErrNone); + TBuf brandedIconIds(KNullDesC); + + MFSMailBrandManager& brandManager = iMailCpsHandler->MailClient().GetBrandManagerL(); + TRAPD( err, error = brandManager.GetGraphicIdsL( EFSMailboxIcon, aMailBoxId, brandedIconIds ) ); + + if ( err == KErrNone && error == KErrNone ) + { + iconIds.Copy(KMifPrefix); + iconIds.Append(brandedIconIds); + } + } + + if (!iconIds.Length()) + { + TBuf id; + iconIds.Copy(KMifPrefix); + iconIds.Append(KMifPath); + iconIds.Append(KSpace); + id.Num(aBitmapId); + iconIds.Append(id); + iconIds.Append(KSpace); + id.Num(aBitmapMaskId); + iconIds.Append(id); + } + + // The actual image publishing part starts here + CLiwGenericParamList* inparam = &(iServiceHandler->InParamListL()); + CLiwGenericParamList* outparam = &(iServiceHandler->OutParamListL()); + + TLiwGenericParam type( KType, TLiwVariant(KCpData)); + inparam->AppendL( type ); + + CLiwDefaultMap* pdatamap = CLiwDefaultMap::NewLC(); + CLiwDefaultMap* datamap = CLiwDefaultMap::NewLC(); + + pdatamap->InsertL( KPublisherId, TLiwVariant( KPubId )); + pdatamap->InsertL( KContentType, TLiwVariant( aContentType )); + pdatamap->InsertL( KContentId, TLiwVariant( aContentId )); + + datamap->InsertL(aKey, TLiwVariant(iconIds)); + + pdatamap->InsertL( KDataMap, TLiwVariant(datamap) ); + TLiwGenericParam item( KItem, TLiwVariant( pdatamap )); + inparam->AppendL( item ); + + // Publish icon ( or remove it from widget when no id provided ) + if ( aBitmapId == KNullIcon ) + { + iMsgInterface->ExecuteCmdL( KDelete, *inparam, *outparam); + } + else + { + iMsgInterface->ExecuteCmdL( KAdd, *inparam, *outparam); + } + + CleanupStack::PopAndDestroy( datamap ); + CleanupStack::PopAndDestroy( pdatamap ); + + item.Reset(); + type.Reset(); + outparam->Reset(); + inparam->Reset(); + } + +// --------------------------------------------------------------------------- +// CMailCpsIf::RemoveL +// --------------------------------------------------------------------------- +// +void CMailCpsIf::RemoveL( TUint aId ) + { + FUNC_LOG; + CLiwGenericParamList* inparam = &(iServiceHandler->InParamListL()); + CLiwGenericParamList* outparam = &(iServiceHandler->OutParamListL()); + if ( iMsgInterface ) + { + TLiwGenericParam cptype( KType, TLiwVariant( KCpData )); + inparam->AppendL( cptype ); + CLiwDefaultMap* cpdatamap = CLiwDefaultMap::NewLC(); + cpdatamap->InsertL( KId, TLiwVariant( aId )); + + TLiwGenericParam item( KFilter, TLiwVariant( cpdatamap )); + inparam->AppendL( item ); + + iMsgInterface->ExecuteCmdL( KDelete , *inparam, *outparam); + + CleanupStack::PopAndDestroy( cpdatamap ); + item.Reset(); + cptype.Reset(); + } + outparam->Reset(); + inparam->Reset(); + } + +// --------------------------------------------------------------------------- +// CMailCpsIf::PublisherRegisteryActionL +// --------------------------------------------------------------------------- +// +void CMailCpsIf::PublisherRegisteryActionL() + { + FUNC_LOG; + CLiwGenericParamList* inparam = &(iServiceHandler->InParamListL()); + CLiwGenericParamList* outparam = &(iServiceHandler->OutParamListL()); + + TLiwGenericParam type( KType, TLiwVariant( KPubData )); + inparam->AppendL( type ); + + CLiwDefaultMap* publishermap = CLiwDefaultMap::NewLC(); + + // Create the map for publisher registry + publishermap->InsertL( KPublisherId, TLiwVariant( KPubId )); + publishermap->InsertL( KContentId, TLiwVariant( KCPAll )); + publishermap->InsertL( KContentType, TLiwVariant( KCPAll )); + + // Create the action map for publisher registry + CLiwDefaultMap* mapAction = CLiwDefaultMap::NewLC(); + mapAction->InsertL(KActive, TLiwVariant( KData )); + mapAction->InsertL(KDeActive, TLiwVariant( KData )); + mapAction->InsertL(KSuspend, TLiwVariant( KData )); + mapAction->InsertL(KResume, TLiwVariant( KData )); + mapAction->InsertL(KInactive, TLiwVariant( KData )); + + publishermap->InsertL( KActionMap, TLiwVariant(mapAction)); + CleanupStack::PopAndDestroy(mapAction); + + TLiwGenericParam item( KItem, TLiwVariant( publishermap )); + inparam->AppendL( item ); + + iMsgInterface->ExecuteCmdL( KAdd, *inparam, *outparam); + + CleanupStack::PopAndDestroy( publishermap ); + + item.Reset(); + type.Reset(); + + outparam->Reset(); + inparam->Reset(); + } + +// --------------------------------------------------------------------------- +// CMailCpsIf::RegisterForObserverL +// --------------------------------------------------------------------------- +// +void CMailCpsIf::RegisterForObserverL() + { + FUNC_LOG; + CLiwGenericParamList* inParamList = &(iServiceHandler->InParamListL()); + CLiwGenericParamList* outParamList = &(iServiceHandler->OutParamListL()); + + CLiwDefaultMap* filter = CLiwDefaultMap::NewLC(); + + filter->InsertL( KPublisherId, TLiwVariant( KPubId ) ); + filter->InsertL( KContentId, TLiwVariant( KCPAll ) ); + filter->InsertL( KContentType, TLiwVariant( KCPAll ) ); + filter->InsertL( KOperation, TLiwVariant( KExecute )); + + // Fill in input list for RequestNotification command + inParamList->AppendL(TLiwGenericParam(KType,TLiwVariant( KContentAndPublisher_Registry ))); + inParamList->AppendL(TLiwGenericParam(KFilter ,TLiwVariant( filter ))); + + TInt errori(KErrNone); + TRAP(errori, iMsgInterface->ExecuteCmdL( KRequestNotification, *inParamList, + *outParamList, 0, this )); + + CleanupStack::PopAndDestroy( filter ); + outParamList->Reset(); + inParamList->Reset(); + } + +// --------------------------------------------------------------------------- +// CMailCpsIf::UnRegisterForObserverL +// --------------------------------------------------------------------------- +// +void CMailCpsIf::UnRegisterForObserverL() + { + FUNC_LOG; + CLiwGenericParamList* inparam = &(iServiceHandler->InParamListL()); + CLiwGenericParamList* outparam = &(iServiceHandler->OutParamListL()); + // Un Register for notification + + TInt err; + err = KErrNone; + + // Un Register all the reuqest notification registered in this session + TRAP( err, iMsgInterface->ExecuteCmdL( + KRequestNotification, + *inparam, + *outparam, + KLiwOptCancel, + this ) ); + + outparam->Reset(); + inparam->Reset(); + } + +// --------------------------------------------------------------------------- +// Notification handling +// --------------------------------------------------------------------------- +// +TInt CMailCpsIf::HandleNotifyL( + TInt aErrorCode, + TInt /*aEventId*/, + CLiwGenericParamList& aEventParamList, + const CLiwGenericParamList& /*aInParamList*/ ) + { + FUNC_LOG; + PublisherStatusL ( aEventParamList); + return aErrorCode; + } + +// --------------------------------------------------------------------------- +// Check if Publisher was activeated or deactivated +// --------------------------------------------------------------------------- +// +TBool CMailCpsIf::PublisherStatusL(const CLiwGenericParamList& aEventParamList) + { + FUNC_LOG; + TBool result(EFalse); + TInt pos(0); + const TInt KSAPIContentNameMaxLength = 255; + TBuf<300> text; + aEventParamList.FindFirst(pos, KChangeInfo); + if (pos != KErrNotFound) + { + // Get list of maps + TLiwVariant variant = (aEventParamList)[pos].Value(); + variant.PushL(); + const CLiwList* changeMapsList = variant.AsList(); + + TBuf contentid; + TBuf operation; + TBuf trigger; + + // Iter through list content + + TInt mapslistcount (changeMapsList->Count()); + + for (TInt i = 0; i < changeMapsList->Count(); ++i) + { + if ( changeMapsList->AtL(i, variant) ) + { + const CLiwMap* map = variant.AsMap(); + + // Check what triggered a notification + if ( map->FindL(KOperation, variant) ) + { + variant.Get(operation); + variant.Reset(); + if( map->FindL( KContentId, variant) ) + { + variant.Get(contentid ); + variant.Reset(); + if( map->FindL( KActionTrigger, variant) ) + { + variant.Get(trigger ); + } + if (trigger.Compare(KInactive16) == 0) + { + // Homescreen page is about to change. + // Ignore next deactivate event of this particular widget instance. + HBufC* cid = contentid.AllocLC(); + TInt widgetInstance = FindWidgetInstanceId(cid->Des()); + iInactive[widgetInstance] = ETrue; + CleanupStack::PopAndDestroy( cid ); + } + else if (trigger.Compare(KSuspend16) == 0) + { + // Publishing to homescreen suspended. + HBufC* cid = contentid.AllocLC(); + TInt widgetInstance = FindWidgetInstanceId(cid->Des()); + iAllowedToPublish[widgetInstance] = EFalse; + CleanupStack::PopAndDestroy( cid ); + } + else if (trigger.Compare(KResume16) == 0) + { + HBufC* cid = contentid.AllocLC(); + if ( FindWidgetInstanceId(cid->Des()) < 0 ) + { + iInstIdList.AppendL( contentid.AllocL() ); + } + TInt widgetInstance = FindWidgetInstanceId(cid->Des()); + PublishSetupWizardL(widgetInstance); + iMailCpsHandler->UpdateMailboxesL(widgetInstance, cid->Des()); + // Widget visible on the homescreen. Publishing allowed. + iAllowedToPublish[widgetInstance] = ETrue; + iInactive[widgetInstance] = EFalse; + CleanupStack::PopAndDestroy( cid ); + } + else if (trigger.Compare(KActive16) == 0) + { + // Widget added to homescreen (or already on the screen when boot completes). + HBufC* cid = contentid.AllocLC(); + TInt widgetInstance = FindWidgetInstanceId(cid->Des()); + if (iInactive[widgetInstance]) + { + iInactive[widgetInstance] = EFalse; + } + else + { + iInstIdList.AppendL( contentid.AllocL() ); + } +/* if (!alreadyAssociated) + { + iMailCpsHandler->LaunchWidgetSettingsL(cid->Des()); + }*/ + CleanupStack::PopAndDestroy( cid ); + } + else if (trigger.Compare(KDeActive16) == 0) + { + // Widget removed from homescreen. + HBufC* cid = contentid.AllocLC(); + TInt widgetInstance = FindWidgetInstanceId(cid->Des()); + if (!iInactive[widgetInstance]) + { + iMailCpsHandler->DissociateWidgetFromSetting( cid->Des() ); + iInstIdList.Remove(widgetInstance); + } + iAllowedToPublish[widgetInstance] = EFalse; + CleanupStack::PopAndDestroy( cid ); + } + else if (trigger.Compare(KTriggerEmailUi) == 0) + { + HBufC* cid = contentid.AllocLC(); + iMailCpsHandler->LaunchEmailUIL(cid->Des()); + CleanupStack::PopAndDestroy( cid ); + } + else if ((trigger.Compare(KTriggerWizard) == 0) || + ( trigger.Compare(KSettings16) == 0)) + { + // If no accounts are created launch email wizard + // otherwice launch widget settings app + if (iMailCpsHandler->GetMailboxCount()) + { + HBufC* cid = contentid.AllocLC(); + iMailCpsHandler->LaunchWidgetSettingsL(cid->Des()); + CleanupStack::PopAndDestroy( cid ); + } + else + { + iMailCpsHandler->LaunchEmailWizardL(); + } + } + } + } + } + } + CleanupStack::PopAndDestroy(1); + } + return result; + } + +// --------------------------------------------------------------------------- +// CMailCpsIf::AllowedToPublish +// --------------------------------------------------------------------------- +// +TBool CMailCpsIf::AllowedToPublish( TInt aWidgetInstance ) + { + FUNC_LOG; + if ( !iAllowedToPublish[aWidgetInstance] && !iIgnoreHsNotifications ) + { + return EFalse; + } + else + { + return ETrue; + } + } + +// --------------------------------------------------------------------------- +// CMailCpsIf::SetConfiguration +// --------------------------------------------------------------------------- +// +void CMailCpsIf::SetConfiguration( const TInt32 aConfigData ) + { + FUNC_LOG; + iIgnoreHsNotifications = aConfigData & KCMailIgnoreHsEvents; + } + +// --------------------------------------------------------------------------- +// CMailCpsIf::GetWidgetInstanceCount +// --------------------------------------------------------------------------- +// +TInt CMailCpsIf::GetWidgetInstanceCount() + { + FUNC_LOG; + return iInstIdList.Count(); + } + + +// --------------------------------------------------------------------------- +// CMailCpsIf::FindWidgetInstanceId +// --------------------------------------------------------------------------- +// +TInt CMailCpsIf::FindWidgetInstanceId( const TDesC& aContentId ) + { + FUNC_LOG; + TInt instance(KErrNotFound); + for (TInt i = 0; i < iInstIdList.Count(); i++) + { + TInt val = aContentId.Compare(iInstIdList[i]->Des()); + if (!val) + { + instance = i; + break; + } + } + return instance; + } +