| 21 |      1 | /*
 | 
|  |      2 | * Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
 | 
|  |      3 | * All rights reserved.
 | 
|  |      4 | * This component and the accompanying materials are made available
 | 
|  |      5 | * under the terms of "Eclipse Public License v1.0""
 | 
|  |      6 | * which accompanies this distribution, and is available
 | 
|  |      7 | * at the URL "http://www.eclipse.org/legal/epl-v10.html".
 | 
|  |      8 | *
 | 
|  |      9 | * Initial Contributors:
 | 
|  |     10 | * Nokia Corporation - initial contribution.
 | 
|  |     11 | *
 | 
|  |     12 | * Contributors:
 | 
|  |     13 | *
 | 
|  |     14 | * Description: 
 | 
|  |     15 | *     Scanner class used to scan file system by filename extension
 | 
|  |     16 | *
 | 
|  |     17 | *
 | 
|  |     18 | */
 | 
|  |     19 | 
 | 
|  |     20 | 
 | 
|  |     21 | // SYSTEM INCLUDES
 | 
|  |     22 | #include    <f32file.h>
 | 
|  |     23 | 
 | 
|  |     24 | // USER INCLUDES
 | 
|  |     25 | #include    "msengfindallscanner.h"
 | 
|  |     26 | #include    "msenguihandler.h"
 | 
|  |     27 | #include    "memscanutils.h"
 | 
|  |     28 | 
 | 
|  |     29 | 
 | 
|  |     30 | // ================= MEMBER FUNCTIONS ========================================
 | 
|  |     31 | 
 | 
|  |     32 | // ---------------------------------------------------------------------------
 | 
|  |     33 | // CMsengFindAllScanner::CMsengFindAllScanner()
 | 
|  |     34 | //
 | 
|  |     35 | // C++ default constructor. Can NOT contain any code, that might leave.
 | 
|  |     36 | // ---------------------------------------------------------------------------
 | 
|  |     37 | CMsengFindAllScanner::CMsengFindAllScanner(MMsengScannerObserver& aObserver, 
 | 
|  |     38 |                                            CMsengInfoArray& aScanArray, 
 | 
|  |     39 |                                            RFs& aFsSession)
 | 
|  |     40 | : CMsengFileScanner(aObserver, aScanArray, aFsSession)
 | 
|  |     41 |     {
 | 
|  |     42 |     }
 | 
|  |     43 | 
 | 
|  |     44 | 
 | 
|  |     45 | // ---------------------------------------------------------------------------
 | 
|  |     46 | // CMsengFindAllScanner::NewL()
 | 
|  |     47 | //
 | 
|  |     48 | // Two-phased constructor
 | 
|  |     49 | // ---------------------------------------------------------------------------
 | 
|  |     50 | CMsengFindAllScanner* CMsengFindAllScanner::NewL(
 | 
|  |     51 |                                         MMsengScannerObserver& aObserver, 
 | 
|  |     52 |                                         CMsengInfoArray& aScanArray, 
 | 
|  |     53 |                                         RFs& aFsSession)
 | 
|  |     54 |     {
 | 
|  |     55 |     CMsengFindAllScanner* self = new (ELeave) CMsengFindAllScanner(aObserver, 
 | 
|  |     56 |                                                     aScanArray, aFsSession);
 | 
|  |     57 |     return self;
 | 
|  |     58 |     }
 | 
|  |     59 | 
 | 
|  |     60 | // ---------------------------------------------------------------------------
 | 
|  |     61 | // CMsengFindAllScanner::~CMsengFindAllScanner()
 | 
|  |     62 | //
 | 
|  |     63 | // Destructor
 | 
|  |     64 | // ---------------------------------------------------------------------------
 | 
|  |     65 | CMsengFindAllScanner::~CMsengFindAllScanner()
 | 
|  |     66 |     {
 | 
|  |     67 |     }
 | 
|  |     68 | 
 | 
|  |     69 | // ---------------------------------------------------------------------------
 | 
|  |     70 | // CMsengFindAllScanner::FindFilesL()
 | 
|  |     71 | //
 | 
|  |     72 | //
 | 
|  |     73 | // ---------------------------------------------------------------------------
 | 
|  |     74 | CDir* CMsengFindAllScanner::FindFilesL(const TDesC& aDirectory, TBool& aMoveToNextDirectory)
 | 
|  |     75 |     {
 | 
|  |     76 |     TRACES( RDebug::Print(_L("CMsengFindAllScanner::FindFilesL(%S)"), &aDirectory) );
 | 
|  |     77 | 
 | 
|  |     78 |     // Get a list of results for this directory
 | 
|  |     79 |     CDir* results;
 | 
|  |     80 |     const TInt error = FsSession().GetDir(aDirectory, 
 | 
|  |     81 |         KEntryAttMaskSupported|KEntryAttAllowUid, ESortNone, results);
 | 
|  |     82 |     if (error == KErrNotFound)
 | 
|  |     83 |         {
 | 
|  |     84 |         results = NULL;
 | 
|  |     85 |         }
 | 
|  |     86 | 
 | 
|  |     87 |     // Always move onto searching the next directory
 | 
|  |     88 |     aMoveToNextDirectory = ETrue;
 | 
|  |     89 |     
 | 
|  |     90 |     // Return populated (or potentially NULL) list.
 | 
|  |     91 |     return results;
 | 
|  |     92 |     }
 | 
|  |     93 | 
 | 
|  |     94 | // ---------------------------------------------------------------------------
 | 
|  |     95 | // CMsengFindAllScanner::HandleLocatedEntryL()
 | 
|  |     96 | // 
 | 
|  |     97 | // 
 | 
|  |     98 | // ---------------------------------------------------------------------------
 | 
|  |     99 | CMsengFileScanner::TLocationResponse CMsengFindAllScanner::HandleLocatedEntryL(
 | 
|  |    100 |     const TDesC& aFullFileNameAndPath, const TEntry& aEntry)
 | 
|  |    101 |     {
 | 
|  |    102 |     // Figure out the data group by comparing the start of the path
 | 
|  |    103 | 
 | 
|  |    104 |     TInt dataDirCount = InfoArray().DataDirs().Count();
 | 
|  |    105 |     for(TInt i=0; i < dataDirCount; i++)
 | 
|  |    106 |         {
 | 
|  |    107 |         TPtrC dataDirPath = InfoArray().DataDirs().MdcaPoint(i);
 | 
|  |    108 |         if(aFullFileNameAndPath.Length() >= dataDirPath.Length())
 | 
|  |    109 |             {
 | 
|  |    110 |             TFileName currentPath;
 | 
|  |    111 |             currentPath.Copy(aFullFileNameAndPath.Left(dataDirPath.Length()));
 | 
|  |    112 | 
 | 
|  |    113 |             // Compare whether folder matches
 | 
|  |    114 |             if(!currentPath.Compare(dataDirPath))
 | 
|  |    115 |                 {
 | 
|  |    116 |                 TBool isExcluded = EFalse;
 | 
|  |    117 |                 TInt fileLength = aFullFileNameAndPath.Length() - dataDirPath.Length();
 | 
|  |    118 |                 TInt excludedFiles = 0;
 | 
|  |    119 |                 if(InfoArray().DataDirExcludedFiles().Count())
 | 
|  |    120 |                     {
 | 
|  |    121 |                     excludedFiles = InfoArray().DataDirExcludedFiles().At(i)->MdcaCount();
 | 
|  |    122 |                     }
 | 
|  |    123 | 
 | 
|  |    124 |                 currentPath.Copy(aFullFileNameAndPath.Right(fileLength));
 | 
|  |    125 | 
 | 
|  |    126 |                 TRACES( RDebug::Print(_L("Check file %S"), ¤tPath) );
 | 
|  |    127 |                 
 | 
|  |    128 |                 for(TInt j=0; j < excludedFiles; j++)
 | 
|  |    129 |                     {
 | 
|  |    130 |                     TRACES
 | 
|  |    131 |                     ( 
 | 
|  |    132 |                     TPtrC file = InfoArray().DataDirExcludedFiles().At(i)->MdcaPoint(j);
 | 
|  |    133 |                     RDebug::Print(_L("Comparing to excluded file %S"), &file);
 | 
|  |    134 |                     );
 | 
|  |    135 |                     
 | 
|  |    136 |                     if(!currentPath.Compare(
 | 
|  |    137 |                         InfoArray().DataDirExcludedFiles().At(i)->MdcaPoint(j)))
 | 
|  |    138 |                         {
 | 
|  |    139 |                         isExcluded = ETrue;
 | 
|  |    140 |                         break;
 | 
|  |    141 |                         }
 | 
|  |    142 |                     }
 | 
|  |    143 | 
 | 
|  |    144 |                 if(!isExcluded)
 | 
|  |    145 |                     {
 | 
|  |    146 |                     // Add size of object when file is not in list of excluded files
 | 
|  |    147 |                     if(InfoArray().DataDirGroups().Count())
 | 
|  |    148 |                         {
 | 
|  |    149 |                         TInt group = InfoArray().DataDirGroups().At(i);
 | 
|  |    150 |                         InfoArray().AddSizeByGroupL(group, aEntry.FileSize());
 | 
|  |    151 | 
 | 
|  |    152 |                         TRACES
 | 
|  |    153 |                         ( 
 | 
|  |    154 |                         RDebug::Print(_L("File %S belongs to group: %d"), 
 | 
|  |    155 |                             &aFullFileNameAndPath, group)
 | 
|  |    156 |                         );
 | 
|  |    157 |                         }
 | 
|  |    158 |                     }
 | 
|  |    159 |                 }
 | 
|  |    160 |             }
 | 
|  |    161 |         }
 | 
|  |    162 |         
 | 
|  |    163 |     // We processed this one
 | 
|  |    164 |     return EEntryWasProcessed;
 | 
|  |    165 |     }
 | 
|  |    166 | 
 | 
|  |    167 | //  End of File
 |