ipsservices/ipssosplugin/src/ipsplgsingleopwatcher.cpp
changeset 0 8466d47a6819
child 18 578830873419
--- /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
+