--- a/filemanager/bkupengine/src/CMMCScBkupStateRequestListOfPublicFiles.cpp Thu Aug 19 09:42:45 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,447 +0,0 @@
-/*
-* 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: CMMCScBkupStateRequestListOfPublicFiles implementation
-*
-*
-*/
-
-#include "CMMCScBkupStateRequestListOfPublicFiles.h"
-
-// System includes
-#include <e32std.h>
-
-// User includes
-#include "MMCScBkupLogger.h"
-#include "MMCScBkupSBEUtils.h"
-#include "CMMCScBkupDataOwnerInfo.h"
-#include "RMMCScBkupProgressSizer.h"
-#include "CMMCScBkupDataOwnerInfo.h"
-#include "MMMCScBkupProgressObserver.h"
-#include "CMMCScBkupFileListCollection.h"
-#include "CMMCScBkupDataOwnerCollection.h"
-
-
-
-
-// ========================= MEMBER FUNCTIONS ================================
-
-// ---------------------------------------------------------------------------
-// CMMCScBkupStateRequestListOfPublicFiles::CMMCScBkupStateRequestListOfPublicFiles()
-//
-// C++ constructor.
-// ---------------------------------------------------------------------------
-CMMCScBkupStateRequestListOfPublicFiles::CMMCScBkupStateRequestListOfPublicFiles( MMMCScBkupDriver& aDriver )
-: CMMCScBkupState( aDriver )
- {
- __LOG1("CMMCScBkupStateRequestListOfPublicFiles::CMMCScBkupStateRequestListOfPublicFiles() - 0x%08x", StateId().iUid );
- }
-
-
-// ---------------------------------------------------------------------------
-// CMMCScBkupStateRequestListOfPublicFiles::~CMMCScBkupStateRequestListOfPublicFiles()
-//
-// Destructor.
-// ---------------------------------------------------------------------------
-CMMCScBkupStateRequestListOfPublicFiles::~CMMCScBkupStateRequestListOfPublicFiles()
- {
- Cancel();
- //
- delete iRequestObject;
- }
-
-
-// ---------------------------------------------------------------------------
-// CMMCScBkupStateRequestListOfPublicFiles::ConstructL()
-//
-//
-// ---------------------------------------------------------------------------
-void CMMCScBkupStateRequestListOfPublicFiles::ConstructL()
- {
- iRequestObject = CMMCScBkupStateRequestSpecificPublicFileInfo::NewL(Driver());
- }
-
-
-// ---------------------------------------------------------------------------
-// CMMCScBkupStateRequestListOfPublicFiles::NewL()
-//
-//
-// ---------------------------------------------------------------------------
-CMMCScBkupStateRequestListOfPublicFiles* CMMCScBkupStateRequestListOfPublicFiles::NewL( MMMCScBkupDriver& aDriver )
- {
- CMMCScBkupStateRequestListOfPublicFiles* self = new(ELeave) CMMCScBkupStateRequestListOfPublicFiles( aDriver );
- CleanupStack::PushL(self);
- self->ConstructL();
- CleanupStack::Pop(self);
- return self;
- }
-
-
-// ---------------------------------------------------------------------------
-// CMMCScBkupStateRequestListOfPublicFiles::StateId()
-//
-//
-// ---------------------------------------------------------------------------
-TMMCScBkupStateId CMMCScBkupStateRequestListOfPublicFiles::StateId() const
- {
- return KMMCScBkupStateIdRequestListOfPublicFiles;
- }
-
-
-// ---------------------------------------------------------------------------
-// CMMCScBkupStateRequestListOfPublicFiles::NextStateId()
-//
-//
-// ---------------------------------------------------------------------------
-TMMCScBkupStateId CMMCScBkupStateRequestListOfPublicFiles::NextStateId() const
- {
- return KMMCScBkupStateIdValidateDiskSpace;
- }
-
-
-// ---------------------------------------------------------------------------
-// CMMCScBkupStateRequestListOfPublicFiles::PerformStateInitL()
-//
-//
-// ---------------------------------------------------------------------------
-void CMMCScBkupStateRequestListOfPublicFiles::PerformStateInitL()
- {
- // Set to -1 so that the first time RunL is called, we start with
- // the data owner at index 0.
- iCurrentDataOwnerIndex = -1;
- CompleteSelf(KErrNone);
- }
-
-
-// ---------------------------------------------------------------------------
-// CMMCScBkupStateRequestListOfPublicFiles::PerformAsynchronousStateStepL()
-//
-//
-// ---------------------------------------------------------------------------
-void CMMCScBkupStateRequestListOfPublicFiles::PerformAsynchronousStateStepL()
- {
- CMMCScBkupDataOwnerCollection& dataOwners = Driver().DrvDataOwners();
- if (++iCurrentDataOwnerIndex < dataOwners.Count())
- {
- CMMCScBkupDataOwnerInfo& owner = dataOwners.Owner(iCurrentDataOwnerIndex);
-
- const TBool hasPublicFiles = (owner.Owner().PassiveSettings() & EHasPublicFiles);
- if (hasPublicFiles)
- {
- // Request all the public files (on all supported drives) for this
- // particular data owner
- __ASSERT_ALWAYS(iRequestObject->IsActive() == EFalse, User::Invariant());
- //
- iRequestObject->RequestL(owner, iStatus);
- SetActive();
- }
- else
- {
- // Try next data owner
- CompleteSelf();
- }
- }
- }
-
-
-// ---------------------------------------------------------------------------
-// CMMCScBkupStateRequestListOfPublicFiles::PerformAsynchronousErrorCleanup()
-//
-//
-// ---------------------------------------------------------------------------
-TBool CMMCScBkupStateRequestListOfPublicFiles::PerformAsynchronousErrorCleanup(TInt aError)
- {
- (void) aError;
- __LOG1("CMMCScBkupStateRequestListOfPublicFiles::PerformAsynchronousErrorCleanup() - **** - error: %d", aError );
-
- // Cancel requester. Its probably already inactive, but just in case...
- PerformAsynchronousCancellation();
-
- // Reset state and move to next item. Treat the current (badly behaving) item
- // as completed/processed.
- CMMCScBkupDataOwnerCollection& dataOwners = Driver().DrvDataOwners();
- if ( iCurrentDataOwnerIndex < dataOwners.Count() )
- {
- CMMCScBkupDataOwnerInfo& owner = dataOwners.Owner( iCurrentDataOwnerIndex );
- (void) owner;
- __LOGFILE2("CMMCScBkupStateRequestListOfPublicFiles::PerformAsynchronousErrorCleanup() - **** - error: %d, SID: 0x%08x - PUBLIC data skipped for DO", aError, owner.SecureId().iId );
-
- // Ensures that asynchronous state step is called again..
- CompleteSelf();
- }
-
- return ETrue;
- }
-
-
-// ---------------------------------------------------------------------------
-// CMMCScBkupStateRequestListOfPublicFiles::PerformAsynchronousCancellation()
-//
-//
-// ---------------------------------------------------------------------------
-void CMMCScBkupStateRequestListOfPublicFiles::PerformAsynchronousCancellation()
- {
- if ( iRequestObject )
- {
- iRequestObject->Cancel();
- }
- }
-
-
-// ---------------------------------------------------------------------------
-// CMMCScBkupStateRequestListOfPublicFiles::PerformLastRightsL()
-//
-//
-// ---------------------------------------------------------------------------
-void CMMCScBkupStateRequestListOfPublicFiles::PerformLastRightsL()
- {
- // Now we can calculate the progress
- TInt64 totalProgressAmount = 0;
-
- // Calculate the total progress required for the entire backup operation
- CMMCScBkupDataOwnerCollection& dataOwners = Driver().DrvDataOwners();
- const TInt count = dataOwners.Count();
- //
- RMMCScBkupProgressSizer sizer( Driver().DrvParamsBase().DriveAndOperations() );
- for(TInt i=0; i<count; i++)
- {
- CMMCScBkupDataOwnerInfo& owner = dataOwners.Owner( i );
- //
- totalProgressAmount += sizer.BackupTotalProgressValueL( owner );
- }
-
- // Check whether all categories have been processed and either store current
- // progress information in driver or inform progress handler about cumulative progress.
- // If size is getting beyond file system limitation (2GB), leave with KErrxxx.
- if(Driver().DrvLastCategory())
- {
- __LOG2("CMMCScBkupStateRequestListOfPublicFiles::PerformLastRightsL() - report progress understood (%Ld + %Ld)",
- totalProgressAmount, Driver().DrvTotalProgress());
-
- Driver().DrvStoreTotalProgress( totalProgressAmount );
-
- if( Driver().DrvTotalProgress() > KMaxTInt )
- {
- __LOG1("CMMCScBkupStateRequestListOfPublicFiles::PerformLastRightsL() - leaving with KErrNotSupported due amount of data (%Ld)",
- Driver().DrvTotalProgress());
- Driver().DrvProgressHandler().MMCScBkupStartBackuping( EFalse );
- User::Leave( KErrNotSupported );
- }
- else
- {
- Driver().DrvProgressHandler().MMCScBkupHandleProgressDomainUnderstood( Driver().DrvTotalProgress() );
- }
- }
- else
- {
- __LOG2("CMMCScBkupStateRequestListOfPublicFiles::PerformLastRightsL() - adding progress amount %Ld to existing %Ld)",
- totalProgressAmount, Driver().DrvTotalProgress());
-
- if( (totalProgressAmount + Driver().DrvTotalProgress()) > KMaxTInt )
- {
- __LOG1("CMMCScBkupStateRequestListOfPublicFiles::PerformLastRightsL() - leaving due amount of data (%Ld)",
- totalProgressAmount + Driver().DrvTotalProgress());
- User::Leave(KErrNotSupported);
- }
- else
- {
- Driver().DrvStoreTotalProgress( totalProgressAmount );
- }
- }
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-// ---------------------------------------------------------------------------
-// CMMCScBkupStateRequestSpecificPublicFileInfo::CMMCScBkupStateRequestSpecificPublicFileInfo()
-//
-//
-// ---------------------------------------------------------------------------
-CMMCScBkupStateRequestSpecificPublicFileInfo::CMMCScBkupStateRequestSpecificPublicFileInfo( MMMCScBkupDriver& aDriver )
-: CMMCScBkupDriveSpecificRequest( aDriver.DrvParamsBase().DriveAndOperations(), EMMCScBkupOwnerDataTypePublicData ), iDriver(aDriver)
- {
- }
-
-
-// ---------------------------------------------------------------------------
-// CMMCScBkupStateRequestSpecificPublicFileInfo::NewL()
-//
-//
-// ---------------------------------------------------------------------------
-CMMCScBkupStateRequestSpecificPublicFileInfo* CMMCScBkupStateRequestSpecificPublicFileInfo::NewL( MMMCScBkupDriver& aDriver )
- {
- CMMCScBkupStateRequestSpecificPublicFileInfo* self = new (ELeave) CMMCScBkupStateRequestSpecificPublicFileInfo(aDriver);
- CleanupStack::PushL(self);
- self->ConstructL();
- CleanupStack::Pop(self);
- return self;
- }
-
-
-// ---------------------------------------------------------------------------
-// CMMCScBkupStateRequestSpecificPublicFileInfo::RequestL()
-//
-//
-// ---------------------------------------------------------------------------
-void CMMCScBkupStateRequestSpecificPublicFileInfo::RequestL( CMMCScBkupDataOwnerInfo& aOwner, TRequestStatus& aObserver )
- {
- iOwner = &aOwner;
- CMMCScBkupDriveSpecificRequest::RequestL( aObserver );
-
- // Start the asynchronous request.
- CompleteSelf(KErrNone);
- }
-
-
-// ---------------------------------------------------------------------------
-// CMMCScBkupStateRequestSpecificPublicFileInfo::RunL()
-//
-//
-// ---------------------------------------------------------------------------
-void CMMCScBkupStateRequestSpecificPublicFileInfo::RunL()
- {
- __LOG1("CMMCScBkupStateRequestSpecificPublicFileInfo::RunL() - START - iStatus: %d", iStatus.Int());
- User::LeaveIfError(iStatus.Int());
- //
- CDataOwnerInfo& owner = iOwner->Owner();
- const TDriveList& ownerDrives = owner.DriveList();
- TDriveNumber drive = EDriveA;
- const TBool driveAvailable = NextValidDrive(drive, ownerDrives);
- const TSecureId secureId = iOwner->SecureId();
-
- __LOG3("CMMCScBkupStateRequestSpecificPublicFileInfo::RunL() - secureId: 0x%08x, driveAvailable: %d, drive: %c", secureId.iId, driveAvailable, drive + 'A');
-
- if (driveAvailable)
- {
- // This drive needs to be scanned...
- TInt err( KErrNone );
- RFileArray files;
- CleanupClosePushL(files);
-
- // Get a copy of the generic data type for which we are
- // requesting file listings...
- CSBGenericDataType* genericDataType = CSBSecureId::NewL( secureId );
- CleanupStack::PushL( genericDataType );
- TRAP( err, Driver().DrvSecureBackupClient().PublicFileListL( drive, *genericDataType, files ) );
- if( err != KErrNone && err != KErrNotFound )
- {
- User::Leave( err );
- }
- CleanupStack::PopAndDestroy( genericDataType );
- // Additionally we need to request list of public files registered for packages.
- if( MMCScBkupSBEUtils::HasSystemDataL( owner ) )
- {
- RFileArray pkgFiles;
- CleanupClosePushL( pkgFiles );
- __LOG2("CMMCScBkupStateRequestSpecificPublicFileInfo::RunL() - have %d files before package listing for DO, err %d", files.Count(), err);
- TRAP( err, Driver().DrvSecureBackupClient().PublicFileListL( drive, owner.Identifier(), pkgFiles ) );
- __LOG2("CMMCScBkupStateRequestSpecificPublicFileInfo::RunL() - have %d package files for DO, err %d", files.Count(), err);
- const TInt pkgCount = pkgFiles.Count();
- for(TInt i = 0; i < pkgCount; i++)
- {
- files.AppendL( pkgFiles[i] );
- }
- CleanupStack::PopAndDestroy( &pkgFiles );
- }
-
- // Add to the file list
- __LOG1("CMMCScBkupStateRequestSpecificPublicFileInfo::RunL() - have %d files for DO", files.Count());
- if (files.Count())
- {
-
- // We want to be told by the public file collection exactly which files
- // it added... We need to do this in order to report progress as accurately
- // as possible during the backup operation.
- RArray< const CMMCScBkupFileInfo* > addedItems;
- CleanupClosePushL(addedItems);
-
- // Add them to the public data file collection
- Driver().DrvFileList().AppendL( files, addedItems, secureId );
-
- // For each identified file, update the data owner with the size of public data
- const TInt count = addedItems.Count();
- for(TInt i=0; i<count; i++)
- {
- const CMMCScBkupFileInfo& file = *addedItems[i];
- const TInt size = file.Size();
- //
- __LOG3("CMMCScBkupStateRequestSpecificPublicFileInfo::RunL() - file[%04d] = %S, size: %d", i, &file.FileName(), size);
- iOwner->AddToOperationalSizeL( EMMCScBkupOwnerDataTypePublicData, drive, size );
- }
- //
- CleanupStack::PopAndDestroy( &addedItems );
- }
- //
- CleanupStack::PopAndDestroy( &files );
-
- // Complete ourself to try the next drive
- CompleteSelf( KErrNone );
- }
- else
- {
- CompleteObserverRequest( KErrNone );
- }
-
- __LOG("CMMCScBkupStateRequestSpecificPublicFileInfo::RunL() - END");
- }
-
-
-// ---------------------------------------------------------------------------
-// CMMCScBkupStateRequestSpecificPublicFileInfo::DoCancel()
-//
-//
-// ---------------------------------------------------------------------------
-void CMMCScBkupStateRequestSpecificPublicFileInfo::DoCancel()
- {
- }
-
-
-
-