diff -r a3a1ae9acec6 -r da5135c61bad meetingrequest/mrgui/mrfieldbuilderpluginextension/src/resmrpluginextensionstatic.cpp --- a/meetingrequest/mrgui/mrfieldbuilderpluginextension/src/resmrpluginextensionstatic.cpp Mon Mar 15 12:39:10 2010 +0200 +++ b/meetingrequest/mrgui/mrfieldbuilderpluginextension/src/resmrpluginextensionstatic.cpp Wed Mar 31 21:08:33 2010 +0300 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +* 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" @@ -18,6 +18,10 @@ #include "emailtrace.h" #include "resmrpluginextensionstatic.h" #include "cmrmailboxutils.h" +#include "esmrhelper.h" +#include + +// Removed profiling. /** * Storage class for RESMRStatic. @@ -39,21 +43,6 @@ // Definition for equal string const TInt KEqualString(0); -// --------------------------------------------------------------------------- -// Cleanup operation for RPointerArray. -// @param aArray Pointer to RPointerArray. -// --------------------------------------------------------------------------- -// -void MailboxPointerArrayCleanup( TAny* aArray ) - { - // just to avoid warnings when MR not supported - RPointerArray* entryArray = - static_cast*>( aArray ); - - entryArray->ResetAndDestroy(); - entryArray->Close(); - } - }//namespace // --------------------------------------------------------------------------- @@ -83,7 +72,7 @@ void RESMRPluginExtensionStatic::ConnectL( ) { FUNC_LOG; - if ( iStaticData ) + if (iStaticData ) { return; } @@ -93,7 +82,7 @@ // If Tls pointer was not set, create new static stuct // with NULL values - if ( !iStaticData ) + if (!iStaticData) { iStaticData = new (ELeave) TESMRPluginExtensionData(); memset ( iStaticData, 0, sizeof( TESMRPluginExtensionData) ); @@ -109,17 +98,17 @@ void RESMRPluginExtensionStatic::Close( ) { FUNC_LOG; - if ( iStaticData ) + if (iStaticData ) { // If FSMailClientL or DefaultFSMailBox was used - if ( iUsedTypes & KMailBox ) + if (iUsedTypes & KMailBox ) { // Decrease counter --iStaticData->iFSMailBoxCount; // If this was last instance using pointer - if ( iStaticData->iFSMailBoxCount == 0 ) + if (iStaticData->iFSMailBoxCount == 0 ) { // Owned by CFSMailClient delete iStaticData->iDefaultFSMailBox; @@ -163,16 +152,9 @@ // RESMRPluginExtensionStatic::DefaultFSMailBoxL // --------------------------------------------------------------------------- // -CFSMailBox& RESMRPluginExtensionStatic::DefaultFSMailBoxL( TBool aForceReset ) +CFSMailBox& RESMRPluginExtensionStatic::DefaultFSMailBoxL() { FUNC_LOG; - - if ( aForceReset && iStaticData->iDefaultFSMailBox ) - { - delete iStaticData->iDefaultFSMailBox; - iStaticData->iDefaultFSMailBox = NULL; - } - if ( !iStaticData->iDefaultFSMailBox ) { CFSMailClient& fsMailClient = FSMailClientL(); @@ -186,12 +168,9 @@ mbUtils->GetDefaultMRMailBoxL( mbInfo ) ); // Loop throug all mailboxes in this plug-in - RPointerArray mailboxes; // codescanner::resourcenotoncleanupstack - CleanupStack::PushL( - TCleanupItem( - MailboxPointerArrayCleanup, - &mailboxes ) ); - + RCPointerArray mailboxes; + CleanupClosePushL( mailboxes ); + // With null uid we get all mailboxes TFSMailMsgId msgId; fsMailClient.ListMailBoxes( @@ -212,8 +191,7 @@ } } - CleanupStack::PopAndDestroy(); // mailboxes - CleanupStack::PopAndDestroy( mbUtils ); + CleanupStack::PopAndDestroy( 2, mbUtils ); // mailboxes mbUtils = NULL; if ( !iStaticData->iDefaultFSMailBox ) @@ -228,6 +206,48 @@ } // --------------------------------------------------------------------------- +// RESMRPluginExtensionStatic::MailBoxL +// --------------------------------------------------------------------------- +// +CFSMailBox* RESMRPluginExtensionStatic::MailBoxL( const TDesC& aEmailAddress ) + { + TPtrC address( ESMRHelper::AddressWithoutMailtoPrefix( aEmailAddress ) ); + CFSMailClient& fsMailClient = FSMailClientL(); + + // Loop throug all mailboxes in this plug-in + RCPointerArray mailboxes; + CleanupClosePushL( mailboxes ); + + // With null uid we get all mailboxes + TFSMailMsgId msgId; + fsMailClient.ListMailBoxes( + msgId, mailboxes ); + + TInt mailboxCount( mailboxes.Count() ); + CFSMailBox* mailBox = NULL; + + for ( TInt i(0); i < mailboxCount && !mailBox; ++i ) + { + TPtrC mailboxOwnerAddName( + mailboxes[i]->OwnMailAddress().GetEmailAddress() ); + if ( mailboxOwnerAddName.CompareF( address ) == 0 ) + { + // Correct mailbox is found + mailBox = mailboxes[ i ]; + mailboxes.Remove( i ); + } + } + CleanupStack::PopAndDestroy( &mailboxes ); + + if ( !mailBox ) + { + User::Leave( KErrNotFound ); + } + + return mailBox; + } + +// --------------------------------------------------------------------------- // RESMRPluginExtensionStatic::FSMailClientL // --------------------------------------------------------------------------- //