meetingrequest/mrentry/src/cesmrfsmailboxutils.cpp
branchRCL_3
changeset 12 4ce476e64c59
parent 8 e1b6206813b4
child 14 b13141f05c3d
--- a/meetingrequest/mrentry/src/cesmrfsmailboxutils.cpp	Mon Mar 15 12:39:10 2010 +0200
+++ b/meetingrequest/mrentry/src/cesmrfsmailboxutils.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) 2007-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"
@@ -22,9 +22,12 @@
 #include "esmrinternaluid.h"
 
 #include <calentry.h>
-#include "cfsmailclient.h"
-#include "cfsmailbox.h"
+//<cmail>
+#include "CFSMailClient.h"
+#include "CFSMailBox.h"
+//</cmail>
 #include <caluser.h>
+#include <ct/rcpointerarray.h>
 
 // Unnamed namespace for local definitions
 namespace {
@@ -32,20 +35,6 @@
 // Definition for email address comparison
 const TInt KEqualEmailAddress( 0 );
 
-// ---------------------------------------------------------------------------
-// Cleanup operation for RPointerArray.
-// @param aArray Pointer to RPointerArray.
-// ---------------------------------------------------------------------------
-//
-void MailboxPointerArrayCleanup( TAny* aArray )
-    {
-    RPointerArray<CFSMailBox>* entryArray =
-        static_cast<RPointerArray<CFSMailBox>*>( aArray );
-
-    entryArray->ResetAndDestroy();
-    entryArray->Close();
-    }
-
 /**
  * Listes all FS mailboxes. On return aMailboxes contains FS mailboxes
  * @param aMailClient FS mail client
@@ -79,7 +68,7 @@
 // CESMRFsMailboxUtils::~CESMRFsMailboxUtils
 // ---------------------------------------------------------------------------
 //
-CESMRFsMailboxUtils::~CESMRFsMailboxUtils()
+EXPORT_C CESMRFsMailboxUtils::~CESMRFsMailboxUtils()
     {
     FUNC_LOG;
     if ( iMailClient )
@@ -92,7 +81,7 @@
 // CESMRFsMailboxUtils::NewL
 // ---------------------------------------------------------------------------
 //
-CESMRFsMailboxUtils* CESMRFsMailboxUtils::NewL(
+EXPORT_C CESMRFsMailboxUtils* CESMRFsMailboxUtils::NewL(
             CMRMailboxUtils& aMailboxUtils )
     {
     FUNC_LOG;
@@ -118,7 +107,7 @@
 // CESMRFsMailboxUtils::SetPhoneOwnerL
 // ---------------------------------------------------------------------------
 //
-TInt CESMRFsMailboxUtils::SetPhoneOwnerL(
+EXPORT_C TInt CESMRFsMailboxUtils::SetPhoneOwnerL(
             CCalEntry& aCalEntry,
             TMsvId aPrimaryBox )
     {
@@ -130,11 +119,8 @@
         {
         // Check if phone owner can be set using FS mailboxes
         // Loop throug all mailboxes in this plug-in
-        RPointerArray<CFSMailBox> mailboxes;
-        CleanupStack::PushL(
-                TCleanupItem(
-                        MailboxPointerArrayCleanup,
-                        &mailboxes    ) );
+        RCPointerArray<CFSMailBox> mailboxes;
+        CleanupClosePushL( mailboxes );
 
         ListMailBoxesL(
                 MailClientL(),
@@ -148,6 +134,7 @@
             aCalEntry.SetPhoneOwnerL( phoneOwner );
             err = KErrNone;
             }
+        
         CleanupStack::PopAndDestroy( &mailboxes );
         }
     return err;
@@ -157,14 +144,14 @@
 // CESMRFsMailboxUtils::SetPhoneOwnerL
 // ----------------------------------------------------------------------------
 //
-TInt CESMRFsMailboxUtils::SetPhoneOwnerL(
+EXPORT_C TInt CESMRFsMailboxUtils::SetPhoneOwnerL(
     CCalEntry& aCalEntry,
     CFSMailClient& aMailClient,
     CFSMailMessage& aMailMessage )
     {
     FUNC_LOG;
     TInt err( KErrNotFound );
-    
+
     TFSMailMsgId mailboxId( aMailMessage.GetMailBoxId() );
     CFSMailBox* mailbox = aMailClient.GetMailBoxByUidL( mailboxId );
 
@@ -172,16 +159,16 @@
         {
         return KErrNotFound;
         }
-    
+
     CleanupStack::PushL( mailbox );
 
     TPtrC mailboxOwnerAddName(
             mailbox->OwnMailAddress().GetEmailAddress() );
-    
+
     CCalUser* po = NULL;
     CCalUser* organizer = aCalEntry.OrganizerL();
 
-    if ( organizer &&  
+    if ( organizer &&
          KEqualEmailAddress == organizer->Address().CompareF(mailboxOwnerAddName) )
         {
         po = organizer;
@@ -200,16 +187,16 @@
                 po = attendee;
                 }
             }
-        }    
-    
+        }
+
     if ( po )
         {
         aCalEntry.SetPhoneOwnerL( po );
         err = KErrNone;
         }
-    
+
     CleanupStack::PopAndDestroy( mailbox );
-    
+
     return err;
     }
 
@@ -217,39 +204,36 @@
 // CESMRFsMailboxUtils::FSEmailPluginForEntryL
 // ----------------------------------------------------------------------------
 //
-TESMRMailPlugin CESMRFsMailboxUtils::FSEmailPluginForEntryL( 
+EXPORT_C TESMRMailPlugin CESMRFsMailboxUtils::FSEmailPluginForEntryL(
         const CCalEntry& aEntry )
     {
     FUNC_LOG;
-    RPointerArray<CFSMailBox> mailboxes;
-    CleanupStack::PushL(
-            TCleanupItem(
-                    MailboxPointerArrayCleanup,
-                    &mailboxes    ) );
+    RCPointerArray<CFSMailBox> mailboxes;
+    CleanupClosePushL( mailboxes );
 
     ListMailBoxesL(
             MailClientL(),
-            mailboxes );    
-    
+            mailboxes );
+
     CCalUser* phoneOwner = aEntry.PhoneOwnerL();
     TPtrC poMailAddress( phoneOwner->Address() );
-    
+
     CFSMailBox* fsEmailMailbox = NULL;
     TInt mailboxCount( mailboxes.Count() );
     for (TInt j(0); j < mailboxCount && !fsEmailMailbox; ++j )
-        {        
+        {
         TPtrC mailboxOwnerAddName(
                 mailboxes[j]->OwnMailAddress().GetEmailAddress() );
-        
+
         if ( KEqualEmailAddress == mailboxOwnerAddName.CompareF(poMailAddress) )
             {
             // Correct mailbox is found
             fsEmailMailbox = mailboxes[j];
             }
-        }    
-    
+        }
+
     TESMRMailPlugin plugin( EESMRUnknownPlugin );
-    
+
     if ( fsEmailMailbox )
         {
         // Mailbox was found --> We need to resolve mailboxes plug-in
@@ -268,54 +252,41 @@
                 TUid::Uid( KFSEmailImap4 ) == pluginId )
             {
             plugin = EESMRImapPop;
-            }        
+            }
         }
-    
-    CleanupStack::PopAndDestroy( &mailboxes );    
+
+    CleanupStack::PopAndDestroy( &mailboxes );
     return plugin;
     }
 
 // ----------------------------------------------------------------------------
-// CESMRFsMailboxUtils::FSEmailMailBoxForEntryL
+// CESMRFsMailboxUtils::DefaultMailboxSupportCapabilityL
 // ----------------------------------------------------------------------------
 //
-TFSMailMsgId CESMRFsMailboxUtils::FSEmailMailBoxForEntryL( 
-        const CCalEntry& aEntry )
+EXPORT_C TBool CESMRFsMailboxUtils::DefaultMailboxSupportCapabilityL(
+        CESMRFsMailboxUtils::TMRMailboxCapability aCapability ) 
     {
     FUNC_LOG;
-    RPointerArray<CFSMailBox> mailboxes;
-    CleanupStack::PushL(
-            TCleanupItem( MailboxPointerArrayCleanup, &mailboxes ) );
-
-    ListMailBoxesL( MailClientL(), mailboxes );    
     
-    CCalUser* phoneOwner = aEntry.PhoneOwnerL();
-    TPtrC poMailAddress( phoneOwner->Address() );
+    TBool retValue( EFalse );    
+   
+    CFSMailBox* defaultMailbox = DefaultMailboxL();
+    CleanupStack::PushL( defaultMailbox );
+    ASSERT( defaultMailbox );
     
-    CFSMailBox* fsEmailMailbox = NULL;
-    TInt mailboxCount( mailboxes.Count() );
-    for (TInt j(0); j < mailboxCount && !fsEmailMailbox; ++j )
-        {        
-        TPtrC mailboxOwnerAddName(
-                mailboxes[j]->OwnMailAddress().GetEmailAddress() );
-        
-        if ( KEqualEmailAddress == 
-             mailboxOwnerAddName.CompareF( poMailAddress ) )
+    switch ( aCapability )
+        {
+        case CESMRFsMailboxUtils::EMRCapabilityAttachment:
             {
-            // Correct mailbox is found
-            fsEmailMailbox = mailboxes[j];
+            retValue = defaultMailbox->HasCapability( 
+                            EFSMboxCapaSupportsAttahmentsInMR );
             }
+            break;
         }
     
-    TFSMailMsgId retVal; // default ctor constructs a null id.
+    CleanupStack::PopAndDestroy( defaultMailbox );
     
-    if ( fsEmailMailbox )
-        {
-        retVal = fsEmailMailbox->GetId();
-        }
-
-    CleanupStack::PopAndDestroy( &mailboxes );
-    return retVal;
+    return retValue;
     }
 
 // ----------------------------------------------------------------------------
@@ -398,5 +369,46 @@
     return *iMailClient;
     }
 
+// ----------------------------------------------------------------------------
+// CESMRFsMailboxUtils::DefaultMailboxL
+// ----------------------------------------------------------------------------
+//
+CFSMailBox* CESMRFsMailboxUtils::DefaultMailboxL()
+    {
+    FUNC_LOG;
+    
+    CFSMailBox* defaultMailbox( NULL );
+    
+    CMRMailboxUtils::TMailboxInfo mailboxInfo;
+    TInt err = iMRMailboxUtils.GetDefaultMRMailBoxL( mailboxInfo );
+    
+    if ( KErrNone == err )
+        {
+        RCPointerArray<CFSMailBox> mailboxes;
+        CleanupClosePushL( mailboxes );
+        
+        ListMailBoxesL( MailClientL(), mailboxes );
+        
+        TInt mailboxCount( mailboxes.Count() );
+        for (TInt j(0); j < mailboxCount && !defaultMailbox; ++j )
+            {
+            TPtrC mailboxOwnerAddName(
+                    mailboxes[j]->OwnMailAddress().GetEmailAddress() );
+    
+            if ( KEqualEmailAddress == 
+                 mailboxOwnerAddName.CompareF( mailboxInfo.iEmailAddress) )
+                {
+                // Default mailbox is found
+                defaultMailbox = mailboxes[j];
+                mailboxes.Remove( j );
+                }
+            }
+        
+        CleanupStack::PopAndDestroy( &mailboxes );
+        }
+    
+    return defaultMailbox;
+    }
+
 // EOF