messagingappbase/msgavkon/muiu_internal/emailtools/src/MuiuEmailTools.cpp
branchRCL_3
changeset 27 7fdbb852d323
parent 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingappbase/msgavkon/muiu_internal/emailtools/src/MuiuEmailTools.cpp	Wed Sep 01 12:31:54 2010 +0100
@@ -0,0 +1,303 @@
+/*
+* Copyright (c) 2002 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:  MuiuEmailTools implementation
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <e32base.h>
+#include <cemailaccounts.h>         // CEmailAccounts
+#include <msvstd.h>                 // TEntry
+#include <msvids.h>                 // KMsvUnknownServiceIndexEntryId
+#include <msvstd.hrh>               // KUidMsvServiceEntryValue
+#include <miuthdr.h>                // TMsvEmailEntry
+#include <MtmExtendedCapabilities.hrh> // Capabilities
+#include <mtclreg.h>                // CClientMtmRegistry
+#include <mtclbase.h>               // CBaseMtm
+#include <mtuireg.h>
+#include <muiuemailtools.h>
+
+// EXTERNAL DATA STRUCTURES
+// EXTERNAL FUNCTION PROTOTYPES
+// CONSTANTS
+// MACROS
+// LOCAL CONSTANTS AND MACROS
+// MODULE DATA STRUCTURES
+// LOCAL FUNCTION PROTOTYPES
+// FORWARD DECLARATIONS
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// ----------------------------------------------------------------------------
+// MuiuEmailTools::SetDefaultSendingMailboxL()
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void MuiuEmailTools::SetDefaultSendingMailboxL(    
+    const TMsvId aSendingMailboxId )
+    {
+    CEmailAccounts* account = CEmailAccounts::NewLC();
+    
+    // Store the id
+	TSmtpAccount sendingId;
+	account->GetSmtpAccountL( aSendingMailboxId, sendingId );
+	account->SetDefaultSmtpAccountL( sendingId );   		       
+    
+    CleanupStack::PopAndDestroy( account );        
+    }
+    
+// ----------------------------------------------------------------------------
+// MuiuEmailTools::DefaultSendingMailboxL()
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TMsvId MuiuEmailTools::DefaultSendingMailboxL( 
+    CMsvSession& aMsvSession,
+    TUid& aMtmId )
+    {        
+    // In case of basic mail mtm's, force the smtp as a searchable mtm
+    TMsvId serviceId = KMsvUnknownServiceIndexEntryId;
+    
+    // If Imap4, Pop3 or Smtp mailbox, use CEmailAccounts to check the
+    // default service
+    if ( MuiuEmailTools::IsMailMtm( aMtmId ) )
+        {
+        TInt result = KErrNone;
+        TSmtpAccount smtpId;
+        aMtmId = KSenduiMtmSmtpUid;
+        
+        // Solve the mystery of the default mailbox
+        CEmailAccounts* account = CEmailAccounts::NewLC();
+        TRAPD( error, result = account->DefaultSmtpAccountL( smtpId ) );                    
+        if ( error != KErrNone || result != KErrNone )
+            {
+            // Getting the default mailbox didn't succeed, 
+            // return unknown service
+            smtpId.iSmtpService = KMsvUnknownServiceIndexEntryId;
+            }
+        
+        CleanupStack::PopAndDestroy( account );
+        account = NULL;
+        
+        serviceId = smtpId.iSmtpService;
+        }
+    else
+        {
+        serviceId = QueryDefaultServiceL( aMsvSession, aMtmId );
+        }
+    
+    // After the service has been specified, make sure it is valid    
+    if ( !ValidateMailboxL( aMsvSession, aMtmId, serviceId ) )
+        {
+        serviceId = KMsvUnknownServiceIndexEntryId;
+        }    
+        
+    return serviceId;
+    }
+
+// ----------------------------------------------------------------------------
+// MuiuEmailTools::FindFirstValidMailboxL()
+// ----------------------------------------------------------------------------
+//
+TMsvId MuiuEmailTools::FindFirstValidMailboxL( 
+    CMsvSession& aMsvSession,
+    const CMsvEntrySelection& aSelection,
+    const TUid& aMtmId )
+    {
+    TMsvId serviceId = KMsvUnknownServiceIndexEntryId;
+    
+    // Prepare the mtm store and get the MtmUi of the desired mtmId
+    CClientMtmRegistry* registry = CClientMtmRegistry::NewL( aMsvSession );
+    CleanupStack::PushL( registry );
+    CBaseMtm* mtm = registry->NewMtmL( aMtmId );
+    CleanupStack::PushL( mtm );
+    CMtmUiRegistry* uiRegistry = CMtmUiRegistry::NewL( aMsvSession );
+    CleanupStack::PushL( uiRegistry );
+    CBaseMtmUi* smtpMtmUi = uiRegistry->NewMtmUiL( *mtm );
+    CleanupStack::PushL( smtpMtmUi );
+    
+    // Query from the mtm, if it is able to validate the service
+    if ( QueryCapability( 
+        KUidMsvMtmQuerySupportValidateSelection, *smtpMtmUi ) )
+        {
+        const TInt count = aSelection.Count();
+        for ( TInt index = 0; 
+              index < count && serviceId == KMsvUnknownServiceIndexEntryId; 
+              index++ )
+            {
+            TMsvId mailbox = aSelection.At( index );
+            serviceId = QueryMailboxValidityL( mailbox, *smtpMtmUi ) > 0 ?
+                mailbox : KMsvUnknownServiceIndexEntryId;
+            }        
+        }
+        
+    CleanupStack::PopAndDestroy( 4, registry ); // registry, mtm, uiRegistry, smtpMtmUi
+    
+    return serviceId;
+    }
+        
+// ----------------------------------------------------------------------------
+// MuiuEmailTools::IsMailMtm()
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool MuiuEmailTools::IsMailMtm( 
+    const TUid& aMtm,
+    const TBool aAllowExtended )
+    {                   
+    // Basic mail mtm's   
+    TBool basicMtms = 
+        ( aMtm == KSenduiMtmSmtpUid ) || 
+        ( aMtm == KSenduiMtmPop3Uid ) || 
+        ( aMtm == KSenduiMtmImap4Uid );
+    // extended mail mtm's
+    TBool extendedMtms =
+        ( aMtm == KSenduiMtmSyncMLEmailUid );
+            
+    // Returns ETrue, if the id is any of the following
+    return basicMtms || ( aAllowExtended && extendedMtms );
+    }     
+
+// ----------------------------------------------------------------------------
+// MuiuEmailTools::GetMailboxServiceId()
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TInt MuiuEmailTools::GetMailboxServiceId(
+    CMsvSession& aMsvSession,
+    TMsvEntry& aMailbox,
+    const TMsvId aMailboxId,    
+    const TBool aGetSendingService )
+    {
+    // Get the entry based on mailbox id    
+    TMsvId serviceId;            
+    TInt error = aMsvSession.GetEntry( aMailboxId, serviceId, aMailbox );
+    
+    TInt32 mtm = aMailbox.iMtm.iUid;
+    
+    // Continue handling, if successful
+    if ( error == KErrNone && 
+         aMailbox.iType.iUid == KUidMsvServiceEntryValue && 
+         IsMailMtm( aMailbox.iMtm ) )  
+        {        
+        // Get related entry, if:
+        // Mailbox type is smtp and pop3 or imap4 is wanted OR
+        // Mailbox type is pop3 or imap4 and smtp is wanted
+        if ( aGetSendingService && mtm != KSenduiMtmSmtpUidValue || 
+            !aGetSendingService && mtm == KSenduiMtmSmtpUidValue )
+            {
+            error = aMsvSession.GetEntry( aMailbox.iRelatedId, serviceId, aMailbox );
+            }
+        }
+
+    return error;
+    }    
+
+// ----------------------------------------------------------------------------
+// MuiuEmailTools::ValidateMailboxL()
+// ----------------------------------------------------------------------------
+//
+TBool MuiuEmailTools::ValidateMailboxL( 
+    CMsvSession& aMsvSession,
+    const TUid& aMtmId,
+    const TMsvId aMailboxId )
+    {
+    // Prepare the mtm store and get the MtmUi of the desired mtmId
+    TBool validity = EFalse;
+
+    CClientMtmRegistry* registry = CClientMtmRegistry::NewL( aMsvSession );
+    CleanupStack::PushL( registry );
+    CBaseMtm* mtm = registry->NewMtmL( aMtmId );
+    CleanupStack::PushL( mtm );
+    CMtmUiRegistry* uiRegistry = CMtmUiRegistry::NewL( aMsvSession );
+    CleanupStack::PushL( uiRegistry );
+    CBaseMtmUi* smtpMtmUi = uiRegistry->NewMtmUiL( *mtm );
+    CleanupStack::PushL( smtpMtmUi );
+
+    // Query from the mtm, if it is able to validate the service
+    if ( QueryCapability( 
+        KUidMsvMtmQuerySupportValidateSelection, *smtpMtmUi ) )
+        {
+        validity = QueryMailboxValidityL( aMailboxId, *smtpMtmUi ) > 0;
+        }
+        
+    CleanupStack::PopAndDestroy( 4, registry ); // registry, mtm, uiRegistry, smtpMtmUi
+    
+    return validity;
+    }
+    
+// ----------------------------------------------------------------------------
+// MuiuEmailTools::QueryCapability()
+// ----------------------------------------------------------------------------
+//
+TBool MuiuEmailTools::QueryCapability( const TInt aQuery, CBaseMtmUi& aMtmUi )
+    {
+    TInt response = EFalse;
+    TUid capabilityId = TUid::Uid( aQuery ); 
+    
+    // Query the capability from the Mtm
+    TInt error = aMtmUi.QueryCapability( capabilityId, response );
+    
+    // Result is ok, when no error has occurred
+    return !error && response;
+    }    
+
+// ----------------------------------------------------------------------------
+// MuiuEmailTools::QueryMailboxValidityL()
+// ----------------------------------------------------------------------------
+//
+TInt MuiuEmailTools::QueryMailboxValidityL( 
+    const TMsvId aMailboxId,
+    CBaseMtmUi& aMtmUi )
+    {
+    CMsvEntrySelection* selection = new ( ELeave ) CMsvEntrySelection();
+    CleanupStack::PushL( selection );
+    selection->AppendL( aMailboxId );
+    TPckgBuf<TInt> parameter = EFalse;    
+    
+    // Invoke mtm's sync function
+    aMtmUi.InvokeSyncFunctionL( 
+        KUidMsvMtmQuerySupportValidateSelection, *selection, parameter );
+
+    CleanupStack::PopAndDestroy( selection );
+        
+    return ( parameter() == KErrNone );        
+    }  
+    
+    
+// ----------------------------------------------------------------------------
+// MuiuEmailTools::QueryDefaultServiceL()
+// ----------------------------------------------------------------------------
+//
+TMsvId MuiuEmailTools::QueryDefaultServiceL( 
+    CMsvSession& aMsvSession, 
+    const TUid& aMtmId )
+    {
+    TMsvId serviceId = KMsvUnknownServiceIndexEntryId;
+    CClientMtmRegistry* registry = CClientMtmRegistry::NewL( aMsvSession );
+    CleanupStack::PushL( registry );
+    CBaseMtm* mtm = registry->NewMtmL( aMtmId );
+    CleanupStack::PushL( mtm );
+    TRAPD( error, serviceId = mtm->DefaultServiceL() );
+    if( error != KErrNone )
+        {
+        serviceId = KMsvUnknownServiceIndexEntryId;
+        }
+        
+    CleanupStack::PopAndDestroy( 2, registry ); 
+    registry = NULL;
+    mtm = NULL;
+    
+    return serviceId;
+    }           
+            
+// End of File