diff -r 000000000000 -r 8466d47a6819 ipsservices/ipssosplugin/src/ipsplgsingleopwatcher.cpp --- /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( 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 +