meetingrequest/mricalviewer/src/esmricalviewerutils.cpp
changeset 0 8466d47a6819
child 8 e1b6206813b4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/meetingrequest/mricalviewer/src/esmricalviewerutils.cpp	Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,411 @@
+/*
+* 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"
+* 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:  ESMRIcalViewer utility methods
+*
+*/
+
+
+#include "emailtrace.h"
+#include "esmricalviewerutils.h"
+#include "cesmrattachmentinfo.h"
+//<cmail>
+#include "CFSMailMessagePart.h"
+#include "CFSMailClient.h"
+#include "CFSMailMessage.h"
+#include "CFSMailBox.h"
+//</cmail>
+
+#include <calentry.h>
+#include <caluser.h>
+#include <cmrmailboxutils.h>
+
+// Unnamed namespace for local definitions
+namespace {
+
+const TInt KZero( 0 );
+_LIT( KTextCalendar, "text/calendar");
+
+}//namespace
+
+// ---------------------------------------------------------------------------
+// ESMRIcalViewerUtils::EmailOperation
+// ---------------------------------------------------------------------------
+//
+TESMRIcalViewerOperationType ESMRIcalViewerUtils::EmailOperation(
+        TInt aCommandId )
+    {
+    FUNC_LOG;
+    TESMRIcalViewerOperationType command( EESMRCmdOpenAttachment );
+
+    switch ( aCommandId )
+        {
+        case EESMRCmdAcceptMR://fallthrough
+        case EESMRCmdTentativeMR://fallthrough
+        case EESMRCmdDeclineMR:
+            {
+            command = EESMRCmdOpenAttachmentView;
+            }
+        break;
+        default:
+            {
+            command = static_cast<TESMRIcalViewerOperationType>( aCommandId );
+            }
+        break;
+        }
+
+    return command;
+    }
+
+// ---------------------------------------------------------------------------
+// ESMRIcalViewerUtils::ContainsAttachments
+// ---------------------------------------------------------------------------
+//
+TBool ESMRIcalViewerUtils::ContainsAttachments(
+        TESMRInputParams& aParams )
+    {
+    FUNC_LOG;
+    TBool retValue( EFalse );
+
+    if ( aParams.iAttachmentInfo &&
+         aParams.iAttachmentInfo->AttachmentCount() )
+        {
+        retValue = ETrue;
+        }
+
+    return retValue;
+    }
+
+// ---------------------------------------------------------------------------
+// ESMRIcalViewerUtils::IsAsyncEmailCommand
+// ---------------------------------------------------------------------------
+//
+TBool ESMRIcalViewerUtils::IsAsyncEmailCommand(
+        TESMRIcalViewerOperationType aCommand )
+    {
+    FUNC_LOG;
+    TBool retValue( ETrue );
+
+    if ( EESMRCmdMailMarkUnread == aCommand ||
+         EESMRCmdMailMarkRead == aCommand ||
+         EESMRCmdMailFlagMessage == aCommand )
+        {
+        retValue = EFalse;
+        }
+
+    return retValue;
+    }
+
+// ---------------------------------------------------------------------------
+// ESMRIcalViewerUtils::MRResponseCommandWithoutAttachmentCheck
+// ---------------------------------------------------------------------------
+//
+TESMRCommand ESMRIcalViewerUtils::MRResponseCommandWithoutAttachmentCheck(
+        TInt aCommand )
+    {
+    FUNC_LOG;
+    TESMRCommand command( EESMRAcceptWithoutAttachmentCheck );
+
+    switch ( aCommand )
+        {
+        case EESMRCmdAcceptMR:
+            {
+            command = EESMRAcceptWithoutAttachmentCheck;
+            break;
+            }
+        case EESMRCmdTentativeMR:
+            {
+            command = EESMRTentativeWithoutAttachmentCheck;
+            break;
+            }
+        case EESMRCmdDeclineMR:
+            {
+            command = EESMRDeclineWithoutAttachmentCheck;
+            break;
+            }
+        default:
+            break;
+        }
+
+    return command;
+    }
+
+// ---------------------------------------------------------------------------
+// ESMRIcalViewerUtils::LocateChildPartLC
+// ---------------------------------------------------------------------------
+//
+CFSMailMessagePart* ESMRIcalViewerUtils::LocateChildPartLC(
+        CFSMailMessagePart& aParentPart,
+        const TDesC& aMimeType )
+    {
+    FUNC_LOG;
+    CFSMailMessagePart* child = NULL;
+
+    TBool partFound( EFalse );
+
+    RPointerArray<CFSMailMessagePart> messageParts;
+    CleanupStack::PushL(
+            TCleanupItem(
+                ESMRIcalViewerUtils::MessagePartPointerArrayCleanup,
+                &messageParts    ) );
+
+    aParentPart.ChildPartsL( messageParts );
+
+    TInt msgPartCount( messageParts.Count() );
+    for ( TInt i(0); (i < msgPartCount) && !partFound; ++i )
+        {
+        CFSMailMessagePart* part = messageParts[i];
+
+        HBufC* contentType = part->GetContentType().AllocLC();
+        TPtr ptrContentType( contentType->Des() );
+        ptrContentType.LowerCase();
+
+        // Check part's content type
+        if ( KErrNotFound != ptrContentType.Find( aMimeType ) )
+            {
+            partFound = ETrue;
+            child = messageParts[i];
+            messageParts.Remove(i);
+            }
+        CleanupStack::PopAndDestroy( contentType );
+        contentType = NULL;
+        }
+
+    CleanupStack::PopAndDestroy(); // messageParts
+
+    CleanupStack::PushL( child );
+    return child;
+    }
+
+// ---------------------------------------------------------------------------
+// ESMRIcalViewerUtils::LocateCalendarPartL
+// ---------------------------------------------------------------------------
+//
+CFSMailMessagePart* ESMRIcalViewerUtils::LocateCalendarPartL( CFSMailMessage& aMessage )
+    {
+    FUNC_LOG;
+    
+    CFSMailMessagePart* calendarPart( NULL );
+    CFSMailMessagePart* multipart( NULL );
+    
+    // 1st, try to find 'TEXT/CALENDAR' part from 'MULTIPART/ALTERNATIVE' part of message
+    multipart = ESMRIcalViewerUtils::LocateChildPartLC(
+        aMessage,
+        KFSMailContentTypeMultipartAlternative );
+    if ( multipart )
+        {
+        // multipart found
+        calendarPart = ESMRIcalViewerUtils::LocateChildPartLC( *multipart, KTextCalendar );
+        if ( calendarPart )
+            {
+            // calendar part under multipart found
+            CleanupStack::Pop( calendarPart );
+            CleanupStack::PopAndDestroy( multipart );
+            multipart = NULL;
+            CleanupStack::PushL( calendarPart );
+            }
+        else
+            {
+            // no calendar part under multipart
+            CleanupStack::PopAndDestroy( 2 );
+            multipart = NULL;
+            calendarPart = NULL;
+            }
+        }
+    else
+        {
+        CleanupStack::PopAndDestroy( multipart );
+        }
+    
+    if ( !calendarPart )
+        {
+        // If there's no 'MULTIPART/ALTERNATIVE' or it doesn't have
+        // 'TEXT/CALENDAR' entry, try looking from message root
+        calendarPart = ESMRIcalViewerUtils::LocateChildPartLC(
+            aMessage,
+            KTextCalendar );
+        }
+    CleanupStack::Pop();
+    return calendarPart;
+    }
+
+// ---------------------------------------------------------------------------
+// ESMRIcalViewerUtils::MessagePartPointerArrayCleanup
+// ---------------------------------------------------------------------------
+//
+void ESMRIcalViewerUtils::MessagePartPointerArrayCleanup( TAny* aArray )
+    {
+    FUNC_LOG;
+    RPointerArray<CFSMailMessagePart>* messagePartArray =
+        static_cast<RPointerArray<CFSMailMessagePart>*>( aArray );
+
+    messagePartArray->ResetAndDestroy();
+    messagePartArray->Close();
+    }
+
+// ---------------------------------------------------------------------------
+// ESMRIcalViewerUtils::UserResponsedToMRL
+// ---------------------------------------------------------------------------
+//
+TESMRAttendeeStatus ESMRIcalViewerUtils::UserResponsedToMRL(
+            CCalEntry& aEntry )
+    {
+    FUNC_LOG;
+    TESMRAttendeeStatus attendeeStatus( EESMRAttendeeStatusUnknown );
+
+    CCalEntry::TStatus status( aEntry.StatusL() );
+
+    if ( status == CCalEntry::EConfirmed  )
+        {
+        CMRMailboxUtils* mbUtils =
+                CMRMailboxUtils::NewL();
+
+        CleanupStack::PushL( mbUtils );
+
+        CCalAttendee* attendee = mbUtils->ThisAttendeeL( aEntry );
+
+        if ( attendee )
+            {
+            CCalAttendee::TCalStatus status( attendee->StatusL() );
+
+            switch( status )
+                {
+                case CCalAttendee::EAccepted:
+                    {
+                    attendeeStatus = EESMRAttendeeStatusAccept;
+                    break;
+                    }
+                case CCalAttendee::ETentative:
+                    {
+                    attendeeStatus = EESMRAttendeeStatusTentative;
+                    break;
+                    }
+                case CCalAttendee::EDeclined:
+                    {
+                    attendeeStatus = EESMRAttendeeStatusDecline;
+                    break;
+                    }
+                default:
+                    {
+                    attendeeStatus = EESMRAttendeeStatusUnknown;
+                    break;
+                    }
+                }
+            }
+
+        CleanupStack::PopAndDestroy( mbUtils );
+        mbUtils = NULL;
+        }
+
+    return attendeeStatus;
+    }
+
+// ---------------------------------------------------------------------------
+// ESMRIcalViewerUtils::MailboxOwnerRoleL
+// ---------------------------------------------------------------------------
+//
+TESMRRole ESMRIcalViewerUtils::MailboxOwnerRoleL(
+        CCalEntry& aEntry,
+        CFSMailClient& aMailClient,
+        CFSMailMessage& aMessage )
+    {
+    FUNC_LOG;
+    TESMRRole role( EESMRRoleUndef );
+
+    TFSMailMsgId mailboxId( aMessage.GetMailBoxId() );
+    CFSMailBox* mailbox = aMailClient.GetMailBoxByUidL( mailboxId );
+
+    CleanupStack::PushL( mailbox );
+
+    TPtrC mailboxOwnerAddName(
+            mailbox->OwnMailAddress().GetEmailAddress() );
+
+    CCalUser* organizer = aEntry.OrganizerL();
+
+    if ( organizer &&  KZero == organizer->Address().CompareF(mailboxOwnerAddName) )
+        {
+        role = EESMRRoleOrganizer;
+        }
+    else
+        {
+        RPointerArray<CCalAttendee>& attendees = aEntry.AttendeesL();
+        TInt attendeeCount( attendees.Count() );
+
+        for( TInt i(0); i < attendeeCount; ++i )
+            {
+            CCalAttendee* attendee = attendees[i];
+            if ( KZero == attendee->Address().CompareF(mailboxOwnerAddName) )
+                {
+                switch( attendee->RoleL() )
+                    {
+                    case CCalAttendee::EChair:
+                    case CCalAttendee::EReqParticipant:
+                        {
+                        role = EESMRRoleRequiredAttendee;
+                        }
+                    break;
+                    case CCalAttendee::EOptParticipant:
+                        {
+                        role = EESMRRoleOptionalAttendee;
+                        }
+                    break;
+                    case CCalAttendee::ENonParticipant:
+                        {
+                        role = EESMRRoleNonParticipant;
+                        }
+                    break;
+                    default:
+                        {
+                        role = EESMRRoleUndef;
+                        }
+                    break;
+                    }
+                }
+            }
+        }
+
+    CleanupStack::PopAndDestroy( mailbox );
+
+    return role;
+    }
+
+// ---------------------------------------------------------------------------
+// ESMRIcalViewerUtils::IsMailboxOwnerAttendeeL
+// ---------------------------------------------------------------------------
+//
+TBool ESMRIcalViewerUtils::IsMailboxOwnerAttendeeL(
+        CCalEntry& aEntry,
+        CFSMailClient& aMailClient,
+        CFSMailMessage& aMessage )
+    {
+    FUNC_LOG;
+    TBool retValue( EFalse );
+
+    TESMRRole role(
+            ESMRIcalViewerUtils::MailboxOwnerRoleL(
+                    aEntry,
+                    aMailClient,
+                    aMessage ) );
+
+    if ( EESMRRoleRequiredAttendee == role ||
+            EESMRRoleOptionalAttendee == role ||
+            EESMRRoleNonParticipant == role )
+        {
+        retValue = ETrue;
+        }
+
+    return retValue;
+    }
+
+// EOF
+