diff -r ccd0fd43f247 -r 208a4ba3894c harvesterplugins/file/src/cfileplugin.cpp --- a/harvesterplugins/file/src/cfileplugin.cpp Mon Apr 19 14:40:05 2010 +0300 +++ b/harvesterplugins/file/src/cfileplugin.cpp Mon May 03 12:32:15 2010 +0300 @@ -30,6 +30,12 @@ #include #include +#include "OstTraceDefinitions.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "cfilepluginTraces.h" +#endif + + // local declarations and functions namespace { @@ -37,10 +43,19 @@ _LIT(KCPixSearchServerPrivateDirectory, "\\Private\\2001f6f7\\"); _LIT(KPathIndexDbPath, CPIX_INDEVICE_INDEXDB); -_LIT(KPathTrailer, "\\root\\file"); -_LIT(KFileBaseAppClassGeneric, ":root file"); +_LIT(KPathFolder, "\\root\\file\\folder"); +_LIT(KPathFileContent, "\\root\\file\\content"); +_LIT(KFileBaseAppClassContent, "root file content"); +_LIT(KFileBaseAppClassFolder, "root file folder"); _LIT(KFilePluginAtSign, "@"); _LIT(KFilePluginColon, ":"); +_LIT(KNameField, "Name"); +_LIT(KExtensionField, "Extension"); +_LIT(KMimeTypeFile, FILE_MIMETYPE); +_LIT(KMimeTypeFolder , FOLDER_MIMETYPE); +_LIT(KMimeTypeField , CPIX_MIMETYPE_FIELD); + +#define CONSTANT_TO_PTR16(ptr, c) TPtrC16 ptr; ptr.Set((const TUint16*)c,User::StringLength(c) ); /** * MapFileToDrive - returns the TDriveNumber that the file is located on. @@ -91,6 +106,34 @@ } // anonymous namespace + +TBool CFilePlugin::IsFileTypeMedia(const TDesC& aExt) + { + + const TText* KMediaExt[] = {_S("txt"),_S("pdf"), _S("jpg"),_S("mp3"), _S("jpeg"), _S("wma"), _S("3gp"), _S("mpg4"), + _S("avi"), _S("jpf"), _S("mbm"), _S("png"), _S("gif"), _S("bmp"), _S("mp4"), _S("mpeg4"), + _S("m4v"), _S("m4a"), _S("3gpp"), _S("3g2"), _S("aac"), _S("amr"), _S("wmv"), _S("divx"), + _S("awb"),_S("mid"), _S("midi"), _S("spmid"), _S("rng"), _S("mxmf"), _S("wav"), + _S("au"), _S("nrt"), _S("mka"),_S("jp2"), _S("j2k"), _S("jpx"), + _S("rm"), _S("rmvb"),_S("ota"), _S("wbmp"), _S("wmf"),_S("otb"), + _S("rv"), _S("mkv"), _S("ra"),_S("tif"), _S("tiff")}; + + const TInt count = sizeof( KMediaExt ) / sizeof( TText* ); + + TBool isValid = false; + + for (TInt i = 0; i < count; i++) + { + CONSTANT_TO_PTR16(type, KMediaExt[i]); + if(!aExt.Compare(type)) + { + isValid = true; + break; + } + } + return isValid; + } + CFilePlugin* CFilePlugin::NewL() { CFilePlugin* instance = CFilePlugin::NewLC(); @@ -111,6 +154,7 @@ for (TInt i=EDriveA; i<=EDriveZ; i++) { iIndexer[i] = NULL; //Initialize to NULL + iFolderIndexer[i] = NULL; } } @@ -138,10 +182,12 @@ { User::LeaveIfError( iFs.Connect() ); TInt err = iFs.AddPlugin(KFastFindFSPluginFile); + OstTrace1( TRACE_NORMAL, CFILEPLUGIN_CONSTRUCTL, "CFilePlugin::ConstructL;iFs.AddPlugin=%d", err ); CPIXLOGSTRING2("CFilePlugin::ConstructL, iFs.AddPlugin: %i", err); if ( err != KErrAlreadyExists ) { err = iFs.MountPlugin(KFastFindFSPluginName); + OstTrace1( TRACE_NORMAL, DUP1_CFILEPLUGIN_CONSTRUCTL, "CFilePlugin::ConstructL;iFs.MountPlugin=%d", err ); CPIXLOGSTRING2("CFilePlugin::ConstructL, iFs.MountPlugin: %i", err); } // check if already up, unload and reload @@ -149,15 +195,19 @@ { // dismount TInt err = iFs.DismountPlugin(KFastFindFSPluginName); + OstTrace1( TRACE_NORMAL, DUP2_CFILEPLUGIN_CONSTRUCTL, "CFilePlugin::ConstructL;iFs.DismountPlugin=%d", err ); CPIXLOGSTRING2("CFilePlugin::ConstructL(), iFs.DismountPlugin: %i", err); err = iFs.RemovePlugin(KFastFindFSPluginName); + OstTrace1( TRACE_NORMAL, DUP3_CFILEPLUGIN_CONSTRUCTL, "CFilePlugin::ConstructL;iFs.RemovePlugin=%d", err ); CPIXLOGSTRING2("CFilePlugin::ConstructL(), iFs.RemovePlugin: %i", err); // if no error reload if ( err == KErrNone ) { err = iFs.AddPlugin(KFastFindFSPluginFile); + OstTrace1( TRACE_NORMAL, DUP4_CFILEPLUGIN_CONSTRUCTL, "CFilePlugin::ConstructL;iFs.AddPlugin=%d", err ); CPIXLOGSTRING2("CFilePlugin::ConstructL, iFs.AddPlugin: %i", err); err = iFs.MountPlugin(KFastFindFSPluginName); + OstTrace1( TRACE_NORMAL, DUP5_CFILEPLUGIN_CONSTRUCTL, "CFilePlugin::ConstructL;iFs.MountPlugin=%d", err ); CPIXLOGSTRING2("CFilePlugin::ConstructL, iFs.MountPlugin: %i", err); } } @@ -174,6 +224,7 @@ if (!iIsMonitorInit) { error = iMonitor->Initialize(); + OstTrace1( TRACE_NORMAL, CFILEPLUGIN_STARTPLUGINL, "CFilePlugin::StartPluginL;Monitor Error=%d", error ); CPIXLOGSTRING2("CFilePlugin::StartMonitoring, error: %i", error ); iIsMonitorInit = ETrue; } @@ -182,11 +233,13 @@ if (error == KErrNone && iIsMonitorInit) { iMonitor->StartMonitoring(); + OstTrace0( TRACE_NORMAL, DUP1_CFILEPLUGIN_STARTPLUGINL, "CFilePlugin::StartMonitoring - iFileMonitor->StartMonitoring " ); CPIXLOGSTRING("CFilePlugin::StartMonitoring - iFileMonitor->StartMonitoring "); } iMmcMonitor->StartMonitoring(); + OstTrace0( TRACE_NORMAL, DUP2_CFILEPLUGIN_STARTPLUGINL, "END CFilePlugin::StartMonitoring" ); CPIXLOGSTRING("END CFilePlugin::StartMonitoring"); // Add harvesters for each non removable drive @@ -215,47 +268,65 @@ void CFilePlugin::MountL(TDriveNumber aMedia, TBool aForceReharvest) { + OstTraceFunctionEntry0( CFILEPLUGIN_MOUNTL_ENTRY ); CPIXLOGSTRING("ENTER CFilePlugin::MountL"); // Check if already exists - if (iIndexer[aMedia]) + if (iIndexer[aMedia] && iFolderIndexer[aMedia]) return; // Add Notifications paths prior to opening IndexDB. AddNotificationPathsL(aMedia); - // Form the baseappclass for this media - TBuf baseAppClass; - FormBaseAppClass(aMedia, baseAppClass); - - // Define this volume - HBufC* path = DatabasePathLC(aMedia); - User::LeaveIfError(iSearchSession.DefineVolume(baseAppClass, *path)); + // Form the baseappclass for folder + TBuf baseFolderAppClass; + FormBaseAppClass(aMedia,KFileBaseAppClassFolder, baseFolderAppClass); + //Form the baseappclass for content + TBuf baseContentAppClass; + FormBaseAppClass(aMedia,KFileBaseAppClassContent, baseContentAppClass); + + // Define volume for folder and content index database + HBufC* path = DatabasePathLC(aMedia,KPathFolder); + User::LeaveIfError(iSearchSession.DefineVolume(baseFolderAppClass, *path)); CleanupStack::PopAndDestroy(path); + HBufC* contentpath = DatabasePathLC(aMedia,KPathFileContent); + User::LeaveIfError(iSearchSession.DefineVolume(baseContentAppClass, *contentpath)); + CleanupStack::PopAndDestroy(contentpath); + // construct and open the database iIndexer[aMedia] = CCPixIndexer::NewL(iSearchSession); - iIndexer[aMedia]->OpenDatabaseL(baseAppClass); + iIndexer[aMedia]->OpenDatabaseL(baseContentAppClass); + + iFolderIndexer[aMedia]= CCPixIndexer::NewL(iSearchSession); + iFolderIndexer[aMedia]->OpenDatabaseL(baseFolderAppClass); // Add to harvesting queue - iObserver->AddHarvestingQueue(this, baseAppClass, aForceReharvest); + iObserver->AddHarvestingQueue(this, baseContentAppClass, aForceReharvest); + CPIXLOGSTRING("END CFilePlugin::MountL"); + OstTraceFunctionExit0( CFILEPLUGIN_MOUNTL_EXIT ); } void CFilePlugin::UnMount(TDriveNumber aMedia, TBool aUndefineAsWell) { + OstTraceFunctionEntry0( CFILEPLUGIN_UNMOUNT_ENTRY ); CPIXLOGSTRING("ENTER CFilePlugin::UnMount "); // Check if already exists - if (!iIndexer[aMedia]) + if (!iIndexer[aMedia] && !iFolderIndexer[aMedia]) { + OstTraceFunctionExit0( CFILEPLUGIN_UNMOUNT_EXIT ); return; } - // Form the baseappclass for this media - TBuf baseAppClass; - FormBaseAppClass(aMedia, baseAppClass); + // Form the baseappclass for folder + TBuf baseFolderAppClass; + FormBaseAppClass(aMedia,KFileBaseAppClassFolder, baseFolderAppClass); + //Form the baseappclass for content + TBuf baseContentAppClass; + FormBaseAppClass(aMedia,KFileBaseAppClassContent, baseContentAppClass); // Remove from harvesting queue - iObserver->RemoveHarvestingQueue(this, baseAppClass); + iObserver->RemoveHarvestingQueue(this, baseContentAppClass); // Delete the index object if (iIndexer[aMedia]) @@ -263,18 +334,26 @@ delete iIndexer[aMedia]; iIndexer[aMedia] = NULL; } - + + if (iFolderIndexer[aMedia]) + { + delete iFolderIndexer[aMedia]; + iFolderIndexer[aMedia] = NULL; + } RemoveNotificationPaths(aMedia); if (aUndefineAsWell) { - iSearchSession.UnDefineVolume(baseAppClass); + iSearchSession.UnDefineVolume(baseFolderAppClass); + iSearchSession.UnDefineVolume(baseContentAppClass); } CPIXLOGSTRING("END CFilePlugin::UnMount "); + OstTraceFunctionExit0( DUP1_CFILEPLUGIN_UNMOUNT_EXIT ); } void CFilePlugin::StartHarvestingL(const TDesC& aQualifiedBaseAppClass) { + OstTraceFunctionEntry0( CFILEPLUGIN_STARTHARVESTINGL_ENTRY ); CPIXLOGSTRING("ENTER CFilePlugin::StartHarvestingL "); // Map base app class to a drive number TDriveNumber drive(EDriveA); //Initialize to get rid of compiler warning. @@ -284,7 +363,7 @@ } // Leave if no indexer for this drive - if (!iIndexer[drive]) + if (!iIndexer[drive] && !iFolderIndexer[drive]) { User::Leave(KErrGeneral); } @@ -294,17 +373,20 @@ #endif // Reset the database iIndexer[drive]->ResetL(); - + iFolderIndexer[drive]->ResetL(); + // Start the actual harvest iHarvester->StartL(drive); CPIXLOGSTRING("END CFilePlugin::StartHarvestingL "); + OstTraceFunctionExit0( CFILEPLUGIN_STARTHARVESTINGL_EXIT ); } -void CFilePlugin::CreateFileIndexItemL(const TDesC& aFilename, TCPixActionType aActionType) +void CFilePlugin::CreateContentIndexItemL(const TDesC& aFilename, TCPixActionType aActionType) { TFileName lowerCaseFilename(aFilename); lowerCaseFilename.LowerCase(); + OstTraceExt2( TRACE_NORMAL, DUP1_CFILEPLUGIN_CREATECONTENTINDEXITEML, "CFilePlugin::CreateContentIndexItemL;lowerCaseFilename=%S;aActionType=%d", lowerCaseFilename, aActionType ); CPIXLOGSTRING3("CFilePlugin::CreateFileIndexItemL lowerCaseFilename = %S aActionType = %d ", &lowerCaseFilename, aActionType); @@ -312,8 +394,10 @@ User::LeaveIfError( MapFileToDrive( lowerCaseFilename, drive ) ); CCPixIndexer* indexer = iIndexer[drive]; + if (!indexer) { + OstTrace0( TRACE_NORMAL, DUP2_CFILEPLUGIN_CREATECONTENTINDEXITEML, "CFilePlugin::CreateFileIndexItemL(): Could not map file to drive." ); CPIXLOGSTRING("CFilePlugin::CreateFileIndexItemL(): Could not map file to drive."); return; } @@ -323,6 +407,7 @@ { #ifdef _DEBUG TRAPD(err, indexer->DeleteL(lowerCaseFilename)); + OstTrace1( TRACE_NORMAL, CFILEPLUGIN_CREATECONTENTINDEXITEML, "CFilePlugin::CreateContentIndexItemL;DeleteL returned=%d", err ); CPIXLOGSTRING2("CFilePlugin::CreateFileIndexItemL(): DeleteL returned %d.", err); #else TRAP_IGNORE( indexer->DeleteL(lowerCaseFilename) ); @@ -338,6 +423,7 @@ { #ifdef _DEBUG TRAPD(err, indexer->AddL(*index_item)); + OstTrace1( TRACE_NORMAL, DUP3_CFILEPLUGIN_CREATECONTENTINDEXITEML, "CFilePlugin::CreateContentIndexItemL;AddL returned=%d", err ); CPIXLOGSTRING2("CFilePlugin::CreateFileIndexItemL(): AddL returned %d.", err); #else TRAP_IGNORE( indexer->AddL(*index_item) ); @@ -347,51 +433,144 @@ { #ifdef _DEBUG TRAPD(err, indexer->UpdateL(*index_item)); + OstTrace1( TRACE_NORMAL, DUP4_CFILEPLUGIN_CREATECONTENTINDEXITEML, "CFilePlugin::CreateContentIndexItemL;UpdateL returned=%d", err ); CPIXLOGSTRING2("CFilePlugin::CreateFileIndexItemL(): UpdateL returned %d.", err); #else TRAP_IGNORE( indexer->UpdateL(*index_item) ); #endif } CleanupStack::PopAndDestroy(index_item); - } + } + } + +void CFilePlugin::CreateFolderFileIndexItemL(const TDesC& aFilename, TCPixActionType aActionType, TBool aIsDir) + { + CSearchDocument* index_item = NULL; + TBool isMediaFile = false; + TFileName lowerCaseFilename(aFilename); + lowerCaseFilename.LowerCase(); + + // Adding the file entry to folder index,check for file or folder entry, + //if file, extract the extension + if (!aIsDir) + { + TFileName extension; + TInt pos = lowerCaseFilename.LocateReverse('.'); + if (pos > 0) + { + extension.Copy(lowerCaseFilename.Mid(pos+1)); + isMediaFile = IsFileTypeMedia(extension); + } + } + //Check for extension type, if media items do not index them + if(!isMediaFile) + { + OstTraceExt2( TRACE_NORMAL, CFILEPLUGIN_CREATEFOLDERFILEINDEXITEML, "CFilePlugin::CreateFolderFileIndexItemL;lowerCaseFilename=%S;aActionType=%d", lowerCaseFilename, aActionType ); + CPIXLOGSTRING3("CFilePlugin::CreateFolderFileIndexItemL lowerCaseFilename = %S aActionType = %d ", + &lowerCaseFilename, aActionType); + + TDriveNumber drive(EDriveA); + User::LeaveIfError( MapFileToDrive( lowerCaseFilename, drive ) ); + + CCPixIndexer* indexer = iFolderIndexer[drive]; + if (!indexer) + { + OstTrace0( TRACE_NORMAL, DUP1_CFILEPLUGIN_CREATEFOLDERFILEINDEXITEML, "CFilePlugin::CreateFolderFileIndexItemL(): Could not map file to drive." ); + CPIXLOGSTRING("CFilePlugin::CreateFolderFileIndexItemL(): Could not map file to drive."); + return; + } + + if (aActionType == ECPixRemoveAction) + { + #ifdef _DEBUG + TRAPD(err, indexer->DeleteL(lowerCaseFilename)); + OstTrace1( TRACE_NORMAL, DUP2_CFILEPLUGIN_CREATEFOLDERFILEINDEXITEML, "CFilePlugin::CreateFolderFileIndexItemL;DeleteL returned=%d", err ); + CPIXLOGSTRING2("CFilePlugin::CreateFolderFileIndexItemL(): DeleteL returned %d.", err); + #else + TRAP_IGNORE( indexer->DeleteL(lowerCaseFilename) ); + #endif + } + else + { + index_item = CreateCpixDocumentL(lowerCaseFilename, aIsDir); + + if( aActionType == ECPixAddAction ) + { + #ifdef _DEBUG + TRAPD(err, indexer->AddL(*index_item)); + OstTrace1( TRACE_NORMAL, DUP3_CFILEPLUGIN_CREATEFOLDERFILEINDEXITEML, "CFilePlugin::CreateFolderFileIndexItemL;AddL returned=%d", err ); + CPIXLOGSTRING2("CFilePlugin::CreateFolderFileIndexItemL(): AddL returned %d.", err); + #else + TRAP_IGNORE( indexer->AddL(*index_item) ); + #endif + } + else if( aActionType == ECPixUpdateAction ) + { + #ifdef _DEBUG + TRAPD(err, indexer->UpdateL(*index_item)); + OstTrace1( TRACE_NORMAL, DUP4_CFILEPLUGIN_CREATEFOLDERFILEINDEXITEML, "CFilePlugin::CreateFolderFileIndexItemL;UpdateL returned=%d", err ); + CPIXLOGSTRING2("CFilePlugin::CreateFolderFileIndexItemL(): UpdateL returned %d.", err); + #else + TRAP_IGNORE( indexer->UpdateL(*index_item) ); + #endif + } + delete index_item; + } + } } void CFilePlugin::HarvestingCompleted(TDriveNumber aDriveNumber, TInt aError) { + OstTraceFunctionEntry0( CFILEPLUGIN_HARVESTINGCOMPLETED_ENTRY ); CPIXLOGSTRING("ENTER CFilePlugin::HarvestingCompleted "); if (iIndexer[aDriveNumber]) { Flush(*iIndexer[aDriveNumber]); } - TBuf baseAppClass; - FormBaseAppClass(TDriveNumber(aDriveNumber), baseAppClass); + if (iFolderIndexer[aDriveNumber]) + { + Flush(*iFolderIndexer[aDriveNumber]); + } + + //Form baseapp class for folder and content database + TBuf baseContentAppClass; + FormBaseAppClass(TDriveNumber(aDriveNumber),KFileBaseAppClassContent, baseContentAppClass); + + iObserver->HarvestingCompleted(this, baseContentAppClass, aError); + #ifdef __PERFORMANCE_DATA TRAP_IGNORE( UpdatePerformaceDataL(aDriveNumber) ); #endif - iObserver->HarvestingCompleted(this, baseAppClass, aError); + CPIXLOGSTRING("END CFilePlugin::HarvestingCompleted "); + OstTraceFunctionExit0( CFILEPLUGIN_HARVESTINGCOMPLETED_EXIT ); } void CFilePlugin::AddNotificationPathsL(const TDriveNumber aDriveNumber) { + OstTraceFunctionEntry0( CFILEPLUGIN_ADDNOTIFICATIONPATHSL_ENTRY ); CPIXLOGSTRING("ENTER CFilePlugin::AddNotificationPathsL "); iMonitor->AddNotificationPathsL(aDriveNumber); iHarvester->AddIgnorePathsL(aDriveNumber); CPIXLOGSTRING("END CFilePlugin::AddNotificationPathsL "); + OstTraceFunctionExit0( CFILEPLUGIN_ADDNOTIFICATIONPATHSL_EXIT ); } void CFilePlugin::RemoveNotificationPaths(const TDriveNumber aDriveNumber) { + OstTraceFunctionEntry0( CFILEPLUGIN_REMOVENOTIFICATIONPATHS_ENTRY ); CPIXLOGSTRING("ENTER CFilePlugin::RemoveNotificationPaths"); iMonitor->RemoveNotificationPaths(aDriveNumber); iHarvester->RemoveIgnorePaths(aDriveNumber); CPIXLOGSTRING("END CFilePlugin::RemoveNotificationPaths"); + OstTraceFunctionExit0( CFILEPLUGIN_REMOVENOTIFICATIONPATHS_EXIT ); } -TInt CFilePlugin::FormBaseAppClass(TDriveNumber aMedia, TDes& aBaseAppClass) +TInt CFilePlugin::FormBaseAppClass(TDriveNumber aMedia, const TDesC& aGenericAppClass, TDes& aBaseAppClass) { + OstTraceFunctionEntry0( CFILEPLUGIN_FORMBASEAPPCLASS_ENTRY ); CPIXLOGSTRING("ENTER CFilePlugin::FormBaseAppClass"); TChar chr; const TInt ret = RFs::DriveToChar(aMedia, chr); @@ -400,19 +579,22 @@ aBaseAppClass.Copy(KFilePluginAtSign); aBaseAppClass.Append(chr); aBaseAppClass.LowerCase(); - aBaseAppClass.Append(KFileBaseAppClassGeneric); + aBaseAppClass.Append(KFilePluginColon); + aBaseAppClass.Append(aGenericAppClass); } CPIXLOGSTRING("END CFilePlugin::FormBaseAppClass"); + OstTraceFunctionExit0( CFILEPLUGIN_FORMBASEAPPCLASS_EXIT ); return ret; } -HBufC* CFilePlugin::DatabasePathLC(TDriveNumber aMedia) +HBufC* CFilePlugin::DatabasePathLC(TDriveNumber aMedia,const TDesC& aPath) { + OstTraceFunctionEntry0( CFILEPLUGIN_DATABASEPATHLC_ENTRY ); CPIXLOGSTRING("ENTER CFilePlugin::DatabasePathLC"); // Allocate extra space for root path e.g. "C:\\Private\\2001f6f7\\" const TInt KRootPathMaxLength = 30; - HBufC* indexDbPath = HBufC::NewLC(KRootPathMaxLength + KPathIndexDbPath().Length() + KPathTrailer().Length()); + HBufC* indexDbPath = HBufC::NewLC(KRootPathMaxLength + KPathIndexDbPath().Length() + aPath.Length()); TPtr indexDbPathPtr = indexDbPath->Des(); // Data caging implementation @@ -428,12 +610,53 @@ indexDbPathPtr.Append(KCPixSearchServerPrivateDirectory); indexDbPathPtr.Append(KPathIndexDbPath); - indexDbPathPtr.Append(KPathTrailer); + indexDbPathPtr.Append(aPath); CPIXLOGSTRING("END CFilePlugin::DatabasePathLC"); + OstTraceFunctionExit0( CFILEPLUGIN_DATABASEPATHLC_EXIT ); return indexDbPath; } +CSearchDocument* CFilePlugin::CreateCpixDocumentL(const TDesC& aFilePath, TBool aIsDir) + { + + CSearchDocument* index_item = CSearchDocument::NewLC(aFilePath, KFileBaseAppClassFolder); + + TParse file; + file.Set(aFilePath, NULL, NULL); + + TFileName fileFoldername; + TInt pos = aFilePath.LocateReverse('\\'); + if (pos > 0) + { + fileFoldername.Copy(aFilePath.Mid(pos+1)); + index_item->AddFieldL(KNameField, fileFoldername); + } + + //check for the extension, for folders names store the extension field as NULL + //adding Mimetype and Extension field + if(!aIsDir) + { + if( file.ExtPresent()) + { + TPtrC extension = file.Ext(); + index_item->AddFieldL(KExtensionField, extension); + } + index_item->AddFieldL(KMimeTypeField, KMimeTypeFile, CDocumentField::EStoreYes | CDocumentField::EIndexUnTokenized); + } + else + { + index_item->AddFieldL(KExtensionField, KNullDesC); + index_item->AddFieldL(KMimeTypeField, KMimeTypeFolder, CDocumentField::EStoreYes | CDocumentField::EIndexUnTokenized); + } + + //Add excerpt field + index_item->AddExcerptL(aFilePath); + + CleanupStack::Pop(index_item); + return index_item; + } + #ifdef __PERFORMANCE_DATA void CFilePlugin::UpdatePerformaceDataL(TDriveNumber aDriveNumber) { @@ -446,7 +669,7 @@ RFs fileSession; RFile perfFile; User::LeaveIfError( fileSession.Connect () ); - RFs::DriveToChar((TInt)aDriveNumber, aChar); + RFs::DriveToChar((TInt)aDriveNumber, aChar); /* Open file if it exists, otherwise create it and write content in it */