browserui/browser/FeedsSrc/FeedsFileSearchAgent.cpp
branchRCL_3
changeset 64 6385c4c93049
parent 63 4baee4f15982
child 65 8e6fa1719340
--- a/browserui/browser/FeedsSrc/FeedsFileSearchAgent.cpp	Thu Aug 19 09:57:56 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,426 +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 the License "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: 
-*
-*/
-
-
-
-// INCLUDE FILES
-
-#include "FeedsFileSearchAgent.h"
-#include <fbs.h>
-
-// EXTERNAL DATA STRUCTURES
-
-// EXTERNAL FUNCTION PROTOTYPES
-
-// CONSTANTS
-
-// MACROS
-
-// LOCAL CONSTANTS AND MACROS
-
-// MODULE DATA STRUCTURES
-
-// LOCAL FUNCTION PROTOTYPES
-
-// FORWARD DECLARATIONS
-
-// ============================= LOCAL FUNCTIONS ===============================
-
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CFeedsFileSearchAgent::CFileSearchAgent
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-CFeedsFileSearchAgent::CFeedsFileSearchAgent(MFeedsFileSearchAgentCallback& aCallback)
-    : iCallback(&aCallback), iCancelSearch(EFalse)
-    {
-    }
-
-// -----------------------------------------------------------------------------
-// CFeedsFileSearchAgent::ConstructL
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CFeedsFileSearchAgent::ConstructL()
-    {
-    TDriveList driveList;
-	TChar driveLetter;
-    
-    // we'll keep two lists. one for the drives in the system, the 
-	// other for the list of found files
-    iDriveEntryList = new(ELeave) CDriveEntryList(KMaxDrives);
-    iFileEntryList = new(ELeave) CFileEntryList(FEEDS_FILE_SEARCH_AGENT_MAX_RESULTS);
-   	// Create a directory scan object.
-    iScan = CDirScan::NewL(iFs);
-    iLazyCaller = CIdle::NewL(CActive::EPriorityIdle );
-			
-	// Connect to fs for FS ops, etc
-	User::LeaveIfError(iFs.Connect());
-    	
-	// populate list of drives
-	GetDriveListL();
-    }
-
-// -----------------------------------------------------------------------------
-// CFeedsFileSearchAgent::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CFeedsFileSearchAgent* CFeedsFileSearchAgent::NewL(MFeedsFileSearchAgentCallback& aCallback)
-    {
-	CFeedsFileSearchAgent* self = new( ELeave ) CFeedsFileSearchAgent(aCallback);
-
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop();
-
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// CFeedsFileSearchAgent::~CFeedsFileSearchAgent()
-// Destructor
-// -----------------------------------------------------------------------------
-//
-CFeedsFileSearchAgent::~CFeedsFileSearchAgent()
-    {
-    CancelSearch();
-   	iFs.Close();
-    delete iScan;
-   	delete iLazyCaller;
-	delete iDriveEntryList;
-	delete iFileEntryList;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CFeedsFileSearchAgent::StartSearchingL
-//
-//
-// -----------------------------------------------------------------------------
-//
-void CFeedsFileSearchAgent::StartSearchingL()
-    {
-	iSearchDriveIndex = -1;
-	
-   	// Return control to the CIdle
-    // The searching work will be done in LazyCallBack.
-    iLazyCaller->Start(TCallBack(CFeedsFileSearchAgent::LazyCallBack,this));
-
-    }
-
-// -----------------------------------------------------------------------------
-// CFeedsFileSearchAgent::GetFileEntry
-//
-//
-// -----------------------------------------------------------------------------
-//
-TFileEntry* CFeedsFileSearchAgent::GetFileEntry(const TInt aIndex)
-	{
-	// for a client, return a pointer to a file that was found given
-	// it's index within the list of found files
-	if(aIndex >= iFileEntryList->Count())
-		{
-		return NULL;
-		}
-	else
-		{
-		return &(iFileEntryList->At(aIndex));
-		}
-	}
-
-// -----------------------------------------------------------------------------
-// CFeedsFileSearchAgent::GetDriveListL
-//
-//
-// -----------------------------------------------------------------------------
-//
-void CFeedsFileSearchAgent::GetDriveListL()
-	{
-	TDriveList driveList;
-   	
-   	// Setup List of drives
-   	// DriveList will return an array of 26 bytes.
-   	// nonzero entries means there is media present in 
-   	// that drive letter. 
-    User::LeaveIfError(iFs.DriveList(driveList));
-    for (TInt i=0; i<KMaxDrives; i++)
-		{
-    	if (driveList[i])
-        	{
-        	TDriveEntry driveEntry;
-        	
-        	// Assign a drive letter to the drive entry.
-        	// In the returned list of drives, index 0 corresponds to A:\,
-        	// 1 to B:\, etc.
-            driveEntry.iLetter = 'A' + i;
-            
-            // map the letter back to the drive number. This should be the 
-            // same as "i"
-            iFs.CharToDrive(driveEntry.iLetter, driveEntry.iNumber);
-            
- 			// Add to the list of drives that we keep
- 			iDriveEntryList->AppendL(driveEntry);
-            }
-        }
-	}
-	
-// -----------------------------------------------------------------------------
-// CFeedsFileSearchAgent::DoSearchFilesL
-//
-// Searches a given path or paths for a filename and add it to this class' list
-// of found files. The filename can contain wildcards.
-// -----------------------------------------------------------------------------
-//	
-TInt CFeedsFileSearchAgent::DoSearchFiles(const TDesC& aFileName, const TDesC& aPath)
-	{
-	TFindFile fileFinder(iFs);
-	CDir* dir = NULL;
-	
-	// given a semicolon-separated lists of paths to search in,
-	// look for the filename (that can include wildcards) found in that path or paths
-	// This first search will allocate memory for dir and will contain the list of
-	// files found within the first path given
-	TInt err = fileFinder.FindWildByPath(aFileName, &aPath, dir);
-	
-	while(err == KErrNone)
-		{
-		// For the current path given,
-		// loop through list of found items within that path 
-		for (TInt i=0; i<dir->Count(); i++)
-			{
-			TEntry entry = (*dir)[i];
-
-			// create and setup TParse object, useful for later extracting parts
-			// of the found files used by clients of this class
-			TParse parsedName;
-			parsedName.Set(entry.iName, &fileFinder.File(), NULL);
-			
-			// as a sanity check,
-			// make sure the drive, path are valid and
-			// that the drive found matches the path given
-			if(parsedName.Drive().Length() && aPath.Length() && parsedName.Drive()[0] == aPath[0])
-				{
-				// the wildcard search may have found directories that match
-				// exlude these from our list because we use this function to 
-				// record files only 
-				if(!entry.IsDir())
-					{
-					// Create a fileEntry based upon the found file
-					// FullName will be the complete path specifier for the file
-					// while entry will be just the name within the directory					
-					TFileEntry fileEntry;
-					fileEntry.iPath = parsedName.FullName();
-					fileEntry.iEntry = entry;
-					
-					// copy this entry into to our list of found files
-					TRAP(err, iFileEntryList->AppendL(fileEntry));
-					
-					// If we have exceeded our maximum number of possible entries,
-					// or we're cancelling an ongoing search
-					// then stop adding to the list
-					if(iFileEntryList->Count() >= FEEDS_FILE_SEARCH_AGENT_MAX_RESULTS ||
-						iCancelSearch)	
-						{
-						// cleanup dir
-						if(dir != NULL)
-							{
-							delete(dir);
-							dir = NULL;
-							}
-						return err;
-						}
-					}
-				}
-			}
-			
-			//
-			// We have completed looking at the results for this dir. Look
-			// At the results where we left off, for the next path given. 
-			// If there is no next path, KErrNotFound will be returned, we'll 
-			// complete the search cycle.
-			//
-			if(dir != NULL)
-				{				
-				delete(dir);
-				dir = NULL;
-				}
-			err = fileFinder.FindWild(dir);
-		}
-
-		// Cleanup the final instance of dir that has been allocated
-		if(dir != NULL)
-			{			
-			delete(dir);
-			dir = NULL;
-			}
-		return err;
-	}
-	
-// -----------------------------------------------------------------------------
-// CFeedsFileSearchAgent::DoSearchFilesRecursive
-//
-// Starting from a given path, search the filesystem recursively for a given
-// filename. The filename may contain wildcards.
-// -----------------------------------------------------------------------------
-//	
-	
-TInt CFeedsFileSearchAgent::DoSearchFilesRecursive(const TDesC& aFileName)
-    {
-    TInt err(KErrNone);
-    CDir* dir = NULL;
-
-    // Find the entries from the next directory in the hierarchy
-    // or NULL/error if there are none
-    TRAP(err, iScan->NextL(dir));
-
-	// done, break out of loop
-    if(!dir || (err != KErrNone) )
-        {
-        return KErrGeneral;
-        }
-
-	// loop through the number of found directories
-	for(TInt i=0; i < dir->Count(); i++)
-        {
-        TEntry entry = (*dir)[i];
-
-        // The search will find directories as well as files. We're
-        // only interested here in directories.
-        if(entry.IsDir())
-            {
-            // From the scan, get the full path including the drive letter
-            // being scanned.
-            TFileName path(iScan->FullPath());
-
-            if(path.Length())
-                {
-                // If valid, append a slash to the end of the directory, 
-                // and then search for the desired filename given this path
-                path.Append(entry.iName);
-                path.Append(_L("\\"));
-                DoSearchFiles(aFileName,path);
-                }
-            }
-        }
-
-    // Delete the dir that was allocated in this iteration
-    if(dir != NULL)
-        {
-        delete(dir);
-        dir = NULL;
-        }
-
-    return err;
-    }
-
-// -----------------------------------------------------------------------------
-// CFeedsFileSearchAgent::LazyCallBack
-//
-// This function calls StartSearchFile instead of calling it from StartSearchingL function
-// To ensure it doesn't called if user has cancelled the request
-// -----------------------------------------------------------------------------
-//
-TBool CFeedsFileSearchAgent::LazyCallBack(TAny* aPtr)
-    {
-    CFeedsFileSearchAgent* ptr = (CFeedsFileSearchAgent*)aPtr;
-    // if we've cancelled the search
-    // then stop adding to the list
-    if(!ptr->iCancelSearch)
-        {
-        return ptr->StartSearchFile();    
-        }
-    else
-        {
-        return EFalse;
-        }    
-    }
-
-// -----------------------------------------------------------------------------
-// CFeedsFileSearchAgent::StartSearchFile
-//
-// starts the search of *.OPML Files.
-// -----------------------------------------------------------------------------
-//
-TBool CFeedsFileSearchAgent::StartSearchFile()
-    {
-    // Quit looping and don't try to scan if we've already exceeded the number of 
-    // possible file entries
-    // or if we've cancelled the search
-    if(iFileEntryList->Count() >= FEEDS_FILE_SEARCH_AGENT_MAX_RESULTS ||
-            iCancelSearch)
-        {
-        TRAP_IGNORE(iCallback->FeedsFileSearchCompleteL( iFileEntryList->Count() ));
-        return EFalse;	
-        }
-    TInt retVal = KErrGeneral;
-    if(iSearchDriveIndex != -1)
-        {
-        retVal = DoSearchFilesRecursive( _L("*.opml"));
-        }
-    if(retVal != KErrNone)
-        {
-        iSearchDriveIndex++;
-        if(iSearchDriveIndex < iDriveEntryList->Count())
-            {
-            TDriveEntry driveEntry = iDriveEntryList->At(iSearchDriveIndex);
-            TBuf<5> driveRoot;
-
-            driveRoot.Append(driveEntry.iLetter);
-            driveRoot.Append(_L(":\\"));    	
-
-            // Search the base of the drive and also search recursively
-            // through it's folder hierarchy.
-            DoSearchFiles(_L("*.opml"),driveRoot);
-            TRAP_IGNORE(iScan->SetScanDataL(driveRoot, KEntryAttDir|KEntryAttMatchMask, ESortByName | EAscending | EDirsFirst));
-            return ETrue;
-            }
-        else
-            {
-            TRAP_IGNORE(iCallback->FeedsFileSearchCompleteL( iFileEntryList->Count() ));
-            return EFalse;
-            }
-        }
-    else
-        {
-        return ETrue;
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CFeedsFileSearchAgent::CancelSearch.
-//
-// Cancel the ongoing search.
-// -----------------------------------------------------------------------------
-//	    
-void CFeedsFileSearchAgent::CancelSearch()
-    {
-    if(iLazyCaller->IsActive())
-        {
-        iLazyCaller->Cancel();
-        }
-    iCancelSearch = ETrue;   
-    }
-
-// ========================== OTHER EXPORTED FUNCTIONS =========================
-
-
-//  End of File