--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ipsservices/ipssosplugin/src/ipsplgsingleopwatcher.cpp Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,241 @@
+/*
+* Copyright (c) 2002 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:
+* Messaging progress watching classes
+*
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "emailtrace.h"
+#include "ipsplgheaders.h"
+
+// CONSTANTS
+const TInt KSingleOpWatcherPriority = KMaxTInt;
+#ifdef _DEBUG
+_LIT( KPanicIpsPlgSingleOpWatcher, "CIpsPlgSingleOpWatcher");
+#endif
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// ---------------------------------------------------------
+// CIpsPlgSingleOpWatcher::NewLC
+//
+// ---------------------------------------------------------
+//
+EXPORT_C CIpsPlgSingleOpWatcher* CIpsPlgSingleOpWatcher::NewLC(
+ MIpsPlgSingleOpWatcher& aObserver )
+ {
+ FUNC_LOG;
+ CIpsPlgSingleOpWatcher* self = new( ELeave ) CIpsPlgSingleOpWatcher( aObserver );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+
+// ---------------------------------------------------------
+// CIpsPlgSingleOpWatcher::NewL
+//
+// ---------------------------------------------------------
+//
+EXPORT_C CIpsPlgSingleOpWatcher* CIpsPlgSingleOpWatcher::NewL(
+ MIpsPlgSingleOpWatcher& aObserver )
+ {
+ FUNC_LOG;
+ CIpsPlgSingleOpWatcher* self = CIpsPlgSingleOpWatcher::NewLC( aObserver );
+ CleanupStack::Pop( self ); // self
+ return self;
+ }
+
+
+// ---------------------------------------------------------
+// CIpsPlgSingleOpWatcher::CIpsPlgSingleOpWatcher
+//
+// ---------------------------------------------------------
+//
+CIpsPlgSingleOpWatcher::CIpsPlgSingleOpWatcher(
+ MIpsPlgSingleOpWatcher& aObserver )
+ : CActive( KSingleOpWatcherPriority ), iObserver( aObserver )
+ {
+ FUNC_LOG;
+ CActiveScheduler::Add( this );
+ }
+
+
+// ---------------------------------------------------------
+// CIpsPlgSingleOpWatcher::ConstructL
+//
+// ---------------------------------------------------------
+//
+void CIpsPlgSingleOpWatcher::ConstructL()
+ {
+ FUNC_LOG;
+ // Nothing to do, reserved for future use...
+ }
+
+
+// ---------------------------------------------------------
+// CIpsPlgSingleOpWatcher::~CIpsPlgSingleOpWatcher
+//
+// ---------------------------------------------------------
+//
+EXPORT_C CIpsPlgSingleOpWatcher::~CIpsPlgSingleOpWatcher()
+ {
+ FUNC_LOG;
+ Cancel();
+ delete iOperation;
+ delete iBaseOperation;
+ delete iRequestObserver;
+ }
+
+
+// ---------------------------------------------------------
+// CIpsPlgSingleOpWatcher::SetOperation
+// --- Setter ---
+// Must only be called once during the lifetime
+//of a CIpsPlgSingleOpWatcher object.
+// ---------------------------------------------------------
+//
+EXPORT_C void CIpsPlgSingleOpWatcher::SetOperation(CMsvOperation* aOperation)
+ {
+ FUNC_LOG;
+ __ASSERT_DEBUG( !IsActive(),
+ User::Panic( KPanicIpsPlgSingleOpWatcher, KErrInUse ) );
+ __ASSERT_DEBUG( !iOperation,
+ User::Panic( KPanicIpsPlgSingleOpWatcher, KErrAlreadyExists ) );
+ __ASSERT_DEBUG( aOperation,
+ User::Panic( KPanicIpsPlgSingleOpWatcher, KErrNotFound ) );
+ __ASSERT_DEBUG( !iBaseOperation,
+ User::Panic( KPanicIpsPlgSingleOpWatcher, KErrAlreadyExists ) );
+ //
+ // Take ownership of operation and set our active status so we're handled
+ // by the active scheduler.
+ iOperation = aOperation;
+ iStatus = KRequestPending;
+ SetActive();
+ }
+
+void CIpsPlgSingleOpWatcher::SetOperation( CIpsPlgBaseOperation* aBaseOperation )
+ {
+ FUNC_LOG;
+ __ASSERT_DEBUG( !IsActive(),
+ User::Panic( KPanicIpsPlgSingleOpWatcher, KErrInUse ) );
+ __ASSERT_DEBUG( !iOperation,
+ User::Panic( KPanicIpsPlgSingleOpWatcher, KErrAlreadyExists ) );
+ __ASSERT_DEBUG( aBaseOperation,
+ User::Panic( KPanicIpsPlgSingleOpWatcher, KErrNotFound ) );
+ __ASSERT_DEBUG( !iBaseOperation,
+ User::Panic( KPanicIpsPlgSingleOpWatcher, KErrAlreadyExists ) );
+
+ iBaseOperation = aBaseOperation;
+ iStatus = KRequestPending;
+ SetActive();
+ }
+
+const CIpsPlgBaseOperation* CIpsPlgSingleOpWatcher::BaseOperation( ) const
+ {
+ FUNC_LOG;
+ CIpsPlgBaseOperation* op = NULL;
+
+ if ( !iOperation )
+ {
+ __ASSERT_DEBUG( iBaseOperation,
+ User::Panic( KPanicIpsPlgSingleOpWatcher, KErrNotFound ) );
+ op = iBaseOperation;
+ }
+
+ return op;
+ }
+
+// ---------------------------------------------------------
+// CIpsPlgSingleOpWatcher::Operation
+// --- Accessor ---
+// ---------------------------------------------------------
+//
+EXPORT_C CMsvOperation& CIpsPlgSingleOpWatcher::Operation() const
+ {
+ FUNC_LOG;
+ CMsvOperation* op = NULL;
+ if ( !iOperation )
+ {
+ __ASSERT_DEBUG( iBaseOperation,
+ User::Panic( KPanicIpsPlgSingleOpWatcher, KErrNotFound ) );
+ op = static_cast<CMsvOperation*>( iBaseOperation );
+ }
+ else if ( !iBaseOperation )
+ {
+ __ASSERT_DEBUG( iOperation,
+ User::Panic( KPanicIpsPlgSingleOpWatcher, KErrNotFound ) );
+ op = iOperation;
+ }
+
+ return *op;
+ }
+
+
+
+
+// ---------------------------------------------------------
+// CIpsPlgSingleOpWatcher::DoCancel
+// --- From CActive ---
+// ---------------------------------------------------------
+//
+void CIpsPlgSingleOpWatcher::DoCancel()
+ {
+ FUNC_LOG;
+
+ // Pass on cancel
+ if ( iOperation && iOperation->IsActive() )
+ {
+ iOperation->Cancel();
+ }
+ else if ( iBaseOperation && iBaseOperation->IsActive() )
+ {
+ iBaseOperation->Cancel();
+ }
+ else
+ {
+ TRequestStatus* status = &iStatus;
+ User::RequestComplete(status, KErrNone);
+ }
+ }
+
+
+//------------------------------------
+// CIpsPlgSingleOpWatcher::RunL
+// --- From CActive ---
+// ---------------------------------------------------------
+//
+void CIpsPlgSingleOpWatcher::RunL()
+ {
+ FUNC_LOG;
+ //
+ // Inform client of watcher that the operation has completed
+ iObserver.OpCompleted( *this, iStatus.Int() );
+ }
+
+
+void CIpsPlgSingleOpWatcher::SetRequestObserver(
+ CIpsPlgImap4MoveRemoteOpObserver* aObserver )
+ {
+ delete iRequestObserver;
+ iRequestObserver = aObserver;
+ }
+
+// End of file
+