diff -r 95243422089a -r 491b3ed49290 filemanager/src/fmbkupengine/src/CMMCScBkupTransferRequest.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/filemanager/src/fmbkupengine/src/CMMCScBkupTransferRequest.cpp Tue Aug 31 15:06:05 2010 +0300 @@ -0,0 +1,271 @@ +/* +* 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: CMMCScBkupTransferRequestBase implementation +* +* +*/ + +#include "CMMCScBkupTransferRequest.h" + +// User includes +#include "MMCScBkupLogger.h" +#include "MMMCScBkupDriver.h" +#include "CMMCScBkupArchive.h" +#include "CMMCScBkupDataOwnerInfo.h" +#include "MMMCScBkupArchiveDataInterface.h" + + + +// ========================= MEMBER FUNCTIONS ================================ + +// --------------------------------------------------------------------------- +// CMMCScBkupTransferRequestBase::CMMCScBkupTransferRequestBase() +// +// C++ constructor. +// --------------------------------------------------------------------------- +CMMCScBkupTransferRequestBase::CMMCScBkupTransferRequestBase( MMMCScBkupDriver& aDriver, TMMCScBkupOwnerDataType aElementType, TBool aUpdateOperationalSizes, TInt aPriority ) +: CActive( aPriority ), iDriver( aDriver ), iElementType( aElementType ), iUpdateOperationalSizes( aUpdateOperationalSizes ) + { + CActiveScheduler::Add( this ); + } + + +// --------------------------------------------------------------------------- +// CMMCScBkupTransferRequestBase::~CMMCScBkupTransferRequestBase() +// +// C++ destructor. +// --------------------------------------------------------------------------- +CMMCScBkupTransferRequestBase::~CMMCScBkupTransferRequestBase() + { + Cancel(); + } + + +// --------------------------------------------------------------------------- +// CMMCScBkupTransferRequestBase::RequestL() +// +// +// --------------------------------------------------------------------------- +void CMMCScBkupTransferRequestBase::RequestL( CMMCScBkupDataOwnerInfo& aOwner, TRequestStatus& aObserver ) + { + __ASSERT_ALWAYS( !IsActive(), User::Invariant() ); + // + iDataOwner = &aOwner; + SetObserver( aObserver ); + } + + +// --------------------------------------------------------------------------- +// CMMCScBkupTransferRequestBase::SingleDriveTransferCompleteL() +// +// +// --------------------------------------------------------------------------- +void CMMCScBkupTransferRequestBase::SingleDriveTransferCompleteL() + { + if ( iUpdateOperationalSizes ) + { + const TDriveNumber drive = CurrentDrive(); + const TInt amount = AmountOfDataTransferred(); + __LOG3("CMMCScBkupTransferRequestBase::SingleDriveTransferCompleteL() - drive: %c:, amount: %8d, elementType: %S", drive + 'A', amount, &MMCScBkupLogger::DataType( ElementType() ) ); + // + ASSERT( drive >= EDriveA && drive <= EDriveZ ); + } + + ResetDataTransferCounter(); + } + + +// --------------------------------------------------------------------------- +// CMMCScBkupTransferRequestBase::TransferCompleteL() +// +// +// --------------------------------------------------------------------------- +void CMMCScBkupTransferRequestBase::TransferCompleteL() + { + DataOwner().SetCompletionStatus( iElementType, ETrue ); + } + + +// --------------------------------------------------------------------------- +// CMMCScBkupTransferRequestBase::CompleteSelf() +// +// +// --------------------------------------------------------------------------- +void CMMCScBkupTransferRequestBase::CompleteSelf( TInt aCompletionCode ) + { + SetActive(); + TRequestStatus* status = &iStatus; + User::RequestComplete(status, aCompletionCode); + } + + +// --------------------------------------------------------------------------- +// CMMCScBkupTransferRequestBase::SetObserver() +// +// +// --------------------------------------------------------------------------- +void CMMCScBkupTransferRequestBase::SetObserver( TRequestStatus& aObserver ) + { + __ASSERT_DEBUG( iObserver == NULL, User::Invariant() ); + iObserver = &aObserver; + aObserver = KRequestPending; + } + + +// --------------------------------------------------------------------------- +// CMMCScBkupTransferRequestBase::CompleteObserverRequest() +// +// +// --------------------------------------------------------------------------- +void CMMCScBkupTransferRequestBase::CompleteObserverRequest( TInt aCompletionCode ) + { + __LOG1("CMMCScBkupTransferRequestBase::CompleteObserverRequest() - aCompletionCode: %d", aCompletionCode); + __ASSERT_ALWAYS(iObserver != NULL, User::Invariant()); + User::RequestComplete(iObserver, aCompletionCode); + } + + +// --------------------------------------------------------------------------- +// CMMCScBkupTransferRequestBase::RunL() +// +// +// --------------------------------------------------------------------------- +void CMMCScBkupTransferRequestBase::RunL() + { + __LOG2("CMMCScBkupTransferRequestBase::RunL() - START - iStatus: %d, iState: %d", iStatus.Int(), iState); + + User::LeaveIfError( iStatus.Int() ); + // + switch( State() ) + { + case ETransferData: + __LOG("CMMCScBkupTransferRequestBase::RunL() - ETransferData"); + PrepareDataTransferL(); + break; + + case EProcessData: + __LOG("CMMCScBkupTransferRequestBase::RunL() - EProcessData"); + ProcessDataChunkL(); + break; + + case EFinished: + // Inform any interested derived classes + __LOG("CMMCScBkupTransferRequestBase::RunL() - EFinished - transfer complete...."); + TransferCompleteL(); + + // Notify observer + __LOG("CMMCScBkupTransferRequestBase::RunL() - EFinished - complete observer..."); + CompleteObserverRequest( KErrNone ); + break; + + default: + case EIdle: + __LOG("CMMCScBkupTransferRequestBase::RunL() - EIdle - User::Invariant()"); + ASSERT( EFalse ); + break; + } + + __LOG2("CMMCScBkupTransferRequestBase::RunL() - END - iStatus: %d, iState: %d", iStatus.Int(), iState); + } + + +// --------------------------------------------------------------------------- +// CMMCScBkupTransferRequestBase::DoCancel() +// +// +// --------------------------------------------------------------------------- +void CMMCScBkupTransferRequestBase::DoCancel() + { + CompleteObserverRequest( KErrCancel ); + } + + +// --------------------------------------------------------------------------- +// CMMCScBkupTransferRequestBase::RunError() +// +// +// --------------------------------------------------------------------------- +TInt CMMCScBkupTransferRequestBase::RunError( TInt aError ) + { + if ( aError != KErrNone ) + { + __LOGFILE1("CMMCScBkupTransferRequestBase::RunError() - **** - ERROR (%d) -> complete observer with error code", aError); + } + // + CompleteObserverRequest( aError ); + return KErrNone; + } + + +// --------------------------------------------------------------------------- +// CMMCScBkupTransferRequestBase::ProcessDataChunkL() +// +// +// --------------------------------------------------------------------------- +void CMMCScBkupTransferRequestBase::ProcessDataChunkL() + { + __LOG("CMMCScBkupTransferRequestBase::ProcessDataChunkL() - START"); + + // Now call virtual function to do the processing + const TBool requiresMoreChunkProcessing = ProcessChunkOfDataL(); + __LOG1("CMMCScBkupTransferRequestBase::ProcessDataChunkL() - requiresMoreChunkProcessing: %d", requiresMoreChunkProcessing); + // + TState nextState = EProcessData; + if ( !requiresMoreChunkProcessing ) + { + __LOG("CMMCScBkupTransferRequestBase::ProcessDataChunkL() - did not require more processing... "); + SingleDriveTransferCompleteL(); + // + nextState = ETransferData; + __LOG("CMMCScBkupTransferRequestBase::ProcessDataChunkL() - nextState is: ETransferData"); + } + else + { + __LOG("CMMCScBkupTransferRequestBase::ProcessDataChunkL() - nextState is: EProcessData"); + } + + // Must check IsActive(), since CMMCScBkupReadDataTransferRequestBase::ProcessChunkOfDataL() + // changes state and set's active within the ProcessChunkOfDataL callback + if ( !IsActive() ) + { + __LOG("CMMCScBkupTransferRequestBase::ProcessDataChunkL() - not active - completing self and changing state!"); + SetState( nextState ); + CompleteSelf(); + } + else + { + __LOG1("CMMCScBkupTransferRequestBase::ProcessDataChunkL() - already active - state is: %d", State()); + } + + __LOG("CMMCScBkupTransferRequestBase::ProcessDataChunkL() - END"); + } + + + + + + + + + + + + + + + + + + +