diff -r d189ee25cf9d -r 3533d4323edc meetingrequest/mrutils/src/cesmrutils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/meetingrequest/mrutils/src/cesmrutils.cpp Wed Sep 01 12:28:57 2010 +0100 @@ -0,0 +1,349 @@ +/* +* 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: ESMR MRUtils implementation +* +*/ + + +//INCLUDE FILES +#include "emailtrace.h" +#include "cesmrutils.h" +#include "cesmrcaldbmgr.h" + +// From ESMRSERVICES +#include +// +#include "cesmrpolicymanager.h" +#include "tesmrscenariodata.h" +#include "cesmrpolicy.h" +// + +#include "cmrentryprocessor.h" +#include "mesmrmeetingrequestentry.h" +#include "cesmrtaskfactory.h" +#include "mesmrtask.h" +#include "cesmrtaskextensionimpl.h" +#include "esmrinternaluid.h" +#include "esmrhelper.h" +#include "esmrentryhelper.h" + +// From System +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// CONSTANTS +/// Unnamed namespace for local definitions +namespace { + +#ifdef _DEBUG + +// Definition for MR UTILS panic text +_LIT(KESMRUtilsPanicTxt, "ESMRUtils" ); + +// MR VIEWER ctrl panic codes +enum TESMRUtilsPanicCode + { + EESMRUtilsEntryProcessorNull = 0, // Entry processon is NULL + EESMRUtilsInvalidEntry = 1, // Invalid calendar entry, + EESMRUtilsNULLCoeEnv = 2, // CCoeEnv is NULL + EESMRUtilsInvalidType + }; + +void Panic(TESMRUtilsPanicCode aPanicCode) + { + User::Panic( KESMRUtilsPanicTxt, aPanicCode ); + } + +#endif + +} // namespace + +// ======== MEMBER FUNCTIONS ======== + +// ---------------------------------------------------------------------------- +// CESMRUtils::CESMRUtils +// ---------------------------------------------------------------------------- +// +CESMRUtils::CESMRUtils( + MMRUtilsObserver& aObserver ) +: iObserver( aObserver ) + { + FUNC_LOG; + } + +// ---------------------------------------------------------------------------- +// CESMRUtils::~CESMRUtils +// ---------------------------------------------------------------------------- +// +EXPORT_C CESMRUtils::~CESMRUtils() + { + FUNC_LOG; + delete iPolicyManager; + delete iEntryProcessor; + delete iMRMailboxUtils; + delete iTaskFactory; + delete iTaskExtension; + delete iCalDBMgr; + } + +// ---------------------------------------------------------------------------- +// CESMRUtils::NewL +// ---------------------------------------------------------------------------- +// +EXPORT_C CESMRUtils* CESMRUtils::NewL( + MMRUtilsObserver& aObserver ) + { + FUNC_LOG; + CESMRUtils* self = new ( ELeave ) CESMRUtils( aObserver ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +// ---------------------------------------------------------------------------- +// CESMRUtils::ConstructL +// ---------------------------------------------------------------------------- +// +void CESMRUtils::ConstructL() + { + FUNC_LOG; + + iPolicyManager = CESMRPolicyManager::NewL(); + } + +// ---------------------------------------------------------------------------- +// CESMRUtils::CreateExtensionsL +// ---------------------------------------------------------------------------- +// +EXPORT_C void CESMRUtils::CreateExtensionsL( + TESMRCalendarEventType aEntryType ) + { + FUNC_LOG; + + CESMRTaskFactory* taskFactory = CESMRTaskFactory::NewL( + aEntryType, + *iCalDBMgr ); + CleanupStack::PushL( taskFactory ); + + CMREntryProcessor* entryProcessor = CMREntryProcessor::NewL( + aEntryType, + *iCalDBMgr ); + CleanupStack::PushL( entryProcessor ); + + MESMRTaskExtension* taskExtension = + CESMRTaskExtenstionImpl::NewL( *taskFactory ); + + __ASSERT_DEBUG( taskFactory + && entryProcessor + && taskExtension, + Panic( EESMRUtilsInvalidType) ); + + delete iTaskFactory; + iTaskFactory = taskFactory; + + delete iEntryProcessor; + iEntryProcessor = entryProcessor; + + delete iTaskExtension; + iTaskExtension = taskExtension; + + CleanupStack::Pop( 2, taskFactory ); + } + +// ---------------------------------------------------------------------------- +// CESMRUtils::DeleteWithUiL +// ---------------------------------------------------------------------------- +// +EXPORT_C TInt CESMRUtils::DeleteWithUiL( + const CCalEntry& aEntry, + TMsvId /*aMailbox*/ ) + { + FUNC_LOG; + RPointerArray entries; + CleanupClosePushL( entries ); + User::LeaveIfError( entries.Append( &aEntry ) ); + + CreateExtensionsL( ESMREntryHelper::EventTypeL( aEntry ) ); + + iEntryProcessor->ProcessL( &entries ); + + MESMRMeetingRequestEntry& mrEntry = + static_cast< MESMRMeetingRequestEntry& >( + iEntryProcessor->ESMREntryL() ); + + if ( mrEntry.IsRecurrentEventL() ) + { + mrEntry.SetModifyingRuleL( + MESMRMeetingRequestEntry::EESMRAllInSeries ); + } + + mrEntry.MarkMeetingCancelledL(); + + iTaskExtension->DeleteAndSendMRL( + EESMRCmdDeleteMR, + mrEntry ); + + CleanupStack::PopAndDestroy( &entries ); + + return KErrNone; + } + +// ---------------------------------------------------------------------------- +// CESMRUtils::DeleteWithUiL +// ---------------------------------------------------------------------------- +// +EXPORT_C TInt CESMRUtils::DeleteWithUiL( + CCalInstance* aInstance, + TMsvId /*aMailbox*/ ) + { + FUNC_LOG; + + CreateExtensionsL( ESMREntryHelper::EventTypeL( aInstance->Entry() ) ); + + iEntryProcessor->ProcessL( *aInstance ); + + MESMRMeetingRequestEntry& mrEntry = + static_cast< MESMRMeetingRequestEntry& >( + iEntryProcessor->ESMREntryL() ); + + mrEntry.SetModifyingRuleL( + MESMRMeetingRequestEntry::EESMRThisOnly ); + + mrEntry.MarkMeetingCancelledL(); + + iTaskExtension->DeleteAndSendMRL( + EESMRCmdDeleteMR, + mrEntry ); + + // aInstance is not added to CleanupStack, because calendar + // already has it. + delete aInstance; + return KErrNone; + } + +// ---------------------------------------------------------------------------- +// CESMRUtils::SendWithUiL +// ---------------------------------------------------------------------------- +// +EXPORT_C void CESMRUtils::SendWithUiL( + const CCalEntry& aEntry , + TMsvId /*aMailbox*/ ) + { + FUNC_LOG; + RPointerArray entries; + CleanupClosePushL( entries ); + User::LeaveIfError( entries.Append( &aEntry ) ); + + CreateExtensionsL( ESMREntryHelper::EventTypeL( aEntry ) ); + + iEntryProcessor->ProcessL( &entries ); + + //MESMRMeetingRequestEntry& = processor->ESMREntryL(); + MESMRMeetingRequestEntry& mrEntry = + static_cast< MESMRMeetingRequestEntry& >( + iEntryProcessor->ESMREntryL() ); + + if ( mrEntry.IsRecurrentEventL() ) + { + mrEntry.SetModifyingRuleL( + MESMRMeetingRequestEntry::EESMRAllInSeries ); + } + + iTaskExtension->ForwardMRAsEmailL( + EESMRCmdForwardAsMail, + mrEntry ); + + CleanupStack::PopAndDestroy( &entries ); + } +// ---------------------------------------------------------------------------- +// CESMRUtils::ExtensionL +// ---------------------------------------------------------------------------- +// +EXPORT_C TAny* CESMRUtils::ExtensionL( TUid aExtensionUid ) + { + FUNC_LOG; + TAny* extension = NULL; + + switch ( aExtensionUid.iUid ) + { + case KESMRPolicyMgrUid: + extension = static_cast(iPolicyManager); + break; + case KESMRMREntryProcessorUid: + extension = static_cast(iEntryProcessor); + break; + case KESMRTaskExtensionUid: + extension = static_cast(iTaskExtension); + break; + default: + extension = NULL; + break; + } + return extension; + } + +// ---------------------------------------------------------------------------- +// CESMRUtils::SessionSetupL +// This template method is called as a part of the ECom plugin construction. +// This replaces much of the ordinary ConstructL() functionality, a template +// method is easier for transmitting parameters. +// ---------------------------------------------------------------------------- +// +EXPORT_C void CESMRUtils::SessionSetupL( + CCalSession& aCalSession, + CMsvSession* aMsvSession ) + { + FUNC_LOG; + // Asynchronous initialization of CESMRServicesCalDbMgr: + iCalDBMgr = CESMRCalDbMgr::NewL( aCalSession, + *this ); + + iMRMailboxUtils = CMRMailboxUtils::NewL( aMsvSession ); + } + +// ---------------------------------------------------------------------------- +// CESMRUtils::HandleCalEngStatus +// ---------------------------------------------------------------------------- +// +void CESMRUtils::HandleCalEngStatus( TMRUtilsCalEngStatus aStatus ) + { + FUNC_LOG; + iCalEngStatus = aStatus; + iObserver.HandleCalEngStatus( iCalEngStatus ); + } + +// ---------------------------------------------------------------------------- +// CESMRUtils::HandleOperation +// ---------------------------------------------------------------------------- +// +void CESMRUtils::HandleOperation( + TInt /*aType*/, + TInt /*aPercentageCompleted*/, + TInt /*aStatus*/ ) + { + FUNC_LOG; + // Do nothing + } + +// End of file +