diff -r e64954c2c8e2 -r e8f259fad141 meetingrequest/mrtasks/mrtaskplugin/src/cmrtaskplugin.cpp --- a/meetingrequest/mrtasks/mrtaskplugin/src/cmrtaskplugin.cpp Tue Apr 27 16:20:14 2010 +0300 +++ b/meetingrequest/mrtasks/mrtaskplugin/src/cmrtaskplugin.cpp Tue May 11 15:57:15 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" @@ -35,10 +35,10 @@ #include "esmrconfig.hrh" #include "cesmrcaldbmgr.h" // -#include "CFSMailCommon.h" -#include "CFSMailClient.h" -#include "CFSMailMessage.h" -#include "CFSMailBox.h" +#include "cfsmailcommon.h" +#include "cfsmailclient.h" +#include "cfsmailmessage.h" +#include "cfsmailbox.h" // @@ -104,7 +104,7 @@ // Queries response query from user. // --------------------------------------------------------------------------- // -HBufC* QuerySendResponseQueryFromUserLC( +HBufC* QuerySendResponseQueryFromUserL( TESMRCommand aCommand, TESMRResponseType& aResponseType, MESMRMeetingRequestEntry& aEntry ) @@ -177,7 +177,7 @@ CESMRResponseDialog::NewL( responseMessage ); CleanupStack::PushL( respDlg ); - TBool dialogRetValue( respDlg->ExecuteDlgLD() ); + TInt dialogRetValue( respDlg->ExecuteDlgLD() ); // Dialog has deleted itself --> Only pop from cleanup stack CleanupStack::Pop( respDlg ); @@ -186,15 +186,23 @@ aEntry.Entry().SetStatusL( CCalEntry::ETentative ); User::Leave( KErrCancel ); } - } - if ( responseMessage ) - { - CleanupStack::PushL( responseMessage ); + else if ( dialogRetValue == EAknCmdExit ) + { + aResponseType = EESMRResponseDontSend; + } + else if ( !responseMessage + && dialogRetValue == EESMRCmdSendMR ) + { + // Send command is triggered but response is empty + aResponseType = EESMRResponsePlain; + responseMessage = KNullDesC().AllocL(); + } } else - { - responseMessage = KNullDesC().AllocLC(); - } + { + responseMessage = KNullDesC().AllocL(); + } + return responseMessage; } @@ -249,7 +257,7 @@ MESMRMeetingRequestEntry& mrEntry = static_cast< MESMRMeetingRequestEntry& >( aEntry ); - + switch (aCommand) { case EESMRCmdAcceptMR: @@ -291,7 +299,7 @@ case EESMRCmdCalendarChange: task = CreateMoveMRToCurrentDBTaskL( mrEntry ); break; - + default: __ASSERT_DEBUG(EFalse, Panic(EESMRTaskFactoryInvalidTask) ); User::Leave( KErrNotSupported ); @@ -314,7 +322,7 @@ CESMRCombinedTask* task = NULL; TESMRRole role = aEntry.RoleL(); - + TBool syncObjectPresent( aEntry.IsSyncObjectPresent() ); TBool isStored( aEntry.IsStoredL() ); @@ -328,52 +336,60 @@ CleanupStack::PushL( task ); TESMRResponseType responseType( EESMRResponsePlain ); - HBufC* responseMessage = QuerySendResponseQueryFromUserLC( + HBufC* responseMessage = QuerySendResponseQueryFromUserL( aCommand, responseType, aEntry ); - - if ( !syncObjectPresent && EESMRCmdDeclineMR != aCommand) - { - // Entry is stored or deleted from calendar DB if - // sync object is not present - // Store MR task - AppendTaskL( *task, - CESMRStoreMRTask::NewL( - iCalDbMgr, - aEntry, - aEntry.MailboxUtils() ) ); - } + + // If response message is NULL, it means that user + // has cancelled response editing and wants to only exit + // application + if( responseMessage ) + { + CleanupStack::PushL( responseMessage ); + + if ( !syncObjectPresent && EESMRCmdDeclineMR != aCommand) + { + // Entry is stored or deleted from calendar DB if + // sync object is not present + // Store MR task + AppendTaskL( *task, + CESMRStoreMRTask::NewL( + iCalDbMgr, + aEntry, + aEntry.MailboxUtils() ) ); + } - if ( EESMRResponseDontSend != responseType || - aEntry.IsSyncObjectPresent() ) - { - // Send MR response via mail freestyle task - AppendTaskL( *task, - CESMRSendMRRespFSMailTask::NewL( - aCommand, - iCalDbMgr, - aEntry, - aEntry.MailboxUtils(), - responseType, - *responseMessage ) ); - } - CleanupStack::PopAndDestroy( responseMessage ); - - if ( !syncObjectPresent && EESMRCmdDeclineMR == aCommand && - isStored ) - { - // Entry is deleted from calendar DB if - // sync object is not present and entry exits in database - // Declined --> Delete MR from cal DB task - AppendTaskL( *task, - CESMRDeleteMRFromDbTask::NewL( - iCalDbMgr, - aEntry, - aEntry.MailboxUtils() ) ); - } + if ( EESMRResponseDontSend != responseType ) + { + // Send MR response via mail freestyle task + AppendTaskL( *task, + CESMRSendMRRespFSMailTask::NewL( + aCommand, + iCalDbMgr, + aEntry, + aEntry.MailboxUtils(), + responseType, + *responseMessage ) ); + } + + CleanupStack::PopAndDestroy( responseMessage ); - CleanupStack::Pop( task ); + if ( !syncObjectPresent && EESMRCmdDeclineMR == aCommand && + isStored ) + { + // Entry is deleted from calendar DB if + // sync object is not present and entry exits in database + // Declined --> Delete MR from cal DB task + AppendTaskL( *task, + CESMRDeleteMRFromDbTask::NewL( + iCalDbMgr, + aEntry, + aEntry.MailboxUtils() ) ); + } + } + + CleanupStack::Pop( task ); } else { @@ -417,7 +433,7 @@ aCommand == EESMRCmdSendMRUpdate ) { // Send MR response via mail task - AppendTaskL( *task, + AppendTaskL( *task, CESMRSendMRFSMailTask::NewL( iCalDbMgr, aEntry, @@ -562,7 +578,7 @@ if ( aEntry.AttendeeCountL( attendeeFlags ) && aEntry.IsSentL() && !aEntry.OccursInPastL() ) { - // if enrey doesn't need to send canellation, don't query + // If entry doesn't need to send cancellation, don't query if( aEntry.SendCanellationAvailable()) { // Meeting request contains attendees --> Cancellation message @@ -697,14 +713,14 @@ __ASSERT_DEBUG( EFalse, Panic( EESMRTaskFactoryIllegalTask ) ); User::Leave( KErrNotSupported ); } - + // Create combined task CESMRCombinedTask* task = CESMRCombinedTask::NewL( aEntry, CESMRCombinedTask::EESMRTrap ); - + CleanupStack::PushL( task ); - + if ( !aEntry.IsOpenedFromMail() ) { // When deleting from the calendar --> Store first modifying entry @@ -720,7 +736,7 @@ aEntry, aEntry.MailboxUtils() ) ); } - + // Delete entry from old db AppendTaskL( *task, @@ -728,7 +744,7 @@ iCalDbMgr, aEntry, aEntry.MailboxUtils() ) ); - + // Store entry to current db AppendTaskL( *task, @@ -736,7 +752,7 @@ iCalDbMgr, aEntry, aEntry.MailboxUtils() ) ); - + CleanupStack::Pop( task ); return task; }