--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingappbase/obexmtms/irmtm/irclient/source/CIRCancelObserver.cpp Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,125 @@
+// Copyright (c) 2004-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:
+//
+
+#include "CIRCancelObserver.h"
+
+/**
+Standard 2-phase constructor.
+@param aObserverRequestStatus Request status of the observer to be completed when the operation completes.
+@param aSession Handle to an opened session with the message server.
+@param aEntryId The entry id for the message for the IR operation.
+@return Pointer to the newly created object.
+*/
+CIRCancelObserver* CIRCancelObserver::NewL(TRequestStatus& aObserverRequestStatus, CMsvSession& aSession, TMsvId aEntryId)
+ {
+ CIRCancelObserver* me = new(ELeave) CIRCancelObserver(aObserverRequestStatus, aSession, aEntryId);
+ return me;
+ }
+
+CIRCancelObserver::CIRCancelObserver(TRequestStatus& aObserverRequestStatus, CMsvSession& aSession, TMsvId aEntryId)
+ :CMsvOperation(aSession, EPriorityStandard, aObserverRequestStatus), iEntryId(aEntryId)
+ {
+ CActiveScheduler::Add(this);
+ iObserverRequestStatus = KRequestPending;
+ SetActive();
+ }
+
+/**
+Default destructor.
+*/
+CIRCancelObserver::~CIRCancelObserver()
+ {
+ Cancel();
+ delete iMsvOperation;
+ }
+
+void CIRCancelObserver::RunL()
+ {
+ // The operation has completed, relay the status completion to the observer
+ TRequestStatus* observerStatus = &iObserverRequestStatus;
+ User::RequestComplete(observerStatus, iStatus.Int());
+ }
+
+TInt CIRCancelObserver::RunError(TInt /*aError*/)
+ {
+ // The RunL does not leave
+ return KErrNone;
+ }
+
+void CIRCancelObserver::DoCancel()
+ {
+ // This is an explicit cancel from the user, cancel the operation and complete the client
+ if( iMsvOperation!=NULL )
+ iMsvOperation->Cancel();
+ TRequestStatus* st = &iObserverRequestStatus;
+ User::RequestComplete(st, KErrCancel);
+
+ // If the operation is queued, clean up the entries
+ if(!iOperationStarted)
+ CleanupEntry();
+ }
+
+void CIRCancelObserver::CleanupEntryL() const
+ {
+ // Delete the entry
+ CMsvEntry* entry = iMsvSession.GetEntryL(iEntryId);
+ CleanupStack::PushL(entry);
+ entry->DeleteL(iEntryId);
+ CleanupStack::PopAndDestroy(entry);
+ }
+
+void CIRCancelObserver::CleanupEntry() const
+ {
+ // Call leaving version of CleanupEntry and ignore any errors
+ TRAPD(err, CleanupEntryL());
+ }
+
+void CIRCancelObserver::SetOperation(CMsvOperation* aMsvOperation)
+ {
+ __ASSERT_DEBUG(iMsvOperation==NULL, User::Invariant());
+
+ // Initialise the members now that we have the operation
+ iMsvOperation = aMsvOperation;
+ iMtm = iMsvOperation->Mtm();
+ iService = iMsvOperation->Service();
+ }
+
+TRequestStatus& CIRCancelObserver::Status()
+ {
+ return iStatus;
+ }
+
+const TDesC8& CIRCancelObserver::ProgressL()
+ {
+ __ASSERT_DEBUG(iMsvOperation!=NULL, User::Invariant());
+
+ // This call will leave if the operation is queued
+ const TDesC8& progressDes = iMsvOperation->ProgressL();
+
+ // Will only get to here when the operation has started so updated the flag if not already done
+ if(!iOperationStarted)
+ iOperationStarted = ETrue;
+
+ return progressDes;
+
+ }
+
+const TDesC8& CIRCancelObserver::FinalProgress()
+ {
+ __ASSERT_DEBUG(iMsvOperation!=NULL, User::Invariant());
+
+ return iMsvOperation->FinalProgress();
+ }
+