meetingrequest/mrmbutilsextension/src/cmrmbutilsmailboxlistener.cpp
branchRCL_3
changeset 12 4ce476e64c59
child 16 b5fbb9b25d57
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/meetingrequest/mrmbutilsextension/src/cmrmbutilsmailboxlistener.cpp	Wed Mar 31 21:08:33 2010 +0300
@@ -0,0 +1,218 @@
+/*
+* Copyright (c) 2008 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: MBUtils settings implementation
+*
+*/
+
+//INCLUDE FILES
+#include "cmrmbutilsmailboxlistener.h"
+#include "CFSMailCommon.h"
+#include "CFSMailClient.h"
+#include "CFSMailBox.h"
+#include "fsmtmsuids.h"
+#include "emailtrace.h"
+
+#include <ct/rcpointerarray.h>
+#include <cmrmailboxinfo.h>
+#include <cmrmailboxutils.h>
+
+// CONSTANTS
+
+// Unnamed namespace for local definitions
+namespace {   // codescanner::namespace
+// Length for CRC buffer
+const TInt KCRCBufferLen(32);
+}
+
+// ======== MEMBER FUNCTIONS ========
+
+
+// ----------------------------------------------------------------------------
+// CMRMBUtilsMailboxListener::CMRMBUtilsMailboxListener
+// ----------------------------------------------------------------------------
+//
+CMRMBUtilsMailboxListener::CMRMBUtilsMailboxListener(
+			RPointerArray<CMRMailBoxInfo>& aMailboxes,
+			CFSMailClient& aMailClient,
+			MMRMailboxUtilsObserver& aMRMailboxObserver )
+:	iMailboxes( aMailboxes ),
+    iMailClient( aMailClient ),
+    iMRMailboxObserver( aMRMailboxObserver )
+	{
+	// No implementation
+	}
+
+// ----------------------------------------------------------------------------
+// CMRMBUtilsMailboxListener::~CMRMBUtilsMailboxListener
+// ----------------------------------------------------------------------------
+//
+CMRMBUtilsMailboxListener::~CMRMBUtilsMailboxListener()
+	{
+	// No implementation
+	}
+
+// ----------------------------------------------------------------------------
+// CMRMBUtilsMailboxListener::NewL
+// ----------------------------------------------------------------------------
+//
+CMRMBUtilsMailboxListener* CMRMBUtilsMailboxListener::NewL(
+			RPointerArray<CMRMailBoxInfo>& aMailboxes,
+			CFSMailClient& aMailClient,
+			MMRMailboxUtilsObserver& aMRMailboxObserver )
+	{
+	FUNC_LOG;
+
+	CMRMBUtilsMailboxListener* self =
+			new (ELeave) CMRMBUtilsMailboxListener(
+			        aMailboxes,
+			        aMailClient,
+			        aMRMailboxObserver );
+
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	CleanupStack::Pop( self );
+	return self;
+	}
+
+// ----------------------------------------------------------------------------
+// CMRMBUtilsMailboxListener::ConstructL
+// ----------------------------------------------------------------------------
+//
+void CMRMBUtilsMailboxListener::ConstructL()
+	{
+	FUNC_LOG;
+
+	ListMailboxesL();
+	}
+
+// ----------------------------------------------------------------------------
+// CMRMBUtilsMailboxListener::EventL
+// ----------------------------------------------------------------------------
+//
+void CMRMBUtilsMailboxListener::EventL(
+			TFSMailEvent aEvent,
+			TFSMailMsgId /*aMailbox*/,
+			TAny* /*aParam1*/,
+			TAny* /*aParam2*/,
+			TAny* /*aParam3*/ )
+	{
+	FUNC_LOG;
+
+	MMRMailboxUtilsObserver::TEventType event(
+	        MMRMailboxUtilsObserver::EMRNullEvent);
+
+	switch ( aEvent )
+	    {
+	    case TFSEventNewMailbox:
+	        {
+	        event = MMRMailboxUtilsObserver::EMRMailboxCreated;
+	        }
+	        break;
+
+	    case TFSEventMailboxRenamed:
+        case TFSEventMailboxCapabilityChanged:
+        case TFSEventMailboxSettingsChanged:
+            {
+            event = MMRMailboxUtilsObserver::EMRMailboxCreated;
+            }
+            break;
+
+	    case TFSEventMailboxDeleted:
+	        {
+	        event = MMRMailboxUtilsObserver::EMRMailboxDeleted;
+	        }
+	        break;
+
+	    default:
+	        {
+	        // No actions for rest of the events
+	        }
+	        break;
+	    }
+
+	if ( MMRMailboxUtilsObserver::EMRNullEvent != event)
+	    {
+	    ListMailboxesL();
+	    iMRMailboxObserver.HandleMRMailboxEventL( event );
+	    }
+	}
+
+// ----------------------------------------------------------------------------
+// CMRMBUtilsMailboxListener::ListMailboxesL
+// ----------------------------------------------------------------------------
+//
+void CMRMBUtilsMailboxListener::ListMailboxesL()
+    {
+    FUNC_LOG;
+
+    RCPointerArray<CFSMailBox> mailBoxes;
+    CleanupClosePushL( mailBoxes );
+
+    TFSMailMsgId msgId;
+    iMailClient.ListMailBoxes( msgId, mailBoxes );
+
+    iMailboxes.ResetAndDestroy();
+    TInt mailboxCount( mailBoxes.Count() );
+    for (TInt i(0); i < mailboxCount; ++i )
+        {
+        CFSMailBox* mailbox = mailBoxes[i];
+
+        TBool supportRespond(
+                mailbox->HasCapability( EFSMBoxCapaMeetingRequestRespond ) );
+
+        TBool supportCreate(
+                mailbox->HasCapability( EFSMBoxCapaMeetingRequestCreate ) );
+
+        TBool supportUpdate(
+                mailbox->HasCapability( EFSMBoxCapaCanUpdateMeetingRequest ) );
+
+        TBool supportsMeetingRequest(
+                supportRespond &&
+                supportCreate &&
+                supportUpdate );
+
+        if ( supportsMeetingRequest )
+            {
+            // Mailbox supports meeting request creation
+            TFSMailMsgId mailboxId( mailbox->GetId() );
+
+            TBuf<KCRCBufferLen> crcBuffer;
+            crcBuffer.AppendNum( mailboxId.PluginId().iUid );
+            crcBuffer.AppendNum( mailboxId.Id() );
+
+            TUint32 cmailMailboxCrc( 0 );
+            Mem::Crc32( cmailMailboxCrc,
+                    crcBuffer.Ptr(),
+                    crcBuffer.Size() );
+
+            TPtrC mailboxName( mailbox->GetName() );
+            TPtrC mailboxUser( mailbox->OwnMailAddress().GetEmailAddress() );
+
+            CMRMailBoxInfo* info = CMRMailBoxInfo::NewL(
+                    mailboxName,
+                    mailboxUser,
+                    TUid::Uid( KUidMsgTypeFsMtmVal),
+                    cmailMailboxCrc );
+
+            CleanupStack::PushL( info );
+            User::LeaveIfError( iMailboxes.Append( info ) );
+            CleanupStack::Pop( info );
+            }
+        }
+
+    // mailBoxes
+    CleanupStack::PopAndDestroy(); // codescanner::cleanup
+    }
+
+// EOF