filemanager/bkupengine/src/RMMCScBkupProgressSizer.cpp
branchRCL_3
changeset 21 65326cf895ed
parent 0 6a9f87576119
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/RMMCScBkupProgressSizer.cpp	Wed Sep 01 12:31:07 2010 +0100
@@ -0,0 +1,250 @@
+/*
+* Copyright (c) 2005-2008 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: RMMCScBkupProgressSizer implementation
+*
+*
+*/
+
+#include "RMMCScBkupProgressSizer.h"
+
+// User includes
+#include "MMCScBkupLogger.h"
+#include "MMCScBkupSBEUtils.h"
+#include "CMMCScBkupDataOwnerInfo.h"
+#include "MMMCScBkupProgressObserver.h"
+#include "CMMCScBkupDriveAndOperationTypeManager.h"
+
+// Constants
+const TInt KMMCScBkupWeightingFactor = 10000;
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// RMMCScBkupProgressSizer::RMMCScBkupProgressSizer()
+// 
+// C++ constructor.
+// ---------------------------------------------------------------------------
+RMMCScBkupProgressSizer::RMMCScBkupProgressSizer( const CMMCScBkupDriveAndOperationTypeManager& aDriveAndOperationTypes )
+:   iDriveAndOperationTypes( aDriveAndOperationTypes ), iDriveFilter( aDriveAndOperationTypes.DriveList() )
+    {
+    }
+
+   
+// ---------------------------------------------------------------------------
+// RMMCScBkupProgressSizer::BackupTotalProgressValueL()
+// 
+// Calculate the total amount of progress steps that a particular data owner 
+// requires. This method can only be called after all of the sizing info
+// has been obtained from the SBE
+// ---------------------------------------------------------------------------
+TInt64 RMMCScBkupProgressSizer::BackupTotalProgressValueL( const CMMCScBkupDataOwnerInfo& aDataOwner )
+    {
+    __LOG(" ");
+    __LOG1("RMMCScBkupProgressSizer::BackupTotalProgressValueL() - START - DO: 0x%08x", aDataOwner.SecureId().iId);
+    TInt64 totalStepCount = 0;
+
+    //////////////////////////////////////////////////////////////////////
+    // THESE ELEMENTS HAVE PSEUDO-PROGRESS - that is, the report a fixed
+    // number of progress nibbles per operation. For example:
+    // 
+    // TYPE     DRIVE        PROGRESS
+    // =======================================
+    // ACTIVE   (C:)          1 x 2000
+    // PASSIVE  (C:)          1 x 2000
+    // SYSTEM   (C:, E:)      2 x 2000
+    // JAVA     (C:)          1 x 2000
+    // PUBLIC   (C: = 12k)   12 x 1024
+    // ----------------------------------------
+    // total                 10000 + (12 x 1024)
+    //
+    //////////////////////////////////////////////////////////////////////
+
+    const CDataOwnerInfo& sbeDataOwner = aDataOwner.Owner();
+    
+    // Passive data
+    if  ( MMCScBkupSBEUtils::HasPassiveDataL( sbeDataOwner ) )
+        {
+        const TInt opsCount = NumberOfDriveOpsRequiredL( aDataOwner, EMMCScBkupOwnerDataTypePassiveData );
+        __LOG2("RMMCScBkupProgressSizer::BackupTotalProgressValueL() - passive - %d of progress (%d ops)", opsCount * KMMCScBkupWeightingFactor, opsCount);
+        totalStepCount += ( opsCount * KMMCScBkupWeightingFactor );
+        }
+
+    // Active data
+    if  ( MMCScBkupSBEUtils::HasActiveDataL( sbeDataOwner ) )
+        {
+        const TInt opsCount = NumberOfDriveOpsRequiredL( aDataOwner, EMMCScBkupOwnerDataTypeActiveData );
+        __LOG2("RMMCScBkupProgressSizer::BackupTotalProgressValueL() - active  - %d of progress (%d ops)", opsCount * KMMCScBkupWeightingFactor, opsCount);
+        totalStepCount += ( opsCount * KMMCScBkupWeightingFactor );
+        }
+
+    // System data
+    if  ( MMCScBkupSBEUtils::HasSystemDataL( sbeDataOwner ) )
+        {
+        const TInt opsCount = NumberOfDriveOpsRequiredL( aDataOwner, EMMCScBkupOwnerDataTypeSystemData );
+        __LOG2("RMMCScBkupProgressSizer::BackupTotalProgressValueL() - system  - %d of progress (%d ops)", opsCount * KMMCScBkupWeightingFactor, opsCount);
+        totalStepCount += ( opsCount * KMMCScBkupWeightingFactor );
+        }
+
+    // Java data
+    if  ( MMCScBkupSBEUtils::HasJavaDataL( sbeDataOwner ) )
+        {
+        const TInt opsCount = NumberOfDriveOpsRequiredL( aDataOwner, EMMCScBkupOwnerDataTypeJavaData );
+        __LOG2("RMMCScBkupProgressSizer::BackupTotalProgressValueL() - java    - %d of progress (%d ops)", opsCount * KMMCScBkupWeightingFactor, opsCount);
+        totalStepCount += ( opsCount * KMMCScBkupWeightingFactor );
+        }
+
+
+    ///////////////////////////////////
+    // PUBLIC REPORTS ACTUAL SIZING
+    ///////////////////////////////////
+
+    // Public data
+    if  ( MMCScBkupSBEUtils::HasPublicDataL( sbeDataOwner ) )
+        {
+        const TInt64 size = AmountOfPublicDataToBeRestoredL( aDataOwner );
+        __LOG1("RMMCScBkupProgressSizer::BackupTotalProgressValueL() - public  - %Ld of progress", size);
+        totalStepCount += size;
+        }
+
+    //
+    __LOG2("RMMCScBkupProgressSizer::BackupTotalProgressValueL() - END - DO: 0x%08x, totalStepCount: %8Ld", aDataOwner.SecureId().iId, totalStepCount);
+    return totalStepCount;
+    }
+
+
+// ---------------------------------------------------------------------------
+// RMMCScBkupProgressSizer::BackupReportFixedProgressForOpL()
+// 
+// 
+// ---------------------------------------------------------------------------
+void RMMCScBkupProgressSizer::BackupReportFixedProgressForOpL( MMMCScBkupProgressObserver& aProgressManager, TMMCScBkupOwnerDataType aType )
+    {
+    switch( aType )
+        {
+    case EMMCScBkupOwnerDataTypeSystemData:
+    case EMMCScBkupOwnerDataTypeActiveData:
+    case EMMCScBkupOwnerDataTypePassiveData:
+    case EMMCScBkupOwnerDataTypeJavaData:
+        __LOG2("RMMCScBkupProgressSizer::BackupReportFixedProgressForOpL() - aType: %d, amount: %d ", aType, KMMCScBkupWeightingFactor );
+        aProgressManager.MMCScBkupHandleProgress( KMMCScBkupWeightingFactor );
+        break;
+    default:
+    case EMMCScBkupOwnerDataTypeDataOwner:
+    case EMMCScBkupOwnerDataTypePublicData:
+        ASSERT( EFalse );
+        break;
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// RMMCScBkupProgressSizer::RestoreCombinedDataSizeL()
+// 
+// 
+// ---------------------------------------------------------------------------
+TInt64 RMMCScBkupProgressSizer::RestoreCombinedDataSizeL( const CMMCScBkupDataOwnerInfo& aOwner )
+    {
+    TInt64 size = 0;
+    //
+    iDriveFilter.Reset();
+    iDriveFilter.SetSecondaryDriveFilter( aOwner.Owner().DriveList() );
+    //
+    TDriveNumber drive = EDriveA;
+    while ( iDriveFilter.NextValidDrive( drive ) )
+        {
+        for( TInt i=0; i<EMMCScBkupOwnerDataTypeCount; i++ )
+            {
+            const TMMCScBkupOwnerDataType dataType = static_cast< TMMCScBkupOwnerDataType > ( i );
+            const TBool allowedForDrive = iDriveAndOperationTypes.IsDataTypeAllowedToAccessDrive( drive, dataType );
+            //
+            if  ( allowedForDrive )
+                {
+                // Get the amount of data for this drive
+                size += aOwner.OperationalSize( dataType, drive );
+                }
+            }
+        }
+    //
+    return size;
+    }
+
+
+
+
+
+
+
+
+
+
+
+// ---------------------------------------------------------------------------
+// RMMCScBkupProgressSizer::NumberOfDriveOpsRequiredL()
+// 
+// 
+// ---------------------------------------------------------------------------
+TInt RMMCScBkupProgressSizer::NumberOfDriveOpsRequiredL( const CMMCScBkupDataOwnerInfo& aOwner, TMMCScBkupOwnerDataType aType )
+    {
+    TInt count = 0;
+    //
+    iDriveFilter.Reset();
+    iDriveFilter.SetSecondaryDriveFilter( aOwner.Owner().DriveList() );
+    //
+    TDriveNumber drive = EDriveA;
+    while ( iDriveFilter.NextValidDrive( drive ) )
+        {
+        const TBool allowedForDrive = iDriveAndOperationTypes.IsDataTypeAllowedToAccessDrive( drive, aType );
+        //
+        if  ( allowedForDrive )
+            {
+            ++count;
+            }
+        }
+    //
+    return count;
+    }
+
+
+// ---------------------------------------------------------------------------
+// RMMCScBkupProgressSizer::AmountOfPublicDataToBeRestoredL()
+// 
+// 
+// ---------------------------------------------------------------------------
+TInt64 RMMCScBkupProgressSizer::AmountOfPublicDataToBeRestoredL( const CMMCScBkupDataOwnerInfo& aOwner )
+    {
+    TInt64 size = 0;
+    //
+    iDriveFilter.Reset();
+    iDriveFilter.SetSecondaryDriveFilter( aOwner.Owner().DriveList() );
+    //
+    TDriveNumber drive = EDriveA;
+    while ( iDriveFilter.NextValidDrive( drive ) )
+        {
+        const TBool allowedForDrive = iDriveAndOperationTypes.IsDataTypeAllowedToAccessDrive( drive, EMMCScBkupOwnerDataTypePublicData );
+        //
+        if  ( allowedForDrive )
+            {
+            // Get the amount of data for this drive
+            size += aOwner.OperationalSize( EMMCScBkupOwnerDataTypePublicData, drive );
+            }
+        }
+    //
+    return size;
+    }
+
+
+
+