/*
* Copyright (c) 2005 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:
* UI Extension class for Meeting Request Utils.
*
*/
#ifndef CMRUTILSUISERVICES_H
#define CMRUTILSUISERVICES_H
// INCLUDES
#include "MMRUtilsUiServices.h"
#include "MRHelpers.h"
#include <msvapi.h>
#include <e32base.h>
// FORWARD DECLARATIONS
class CMRUtilsInternal;
class CCalSession;
class MMRUtilsEmailSender;
class CMRMailboxUtils;
// CLASS DECLARATION
/**
* Implements MMRUtilsUiServices.
*/
class CMRUtilsUiServices
: public CBase,
public MMRUtilsUiServices,
public MMsvSessionObserver
{
public: // Constructors and destructors
static CMRUtilsUiServices* NewL( CMRUtilsInternal& aMRUtils,
CCalSession& aCalSession,
CMsvSession* aMsvSession,
CMRMailboxUtils& aMRMailboxUtils );
/**
* Destructor.
*/
~CMRUtilsUiServices();
protected: // From MMRUtilsUiServices
TInt RespondWithUiL( const RPointerArray<CCalEntry>& aEntries,
CCalAttendee::TCalStatus aStatus,
TMsvId aMailbox );
TInt CancelWithUiL( const RPointerArray<CCalEntry>& aEntries,
TMsvId aMailbox );
TInt DeleteWithUiL( const CCalEntry& aEntry, TMsvId aMailbox );
TInt DeleteWithUiL( CCalInstance* aInstance, TMsvId aMailbox );
void ReplyToL( CMRUtilsInternal::TMailRecipients aRecipients,
const CCalEntry& aCalEntry,
const TDesC& aSenderAddr,
TMsvId aMailbox );
void SendL( const CCalEntry& aCalEntry, TMsvId aMailbox );
protected: // From MMsvSessionObserver
void HandleSessionEventL( TMsvSessionEvent aEvent,
TAny* aArg1,
TAny* aArg2,
TAny* aArg3 );
protected: // New functions
/**
* Method which performs, if applicable, response/cancel operation
* as a sub-operation of delete. The result of sub-operation is
* neglected.
* @param aEntry entry to be deleted
* @param aInstance, may be NULL
* @param aMailbox mailbox used for sending response/cancel
*/
void PerformDeleteSubOpL( const CCalEntry& aEntry,
const CCalInstance* aInstance,
TMsvId aMailbox );
/**
* Goes through entries in the array, checks which should be
* cancelled/responded, and updates database status.
* @param aEntries
* @param aValidIndexes
* @param aIsCancellation ETrue if operation is cancellation
* @param aStatus used if aIsCancellation = EFalse
*/
void EvaluateAndUpdateL( const RPointerArray<CCalEntry>& aEntries,
RArray<TInt>& aValidIndexes,
TBool aIsCancellation,
CCalAttendee::TCalStatus aStatus =
CCalAttendee::ENeedsAction );
/**
* Checks whether the given entry can be cancelled.
* @param aEntry entry to evaluate
* @return ETrue if can be cancelled
*/
TBool IsValidForCancelL( const CCalEntry& aEntry );
/**
* Checks whether the given entry can be responded to.
* @param aEntry entry to evaluate
* @return ETrue if can be responded to
*/
TBool IsValidForResponseL( const CCalEntry& aEntry );
/**
* Helper method for checking that request is not cancelled or
* out of date.
* @param aEntry entry to evaluate
* @return ETrue if request is valid
*/
TBool IsValidRequestL( const CCalEntry& aEntry ) const;
/**
* Updates entry status in db.
* @param aEntry
* @param aIsCancellation ETrue if operation is cancellation
* @param aStatus used if aIsCancellation = EFalse
*/
void UpdateDbStatusL( const CCalEntry& aEntry,
TBool aIsCancellation,
CCalAttendee::TCalStatus aStatus ) const;
/**
* Queries user for sending options and if requested sends
* cancellations or responsed. Utilizes QuerySendChoiceL
* and CreateToBeSentL for doing it's tasks.
* Parameter aInstance is used only in context of deleting one
* instance, in that case also aEntries contains only one entry.
* @param aEntries array of entries
* @param aValidIndexes indexes in aEntries valid for response/cancel
* @param aInstance, may be NULL
* @param aMailbox mailbox used for sending response/cancel
* @param aIsCancellation ETrue if operation is cancellation
* @param aStatus used if aIsCancellation = EFalse
*/
TInt QueryAndSendL( const RPointerArray<CCalEntry>& aEntries,
const RArray<TInt>& aValidIndexes,
const CCalInstance* aInstance,
TMsvId aMailbox,
TBool aIsCancellation,
CCalAttendee::TCalStatus aStatus =
CCalAttendee::ENeedsAction );
/**
* Queries send/edit choice for a cancellation or response.
* Returns command code or an error code.
* @param aBase base entry for data shown in the query
* @param aIsCancellation ETrue if operation is cancellation
* @param aStatus used if sending response, not cancellation
* @return command code or an error code.
*/
TInt QuerySendChoiceL( const CCalEntry& aBase,
TBool aIsCancellation,
CCalAttendee::TCalStatus aStatus ) const;
/**
* Creates a response or cancellation based on the given request.
* @param aBase base entry for creating response
* @param aInstance, may be NULL
* @param aDescription description text for the response
* @param aIsCancellation ETrue if operation is cancellation
* @return created entry, ownership is transferred
*/
CCalEntry* CreateToBeSentLC( const CCalEntry& aBase,
const CCalInstance* aInstance,
const TDesC& aDescription,
TBool aIsCancellation ) const;
/**
* Creates a response based on the given request.
* @param aBase base entry for creating response
* @param aInstance, may be NULL
* @param aDescription description text for the response
* @return created entry, ownership is transferred
*/
CCalEntry* CreateResponseLC( const CCalEntry& aBase,
const CCalInstance* aInstance,
const TDesC& aDescription ) const;
/**
* Creates a cancellation based on the given request.
* @param aBase base entry for creating cancellation
* @param aInstance, may be NULL
* @param aDescription description text for the cancellation
* @return created entry, ownership is transferred
*/
CCalEntry* CreateCancelLC( const CCalEntry& aBase,
const CCalInstance* aInstance,
const TDesC& aDescription ) const;
/**
* Creates a new entry based on given arguments.
* Entry is left in the cleanupstack
* @param aBase base entry
* @param aInstance, may be NULL
* @param aMethod method type for the new entry
* @param aSequenceNumber sequence number for the new entry
* @param aCopyType specifies what data is copied
* @return created entry, ownership is transferred
*/
CCalEntry* CreateFromLC( const CCalEntry& aBase,
const CCalInstance* aInstance,
CCalEntry::TMethod aMethod,
TInt aSequenceNumber,
MRHelpers::TCopyFields aCopyType ) const;
/**
* Looks up SMTP service which is related to given service.
* This is used for reading SMTP settings.
*/
TMsvId CorrespondingSmtpServiceL( TMsvId aRelatedService );
/**
* Helper method for lazy creation of msv session.
*/
void EnsureMsvSessionExistsL();
protected: // Constructors and destructors
/**
* C++ default constructor.
*/
CMRUtilsUiServices( CMRUtilsInternal& aMRUtils,
CMsvSession* aMsvSession,
CMRMailboxUtils& aMRMailboxUtils );
/**
* Constructor, second phase.
*/
void ConstructL( CCalSession& aCalSession );
protected: // Data
// resource file offset
TInt iResourceFileOffset;
// msv session ownership
TBool iOwnMsvSession;
// MR Utils reference
CMRUtilsInternal& iMRUtils;
CMRMailboxUtils& iMRMailboxUtils;
// ownership determined by iOwnMsvSession
CMsvSession* iMsvSession;
// own, email sender utility
MMRUtilsEmailSender* iEmailSender;
};
#endif // CMRUTILSUISERVICES_H
// End of File