filemanager/bkupengine/src/CMMCScBkupTransferRequest.cpp
changeset 0 6a9f87576119
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupTransferRequest.cpp	Mon Jan 18 20:09:41 2010 +0200
@@ -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() - didnt 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");
+    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+