diff -r 95243422089a -r 491b3ed49290 filemanager/GFLM/src/CGflmFileFinder.cpp --- a/filemanager/GFLM/src/CGflmFileFinder.cpp Thu Aug 19 09:42:45 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,408 +0,0 @@ -/* -* Copyright (c) 2007 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: Searches items matching with given string in given file system -* -*/ - - - -// INCLUDE FILES -#include -#include -#include -#include "CGflmFileFinder.h" -#include "CGflmFileFinderItem.h" -#include "CGflmDriveItem.h" -#include "CGflmDriveResolver.h" -#include "CGflmItemLocalizer.h" -#include "MGflmItemFilter.h" -#include "GflmUtils.h" - -// CONSTANTS -const TInt KWildCardSpace = 2; -_LIT( KWildCard, "*" ); -const TInt KSearchResultsGranularity = 32; - -// ============================= LOCAL FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// MakeWildStringL -// ----------------------------------------------------------------------------- -// -static HBufC* MakeWildStringL( const TDesC& aString ) - { - if ( GflmUtils::HasWildCard( aString ) ) - { - return aString.AllocL(); - } - HBufC* ret = HBufC::NewL( aString.Length() + KWildCardSpace ); - TPtr ptr( ret->Des() ); - ptr.Copy( KWildCard ); - ptr.Append( aString ); - ptr.Append( KWildCard ); - return ret; - } - -// ----------------------------------------------------------------------------- -// MakeWildPathL -// ----------------------------------------------------------------------------- -// -#if 0 -static HBufC* MakeWildPathL( const TDesC& aFolder, const TDesC& aString ) - { - const TInt KBackslashSpace = 1; - if ( !GflmUtils::HasWildCard( aString ) ) - { - return aFolder.AllocL(); - } - HBufC* ret = HBufC::NewL( - aFolder.Length() + aString.Length() + KBackslashSpace ); - TPtr ptr( ret->Des() ); - ptr.Copy( aFolder ); - GflmUtils::EnsureFinalBackslash( ptr ); - ptr.Append( aString ); - return ret; - } -#endif // 0 - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CGflmFileFinder::CGflmFileFinder -// ----------------------------------------------------------------------------- -// -CGflmFileFinder::CGflmFileFinder( - RFs& aFss, - CGflmItemLocalizer& aLocalizer, - CGflmDriveResolver& aResolver, - const TBool& aCancelIndicator ) : - iFss( aFss ), - iItemLocalizer( aLocalizer ), - iDriveResolver( aResolver ), - iCancelIndicator( aCancelIndicator ), - iSearchResults( KSearchResultsGranularity ) - { - } - -// ----------------------------------------------------------------------------- -// CGflmFileFinder::NewL -// ----------------------------------------------------------------------------- -// -CGflmFileFinder* CGflmFileFinder::NewL( - RFs& aFss, - CGflmItemLocalizer& aLocalizer, - CGflmDriveResolver& aResolver, - const TBool& aCancelIndicator ) - { - CGflmFileFinder* self = new( ELeave ) CGflmFileFinder( - aFss, aLocalizer, aResolver, aCancelIndicator ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// ----------------------------------------------------------------------------- -// CGflmFileFinder::ConstructL -// ----------------------------------------------------------------------------- -// -void CGflmFileFinder::ConstructL() - { - iSortCollationMethod = *Mem::CollationMethodByIndex( 0 ); - iSortCollationMethod.iFlags |= - TCollationMethod::EIgnoreNone | TCollationMethod::EFoldCase; - } - -// ----------------------------------------------------------------------------- -// CGflmFileFinder::~CGflmFileFinder -// ----------------------------------------------------------------------------- -// -CGflmFileFinder::~CGflmFileFinder() - { - delete iSearchFolder; - delete iSearchFolderWild; - delete iSearchString; - delete iSearchStringWild; - iSearchResults.ResetAndDestroy(); - iSearchResults.Close(); - } - -// ----------------------------------------------------------------------------- -// CGflmFileFinder::SetSearchFolderL -// ----------------------------------------------------------------------------- -// -void CGflmFileFinder::SetSearchFolderL( const TDesC& aSearchFolder ) - { - delete iSearchFolderWild; - iSearchFolderWild = NULL; - - delete iSearchFolder; - iSearchFolder = NULL; - iSearchFolder = aSearchFolder.AllocL(); - } - -// ----------------------------------------------------------------------------- -// CGflmFileFinder::SetSearchStringL -// ----------------------------------------------------------------------------- -// -void CGflmFileFinder::SetSearchStringL( const TDesC& aSearchString ) - { - delete iSearchFolderWild; - iSearchFolderWild = NULL; - - delete iSearchString; - iSearchString = NULL; - iSearchString = aSearchString.AllocL(); - - delete iSearchStringWild; - iSearchStringWild = NULL; - iSearchStringWild = MakeWildStringL( aSearchString ); - } - -// ----------------------------------------------------------------------------- -// CGflmFileFinder::RefreshL -// ----------------------------------------------------------------------------- -// -void CGflmFileFinder::RefreshL( - MGflmItemFilter* aFilter, - TGflmSortMethod aSortMethod, - TGflmRefreshMode aRefreshMode ) - { - FUNC_LOG - - INFO_LOG2( - "CGflmItemGroupImpl::RefreshL-aRefreshMode=%d, aSortMethod=%d", - aRefreshMode, aSortMethod ) - - if ( aRefreshMode == ERefreshItems ) - { - TRAPD( err, DoSearchL( aFilter ) ); - - // If error just log it and show already found items - if ( err != KErrNone ) - { - ERROR_LOG1( "CGflmFileFinder::RefreshL-err=%d", err ) - } - } - - if ( aSortMethod == EByMatch ) - { - iSearchResults.Sort( CGflmFileFinderItem::CompareByMatch ); - } - else - { - iSearchResults.Sort( CGflmGroupItem::GetSortL( aSortMethod ) ); - } - } - -// ----------------------------------------------------------------------------- -// CGflmFileFinder::DoSearchL -// ----------------------------------------------------------------------------- -// -void CGflmFileFinder::DoSearchL( MGflmItemFilter* aFilter ) - { - FUNC_LOG - - iSearchResults.ResetAndDestroy(); - - // Ensure that search data is defined - if ( !iSearchFolder || !iSearchString || !iSearchStringWild ) - { - return; - } - // Ensure that search drive exists - CGflmDriveItem* drvItem = iDriveResolver.DriveFromPath( *iSearchFolder ); - if ( !drvItem ) - { - return; - } - if ( !iSearchFolderWild ) - { -#if 0 - if ( iDriveResolver.IsRemoteDrive( *iSearchFolder ) ) - { - // Some remote drives are case sensitive with wild cards. - // Therefore, wild cards cannot be used for remote drives, - // because then it is not possible to do case - // insensitive comparison like it is done for local drives. - iSearchFolderWild = iSearchFolder->AllocL(); - } - else - { - // Do search using the folder with wild string for better performance. - // It is faster to let file server do the wild matching instead of - // reading all subitems under search folder to be matched here. - - // Prepare search folder with wild search string - iSearchFolderWild = MakeWildPathL( - *iSearchFolder, *iSearchStringWild ); - } -#else - // Because of problems with localized folder names, - // wild card folder string cannot be given to file server since - // file server is not aware of localized names. - // This search operation is slower because all items are transferred - // here for comparison. - iSearchFolderWild = iSearchFolder->AllocL(); -#endif - } - - INFO_LOG1( "CGflmFileFinder::DoSearchL-CDirScan::NewLC-%S", - iSearchFolderWild ) - CDirScan* dirScan = CDirScan::NewLC( iFss ); - - INFO_LOG( "CGflmFileFinder::DoSearchL-CDirScan::SetScanDataL" ) - dirScan->SetScanDataL( *iSearchFolderWild, KEntryAttDir, ESortNone ); - - INFO_LOG( "CGflmFileFinder::DoSearchL-CDirScan::NextL" ) - CDir* dir = NULL; - dirScan->NextL( dir ); - - while( dir ) - { - CleanupStack::PushL( dir ); - if ( iCancelIndicator ) - { - User::Leave( KErrCancel ); - } - TPtrC basePath( dirScan->FullPath() ); - INFO_LOG1( "CGflmFileFinder::DoSearchL-Search-%S", &basePath ) - - TInt count( dir->Count() ); - for ( TInt i( 0 ); i < count; ++i ) - { - if ( iCancelIndicator ) - { - User::Leave( KErrCancel ); - } - const TEntry& entry( ( *dir )[ i ] ); - TPtrC name( entry.iName ); - TBool isLocalized( EFalse ); - TBool isDir( entry.IsDir() ); - if( isDir ) - { - // Handle localized name - GflmUtils::GetFullPath( basePath, entry, iFullPath ); - TPtrC localizedName( - iItemLocalizer.LocalizeFromWorkThread( iFullPath ) ); - if ( localizedName.Length() ) - { - name.Set( localizedName ); - isLocalized = ETrue; - } - } - // Append matching items - if( name.MatchC( *iSearchStringWild ) != KErrNotFound ) - { - CGflmFileFinderItem* finderItem = CGflmFileFinderItem::NewLC( - entry, basePath ); - if ( isLocalized ) - { - finderItem->SetLocalizedNameL( name ); - } - // Filter out unwanted items - if ( !aFilter || - ( aFilter && aFilter->FilterItemL( - finderItem, - isDir ? CGflmGroupItem::EDirectory : CGflmGroupItem::EFile, - drvItem ) ) ) - { - finderItem->PrepareSort( *iSearchString ); - finderItem->SetGroup( this ); - iSearchResults.AppendL( finderItem ); - CleanupStack::Pop( finderItem ); - } - else - { - CleanupStack::PopAndDestroy( finderItem ); - } - } - } - CleanupStack::PopAndDestroy( dir ); - - INFO_LOG( "CGflmFileFinder::DoSearchL-CDirScan::NextL" ) - dirScan->NextL( dir ); - } - CleanupStack::PopAndDestroy( dirScan ); - } - -// ----------------------------------------------------------------------------- -// CGflmFileFinder::ItemCount -// ----------------------------------------------------------------------------- -// -TInt CGflmFileFinder::ItemCount() const - { - return iSearchResults.Count(); - } - -// ----------------------------------------------------------------------------- -// CGflmFileFinder::Item -// ----------------------------------------------------------------------------- -// -CGflmGroupItem* CGflmFileFinder::Item( TInt aIndex ) - { - return iSearchResults[ aIndex ]; - } - -// ----------------------------------------------------------------------------- -// CGflmFileFinder::Id -// ----------------------------------------------------------------------------- -// -TInt CGflmFileFinder::Id() const - { - return KErrNotFound; - } - -// ----------------------------------------------------------------------------- -// CGflmFileFinder::AddSourceL -// ----------------------------------------------------------------------------- -// -void CGflmFileFinder::AddSourceL( const TDesC& /*aDirectory*/ ) - { - } - -// ----------------------------------------------------------------------------- -// CGflmFileFinder::ResetSources -// ----------------------------------------------------------------------------- -// -void CGflmFileFinder::ResetSources() - { - } - -// ----------------------------------------------------------------------------- -// CGflmFileFinder::AddActionItemL -// ----------------------------------------------------------------------------- -// -void CGflmFileFinder::AddActionItemL( TInt /*aId*/, const TDesC& /*aCaption*/ ) - { - } - -// ----------------------------------------------------------------------------- -// CGflmFileFinder::SetInclusion -// ----------------------------------------------------------------------------- -// -void CGflmFileFinder::SetInclusion( TUint /*aInclusion*/ ) - { - } - -// ----------------------------------------------------------------------------- -// CGflmFileFinder::CollationMethod -// ----------------------------------------------------------------------------- -// -const TCollationMethod* CGflmFileFinder::CollationMethod() - { - return &iSortCollationMethod; - } - -// End of File