diff -r 000000000000 -r 6a9f87576119 filemanager/Engine/src/CfilemanagerActiveCount.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/filemanager/Engine/src/CfilemanagerActiveCount.cpp Mon Jan 18 20:09:41 2010 +0200 @@ -0,0 +1,236 @@ +/* +* Copyright (c) 2002-2006 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: Calculates given folder size +* +*/ + + +// INCLUDE FILES +#include "CFilemanagerActiveCount.h" + +// CONSTANTS +const TInt KFileManagerProcessFilesPerCycle = 20; + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CFileManagerActiveCount::CFileManagerActiveCount +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CFileManagerActiveCount::CFileManagerActiveCount( RFs& aFs ) : + iFs( aFs ), + iFolders( KErrNotFound ), + iFiles( KErrNotFound), + iOpenFiles( KErrNotFound ) + { + } + +// ----------------------------------------------------------------------------- +// CFileManagerActiveCount::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CFileManagerActiveCount* CFileManagerActiveCount::NewL( + RFs& aFs, + const TDesC& aRootFolder, + const CFileManagerItemProperties::TFileManagerFileType aType + ) + { + CFileManagerActiveCount* self = new( ELeave ) CFileManagerActiveCount( + aFs ); + CleanupStack::PushL( self ); + self->ConstructL( aRootFolder, aType ); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CFileManagerActiveCount::ConstructL +// +// ----------------------------------------------------------------------------- +// +void CFileManagerActiveCount::ConstructL( + const TDesC& aRootFolder, + const CFileManagerItemProperties::TFileManagerFileType aType ) + { + + iDirScan = CDirScan::NewL( iFs ); + + if ( aType == CFileManagerItemProperties::EFolder ) + { + // Set scanning from current directory, take only folders + // No sorting needed + iDirScan->SetScanDataL( + aRootFolder, + KEntryAttDir | KEntryAttMatchExclusive, + ESortNone ); + } + else if ( aType == CFileManagerItemProperties::EFile || + aType == CFileManagerItemProperties::EOpen || + aType == CFileManagerItemProperties::EReadOnly ) + { + // Set scanning from current directory, take only file + // No sorting needed + iDirScan->SetScanDataL( + aRootFolder, + KEntryAttNormal | KEntryAttHidden | KEntryAttSystem, + ESortNone ); + } + else + { + // Set scanning from current directory, + // take file and folders except hidden and system files + // No sorting needed + iDirScan->SetScanDataL( aRootFolder, KEntryAttDir, ESortNone ); + } + + TRAPD( err, iDirScan->NextL( iDir ) ); + + if ( err == KErrNone && iDir ) + { + if ( aType == CFileManagerItemProperties::EOpen || + aType == CFileManagerItemProperties::EReadOnly ) + { + iFiles = iDir->Count(); + iOpenFiles = 0; + } + else if ( aType == CFileManagerItemProperties::EFolder ) + { + iFolders = iDir->Count(); + delete iDir; + iDir = NULL; + iProcessDone = ETrue; + } + else if ( aType == CFileManagerItemProperties::EFile ) + { + iFiles = iDir->Count(); + delete iDir; + iDir = NULL; + iProcessDone = ETrue; + } + } + + } + +// ----------------------------------------------------------------------------- +// CFileManagerActiveCount::~CFileManagerActiveCount +// Destructor +// ----------------------------------------------------------------------------- +// +CFileManagerActiveCount::~CFileManagerActiveCount() + { + delete iDirScan; + delete iDir; + } + +// ----------------------------------------------------------------------------- +// CFileManagerActiveCount::IsProcessDone +// +// ----------------------------------------------------------------------------- +// +TBool CFileManagerActiveCount::IsProcessDone() const + { + return iProcessDone; + } + +// ----------------------------------------------------------------------------- +// CFileManagerActiveCount::StepL +// +// ----------------------------------------------------------------------------- +// +void CFileManagerActiveCount::StepL() + { + if( !iDir ) + { + iProcessDone = ETrue; + return; + } + + TInt processCount( KFileManagerProcessFilesPerCycle ); + while( iFileCounter < iDir->Count() && processCount ) + { + const TEntry& entry( ( *iDir )[ iFileCounter ] ); + iFileName.Copy( iDirScan->FullPath() ); + iFileName.Append( entry.iName ); + TBool fileIsOpen( EFalse ); + if ( KErrNone == iFs.IsFileOpen( iFileName, fileIsOpen ) ) + { + if ( fileIsOpen ) + { + ++iOpenFiles; + } + } + ++iFileCounter; + --processCount; + } + + if ( iFileCounter >= iDir->Count() ) + { + delete iDir; + iDir = NULL; + iDirScan->NextL( iDir ); + if ( !iDir ) + { + iProcessDone = ETrue; + } + iFileCounter = 0; + } + + } + +// ----------------------------------------------------------------------------- +// CFileManagerActiveCount::FolderCount() +// +// ----------------------------------------------------------------------------- +// +TInt CFileManagerActiveCount::FolderCount() const + { + if ( iProcessDone ) + { + return iFolders; + } + return KErrNotFound; + } + +// ----------------------------------------------------------------------------- +// CFileManagerActiveCount::FileCount() +// +// ----------------------------------------------------------------------------- +// +TInt CFileManagerActiveCount::FileCount() const + { + if ( iProcessDone ) + { + return iFiles; + } + return KErrNotFound; + } + +// ----------------------------------------------------------------------------- +// CFileManagerActiveCount::OpenFiles() +// +// ----------------------------------------------------------------------------- +// +TInt CFileManagerActiveCount::OpenFiles() const + { + if ( iProcessDone ) + { + return iOpenFiles; + } + return KErrNotFound; + } + +// End of File