Revision: 201015
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 03 May 2010 12:32:15 +0300
changeset 2 208a4ba3894c
parent 0 ccd0fd43f247
child 3 6832643895f7
Revision: 201015 Kit: 201018
harvesterplugins/applications/data/2001a9d7.rss
harvesterplugins/applications/group/applicationsplugin.mmp
harvesterplugins/applications/inc/applicationsplugin.h
harvesterplugins/applications/src/applicationsplugin.cpp
harvesterplugins/applications/traces/OstTraceDefinitions.h
harvesterplugins/applications/traces/applicationspluginTraces.h
harvesterplugins/applications/traces/fixed_id.definitions
harvesterplugins/bookmarks/data/2001a9d3.rss
harvesterplugins/bookmarks/group/bookmarksplugin.mmp
harvesterplugins/bookmarks/inc/bookmarksplugin.h
harvesterplugins/bookmarks/src/bookmarksplugin.cpp
harvesterplugins/bookmarks/traces/OstTraceDefinitions.h
harvesterplugins/bookmarks/traces/bookmarkspluginTraces.h
harvesterplugins/bookmarks/traces/fixed_id.definitions
harvesterplugins/calendar/data/2001f704.rss
harvesterplugins/calendar/group/calendarplugin.mmp
harvesterplugins/calendar/src/ccalendarplugin.cpp
harvesterplugins/calendar/traces/OstTraceDefinitions.h
harvesterplugins/calendar/traces/ccalendarpluginTraces.h
harvesterplugins/calendar/traces/fixed_id.definitions
harvesterplugins/contacts/data/2001f702.rss
harvesterplugins/contacts/group/contactsplugin.mmp
harvesterplugins/contacts/src/ccontactsplugin.cpp
harvesterplugins/contacts/traces/OstTraceDefinitions.h
harvesterplugins/contacts/traces/ccontactspluginTraces.h
harvesterplugins/contacts/traces/fixed_id.definitions
harvesterplugins/file/data/2001f703.rss
harvesterplugins/file/fastfindfileserverplugin/group/fastfindfileserverplugin.mmp
harvesterplugins/file/fastfindfileserverplugin/src/fastfindfileserverplugin.cpp
harvesterplugins/file/fastfindfileserverplugin/traces/OstTraceDefinitions.h
harvesterplugins/file/fastfindfileserverplugin/traces/fastfindfileserverpluginTraces.h
harvesterplugins/file/fastfindfileserverplugin/traces/fixed_id.definitions
harvesterplugins/file/group/fileplugin.mmp
harvesterplugins/file/inc/cfileplugin.h
harvesterplugins/file/inc/cfolderrenamedharvester.h
harvesterplugins/file/inc/monitorplugin/fastfindfileserverpluginclient.h
harvesterplugins/file/src/cfileharvester.cpp
harvesterplugins/file/src/cfilemonitor.cpp
harvesterplugins/file/src/cfileplugin.cpp
harvesterplugins/file/src/cfolderrenamedharvester.cpp
harvesterplugins/file/src/cmmcmonitor.cpp
harvesterplugins/file/traces/OstTraceDefinitions.h
harvesterplugins/file/traces/cfileharvesterTraces.h
harvesterplugins/file/traces/cfilemonitorTraces.h
harvesterplugins/file/traces/cfilepluginTraces.h
harvesterplugins/file/traces/cfolderrenamedharvesterTraces.h
harvesterplugins/file/traces/cmmcmonitorTraces.h
harvesterplugins/file/traces/fixed_id.definitions
harvesterplugins/media/audio/data/20029ab9.rss
harvesterplugins/media/audio/group/audioplugin.mmp
harvesterplugins/media/audio/src/cpixmediaaudiodoc.cpp
harvesterplugins/media/audio/src/mediaplugin.cpp
harvesterplugins/media/audio/traces/OstTraceDefinitions.h
harvesterplugins/media/audio/traces/cpixmediaaudiodocTraces.h
harvesterplugins/media/audio/traces/fixed_id.definitions
harvesterplugins/media/audio/traces/mediapluginTraces.h
harvesterplugins/media/image/data/20029abb.rss
harvesterplugins/media/image/group/imageplugin.mmp
harvesterplugins/media/image/src/cpixmediaimagedoc.cpp
harvesterplugins/media/image/src/imageplugin.cpp
harvesterplugins/media/image/traces/OstTraceDefinitions.h
harvesterplugins/media/image/traces/cpixmediaimagedocTraces.h
harvesterplugins/media/image/traces/fixed_id.definitions
harvesterplugins/media/image/traces/imagepluginTraces.h
harvesterplugins/media/mediautils/src/cpixdocfetcher.cpp
harvesterplugins/media/mediautils/src/mmcmonitor.cpp
harvesterplugins/media/video/data/20029aba.rss
harvesterplugins/media/video/group/videoplugin.mmp
harvesterplugins/media/video/src/cpixmediavideodoc.cpp
harvesterplugins/media/video/src/videoplugin.cpp
harvesterplugins/media/video/traces/OstTraceDefinitions.h
harvesterplugins/media/video/traces/cpixmediavideodocTraces.h
harvesterplugins/media/video/traces/fixed_id.definitions
harvesterplugins/media/video/traces/videopluginTraces.h
harvesterplugins/messaging/data/2001f701.rss
harvesterplugins/messaging/email/data/20029b09.rss
harvesterplugins/messaging/email/group/bld.inf
harvesterplugins/messaging/email/group/emailplugin.mmp
harvesterplugins/messaging/email/inc/cemailplugin.h
harvesterplugins/messaging/email/inc/memailitemobserver.h
harvesterplugins/messaging/email/qtemailfetcher/bwins/qtemailfetcheru.def
harvesterplugins/messaging/email/qtemailfetcher/eabi/qtemailfetcheru.def
harvesterplugins/messaging/email/qtemailfetcher/qtemailfetcher.cpp
harvesterplugins/messaging/email/qtemailfetcher/qtemailfetcher.h
harvesterplugins/messaging/email/qtemailfetcher/qtemailfetcher.pro
harvesterplugins/messaging/email/src/cemailplugin.cpp
harvesterplugins/messaging/email/src/tproxy.cpp
harvesterplugins/messaging/group/bld.inf
harvesterplugins/messaging/group/messageplugin.mmp
harvesterplugins/messaging/inc/cmessagedatahandler.h
harvesterplugins/messaging/inc/cmessageharvester.h
harvesterplugins/messaging/inc/cmessagemonitor.h
harvesterplugins/messaging/inc/cmessageplugin.h
harvesterplugins/messaging/smsmms/data/2001f701.rss
harvesterplugins/messaging/smsmms/group/bld.inf
harvesterplugins/messaging/smsmms/group/messageplugin.mmp
harvesterplugins/messaging/smsmms/inc/cmessagedatahandler.h
harvesterplugins/messaging/smsmms/inc/cmessageharvester.h
harvesterplugins/messaging/smsmms/inc/cmessagemonitor.h
harvesterplugins/messaging/smsmms/inc/cmessageplugin.h
harvesterplugins/messaging/smsmms/src/cmessagedatahandler.cpp
harvesterplugins/messaging/smsmms/src/cmessageharvester.cpp
harvesterplugins/messaging/smsmms/src/cmessagemonitor.cpp
harvesterplugins/messaging/smsmms/src/cmessageplugin.cpp
harvesterplugins/messaging/smsmms/src/tproxy.cpp
harvesterplugins/messaging/smsmms/traces/OstTraceDefinitions.h
harvesterplugins/messaging/smsmms/traces/cmessagedatahandlerTraces.h
harvesterplugins/messaging/smsmms/traces/cmessagemonitorTraces.h
harvesterplugins/messaging/smsmms/traces/cmessagepluginTraces.h
harvesterplugins/messaging/smsmms/traces/fixed_id.definitions
harvesterplugins/messaging/src/cmessagedatahandler.cpp
harvesterplugins/messaging/src/cmessageharvester.cpp
harvesterplugins/messaging/src/cmessagemonitor.cpp
harvesterplugins/messaging/src/cmessageplugin.cpp
harvesterplugins/messaging/src/tproxy.cpp
harvesterplugins/notes/data/2001a9d8.rss
harvesterplugins/notes/group/notesplugin.mmp
harvesterplugins/notes/src/notesplugin.cpp
harvesterplugins/notes/traces/OstTraceDefinitions.h
harvesterplugins/notes/traces/fixed_id.definitions
harvesterplugins/notes/traces/notespluginTraces.h
harvesterplugins/tsrc/harvesterplugintester/conf/harvesterplugintester.cfg
harvesterplugins/tsrc/harvesterplugintester/conf/testfile.txt
harvesterplugins/tsrc/harvesterplugintester/group/bld.inf
harvesterplugins/tsrc/harvesterplugintester/group/harvesterplugintester.mmp
harvesterplugins/tsrc/harvesterplugintester/inc/harvesterplugintester.h
harvesterplugins/tsrc/harvesterplugintester/src/capsmod_exe/group/capsmod_exe.mmp
harvesterplugins/tsrc/harvesterplugintester/src/ccalanderobserver.cpp
harvesterplugins/tsrc/harvesterplugintester/src/harvesterplugintesterblocks.cpp
searchui/Searchapplication/Searchapplication.pro
searchui/Searchapplication/inc/Search.h
searchui/Searchapplication/src/Search.cpp
searchui/Searchapplication/src/main.cpp
searchui/bwins/searchindevicehandleru.def
searchui/eabi/searchindevicehandleru.def
searchui/indevicehandler/inc/indevicehandler.h
searchui/indevicehandler/src/indevicehandler.cpp
searchui/indevicehandler/tsrc/t_indevicehandler/inc/t_indevicehandler.h
searchui/indevicehandler/tsrc/t_indevicehandler/src/t_indevicehandler.cpp
searchui/rom/search.iby
searchui/runtimeproviders/bwins/searchruntimeprovideru.def
searchui/runtimeproviders/eabi/searchruntimeprovideru.def
searchui/runtimeproviders/searchruntimeprovider/inc/searchruntime.h
searchui/runtimeproviders/searchruntimeprovider/inc/searchruntimeprovider.h
searchui/runtimeproviders/searchruntimeprovider/searchruntimeprovider.pro
searchui/runtimeproviders/searchruntimeprovider/searchruntimeprovider_installs_symbian.pri
searchui/runtimeproviders/searchruntimeprovider/src/searchruntime.cpp
searchui/runtimeproviders/searchruntimeprovider/src/searchruntimeprovider.cpp
searchui/searchui.pro
searchui/stateproviders/bwins/searchstateprovideru.def
searchui/stateproviders/eabi/searchstateprovideru.def
searchui/stateproviders/searchstateprovider/inc/searchinitstate.h
searchui/stateproviders/searchstateprovider/inc/searchprogressivestate.h
searchui/stateproviders/searchstateprovider/inc/searchsettingsstate.h
searchui/stateproviders/searchstateprovider/inc/searchstateprovider.h
searchui/stateproviders/searchstateprovider/inc/settingswidget.h
searchui/stateproviders/searchstateprovider/resources/resources.qrc
searchui/stateproviders/searchstateprovider/searchstateprovider.pro
searchui/stateproviders/searchstateprovider/src/searchinitstate.cpp
searchui/stateproviders/searchstateprovider/src/searchprogressivestate.cpp
searchui/stateproviders/searchstateprovider/src/searchsettingsstate.cpp
searchui/stateproviders/searchstateprovider/src/searchstateprovider.cpp
searchui/stateproviders/searchstateprovider/src/settingswidget.cpp
searchui/stateproviders/searchstateprovider/tsrc/t_searchstateprovider/inc/t_searchstateprovider.h
searchui/stateproviders/searchstateprovider/tsrc/t_searchstateprovider/src/t_searchprogressivestate.cpp
searchui/stateproviders/searchstateprovider/tsrc/t_searchstateprovider/src/t_searchstateprovider.cpp
searchui/stateproviders/searchstateprovider/tsrc/t_searchstateprovider/src/t_settingswidget.cpp
searchui/stateproviders/searchstateprovider/tsrc/t_searchstateprovider/t_searchstateprovider.pro
--- a/harvesterplugins/applications/data/2001a9d7.rss	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/applications/data/2001a9d7.rss	Mon May 03 12:32:15 2010 +0300
@@ -37,7 +37,7 @@
                                         {
                                         implementation_uid = 0x2001A9D7;
                                         version_no = 1;
-                                        display_name = "CPix Applications plugin";
+                                        display_name = "Applications";
                                         default_data = "CPiX Applications Plugin";
                                         opaque_data = "";
                                         }
--- a/harvesterplugins/applications/group/applicationsplugin.mmp	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/applications/group/applicationsplugin.mmp	Mon May 03 12:32:15 2010 +0300
@@ -28,7 +28,7 @@
 SOURCE        applicationsplugin.cpp
 SOURCE        tproxy.cpp
 
-USERINCLUDE   ../inc
+USERINCLUDE   ../inc ../traces
 
 APP_LAYER_SYSTEMINCLUDE
 SYSTEMINCLUDE /epoc32/include/ecom
--- a/harvesterplugins/applications/inc/applicationsplugin.h	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/applications/inc/applicationsplugin.h	Mon May 03 12:32:15 2010 +0300
@@ -23,7 +23,7 @@
 #include <common.h>
 #include <apgcli.h> //RApaLsSession
 #include <apgnotif.h> //Notification
-#include <widgetregistryclient.h>
+#include <WidgetRegistryClient.h>
 #include "delayedcallback.h"
 
 class CCPixIndexer;
--- a/harvesterplugins/applications/src/applicationsplugin.cpp	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/applications/src/applicationsplugin.cpp	Mon May 03 12:32:15 2010 +0300
@@ -23,8 +23,14 @@
 #include <csearchdocument.h>
 #include <e32base.h>
 //#include <menu2internalcrkeys.h> //for KCRUidMenu
-#include <widgetpropertyvalue.h> // EBundleDisplayName 
+#include <WidgetPropertyValue.h> // EBundleDisplayName 
 #include <centralrepository.h>
+#include <opensystemtrace.h> 
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "applicationspluginTraces.h"
+#endif
+
 
 //Hidden applications
 //#define KHiddenAppRepositoryUid KCRUidMenu
@@ -47,9 +53,11 @@
 // -----------------------------------------------------------------------------
 CApplicationsPlugin* CApplicationsPlugin::NewL()
 	{
+    OstTraceFunctionEntry0( CAPPLICATIONSPLUGIN_NEWL_ENTRY );
     CPIXLOGSTRING("CApplicationsPlugin::NewL()");
 	CApplicationsPlugin* instance = CApplicationsPlugin::NewLC();
     CleanupStack::Pop(instance);
+    OstTraceFunctionExit0( CAPPLICATIONSPLUGIN_NEWL_EXIT );
     return instance;
 	}
 
@@ -124,12 +132,14 @@
     iWidgetRegistry.GetWidgetPath( aUid, temp );
     aDocument->AddFieldL(KApplicationFieldAbsolutePath, temp,  CDocumentField::EStoreYes | CDocumentField::EIndexTokenized );
     CPIXLOGSTRING2("AddApplicationInfo(): PATH = %S ", &temp);
+    OstTraceExt1( TRACE_NORMAL, CAPPLICATIONSPLUGIN_ADDWIDGETINFOL, "CApplicationsPlugin::AddWidgetInfoL;PATH=%S", &temp );
 
     //GetWidgetPropertyValueL returns CWidgetPropertyValue* which in turn has an operator to convert to TDesC
     aDocument->AddFieldL(KApplicationFieldCaption, *(iWidgetRegistry.GetWidgetPropertyValueL( aUid, EBundleDisplayName )),  CDocumentField::EStoreYes | CDocumentField::EIndexTokenized );
 
     iWidgetRegistry.GetWidgetBundleName( aUid, temp );
     aDocument->AddExcerptL( temp );
+    OstTraceExt1( TRACE_NORMAL, DUP1_CAPPLICATIONSPLUGIN_ADDWIDGETINFOL, "CApplicationsPlugin::AddWidgetInfoL;DisplayName=%S", &temp );
     CPIXLOGSTRING2("AddApplicationInfo(): DisplayName = %S ", &temp );
     }
 
@@ -143,6 +153,8 @@
     aDocument->AddFieldL(KApplicationFieldCaption, aAppInfo.iShortCaption, CDocumentField::EStoreYes | CDocumentField::EIndexTokenized );
     aDocument->AddFieldL(KApplicationFieldAbsolutePath, aAppInfo.iFullName, CDocumentField::EStoreYes | CDocumentField::EIndexTokenized );
     aDocument->AddExcerptL( aAppInfo.iCaption );
+    OstTraceExt2( TRACE_NORMAL, _ADDAPPLICATIONINFOL, "::AddApplicationInfoL;UID=%S;PATH=%S", &docidString, &aAppInfo.iFullName );
+    OstTraceExt2( TRACE_NORMAL, DUP1__ADDAPPLICATIONINFOL, "::AddApplicationInfoL;Excerpt=%S;Caption=%S", &aAppInfo.iCaption, &aAppInfo.iShortCaption );
     
     CPIXLOGSTRING3("AddApplicationInfo(): UID = %S, PATH = %S ", &docidString, &aAppInfo.iFullName );
     CPIXLOGSTRING3("AddApplicationInfo():  Excerpt = %S, Caption = %S ", &aAppInfo.iCaption, &aAppInfo.iShortCaption );
@@ -154,9 +166,12 @@
     //Application should not have 'hidden' capability.
     TBool ret( EFalse );
     TApaAppCapabilityBuf cap;
+    OstTrace1( TRACE_NORMAL, CAPPLICATIONSPLUGIN_ISAPPHIDDENL, "CApplicationsPlugin::IsAppHiddenL;UID=%d", aUid );
     CPIXLOGSTRING2("CApplicationsPlugin::IsAppHidden(): UID = %d", aUid );
     if ( iApplicationServerSession.GetAppCapability(cap, aUid) == KErrNone )
         {
+        OstTraceState0( STATE_DUP1_CAPPLICATIONSPLUGIN_ISAPPHIDDENL, "GetCapability returned KErrNone", "" );
+    
         CPIXLOGSTRING("CApplicationsPlugin::IsAppHidden(): GetCapability returned KErrNone");
         ret = cap().iAppIsHidden;
         }
@@ -177,6 +192,7 @@
 //            }
 //        CleanupStack::PopAndDestroy( uidString );
 //        }
+    OstTrace1( TRACE_NORMAL, DUP1_CAPPLICATIONSPLUGIN_ISAPPHIDDENL, "CApplicationsPlugin::IsAppHiddenL;Return Value=%d", &ret );
 
     CPIXLOGSTRING2("CApplicationsPlugin::IsAppHidden(): %d", &ret);
     return ret;
@@ -204,10 +220,12 @@
     TRAPD( error, iIndexer->AddL( *document ) );
     if( KErrNone == error )
         {
+        OstTrace0( TRACE_NORMAL, CAPPLICATIONSPLUGIN_CREATEAPPLICATIONSINDEXITEML, "CApplicationsPlugin::CreateApplicationsIndexItemL : No Error" );
         CPIXLOGSTRING("CApplicationsPlugin::CreateApplicationsIndexItemL(): No Error" );
         }
     else 
         {
+        OstTrace1( TRACE_NORMAL, DUP1_CAPPLICATIONSPLUGIN_CREATEAPPLICATIONSINDEXITEML, "CApplicationsPlugin::CreateApplicationsIndexItemL;Error=%d", error );
         CPIXLOGSTRING2("CApplicationsPlugin::CreateApplicationsIndexItemL(): Error = %d", error );
         }
     CleanupStack::PopAndDestroy( document );
@@ -249,6 +267,8 @@
 // -----------------------------------------------------------------------------
 void CApplicationsPlugin::HandleAppListEvent( TInt aEvent )
     {
+    OstTraceFunctionEntry0( CAPPLICATIONSPLUGIN_HANDLEAPPLISTEVENT_ENTRY );
+    OstTrace1( TRACE_NORMAL, CAPPLICATIONSPLUGIN_HANDLEAPPLISTEVENT, "CApplicationsPlugin::HandleAppListEvent;Event=%d", aEvent );
     CPIXLOGSTRING2("CApplicationsPlugin::HandleAppListEvent: Start with Event = %d", aEvent );
     if( aEvent == EAppListChanged )
         {
@@ -259,6 +279,7 @@
         TRAP_IGNORE( StartHarvestingL( KNullDesC ) ); //simply reharvest
         }
     CPIXLOGSTRING("CApplicationsPlugin::HandleAppListEvent: Exit" );
+    OstTraceFunctionExit0( CAPPLICATIONSPLUGIN_HANDLEAPPLISTEVENT_EXIT );
     }
 
 #ifdef __PERFORMANCE_DATA
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/applications/traces/OstTraceDefinitions.h	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 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: 
+*
+*/
+#ifndef __OSTTRACEDEFINITIONS_H__
+#define __OSTTRACEDEFINITIONS_H__
+// OST_TRACE_COMPILER_IN_USE flag has been added by Trace Compiler
+// REMOVE BEFORE CHECK-IN TO VERSION CONTROL
+//#define OST_TRACE_COMPILER_IN_USE
+#include <opensystemtrace.h>
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/applications/traces/applicationspluginTraces.h	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,232 @@
+// Created by TraceCompiler 2.1.2
+// DO NOT EDIT, CHANGES WILL BE LOST
+
+#ifndef __APPLICATIONSPLUGINTRACES_H__
+#define __APPLICATIONSPLUGINTRACES_H__
+
+#define KOstTraceComponentID 0x2001a9d7
+
+#define CAPPLICATIONSPLUGIN_NEWL_ENTRY 0x8a0001
+#define CAPPLICATIONSPLUGIN_NEWL_EXIT 0x8a0002
+#define CAPPLICATIONSPLUGIN_HANDLEAPPLISTEVENT_ENTRY 0x8a0003
+#define CAPPLICATIONSPLUGIN_HANDLEAPPLISTEVENT_EXIT 0x8a0004
+#define CAPPLICATIONSPLUGIN_ADDWIDGETINFOL 0x860001
+#define DUP1_CAPPLICATIONSPLUGIN_ADDWIDGETINFOL 0x860002
+#define _ADDAPPLICATIONINFOL 0x860003
+#define DUP1__ADDAPPLICATIONINFOL 0x860004
+#define CAPPLICATIONSPLUGIN_ISAPPHIDDENL 0x860005
+#define DUP1_CAPPLICATIONSPLUGIN_ISAPPHIDDENL 0x860006
+#define CAPPLICATIONSPLUGIN_CREATEAPPLICATIONSINDEXITEML 0x860007
+#define DUP1_CAPPLICATIONSPLUGIN_CREATEAPPLICATIONSINDEXITEML 0x860008
+#define CAPPLICATIONSPLUGIN_HANDLEAPPLISTEVENT 0x860009
+#define STATE_DUP1_CAPPLICATIONSPLUGIN_ISAPPHIDDENL 0x870001
+
+
+#ifndef __KERNEL_MODE__
+inline TBool OstTraceGen1( TUint32 aTraceID, const TDesC16& aParam1 )
+    {
+    TBool retval;
+    TInt size = aParam1.Size();
+    // BTrace assumes that parameter size is atleast 4 bytes
+    if (size % 4 == 0)
+        {
+        TUint8* ptr = ( TUint8* )aParam1.Ptr();
+        // Data is written directly and length is determined from trace message length
+        retval = OstSendNBytes( EXTRACT_GROUP_ID(aTraceID), EOstTrace, KOstTraceComponentID, aTraceID, ptr, size );
+        }
+    else
+        {
+        TUint8 data[ KOstMaxDataLength ];
+        TUint8* ptr = data;
+        if (size > KOstMaxDataLength)
+            {
+            size = KOstMaxDataLength;
+            }
+        TInt sizeAligned = ( size + 3 ) & ~3;
+        memcpy( ptr, aParam1.Ptr(), size );
+        ptr += size;
+        // Fillers are written to get 32-bit alignment
+        while ( size++ < sizeAligned )
+            {
+            *ptr++ = 0;
+            }
+        ptr -= sizeAligned;
+        size = sizeAligned;
+        // Data is written directly and length is determined from trace message length
+        retval = OstSendNBytes( EXTRACT_GROUP_ID(aTraceID), EOstTrace, KOstTraceComponentID, aTraceID, ptr, size );
+        }
+    return retval;
+    }
+#endif
+
+
+#ifndef __KERNEL_MODE__
+inline TBool OstTraceGen2( TUint32 aTraceID, const TDesC16& aParam1, const TDesC16& aParam2 )
+    {
+    TBool retval = BTraceFiltered8( EXTRACT_GROUP_ID(aTraceID), EOstTraceActivationQuery, KOstTraceComponentID, aTraceID );
+    if ( retval )
+        {
+        TInt length = 0;
+        // Check that parameter lenght is not too long
+        TInt length1 = aParam1.Size();
+        if ((length + length1 + sizeof ( TUint32 )) > KOstMaxDataLength)
+            {
+            length1 = KOstMaxDataLength - (length + sizeof ( TUint32 ));
+            }
+        TInt lengthAligned1 = ( length1 + 3 ) & ~3;
+        if (lengthAligned1 > 0)
+            {
+            length = length + sizeof ( TUint32 ) + lengthAligned1;
+            }
+        // Check that parameter lenght is not too long
+        TInt length2 = aParam2.Size();
+        if ((length + length2 + sizeof ( TUint32 )) > KOstMaxDataLength)
+            {
+            length2 = KOstMaxDataLength - (length + sizeof ( TUint32 ));
+            }
+        TInt lengthAligned2 = ( length2 + 3 ) & ~3;
+        if (lengthAligned2 > 0)
+            {
+            length = length + sizeof ( TUint32 ) + lengthAligned2;
+            }
+        TUint8 data[ KOstMaxDataLength ];
+        TUint8* ptr = data;
+        // Set length to zero and calculate it againg
+        // when adding parameters
+        length = 0;
+        if (length1 > 0)
+            {
+            // Number of elements is written before data
+            // In case of Unicode string, number of elements is half of length
+            *( ( TUint32* )ptr ) = length1 / (aParam1.Size() / aParam1.Length());
+            ptr += sizeof ( TUint32 );
+            memcpy( ptr, aParam1.Ptr(), length1 );
+            ptr += length1;
+            // Fillers are written to get 32-bit alignment
+            while ( length1++ < lengthAligned1 )
+                {
+                *ptr++ = 0;
+                }
+            length += sizeof ( TUint32 ) + lengthAligned1;
+            }
+        else if (length + sizeof ( TUint32 ) <= KOstMaxDataLength)
+            {
+            *( ( TUint32* )ptr ) = 0;
+            ptr += sizeof ( TUint32 );
+            length += sizeof ( TUint32 );
+            }
+        if (length2 > 0)
+            {
+            // Number of elements is written before data
+            // In case of Unicode string, number of elements is half of length
+            *( ( TUint32* )ptr ) = length2 / (aParam2.Size() / aParam2.Length());
+            ptr += sizeof ( TUint32 );
+            memcpy( ptr, aParam2.Ptr(), length2 );
+            ptr += length2;
+            // Fillers are written to get 32-bit alignment
+            while ( length2++ < lengthAligned2 )
+                {
+                *ptr++ = 0;
+                }
+            length += sizeof ( TUint32 ) + lengthAligned2;
+            }
+        else if (length + sizeof ( TUint32 ) <= KOstMaxDataLength)
+            {
+            *( ( TUint32* )ptr ) = 0;
+            ptr += sizeof ( TUint32 );
+            length += sizeof ( TUint32 );
+            }
+        ptr -= length;
+        retval = OstSendNBytes( EXTRACT_GROUP_ID(aTraceID), EOstTrace, KOstTraceComponentID, aTraceID, ptr, length );
+        }
+    return retval;
+    }
+#endif
+
+
+inline TBool OstTraceGen2( TUint32 aTraceID, const TDesC8& aParam1, const TDesC8& aParam2 )
+    {
+    TBool retval = BTraceFiltered8( EXTRACT_GROUP_ID(aTraceID), EOstTraceActivationQuery, KOstTraceComponentID, aTraceID );
+    if ( retval )
+        {
+        TInt length = 0;
+        // Check that parameter lenght is not too long
+        TInt length1 = aParam1.Size();
+        if ((length + length1 + sizeof ( TUint32 )) > KOstMaxDataLength)
+            {
+            length1 = KOstMaxDataLength - (length + sizeof ( TUint32 ));
+            }
+        TInt lengthAligned1 = ( length1 + 3 ) & ~3;
+        if (lengthAligned1 > 0)
+            {
+            length = length + sizeof ( TUint32 ) + lengthAligned1;
+            }
+        // Check that parameter lenght is not too long
+        TInt length2 = aParam2.Size();
+        if ((length + length2 + sizeof ( TUint32 )) > KOstMaxDataLength)
+            {
+            length2 = KOstMaxDataLength - (length + sizeof ( TUint32 ));
+            }
+        TInt lengthAligned2 = ( length2 + 3 ) & ~3;
+        if (lengthAligned2 > 0)
+            {
+            length = length + sizeof ( TUint32 ) + lengthAligned2;
+            }
+        TUint8 data[ KOstMaxDataLength ];
+        TUint8* ptr = data;
+        // Set length to zero and calculate it againg
+        // when adding parameters
+        length = 0;
+        if (length1 > 0)
+            {
+            // Number of elements is written before data
+            // In case of Unicode string, number of elements is half of length
+            *( ( TUint32* )ptr ) = length1 / (aParam1.Size() / aParam1.Length());
+            ptr += sizeof ( TUint32 );
+            memcpy( ptr, aParam1.Ptr(), length1 );
+            ptr += length1;
+            // Fillers are written to get 32-bit alignment
+            while ( length1++ < lengthAligned1 )
+                {
+                *ptr++ = 0;
+                }
+            length += sizeof ( TUint32 ) + lengthAligned1;
+            }
+        else if (length + sizeof ( TUint32 ) <= KOstMaxDataLength)
+            {
+            *( ( TUint32* )ptr ) = 0;
+            ptr += sizeof ( TUint32 );
+            length += sizeof ( TUint32 );
+            }
+        if (length2 > 0)
+            {
+            // Number of elements is written before data
+            // In case of Unicode string, number of elements is half of length
+            *( ( TUint32* )ptr ) = length2 / (aParam2.Size() / aParam2.Length());
+            ptr += sizeof ( TUint32 );
+            memcpy( ptr, aParam2.Ptr(), length2 );
+            ptr += length2;
+            // Fillers are written to get 32-bit alignment
+            while ( length2++ < lengthAligned2 )
+                {
+                *ptr++ = 0;
+                }
+            length += sizeof ( TUint32 ) + lengthAligned2;
+            }
+        else if (length + sizeof ( TUint32 ) <= KOstMaxDataLength)
+            {
+            *( ( TUint32* )ptr ) = 0;
+            ptr += sizeof ( TUint32 );
+            length += sizeof ( TUint32 );
+            }
+        ptr -= length;
+        retval = OstSendNBytes( EXTRACT_GROUP_ID(aTraceID), EOstTrace, KOstTraceComponentID, aTraceID, ptr, length );
+        }
+    return retval;
+    }
+
+
+#endif
+
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/applications/traces/fixed_id.definitions	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,18 @@
+#Fixed group and trace id definitions. If this file is removed, the identifiers are rebuilt.
+[GROUP]TRACE_FLOW=0x8a
+[GROUP]TRACE_NORMAL=0x86
+[GROUP]TRACE_STATE=0x87
+[TRACE]TRACE_FLOW[0x8A]_CAPPLICATIONSPLUGIN_HANDLEAPPLISTEVENT_ENTRY=0x3
+[TRACE]TRACE_FLOW[0x8A]_CAPPLICATIONSPLUGIN_HANDLEAPPLISTEVENT_EXIT=0x4
+[TRACE]TRACE_FLOW[0x8A]_CAPPLICATIONSPLUGIN_NEWL_ENTRY=0x1
+[TRACE]TRACE_FLOW[0x8A]_CAPPLICATIONSPLUGIN_NEWL_EXIT=0x2
+[TRACE]TRACE_NORMAL[0x86]_CAPPLICATIONSPLUGIN_ADDWIDGETINFOL=0x1
+[TRACE]TRACE_NORMAL[0x86]_CAPPLICATIONSPLUGIN_CREATEAPPLICATIONSINDEXITEML=0x7
+[TRACE]TRACE_NORMAL[0x86]_CAPPLICATIONSPLUGIN_HANDLEAPPLISTEVENT=0x9
+[TRACE]TRACE_NORMAL[0x86]_CAPPLICATIONSPLUGIN_ISAPPHIDDENL=0x5
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CAPPLICATIONSPLUGIN_ADDWIDGETINFOL=0x2
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CAPPLICATIONSPLUGIN_CREATEAPPLICATIONSINDEXITEML=0x8
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CAPPLICATIONSPLUGIN_ISAPPHIDDENL=0x6
+[TRACE]TRACE_NORMAL[0x86]_DUP1__ADDAPPLICATIONINFOL=0x4
+[TRACE]TRACE_NORMAL[0x86]__ADDAPPLICATIONINFOL=0x3
+[TRACE]TRACE_STATE[0x87]_STATE_DUP1_CAPPLICATIONSPLUGIN_ISAPPHIDDENL=0x1
--- a/harvesterplugins/bookmarks/data/2001a9d3.rss	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/bookmarks/data/2001a9d3.rss	Mon May 03 12:32:15 2010 +0300
@@ -36,7 +36,7 @@
                                         {
                                         implementation_uid = 0x2001A9D3;
                                         version_no = 1;
-                                        display_name = "Bookmars harvester plugin";
+                                        display_name = "Bookmarks";
                                         default_data = "Bookmarks";
                                         opaque_data = "";
                                         }
--- a/harvesterplugins/bookmarks/group/bookmarksplugin.mmp	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/bookmarks/group/bookmarksplugin.mmp	Mon May 03 12:32:15 2010 +0300
@@ -27,7 +27,7 @@
 SOURCE        bookmarksplugin.cpp
 SOURCE        tproxy.cpp
 
-USERINCLUDE   ../inc
+USERINCLUDE   ../inc ../traces
 
 APP_LAYER_SYSTEMINCLUDE
 SYSTEMINCLUDE /epoc32/include/ecom
--- a/harvesterplugins/bookmarks/inc/bookmarksplugin.h	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/bookmarks/inc/bookmarksplugin.h	Mon May 03 12:32:15 2010 +0300
@@ -21,9 +21,9 @@
 #include <cindexingplugin.h>
 
 #include <e32base.h>
-#include <favouritessession.h>
-#include <favouritesdb.h>
-#include <favouritesdbobserver.h>
+#include <FavouritesSession.h>
+#include <FavouritesDb.h>
+#include <FavouritesDbObserver.h>
 
 #include "common.h"
 #include "delayedcallback.h"
--- a/harvesterplugins/bookmarks/src/bookmarksplugin.cpp	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/bookmarks/src/bookmarksplugin.cpp	Mon May 03 12:32:15 2010 +0300
@@ -17,8 +17,8 @@
 
 #include "bookmarksplugin.h"
 
-#include <favouritesitemlist.h>
-#include <activefavouritesdbnotifier.h>
+#include <FavouritesItemList.h>
+#include <ActiveFavouritesDbNotifier.h>
 #include <e32base.h> 
 #include <uri8.h> //For parsing URL names.
 
@@ -26,6 +26,11 @@
 #include "common.h"
 #include "csearchdocument.h"
 #include "ccpixindexer.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "bookmarkspluginTraces.h"
+#endif
+
 
 /** The milliseconds delay between harvesting chunks. */
 const TInt KHarvestingDelay = 1000;
@@ -99,10 +104,12 @@
 // -----------------------------------------------------------------------------
 void CBookmarksPlugin::StartHarvestingL( const TDesC& /*aMedia*/ )
     {
+    OstTrace0( TRACE_NORMAL, CBOOKMARKSPLUGIN_STARTHARVESTINGL, "StartHarvestingL: resetting database" );
     CPIXLOGSTRING("StartHarvestingL: resetting database");
     iIndexer->ResetL();//reset any indexes if exist already
     iCurrentIndex = 0; //Initialize to zero as it is started
     iFavouritesDb.Count( iCurrentCount );
+    OstTrace1( TRACE_NORMAL, DUP1_CBOOKMARKSPLUGIN_STARTHARVESTINGL, "StartHarvestingL::Current count=%d", iCurrentCount );
     CPIXLOGSTRING2("StartHarvestingL::Current count = %d.", iCurrentCount);
     //Get all the UID list from current database
     //GetUids() appends items to the list. So, reset it first.
@@ -128,6 +135,7 @@
             break;
         
         //Create index item
+        OstTraceExt2( TRACE_NORMAL, CBOOKMARKSPLUGIN_DELAYEDCALLBACKL, "CBookmarksPlugin::DelayedCallbackL;Harvesting id=%d;BookmarkUid=%d", iCurrentIndex, iArrUidsCurrentBookmarkList->At(iCurrentIndex) );
         CPIXLOGSTRING3("CBookmarksPlugin::DelayedCallbackL(): Harvesting id=%d, BookmarkUid = %d.", iCurrentIndex, iArrUidsCurrentBookmarkList->At(iCurrentIndex) );
         //Create new bookmark document and add
         CreateBookmarksIndexItemL(iArrUidsCurrentBookmarkList->At(iCurrentIndex),ECPixAddAction);
@@ -137,8 +145,10 @@
     if( iAsynchronizer && (iCurrentIndex < iCurrentCount) )
         {
         // Launch the next RunL
+        OstTrace1( TRACE_NORMAL, DUP1_CBOOKMARKSPLUGIN_DELAYEDCALLBACKL, "CBookmarksPlugin::DelayedCallbackL;scheduling item count=%d", iCurrentIndex );
         CPIXLOGSTRING2("CBookmarksPlugin::DelayedCallbackL(): scheduling item count: %d.", iCurrentIndex );
         iAsynchronizer->Start(0, this, KHarvestingDelay);
+        OstTrace1( TRACE_NORMAL, DUP2_CBOOKMARKSPLUGIN_DELAYEDCALLBACKL, "CBookmarksPlugin::DelayedCallbackL;DONE scheduling item count=%d", iCurrentIndex );
         CPIXLOGSTRING2("CBookmarksPlugin::DelayedCallbackL(): DONE scheduling item count: %d.", iCurrentIndex );
         }
     else
@@ -149,6 +159,7 @@
     UpdatePerformaceDataL();
 #endif
         iObserver->HarvestingCompleted(this, iIndexer->GetBaseAppClass(), KErrNone);
+        OstTrace0( TRACE_NORMAL, DUP3_CBOOKMARKSPLUGIN_DELAYEDCALLBACKL, "CBookmarksPlugin::DelayedCallbackL(): Harvesting complete" );
         CPIXLOGSTRING("CBookmarksPlugin::DelayedCallbackL(): Harvesting complete");
         }
 	}
@@ -175,6 +186,7 @@
  */
 void GetDomainNameL( const TDesC& aUrl, TPtrC& aDomain )
     {
+    OstTraceExt1( TRACE_NORMAL, CBOOKMARKSPLUGIN_GETDOMAINNAMEL, "CBookmarksPlugin::GetDomainNameL();URL=%S", aUrl );
     CPIXLOGSTRING2("CBookmarksPlugin::GetDomainNameL(): URL = %S", &aUrl );
     //Convert to 8-bit descriptors.
     HBufC8* url8 = HBufC8::NewLC( aUrl.Length() );
@@ -231,15 +243,18 @@
     aDomain.Set( *domain16 );
     CleanupStack::Pop( domain16 );
     CleanupStack::PopAndDestroy( url8 );
+    OstTraceExt1( TRACE_NORMAL, DUP1_CBOOKMARKSPLUGIN_GETDOMAINNAMEL, "CBookmarksPlugin::GetDomainNameL();domain=%S", aDomain );
     CPIXLOGSTRING2("CBookmarksPlugin::GetDomainNameL(): domain = %S", &aDomain );
     }
 
 // -----------------------------------------------------------------------------
 void CBookmarksPlugin::DoIndexingL(CFavouritesItem*& aItem, const TDesC& aDocidStr, TCPixActionType& aActionType)
     {
+    OstTraceFunctionEntry0( CBOOKMARKSPLUGIN_DOINDEXINGL_ENTRY );
     CPIXLOGSTRING("CBookmarksPlugin::DoIndexingL(): Entering");
     if(aItem->Type() == CFavouritesItem::EItem ) //Store only Items not folders
         {
+        OstTraceExt2( TRACE_NORMAL, CBOOKMARKSPLUGIN_DOINDEXINGL, "CBookmarksPlugin::DoIndexingL();url=%S;name=%S", (aItem->Url()), (aItem->Name()) );
         CPIXLOGSTRING3("CBookmarksPlugin::DoIndexingL(): url = %S ,name = %S", &(aItem->Url()), &(aItem->Name()));
         CSearchDocument* index_item = CSearchDocument::NewLC(aDocidStr, _L(BOOKMARKAPPCLASS));
         index_item->AddFieldL(KMimeTypeField, KMimeTypeBookmark, CDocumentField::EStoreYes | CDocumentField::EIndexUnTokenized);
@@ -252,6 +267,7 @@
             index_item->AddFieldL(KBookMarkUrl, aItem->Url(), CDocumentField::EStoreYes | CDocumentField::EIndexTokenized);
             GetDomainNameL( aItem->Url(), domain );
             index_item->AddFieldL(KBookMarkDomain, domain , CDocumentField::EStoreYes | CDocumentField::EIndexTokenized);
+            OstTraceExt1( TRACE_NORMAL, DUP1_CBOOKMARKSPLUGIN_DOINDEXINGL, "CBookmarksPlugin::DoIndexingL();domain=%S", domain );
             CPIXLOGSTRING2("CBookmarksPlugin::DoIndexingL(): domain = %S", &domain );
             }
         //Add Excerpt as it is must have field. What should be excerpt in bookmarks ?
@@ -267,17 +283,22 @@
         TRAPD(err, iIndexer->AddL(*index_item));
         if (err == KErrNone)
             {
+                OstTrace0( TRACE_NORMAL, DUP2_CBOOKMARKSPLUGIN_DOINDEXINGL, "CBookmarksPlugin::DoIndexingL(): Added." );
                 CPIXLOGSTRING("CBookmarksPlugin::DoIndexingL(): Added.");
                 }
             else
                 {
+                OstTrace1( TRACE_NORMAL, DUP3_CBOOKMARKSPLUGIN_DOINDEXINGL, "CBookmarksPlugin::DoIndexingL();Error %d in adding", err );
                 CPIXLOGSTRING2("CBookmarksPlugin::DoIndexingL(): Error %d in adding.", err);
                 }           
+        OstTrace0( TRACE_NORMAL, DUP4_CBOOKMARKSPLUGIN_DOINDEXINGL, "CBookmarksPlugin::DoIndexingL(): Logic complete" );
         CPIXLOGSTRING("CBookmarksPlugin::DoIndexingL(): Logic complete");
         CleanupStack::PopAndDestroy( index_item );
+        OstTrace0( TRACE_NORMAL, DUP5_CBOOKMARKSPLUGIN_DOINDEXINGL, "CBookmarksPlugin::DoIndexingL(): Pop complete complete" );
         CPIXLOGSTRING("CBookmarksPlugin::DoIndexingL(): Pop complete complete");
         }
     CPIXLOGSTRING("CBookmarksPlugin::DoIndexingL(): Returning");
+    OstTraceFunctionExit0( CBOOKMARKSPLUGIN_DOINDEXINGL_EXIT );
     }
 
 // -----------------------------------------------------------------------------
@@ -286,6 +307,7 @@
     //@sai: CTC: Will never be null in normal usecase. Needs to be present for UTs.
     if( !iIndexer )
         return;
+    OstTrace1( TRACE_NORMAL, CBOOKMARKSPLUGIN_CREATEBOOKMARKSINDEXITEML, "CBookmarksPlugin::CreateBookmarkIndexItemL();aBookMarkUid=%d", aBookMarkUid );
     CPIXLOGSTRING2("CBookmarksPlugin::CreateBookmarkIndexItemL(): aBookMarkUid = %d ", aBookMarkUid );
     // creating CSearchDocument object with unique ID for this application
     TBuf<20> docid_str;
@@ -293,6 +315,7 @@
     //Add or update actions.
     CFavouritesItem* item = CFavouritesItem::NewLC();
     TInt err = iFavouritesDb.Get(aBookMarkUid,*item);
+    OstTrace1( TRACE_NORMAL, DUP1_CBOOKMARKSPLUGIN_CREATEBOOKMARKSINDEXITEML, "CBookmarksPlugin::CreateBookmarkIndexItemL();DB Get error=%d", err );
     CPIXLOGSTRING2("CBookmarksPlugin::CreateBookmarkIndexItemL(): DB Get error = %d ", err );
     //@sai: CTC: did not ever get 'false' for this check. Since this is a private function,
     // we cannot UT this with an invalid bookmarkUid.
@@ -301,6 +324,7 @@
         CleanupStack::PopAndDestroy(item);
         return;
         }
+    OstTrace1( TRACE_NORMAL, DUP2_CBOOKMARKSPLUGIN_CREATEBOOKMARKSINDEXITEML, "CBookmarksPlugin::CreateBookmarkIndexItemL();item->Type()=%d", item->Type() );
     CPIXLOGSTRING2("CBookmarksPlugin::CreateBookmarkIndexItemL(): item->Type() = %d ", item->Type() );
     DoIndexingL(item, docid_str, aActionType); //add to / update index
     CleanupStack::PopAndDestroy(item);
@@ -317,9 +341,11 @@
         {
         if( iAsynchronizer->CallbackPending() )
             {
+            OstTrace0( TRACE_NORMAL, CBOOKMARKSPLUGIN_HANDLEFAVOURITESDBEVENTL, "HandleFavouritesDbEventL: Cancelling callback" );
             CPIXLOGSTRING("HandleFavouritesDbEventL: Cancelling callback");
             iAsynchronizer->CancelCallback(); //first cancel any ongoing harvesting.
             }
+        OstTrace0( TRACE_NORMAL, DUP1_CBOOKMARKSPLUGIN_HANDLEFAVOURITESDBEVENTL, "HandleFavouritesDbEventL: calling StartHarvestingL" );
         CPIXLOGSTRING("HandleFavouritesDbEventL: calling StartHarvestingL");
         StartHarvestingL( KNullDesC );
         }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/bookmarks/traces/OstTraceDefinitions.h	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 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: 
+*
+*/
+#ifndef __OSTTRACEDEFINITIONS_H__
+#define __OSTTRACEDEFINITIONS_H__
+// OST_TRACE_COMPILER_IN_USE flag has been added by Trace Compiler
+// REMOVE BEFORE CHECK-IN TO VERSION CONTROL
+//#define OST_TRACE_COMPILER_IN_USE
+#include <opensystemtrace.h>
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/bookmarks/traces/bookmarkspluginTraces.h	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,192 @@
+// Created by TraceCompiler 2.1.2
+// DO NOT EDIT, CHANGES WILL BE LOST
+
+#ifndef __BOOKMARKSPLUGINTRACES_H__
+#define __BOOKMARKSPLUGINTRACES_H__
+
+#define KOstTraceComponentID 0x2001a9d3
+
+#define CBOOKMARKSPLUGIN_STARTHARVESTINGL 0x860001
+#define DUP1_CBOOKMARKSPLUGIN_STARTHARVESTINGL 0x860002
+#define CBOOKMARKSPLUGIN_DELAYEDCALLBACKL 0x860003
+#define DUP1_CBOOKMARKSPLUGIN_DELAYEDCALLBACKL 0x860004
+#define DUP2_CBOOKMARKSPLUGIN_DELAYEDCALLBACKL 0x860005
+#define DUP3_CBOOKMARKSPLUGIN_DELAYEDCALLBACKL 0x860006
+#define CBOOKMARKSPLUGIN_GETDOMAINNAMEL 0x860007
+#define DUP1_CBOOKMARKSPLUGIN_GETDOMAINNAMEL 0x860008
+#define CBOOKMARKSPLUGIN_DOINDEXINGL 0x860009
+#define DUP1_CBOOKMARKSPLUGIN_DOINDEXINGL 0x86000a
+#define DUP2_CBOOKMARKSPLUGIN_DOINDEXINGL 0x86000b
+#define DUP3_CBOOKMARKSPLUGIN_DOINDEXINGL 0x86000c
+#define DUP4_CBOOKMARKSPLUGIN_DOINDEXINGL 0x86000d
+#define DUP5_CBOOKMARKSPLUGIN_DOINDEXINGL 0x86000e
+#define CBOOKMARKSPLUGIN_CREATEBOOKMARKSINDEXITEML 0x86000f
+#define DUP1_CBOOKMARKSPLUGIN_CREATEBOOKMARKSINDEXITEML 0x860010
+#define DUP2_CBOOKMARKSPLUGIN_CREATEBOOKMARKSINDEXITEML 0x860011
+#define CBOOKMARKSPLUGIN_HANDLEFAVOURITESDBEVENTL 0x860012
+#define DUP1_CBOOKMARKSPLUGIN_HANDLEFAVOURITESDBEVENTL 0x860013
+#define CBOOKMARKSPLUGIN_DOINDEXINGL_ENTRY 0x8a0001
+#define CBOOKMARKSPLUGIN_DOINDEXINGL_EXIT 0x8a0002
+
+
+inline TBool OstTraceGen2( TUint32 aTraceID, TInt aParam1, TInt aParam2 )
+    {
+    TBool retval = BTraceFiltered8( EXTRACT_GROUP_ID(aTraceID), EOstTraceActivationQuery, KOstTraceComponentID, aTraceID );
+    if ( retval )
+        {
+        TUint8 data[ 8 ];
+        TUint8* ptr = data;
+        *( ( TInt* )ptr ) = aParam1;
+        ptr += sizeof ( TInt );
+        *( ( TInt* )ptr ) = aParam2;
+        ptr += sizeof ( TInt );
+        ptr -= 8;
+        retval = OstSendNBytes( EXTRACT_GROUP_ID(aTraceID), EOstTrace, KOstTraceComponentID, aTraceID, ptr, 8 );
+        }
+    return retval;
+    }
+
+inline TBool OstTraceGen2( TUint32 aTraceID, TInt32 aParam1, TInt32 aParam2 )
+    {
+    TBool retval = BTraceFiltered8( EXTRACT_GROUP_ID(aTraceID), EOstTraceActivationQuery, KOstTraceComponentID, aTraceID );
+    if ( retval )
+        {
+        TUint8 data[ 8 ];
+        TUint8* ptr = data;
+        *( ( TInt* )ptr ) = aParam1;
+        ptr += sizeof ( TInt );
+        *( ( TInt* )ptr ) = aParam2;
+        ptr += sizeof ( TInt );
+        ptr -= 8;
+        retval = OstSendNBytes( EXTRACT_GROUP_ID(aTraceID), EOstTrace, KOstTraceComponentID, aTraceID, ptr, 8 );
+        }
+    return retval;
+    }
+
+
+#ifndef __KERNEL_MODE__
+inline TBool OstTraceGen1( TUint32 aTraceID, const TDesC16& aParam1 )
+    {
+    TBool retval;
+    TInt size = aParam1.Size();
+    // BTrace assumes that parameter size is atleast 4 bytes
+    if (size % 4 == 0)
+        {
+        TUint8* ptr = ( TUint8* )aParam1.Ptr();
+        // Data is written directly and length is determined from trace message length
+        retval = OstSendNBytes( EXTRACT_GROUP_ID(aTraceID), EOstTrace, KOstTraceComponentID, aTraceID, ptr, size );
+        }
+    else
+        {
+        TUint8 data[ KOstMaxDataLength ];
+        TUint8* ptr = data;
+        if (size > KOstMaxDataLength)
+            {
+            size = KOstMaxDataLength;
+            }
+        TInt sizeAligned = ( size + 3 ) & ~3;
+        memcpy( ptr, aParam1.Ptr(), size );
+        ptr += size;
+        // Fillers are written to get 32-bit alignment
+        while ( size++ < sizeAligned )
+            {
+            *ptr++ = 0;
+            }
+        ptr -= sizeAligned;
+        size = sizeAligned;
+        // Data is written directly and length is determined from trace message length
+        retval = OstSendNBytes( EXTRACT_GROUP_ID(aTraceID), EOstTrace, KOstTraceComponentID, aTraceID, ptr, size );
+        }
+    return retval;
+    }
+#endif
+
+
+#ifndef __KERNEL_MODE__
+inline TBool OstTraceGen2( TUint32 aTraceID, const TDesC16& aParam1, const TDesC16& aParam2 )
+    {
+    TBool retval = BTraceFiltered8( EXTRACT_GROUP_ID(aTraceID), EOstTraceActivationQuery, KOstTraceComponentID, aTraceID );
+    if ( retval )
+        {
+        TInt length = 0;
+        // Check that parameter lenght is not too long
+        TInt length1 = aParam1.Size();
+        if ((length + length1 + sizeof ( TUint32 )) > KOstMaxDataLength)
+            {
+            length1 = KOstMaxDataLength - (length + sizeof ( TUint32 ));
+            }
+        TInt lengthAligned1 = ( length1 + 3 ) & ~3;
+        if (lengthAligned1 > 0)
+            {
+            length = length + sizeof ( TUint32 ) + lengthAligned1;
+            }
+        // Check that parameter lenght is not too long
+        TInt length2 = aParam2.Size();
+        if ((length + length2 + sizeof ( TUint32 )) > KOstMaxDataLength)
+            {
+            length2 = KOstMaxDataLength - (length + sizeof ( TUint32 ));
+            }
+        TInt lengthAligned2 = ( length2 + 3 ) & ~3;
+        if (lengthAligned2 > 0)
+            {
+            length = length + sizeof ( TUint32 ) + lengthAligned2;
+            }
+        TUint8 data[ KOstMaxDataLength ];
+        TUint8* ptr = data;
+        // Set length to zero and calculate it againg
+        // when adding parameters
+        length = 0;
+        if (length1 > 0)
+            {
+            // Number of elements is written before data
+            // In case of Unicode string, number of elements is half of length
+            *( ( TUint32* )ptr ) = length1 / (aParam1.Size() / aParam1.Length());
+            ptr += sizeof ( TUint32 );
+            memcpy( ptr, aParam1.Ptr(), length1 );
+            ptr += length1;
+            // Fillers are written to get 32-bit alignment
+            while ( length1++ < lengthAligned1 )
+                {
+                *ptr++ = 0;
+                }
+            length += sizeof ( TUint32 ) + lengthAligned1;
+            }
+        else if (length + sizeof ( TUint32 ) <= KOstMaxDataLength)
+            {
+            *( ( TUint32* )ptr ) = 0;
+            ptr += sizeof ( TUint32 );
+            length += sizeof ( TUint32 );
+            }
+        if (length2 > 0)
+            {
+            // Number of elements is written before data
+            // In case of Unicode string, number of elements is half of length
+            *( ( TUint32* )ptr ) = length2 / (aParam2.Size() / aParam2.Length());
+            ptr += sizeof ( TUint32 );
+            memcpy( ptr, aParam2.Ptr(), length2 );
+            ptr += length2;
+            // Fillers are written to get 32-bit alignment
+            while ( length2++ < lengthAligned2 )
+                {
+                *ptr++ = 0;
+                }
+            length += sizeof ( TUint32 ) + lengthAligned2;
+            }
+        else if (length + sizeof ( TUint32 ) <= KOstMaxDataLength)
+            {
+            *( ( TUint32* )ptr ) = 0;
+            ptr += sizeof ( TUint32 );
+            length += sizeof ( TUint32 );
+            }
+        ptr -= length;
+        retval = OstSendNBytes( EXTRACT_GROUP_ID(aTraceID), EOstTrace, KOstTraceComponentID, aTraceID, ptr, length );
+        }
+    return retval;
+    }
+#endif
+
+
+#endif
+
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/bookmarks/traces/fixed_id.definitions	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,24 @@
+#Fixed group and trace id definitions. If this file is removed, the identifiers are rebuilt.
+[GROUP]TRACE_FLOW=0x8a
+[GROUP]TRACE_NORMAL=0x86
+[TRACE]TRACE_FLOW[0x8A]_CBOOKMARKSPLUGIN_DOINDEXINGL_ENTRY=0x1
+[TRACE]TRACE_FLOW[0x8A]_CBOOKMARKSPLUGIN_DOINDEXINGL_EXIT=0x2
+[TRACE]TRACE_NORMAL[0x86]_CBOOKMARKSPLUGIN_CREATEBOOKMARKSINDEXITEML=0xf
+[TRACE]TRACE_NORMAL[0x86]_CBOOKMARKSPLUGIN_DELAYEDCALLBACKL=0x3
+[TRACE]TRACE_NORMAL[0x86]_CBOOKMARKSPLUGIN_DOINDEXINGL=0x9
+[TRACE]TRACE_NORMAL[0x86]_CBOOKMARKSPLUGIN_GETDOMAINNAMEL=0x7
+[TRACE]TRACE_NORMAL[0x86]_CBOOKMARKSPLUGIN_HANDLEFAVOURITESDBEVENTL=0x12
+[TRACE]TRACE_NORMAL[0x86]_CBOOKMARKSPLUGIN_STARTHARVESTINGL=0x1
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CBOOKMARKSPLUGIN_CREATEBOOKMARKSINDEXITEML=0x10
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CBOOKMARKSPLUGIN_DELAYEDCALLBACKL=0x4
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CBOOKMARKSPLUGIN_DOINDEXINGL=0xa
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CBOOKMARKSPLUGIN_GETDOMAINNAMEL=0x8
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CBOOKMARKSPLUGIN_HANDLEFAVOURITESDBEVENTL=0x13
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CBOOKMARKSPLUGIN_STARTHARVESTINGL=0x2
+[TRACE]TRACE_NORMAL[0x86]_DUP2_CBOOKMARKSPLUGIN_CREATEBOOKMARKSINDEXITEML=0x11
+[TRACE]TRACE_NORMAL[0x86]_DUP2_CBOOKMARKSPLUGIN_DELAYEDCALLBACKL=0x5
+[TRACE]TRACE_NORMAL[0x86]_DUP2_CBOOKMARKSPLUGIN_DOINDEXINGL=0xb
+[TRACE]TRACE_NORMAL[0x86]_DUP3_CBOOKMARKSPLUGIN_DELAYEDCALLBACKL=0x6
+[TRACE]TRACE_NORMAL[0x86]_DUP3_CBOOKMARKSPLUGIN_DOINDEXINGL=0xc
+[TRACE]TRACE_NORMAL[0x86]_DUP4_CBOOKMARKSPLUGIN_DOINDEXINGL=0xd
+[TRACE]TRACE_NORMAL[0x86]_DUP5_CBOOKMARKSPLUGIN_DOINDEXINGL=0xe
--- a/harvesterplugins/calendar/data/2001f704.rss	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/calendar/data/2001f704.rss	Mon May 03 12:32:15 2010 +0300
@@ -37,7 +37,7 @@
                                         {
                                         implementation_uid = 0x2001F704;
                                         version_no = 1;
-                                        display_name = "CPix Search Calendar plugin";
+                                        display_name = "Calendar";
                                         default_data = "Calendar";
                                         opaque_data = "";
                                         }
--- a/harvesterplugins/calendar/group/calendarplugin.mmp	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/calendar/group/calendarplugin.mmp	Mon May 03 12:32:15 2010 +0300
@@ -28,7 +28,7 @@
 SOURCE        ccalendarplugin.cpp
 SOURCE        tproxy.cpp
 
-USERINCLUDE   ../inc
+USERINCLUDE   ../inc ../traces
 
 APP_LAYER_SYSTEMINCLUDE
 SYSTEMINCLUDE /epoc32/include/ecom
--- a/harvesterplugins/calendar/src/ccalendarplugin.cpp	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/calendar/src/ccalendarplugin.cpp	Mon May 03 12:32:15 2010 +0300
@@ -26,7 +26,12 @@
 #include <calentry.h>
 #include <caliterator.h>
 #include <calentryview.h>
-#include <mmfcontrollerpluginresolver.h> // CleanupResetAndDestroyPushL
+#include <mmfcontrollerpluginresolver.h>
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "ccalendarpluginTraces.h"
+#endif
+ // CleanupResetAndDestroyPushL
 
 _LIT(KMimeTypeField, CPIX_MIMETYPE_FIELD);
 _LIT(KMimeTypeCalendar, CALENDAR_MIMETYPE);
@@ -213,6 +218,7 @@
 		if( entryArray.Count() > 0 )
 			{
 			CCalEntry* entry = (CCalEntry*)entryArray[ 0 ];
+			OstTrace1( TRACE_NORMAL, CCALENDARPLUGIN_DELAYEDCALLBACKL, "CCalendarPlugin::DelayedCallbackL();Harvesting id=%d", entry->LocalUidL() );
 			CPIXLOGSTRING2("CCalendarPlugin::DelayedCallbackL(): Harvesting id=%d.", entry->LocalUidL());
 			CreateEntryL( entry->LocalUidL(), ECPixAddAction );
 			}
@@ -252,6 +258,7 @@
 void CCalendarPlugin::CalChangeNotification( RArray< TCalChangeEntry >& aChangeItems )
 	{
 	const TInt count(aChangeItems.Count());
+	OstTrace1( TRACE_NORMAL, CCALENDARPLUGIN_CALCHANGENOTIFICATION, "CCalendarPlugin::CalChangeNotification();changed item count=%d", count );
 	CPIXLOGSTRING2("CCalendarPlugin::CalChangeNotification(): changed item count =%d.", count);
 	for( TInt i = 0; i < count; ++i )
 		{
@@ -270,6 +277,7 @@
 		{		
 		case EChangeAdd:
 			{
+			OstTrace1( TRACE_NORMAL, CCALENDARPLUGIN_HANDLECHANGEDENTRYL, "CCalendarPlugin::HandleChangedEntryL();Monitored add id=%d", changedEntry.iEntryId );
 			CPIXLOGSTRING2("CCalendarPlugin::HandleChangedEntryL(): Monitored add id=%d.", changedEntry.iEntryId);
 #ifdef __PERFORMANCE_DATA
             iStartTime.UniversalTime();
@@ -283,6 +291,7 @@
 
 		case EChangeDelete:
 			{	
+			OstTrace1( TRACE_NORMAL, DUP1_CCALENDARPLUGIN_HANDLECHANGEDENTRYL, "CCalendarPlugin::HandleChangedEntryL();Monitored delete id=%d", changedEntry.iEntryId );
 			CPIXLOGSTRING2("CCalendarPlugin::HandleChangedEntryL(): Monitored delete id=%d.", changedEntry.iEntryId);
 #ifdef __PERFORMANCE_DATA
             iStartTime.UniversalTime();
@@ -296,6 +305,7 @@
 
 		case EChangeModify:
 			{
+			OstTrace1( TRACE_NORMAL, DUP2_CCALENDARPLUGIN_HANDLECHANGEDENTRYL, "CCalendarPlugin::HandleChangedEntryL();Monitored update id=%d", changedEntry.iEntryId );
 			CPIXLOGSTRING2("CCalendarPlugin::HandleChangedEntryL(): Monitored update id=%d.", changedEntry.iEntryId);
 #ifdef __PERFORMANCE_DATA
             iStartTime.UniversalTime(); 
@@ -313,6 +323,7 @@
 		 */
 		case EChangeUndefined:
 			{
+			OstTrace0( TRACE_NORMAL, DUP3_CCALENDARPLUGIN_HANDLECHANGEDENTRYL, "CCalendarPlugin::HandleChangedEntryL(): EChangeUndefined." );
 			CPIXLOGSTRING("CCalendarPlugin::HandleChangedEntryL(): EChangeUndefined.");
 			// This event could be related to synchronization.
 			// Mark harvesting as cancelled.
@@ -342,6 +353,7 @@
 	if (!iIndexer)
     	return;
 
+	OstTrace1( TRACE_NORMAL, CCALENDARPLUGIN_CREATEENTRYL, "CCalendarPlugin::CreateEntryL();Uid=%d", aLocalUid );
 	CPIXLOGSTRING2("CCalendarPlugin::CreateEntryL():  Uid = %d.", aLocalUid);
 	
 	// creating CSearchDocument object with unique ID for this application
@@ -362,6 +374,7 @@
 		    {
             CleanupStack::PopAndDestroy(entry);
             CleanupStack::PopAndDestroy(index_item);
+            OstTrace0( TRACE_NORMAL, DUP1_CCALENDARPLUGIN_CREATEENTRYL, "CCalendarPlugin::CreateEntryL(): Donot harvest Note item." );
             CPIXLOGSTRING("CCalendarPlugin::CreateEntryL(): Donot harvest Note item.");
             return;
 		    }
@@ -413,10 +426,12 @@
 			TRAPD(err, iIndexer->AddL(*index_item));
 			if (err == KErrNone)
 				{
+				OstTrace0( TRACE_NORMAL, DUP2_CCALENDARPLUGIN_CREATEENTRYL, "CCalendarPlugin::CreateEntryL(): Added." );
 				CPIXLOGSTRING("CCalendarPlugin::CreateEntryL(): Added.");
 				}
 			else
 				{
+				OstTrace1( TRACE_NORMAL, DUP3_CCALENDARPLUGIN_CREATEENTRYL, "CCalendarPlugin::CreateEntryL();Error %d in adding", err );
 				CPIXLOGSTRING2("CCalendarPlugin::CreateEntryL(): Error %d in adding.", err);
 				}			
 			}
@@ -425,10 +440,12 @@
 			TRAPD(err, iIndexer->UpdateL(*index_item));
 			if (err == KErrNone)
 				{
+				OstTrace0( TRACE_NORMAL, DUP4_CCALENDARPLUGIN_CREATEENTRYL, "CCalendarPlugin::CreateEntryL(): Updated." );
 				CPIXLOGSTRING("CCalendarPlugin::CreateEntryL(): Updated.");
 				}
 			else
 				{
+				OstTrace1( TRACE_NORMAL, DUP5_CCALENDARPLUGIN_CREATEENTRYL, "CCalendarPlugin::CreateEntryL();Error %d in updating", err );
 				CPIXLOGSTRING2("CCalendarPlugin::CreateEntryL(): Error %d in updating.", err);
 				}			
 			}
@@ -439,10 +456,12 @@
 		TRAPD(err, iIndexer->DeleteL(docid_str));
 		if (err == KErrNone)
 			{
+			OstTrace0( TRACE_NORMAL, DUP6_CCALENDARPLUGIN_CREATEENTRYL, "CCalendarPlugin::CreateEntryL(): Deleted." );
 			CPIXLOGSTRING("CCalendarPlugin::CreateEntryL(): Deleted.");
 			}
 		else
 			{
+			OstTrace1( TRACE_NORMAL, DUP7_CCALENDARPLUGIN_CREATEENTRYL, "CCalendarPlugin::CreateEntryL();Error %d in deleting", err );
 			CPIXLOGSTRING2("CCalendarPlugin::CreateEntryL(): Error %d in deleting.", err);				
 			}
 		}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/calendar/traces/OstTraceDefinitions.h	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 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: 
+*
+*/
+#ifndef __OSTTRACEDEFINITIONS_H__
+#define __OSTTRACEDEFINITIONS_H__
+// OST_TRACE_COMPILER_IN_USE flag has been added by Trace Compiler
+// REMOVE BEFORE CHECK-IN TO VERSION CONTROL
+//#define OST_TRACE_COMPILER_IN_USE
+#include <opensystemtrace.h>
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/calendar/traces/ccalendarpluginTraces.h	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,28 @@
+// Created by TraceCompiler 2.1.2
+// DO NOT EDIT, CHANGES WILL BE LOST
+
+#ifndef __CCALENDARPLUGINTRACES_H__
+#define __CCALENDARPLUGINTRACES_H__
+
+#define KOstTraceComponentID 0x2001f704
+
+#define CCALENDARPLUGIN_DELAYEDCALLBACKL 0x860001
+#define CCALENDARPLUGIN_CALCHANGENOTIFICATION 0x860002
+#define CCALENDARPLUGIN_HANDLECHANGEDENTRYL 0x860003
+#define DUP1_CCALENDARPLUGIN_HANDLECHANGEDENTRYL 0x860004
+#define DUP2_CCALENDARPLUGIN_HANDLECHANGEDENTRYL 0x860005
+#define DUP3_CCALENDARPLUGIN_HANDLECHANGEDENTRYL 0x860006
+#define CCALENDARPLUGIN_CREATEENTRYL 0x860007
+#define DUP1_CCALENDARPLUGIN_CREATEENTRYL 0x860008
+#define DUP2_CCALENDARPLUGIN_CREATEENTRYL 0x860009
+#define DUP3_CCALENDARPLUGIN_CREATEENTRYL 0x86000a
+#define DUP4_CCALENDARPLUGIN_CREATEENTRYL 0x86000b
+#define DUP5_CCALENDARPLUGIN_CREATEENTRYL 0x86000c
+#define DUP6_CCALENDARPLUGIN_CREATEENTRYL 0x86000d
+#define DUP7_CCALENDARPLUGIN_CREATEENTRYL 0x86000e
+
+
+#endif
+
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/calendar/traces/fixed_id.definitions	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,16 @@
+#Fixed group and trace id definitions. If this file is removed, the identifiers are rebuilt.
+[GROUP]TRACE_NORMAL=0x86
+[TRACE]TRACE_NORMAL[0x86]_CCALENDARPLUGIN_CALCHANGENOTIFICATION=0x2
+[TRACE]TRACE_NORMAL[0x86]_CCALENDARPLUGIN_CREATEENTRYL=0x7
+[TRACE]TRACE_NORMAL[0x86]_CCALENDARPLUGIN_DELAYEDCALLBACKL=0x1
+[TRACE]TRACE_NORMAL[0x86]_CCALENDARPLUGIN_HANDLECHANGEDENTRYL=0x3
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CCALENDARPLUGIN_CREATEENTRYL=0x8
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CCALENDARPLUGIN_HANDLECHANGEDENTRYL=0x4
+[TRACE]TRACE_NORMAL[0x86]_DUP2_CCALENDARPLUGIN_CREATEENTRYL=0x9
+[TRACE]TRACE_NORMAL[0x86]_DUP2_CCALENDARPLUGIN_HANDLECHANGEDENTRYL=0x5
+[TRACE]TRACE_NORMAL[0x86]_DUP3_CCALENDARPLUGIN_CREATEENTRYL=0xa
+[TRACE]TRACE_NORMAL[0x86]_DUP3_CCALENDARPLUGIN_HANDLECHANGEDENTRYL=0x6
+[TRACE]TRACE_NORMAL[0x86]_DUP4_CCALENDARPLUGIN_CREATEENTRYL=0xb
+[TRACE]TRACE_NORMAL[0x86]_DUP5_CCALENDARPLUGIN_CREATEENTRYL=0xc
+[TRACE]TRACE_NORMAL[0x86]_DUP6_CCALENDARPLUGIN_CREATEENTRYL=0xd
+[TRACE]TRACE_NORMAL[0x86]_DUP7_CCALENDARPLUGIN_CREATEENTRYL=0xe
--- a/harvesterplugins/contacts/data/2001f702.rss	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/contacts/data/2001f702.rss	Mon May 03 12:32:15 2010 +0300
@@ -37,7 +37,7 @@
                                         {
                                         implementation_uid = 0x2001F702;
                                         version_no = 1;
-                                        display_name = "CPix Search Contacts plugin";
+                                        display_name = "Contacts";
                                         default_data = "Contacts";
                                         opaque_data = "";
                                         }
--- a/harvesterplugins/contacts/group/contactsplugin.mmp	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/contacts/group/contactsplugin.mmp	Mon May 03 12:32:15 2010 +0300
@@ -29,7 +29,7 @@
 SOURCE        ccontactsplugin.cpp
 SOURCE        tproxy.cpp
 
-USERINCLUDE   ../inc
+USERINCLUDE   ../inc ../traces
 
 APP_LAYER_SYSTEMINCLUDE
 SYSTEMINCLUDE /epoc32/include/ecom
--- a/harvesterplugins/contacts/src/ccontactsplugin.cpp	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/contacts/src/ccontactsplugin.cpp	Mon May 03 12:32:15 2010 +0300
@@ -21,7 +21,12 @@
 #include <csearchdocument.h>
 
 #include <ccpixindexer.h>
-#include <e32base.h> 
+#include <e32base.h>
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "ccontactspluginTraces.h"
+#endif
+ 
 
 _LIT(KMimeTypeField, CPIX_MIMETYPE_FIELD);
 _LIT(KMimeTypeContact, CONTACT_MIMETYPE);
@@ -145,6 +150,7 @@
 		{
 		case EContactDbObserverEventContactChanged:
 		case EContactDbObserverEventGroupChanged:
+			OstTrace1( TRACE_NORMAL, DUP3_CCONTACTSPLUGIN_HANDLEDATABASEEVENTL, "CContactsPlugin::HandleDatabaseEventL;Monitored update id=%d", aEvent.iContactId );			
 			CPIXLOGSTRING2("CContactsPlugin::DelayedCallbackL(): Monitored update id=%d.", aEvent.iContactId);
 #ifdef __PERFORMANCE_DATA
             iStartTime.UniversalTime();
@@ -157,6 +163,7 @@
 
 		case EContactDbObserverEventContactDeleted:
 		case EContactDbObserverEventGroupDeleted:
+			OstTrace1( TRACE_NORMAL, CCONTACTSPLUGIN_HANDLEDATABASEEVENTL, "CContactsPlugin::HandleDatabaseEventL();Monitored delete id=%d", aEvent.iContactId );
 			CPIXLOGSTRING2("CContactsPlugin::DelayedCallbackL(): Monitored delete id=%d.", aEvent.iContactId);
 #ifdef __PERFORMANCE_DATA
             iStartTime.UniversalTime();			
@@ -169,6 +176,7 @@
 
 		case EContactDbObserverEventContactAdded:
 		case EContactDbObserverEventGroupAdded:
+			OstTrace1( TRACE_NORMAL, DUP1_CCONTACTSPLUGIN_HANDLEDATABASEEVENTL, "CContactsPlugin::HandleDatabaseEventL();Monitored add id=%d", aEvent.iContactId );
 			CPIXLOGSTRING2("CContactsPlugin::DelayedCallbackL(): Monitored add id=%d.", aEvent.iContactId);
 #ifdef __PERFORMANCE_DATA
             iStartTime.UniversalTime();			
@@ -205,6 +213,7 @@
 			break;
 		
 		// Create index item
+		OstTrace1( TRACE_NORMAL, CCONTACTSPLUGIN_DELAYEDCALLBACKL, "CContactsPlugin::DelayedCallbackL();Harvesting id=%d", (*iContacts)[iCurrentIndex] );
 		CPIXLOGSTRING2("CContactsPlugin::DelayedCallbackL(): Harvesting id=%d.", (*iContacts)[iCurrentIndex]);
 		CreateContactIndexItemL((*iContacts)[iCurrentIndex], ECPixAddAction);
 		iCurrentIndex++;
@@ -301,6 +310,7 @@
 	if (!iIndexer)
     	return;
     
+	OstTrace1( TRACE_NORMAL, CCONTACTSPLUGIN_CREATECONTACTINDEXITEML, "CContactsPlugin::CreateContactIndexItemL();aContentId=%d", aContentId );
 	CPIXLOGSTRING2("CContactsPlugin::CreateContactIndexItemL(): aContentId = %d ", aContentId );
     
 	// creating CSearchDocument object with unique ID for this application
@@ -317,6 +327,7 @@
 		if( contact->Type() == KUidContactGroup )
 		    {
             index_item->AddFieldL(KContactsGivenNameField, static_cast<CContactGroup*>( contact )->GetGroupLabelL(), CDocumentField::EStoreYes | CDocumentField::EIndexTokenized);
+            OstTraceExt1( TRACE_NORMAL, DUP1_CCONTACTSPLUGIN_CREATECONTACTINDEXITEML, ";Adding Contact Group=%S", ( static_cast<CContactGroup*>( contact )->GetGroupLabelL() ) );
             CPIXLOGSTRING2("Adding Contact Group %S", &( static_cast<CContactGroup*>( contact )->GetGroupLabelL() ) );
             index_item->AddExcerptL( static_cast<CContactGroup*>( contact )->GetGroupLabelL() );
 		    }
@@ -381,10 +392,12 @@
 			TRAPD(err, iIndexer->AddL(*index_item));
 			if (err == KErrNone)
 				{
+				OstTrace0( TRACE_NORMAL, DUP2_CCONTACTSPLUGIN_CREATECONTACTINDEXITEML, "CContactsPlugin::CreateContactIndexItemL(): Added." );
 				CPIXLOGSTRING("CContactsPlugin::CreateContactIndexItemL(): Added.");
 				}
 			else
 				{
+				OstTrace1( TRACE_NORMAL, DUP3_CCONTACTSPLUGIN_CREATECONTACTINDEXITEML, "CContactsPlugin::CreateContactIndexItemL();Error %d in adding", err );
 				CPIXLOGSTRING2("CContactsPlugin::CreateContactIndexItemL(): Error %d in adding.", err);
 				}			
 			}
@@ -393,10 +406,12 @@
 			TRAPD(err, iIndexer->UpdateL(*index_item));
 			if (err == KErrNone)
 				{
+				OstTrace0( TRACE_NORMAL, DUP4_CCONTACTSPLUGIN_CREATECONTACTINDEXITEML, "CContactsPlugin::CreateContactIndexItemL(): Updated." );
 				CPIXLOGSTRING("CContactsPlugin::CreateContactIndexItemL(): Updated.");
 				}
 			else
 				{
+				OstTrace1( TRACE_NORMAL, DUP5_CCONTACTSPLUGIN_CREATECONTACTINDEXITEML, "CContactsPlugin::CreateContactIndexItemL();Error %d in updating", err );
 				CPIXLOGSTRING2("CContactsPlugin::CreateContactIndexItemL(): Error %d in updating.", err);
 				}			
 			}
@@ -408,10 +423,12 @@
 		TRAPD(err, iIndexer->DeleteL(docid_str));
 		if (err == KErrNone)
 			{
+			OstTrace0( TRACE_NORMAL, DUP6_CCONTACTSPLUGIN_CREATECONTACTINDEXITEML, "CContactsPlugin::CreateContactIndexItemL(): Deleted." );
 			CPIXLOGSTRING("CContactsPlugin::CreateContactIndexItemL(): Deleted.");
 			}
 		else
 			{
+			OstTrace1( TRACE_NORMAL, DUP7_CCONTACTSPLUGIN_CREATECONTACTINDEXITEML, "CContactsPlugin::CreateContactIndexItemL();Error %d in deleting", err );
 			CPIXLOGSTRING2("CContactsPlugin::CreateContactIndexItemL(): Error %d in deleting.", err);
 			}			
 		}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/contacts/traces/OstTraceDefinitions.h	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 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: 
+*
+*/
+#ifndef __OSTTRACEDEFINITIONS_H__
+#define __OSTTRACEDEFINITIONS_H__
+// OST_TRACE_COMPILER_IN_USE flag has been added by Trace Compiler
+// REMOVE BEFORE CHECK-IN TO VERSION CONTROL
+//#define OST_TRACE_COMPILER_IN_USE
+#include <opensystemtrace.h>
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/contacts/traces/ccontactspluginTraces.h	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,64 @@
+// Created by TraceCompiler 2.1.2
+// DO NOT EDIT, CHANGES WILL BE LOST
+
+#ifndef __CCONTACTSPLUGINTRACES_H__
+#define __CCONTACTSPLUGINTRACES_H__
+
+#define KOstTraceComponentID 0x2001f702
+
+#define DUP3_CCONTACTSPLUGIN_HANDLEDATABASEEVENTL 0x860001
+#define CCONTACTSPLUGIN_HANDLEDATABASEEVENTL 0x860002
+#define DUP1_CCONTACTSPLUGIN_HANDLEDATABASEEVENTL 0x860003
+#define CCONTACTSPLUGIN_DELAYEDCALLBACKL 0x860004
+#define CCONTACTSPLUGIN_CREATECONTACTINDEXITEML 0x860005
+#define DUP1_CCONTACTSPLUGIN_CREATECONTACTINDEXITEML 0x860006
+#define DUP2_CCONTACTSPLUGIN_CREATECONTACTINDEXITEML 0x860007
+#define DUP3_CCONTACTSPLUGIN_CREATECONTACTINDEXITEML 0x860008
+#define DUP4_CCONTACTSPLUGIN_CREATECONTACTINDEXITEML 0x860009
+#define DUP5_CCONTACTSPLUGIN_CREATECONTACTINDEXITEML 0x86000a
+#define DUP6_CCONTACTSPLUGIN_CREATECONTACTINDEXITEML 0x86000b
+#define DUP7_CCONTACTSPLUGIN_CREATECONTACTINDEXITEML 0x86000c
+
+
+#ifndef __KERNEL_MODE__
+inline TBool OstTraceGen1( TUint32 aTraceID, const TDesC16& aParam1 )
+    {
+    TBool retval;
+    TInt size = aParam1.Size();
+    // BTrace assumes that parameter size is atleast 4 bytes
+    if (size % 4 == 0)
+        {
+        TUint8* ptr = ( TUint8* )aParam1.Ptr();
+        // Data is written directly and length is determined from trace message length
+        retval = OstSendNBytes( EXTRACT_GROUP_ID(aTraceID), EOstTrace, KOstTraceComponentID, aTraceID, ptr, size );
+        }
+    else
+        {
+        TUint8 data[ KOstMaxDataLength ];
+        TUint8* ptr = data;
+        if (size > KOstMaxDataLength)
+            {
+            size = KOstMaxDataLength;
+            }
+        TInt sizeAligned = ( size + 3 ) & ~3;
+        memcpy( ptr, aParam1.Ptr(), size );
+        ptr += size;
+        // Fillers are written to get 32-bit alignment
+        while ( size++ < sizeAligned )
+            {
+            *ptr++ = 0;
+            }
+        ptr -= sizeAligned;
+        size = sizeAligned;
+        // Data is written directly and length is determined from trace message length
+        retval = OstSendNBytes( EXTRACT_GROUP_ID(aTraceID), EOstTrace, KOstTraceComponentID, aTraceID, ptr, size );
+        }
+    return retval;
+    }
+#endif
+
+
+#endif
+
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/contacts/traces/fixed_id.definitions	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,14 @@
+#Fixed group and trace id definitions. If this file is removed, the identifiers are rebuilt.
+[GROUP]TRACE_NORMAL=0x86
+[TRACE]TRACE_NORMAL[0x86]_CCONTACTSPLUGIN_CREATECONTACTINDEXITEML=0x5
+[TRACE]TRACE_NORMAL[0x86]_CCONTACTSPLUGIN_DELAYEDCALLBACKL=0x4
+[TRACE]TRACE_NORMAL[0x86]_CCONTACTSPLUGIN_HANDLEDATABASEEVENTL=0x2
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CCONTACTSPLUGIN_CREATECONTACTINDEXITEML=0x6
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CCONTACTSPLUGIN_HANDLEDATABASEEVENTL=0x3
+[TRACE]TRACE_NORMAL[0x86]_DUP2_CCONTACTSPLUGIN_CREATECONTACTINDEXITEML=0x7
+[TRACE]TRACE_NORMAL[0x86]_DUP3_CCONTACTSPLUGIN_CREATECONTACTINDEXITEML=0x8
+[TRACE]TRACE_NORMAL[0x86]_DUP3_CCONTACTSPLUGIN_HANDLEDATABASEEVENTL=0x1
+[TRACE]TRACE_NORMAL[0x86]_DUP4_CCONTACTSPLUGIN_CREATECONTACTINDEXITEML=0x9
+[TRACE]TRACE_NORMAL[0x86]_DUP5_CCONTACTSPLUGIN_CREATECONTACTINDEXITEML=0xa
+[TRACE]TRACE_NORMAL[0x86]_DUP6_CCONTACTSPLUGIN_CREATECONTACTINDEXITEML=0xb
+[TRACE]TRACE_NORMAL[0x86]_DUP7_CCONTACTSPLUGIN_CREATECONTACTINDEXITEML=0xc
--- a/harvesterplugins/file/data/2001f703.rss	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/file/data/2001f703.rss	Mon May 03 12:32:15 2010 +0300
@@ -37,7 +37,7 @@
                                         {
                                         implementation_uid = 0x2001F703;
                                         version_no = 1;
-                                        display_name = "CPix Search File plugin";
+                                        display_name = "Files";
                                         default_data = "File";
                                         opaque_data = "";
                                         }
--- a/harvesterplugins/file/fastfindfileserverplugin/group/fastfindfileserverplugin.mmp	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/file/fastfindfileserverplugin/group/fastfindfileserverplugin.mmp	Mon May 03 12:32:15 2010 +0300
@@ -28,7 +28,7 @@
 
 APP_LAYER_SYSTEMINCLUDE
 USERINCLUDE   ../inc
-USERINCLUDE   ../../inc/monitorplugin
+USERINCLUDE   ../../inc/monitorplugin ../traces
 
 SOURCEPATH    ../src
 SOURCE        fastfindfileserverplugin.cpp 
--- a/harvesterplugins/file/fastfindfileserverplugin/src/fastfindfileserverplugin.cpp	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/file/fastfindfileserverplugin/src/fastfindfileserverplugin.cpp	Mon May 03 12:32:15 2010 +0300
@@ -18,6 +18,11 @@
 #include <f32pluginutils.h>
 #include "fastfindfileserverplugin.h"
 #include "harvesterlog.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "fastfindfileserverpluginTraces.h"
+#endif
+
 
 _LIT( KFastFindFileServerPlugin, "CPixFileServerPlugin" );
 
@@ -28,6 +33,7 @@
 CFastFindFileServerPlugin::CFastFindFileServerPlugin()
 : iFormatDriveNumber( -1 )
 	{
+	OstTrace0( TRACE_NORMAL, CFASTFINDFILESERVERPLUGIN_CFASTFINDFILESERVERPLUGIN, "CFastFindFileServerPlugin::CFastFindFileServerPlugin()" );
 	WRITELOG( "CFastFindFileServerPlugin::CFastFindFileServerPlugin()" );
 	}
 	
@@ -37,6 +43,7 @@
 //
 CFastFindFileServerPlugin::~CFastFindFileServerPlugin()
     {
+    OstTrace0( TRACE_NORMAL, DUP1_CFASTFINDFILESERVERPLUGIN_CFASTFINDFILESERVERPLUGIN, "CFastFindFileServerPlugin::~CFastFindFileServerPlugin()" );
     WRITELOG( "CFastFindFileServerPlugin::~CFastFindFileServerPlugin()" );
     
     TRAP_IGNORE( DisableL() );
@@ -61,6 +68,7 @@
 //
 CFastFindFileServerPlugin* CFastFindFileServerPlugin::NewL()
     {
+    OstTrace0( TRACE_NORMAL, CFASTFINDFILESERVERPLUGIN_NEWL, "CFastFindFileServerPlugin::NewL()" );
     WRITELOG( "CFastFindFileServerPlugin::NewL()" );
     return new (ELeave) CFastFindFileServerPlugin;
     }
@@ -71,6 +79,7 @@
 //
 void CFastFindFileServerPlugin::InitialiseL()
     {
+    OstTrace0( TRACE_NORMAL, CFASTFINDFILESERVERPLUGIN_INITIALISEL, "CFastFindFileServerPlugin::InitializeL()" );
     WRITELOG( "CFastFindFileServerPlugin::InitializeL()" );
     User::LeaveIfError( iFsSession.Connect() );
     }
@@ -81,6 +90,7 @@
 //
 void CFastFindFileServerPlugin::EnableL()
     {
+    OstTrace0( TRACE_NORMAL, CFASTFINDFILESERVERPLUGIN_ENABLEL, "CFastFindFileServerPlugin::EnableL()" );
     WRITELOG( "CFastFindFileServerPlugin::EnableL()" );
     User::LeaveIfError( RegisterIntercept(EFsFileCreate, EPostIntercept) );
     User::LeaveIfError( RegisterIntercept(EFsFileRename, EPostIntercept) );
@@ -88,6 +98,8 @@
     User::LeaveIfError( RegisterIntercept(EFsDelete, EPostIntercept) );
 //    User::LeaveIfError( RegisterIntercept(EFsFileReplace, EPostIntercept) );
     User::LeaveIfError( RegisterIntercept(EFsReplace, EPostIntercept) );
+    User::LeaveIfError( RegisterIntercept(EFsMkDir, EPostIntercept) );
+    User::LeaveIfError( RegisterIntercept(EFsRmDir, EPostIntercept) );
 //    User::LeaveIfError( RegisterIntercept(EFsFileModified, EPostIntercept) );
     User::LeaveIfError( RegisterIntercept(EFsFileSetModified, EPostIntercept) );
     User::LeaveIfError( RegisterIntercept(EFsFileSubClose, EPostIntercept) );
@@ -106,6 +118,7 @@
 //
 void CFastFindFileServerPlugin::DisableL()
     {
+    OstTrace0( TRACE_NORMAL, CFASTFINDFILESERVERPLUGIN_DISABLEL, "CFastFindFileServerPlugin::DisableL()" );
     WRITELOG( "CFastFindFileServerPlugin::DisableL()" );
     User::LeaveIfError( UnregisterIntercept(EFsFileCreate, EPrePostIntercept) );
     User::LeaveIfError( UnregisterIntercept(EFsFileRename, EPrePostIntercept) );
@@ -113,6 +126,8 @@
     User::LeaveIfError( UnregisterIntercept(EFsDelete, EPrePostIntercept) );
 //    User::LeaveIfError( UnregisterIntercept(EFsFileReplace, EPrePostIntercept) );
     User::LeaveIfError( UnregisterIntercept(EFsReplace, EPrePostIntercept) );
+    User::LeaveIfError( UnregisterIntercept(EFsMkDir, EPrePostIntercept) );
+    User::LeaveIfError( UnregisterIntercept(EFsRmDir, EPrePostIntercept) );
 //    User::LeaveIfError( UnregisterIntercept(EFsFileModified, EPrePostIntercept) );
     User::LeaveIfError( UnregisterIntercept(EFsFileSetModified, EPrePostIntercept) );
     User::LeaveIfError( UnregisterIntercept(EFsFileSubClose, EPrePostIntercept) );
@@ -132,6 +147,7 @@
 //
 void CFastFindFileServerPlugin::AddConnection()
     {
+    OstTrace0( TRACE_NORMAL, CFASTFINDFILESERVERPLUGIN_ADDCONNECTION, "CFastFindFileServerPlugin::AddConnection()" );
     WRITELOG( "CFastFindFileServerPlugin::AddConnection()" );
     
     ++iConnectionCount;
@@ -143,6 +159,7 @@
 //
 void CFastFindFileServerPlugin::RemoveConnection()
     {
+    OstTrace0( TRACE_NORMAL, CFASTFINDFILESERVERPLUGIN_REMOVECONNECTION, "CFastFindFileServerPlugin::RemoveConnection()" );
     WRITELOG( "CFastFindFileServerPlugin::RemoveConnection()" );
     
     --iConnectionCount;
@@ -150,6 +167,7 @@
     // remove notification request if this was last connection
     if ( iConnectionCount <= 0 )
         {
+        OstTrace0( TRACE_NORMAL, DUP1_CFASTFINDFILESERVERPLUGIN_REMOVECONNECTION, "CFastFindFileServerPlugin::RemoveConnection() last connection" );
         WRITELOG( "CFastFindFileServerPlugin::RemoveConnection() last connection" );
 
         iNotification = NULL;
@@ -162,6 +180,7 @@
 //
 TInt CFastFindFileServerPlugin::DoRequestL( TFsPluginRequest& aRequest )
 	{
+	OstTraceFunctionEntry0( CFASTFINDFILESERVERPLUGIN_DOREQUESTL_ENTRY );
 	TInt err = KErrNone;
 	TInt function = aRequest.Function();
 	const TBool formatFunction = function == EFsFormatOpen || function == EFsFormatSubClose;
@@ -172,9 +191,11 @@
 
     if ( function == EFsFileSubClose && iCreatedFiles.Count() == 0 )
         {
+        OstTraceFunctionExit0( CFASTFINDFILESERVERPLUGIN_DOREQUESTL_EXIT );
         return KErrNone;
         }
 
+    OstTrace1( TRACE_NORMAL, CFASTFINDFILESERVERPLUGIN_DOREQUESTL, "CFastFindFileServerPlugin::DoRequestL;Plugin function=%d", function );
     WRITELOG1( "----- CFastFindFileServerPlugin::DoRequestL() - plugin function: %d -----", function );
 
     TFileName fileName;
@@ -185,8 +206,25 @@
 	if ( !formatFunction )
 		{
 		GetName( &aRequest, fileName );
+		OstTraceExt1( TRACE_NORMAL, DUP1_CFASTFINDFILESERVERPLUGIN_DOREQUESTL, "CFastFindFileServerPlugin::DoRequestL;Filename=%S", fileName );
 		WRITELOG1( "CFastFindFileServerPlugin::DoRequestL() - fileName: %S", &fileName );
 		}
+	
+	if ( function == EFsMkDir || function == EFsRmDir)
+	    {
+        // This will return the folder path with trailing slash, remove it to match
+	    // with the doc_id format
+        TFileName filePath;
+	    GetPath(&aRequest, filePath);
+		if (filePath.Length() > 0)
+			{
+        	TPtrC temppath( filePath.Left( filePath.Length() - 1 ) );
+        	fileName.Zero();
+        	fileName.Append(temppath);
+			}
+		OstTraceExt1( TRACE_NORMAL, DUP2_CFASTFINDFILESERVERPLUGIN_DOREQUESTL, "CFastFindFileServerPlugin::DoRequestL;Filename=%S", fileName );
+	    WRITELOG1( "CFastFindFileServerPlugin::DoRequestL() - fileName: %S", &fileName );
+	    }
 
     // get process id
 	TUid processId = { 0 };
@@ -211,15 +249,20 @@
     if ( function == EFsRename || function == EFsFileRename || function == EFsReplace )
         {
         GetNewName( &aRequest, newFileName );
+        OstTraceExt1( TRACE_NORMAL, DUP3_CFASTFINDFILESERVERPLUGIN_DOREQUESTL, "CFastFindFileServerPlugin::DoRequestL;New Filename=%S", newFileName );
         WRITELOG1( "CFastFindFileServerPlugin::DoRequestL() - newFileName: %S", &newFileName );
         if ( !CheckPath(newFileName) )
             {
+            OstTrace0( TRACE_NORMAL, DUP4_CFASTFINDFILESERVERPLUGIN_DOREQUESTL, "CFastFindFileServerPlugin::DoRequestL() - path not supported" );
             WRITELOG( "CFastFindFileServerPlugin::DoRequestL() - path not supported" );
+            OstTraceFunctionExit0( DUP1_CFASTFINDFILESERVERPLUGIN_DOREQUESTL_EXIT );
             return KErrNone;
             }
         if ( !CheckAttribs(newFileName) )
             {
+            OstTrace0( TRACE_NORMAL, DUP5_CFASTFINDFILESERVERPLUGIN_DOREQUESTL, "CFastFindFileServerPlugin::DoRequestL() - attribute check failed" );
             WRITELOG( "CFastFindFileServerPlugin::DoRequestL() - attribute check failed" );
+            OstTraceFunctionExit0( DUP2_CFASTFINDFILESERVERPLUGIN_DOREQUESTL_EXIT );
             return KErrNone;
             }
         }
@@ -227,13 +270,17 @@
         {
         if ( !CheckPath(fileName) )
             {
+            OstTrace0( TRACE_NORMAL, DUP6_CFASTFINDFILESERVERPLUGIN_DOREQUESTL, "CFastFindFileServerPlugin::DoRequestL() - path not supported" );
             WRITELOG( "CFastFindFileServerPlugin::DoRequestL() - path not supported" );
+            OstTraceFunctionExit0( DUP3_CFASTFINDFILESERVERPLUGIN_DOREQUESTL_EXIT );
             return KErrNone;
             }
 
         if ( !CheckAttribs(fileName) )
             {
+            OstTrace0( TRACE_NORMAL, DUP7_CFASTFINDFILESERVERPLUGIN_DOREQUESTL, "CFastFindFileServerPlugin::DoRequestL() - attribute check failed" );
             WRITELOG( "CFastFindFileServerPlugin::DoRequestL() - attribute check failed" );
+            OstTraceFunctionExit0( DUP4_CFASTFINDFILESERVERPLUGIN_DOREQUESTL_EXIT );
             return KErrNone;
             }
         }
@@ -241,12 +288,14 @@
     TInt fileEventType = EFastFindFileUnknown;
     TInt drvNumber = aRequest.DriveNumber();
 
+    OstTrace1( TRACE_NORMAL, DUP8_CFASTFINDFILESERVERPLUGIN_DOREQUESTL, "CFastFindFileServerPlugin::DoRequestL;Drive Number=%d", drvNumber );
     WRITELOG1( "CFastFindFileServerPlugin::DoRequestL() - drive number: %d", drvNumber );
 
     switch( function )
         {
         case EFsFileCreate:
             {
+            OstTrace0( TRACE_NORMAL, DUP9_CFASTFINDFILESERVERPLUGIN_DOREQUESTL, "CFastFindFileServerPlugin::DoRequestL() - EFsFileCreate" );
             WRITELOG( "CFastFindFileServerPlugin::DoRequestL() - EFsFileCreate" );
 
             TFileName* fn = new (ELeave) TFileName;
@@ -254,11 +303,13 @@
             fn->Copy( fileName );
             iCreatedFiles.Append( fn );
             User::LeaveIfError( UnregisterIntercept(EFsFileSetModified, EPrePostIntercept) );
+            OstTraceFunctionExit0( DUP5_CFASTFINDFILESERVERPLUGIN_DOREQUESTL_EXIT );
             return KErrNone;
             }
 
         case EFsFileSubClose:
             {
+            OstTrace0( TRACE_NORMAL, DUP10_CFASTFINDFILESERVERPLUGIN_DOREQUESTL, "CFastFindFileServerPlugin::DoRequestL() - EFsFileSubClose" );
             WRITELOG( "CFastFindFileServerPlugin::DoRequestL() - EFsFileSubClose" );
 
             TBool found = EFalse;
@@ -278,6 +329,7 @@
 
             if ( !found )
                 {
+                OstTraceFunctionExit0( DUP6_CFASTFINDFILESERVERPLUGIN_DOREQUESTL_EXIT );
                 return KErrNone;
                 }
             }
@@ -285,32 +337,38 @@
 
         case EFsRename:
             {
+            OstTraceExt1( TRACE_NORMAL, DUP11_CFASTFINDFILESERVERPLUGIN_DOREQUESTL, "CFastFindFileServerPlugin::DoRequestL() - EFsRenamed;New Filename=%S", newFileName );
             WRITELOG1( "CFastFindFileServerPlugin::DoRequestL() - EFsRenamed, new file: %S", &newFileName );
             fileEventType = EFastFindFileRenamed;
             }
             break;
 
         case EFsFileRename:
+            OstTraceExt1( TRACE_NORMAL, DUP12_CFASTFINDFILESERVERPLUGIN_DOREQUESTL, "CFastFindFileServerPlugin::DoRequestL() - EFsFileRenamed;New Filename=%S", newFileName );
             WRITELOG1( "CFastFindFileServerPlugin::DoRequestL() - EFsFileRenamed, new file: %S", &newFileName );
             fileEventType = EFastFindFileRenamed;
             break;
 
         case EFsFileSetModified:
+            OstTrace0( TRACE_NORMAL, DUP13_CFASTFINDFILESERVERPLUGIN_DOREQUESTL, "CFastFindFileServerPlugin::DoRequestL() - EFsFileModified" );
             WRITELOG( "CFastFindFileServerPlugin::DoRequestL() - EFsFileModified" );
             fileEventType = EFastFindFileModified;
             break;
 
         case EFsReplace:
+            OstTraceExt1( TRACE_NORMAL, DUP14_CFASTFINDFILESERVERPLUGIN_DOREQUESTL, "CFastFindFileServerPlugin::DoRequestL()  - EFsReplace;New Filename=%S", newFileName );
             WRITELOG1( "CFastFindFileServerPlugin::DoRequestL() - EFsReplace, new file: %S", &newFileName );
             fileEventType = EFastFindFileReplaced;
             break;
 
         case EFsDelete:
+            OstTrace0( TRACE_NORMAL, DUP15_CFASTFINDFILESERVERPLUGIN_DOREQUESTL, "CFastFindFileServerPlugin::DoRequestL() - EFsDelete" );
             WRITELOG( "CFastFindFileServerPlugin::DoRequestL() - EFsDelete" );
             fileEventType = EFastFindFileDeleted;
             break;
 
 		case EFsFormatOpen:
+			OstTrace0( TRACE_NORMAL, DUP16_CFASTFINDFILESERVERPLUGIN_DOREQUESTL, "CFastFindFileServerPlugin::DoRequestL() - EFsFormatOpen" );
 			WRITELOG( "CFastFindFileServerPlugin::DoRequestL() - EFsFormatOpen" );
 			// get the drive letter
 			iFormatDriveNumber = drvNumber;
@@ -320,9 +378,11 @@
 			break;
 
 		case EFsFormatSubClose:
+			OstTrace0( TRACE_NORMAL, DUP17_CFASTFINDFILESERVERPLUGIN_DOREQUESTL, "CFastFindFileServerPlugin::DoRequestL() - EFsFormatSubClose" );
 			WRITELOG( "CFastFindFileServerPlugin::DoRequestL() - EFsFormatSubClose" );
 			if ( iFormatDriveNumber < 0 )
 				{
+				OstTraceFunctionExit0( DUP7_CFASTFINDFILESERVERPLUGIN_DOREQUESTL_EXIT );
 				return KErrNone;
 				}
 			drvNumber = iFormatDriveNumber;
@@ -333,14 +393,30 @@
 				processId.iUid = 1;
 				}
 			break;
-
+			
+		case EFsMkDir:
+		    OstTrace0( TRACE_NORMAL, DUP18_CFASTFINDFILESERVERPLUGIN_DOREQUESTL, "CFastFindFileServerPlugin::DoRequestL() - EFsMkDir" );
+		    WRITELOG( "CFastFindFileServerPlugin::DoRequestL() - EFsMkDir" );		    
+		    fileEventType = EFastFindDirCreated;
+		    
+            break;
+            
+		case EFsRmDir:
+		    OstTrace0( TRACE_NORMAL, DUP19_CFASTFINDFILESERVERPLUGIN_DOREQUESTL, "CFastFindFileServerPlugin::DoRequestL() - EFsRmDir" );
+		    WRITELOG( "CFastFindFileServerPlugin::DoRequestL() - EFsRmDir" );
+		    fileEventType = EFastFindDirDeleted;
+		    break;
+            
         default:
+            OstTrace0( TRACE_NORMAL, DUP20_CFASTFINDFILESERVERPLUGIN_DOREQUESTL, "CFastFindFileServerPlugin::DoRequestL() - Unknown function" );
             WRITELOG( "CFastFindFileServerPlugin::DoRequestL() - Unknown function" );
+            OstTraceFunctionExit0( DUP8_CFASTFINDFILESERVERPLUGIN_DOREQUESTL_EXIT );
             return KErrNone;
         }
 
     if ( iNotification )
         {
+        OstTrace0( TRACE_NORMAL, DUP21_CFASTFINDFILESERVERPLUGIN_DOREQUESTL, "CFastFindFileServerPlugin::DoRequestL() - iNotification found" );
         WRITELOG( "CFastFindFileServerPlugin::DoRequestL() - iNotification found" );
         TFastFindFSPStatusPckg clientStatusBuf;
         TFastFindFSPStatus& clientStatus = clientStatusBuf();
@@ -356,10 +432,12 @@
         TRAP( err, iNotification->WriteParam1L(clientStatusBuf) );
         iNotification->Complete( err );
         iNotification = NULL;
+        OstTrace0( TRACE_NORMAL, DUP22_CFASTFINDFILESERVERPLUGIN_DOREQUESTL, "CFastFindFileServerPlugin::DoRequestL() - iNotification complete" );
         WRITELOG( "CFastFindFileServerPlugin::DoRequestL() - iNotification complete" );
         }
     else // no notification ready, put in the queue
         {
+        OstTrace0( TRACE_NORMAL, DUP23_CFASTFINDFILESERVERPLUGIN_DOREQUESTL, "CFastFindFileServerPlugin::DoRequestL() - iNotification not found. Put in the queue" );
         WRITELOG( "CFastFindFileServerPlugin::DoRequestL() - iNotification not found. Put in the queue" );
 
         TFastFindFSPStatus* clientStatus = new (ELeave) TFastFindFSPStatus;
@@ -374,10 +452,12 @@
 
         iQueue.Append( clientStatus ); // owenership is transferred
         err = KErrNone;
+        OstTrace0( TRACE_NORMAL, DUP24_CFASTFINDFILESERVERPLUGIN_DOREQUESTL, "CFastFindFileServerPlugin::DoRequestL() - added to queue" );
         WRITELOG( "CFastFindFileServerPlugin::DoRequestL() - added to queue" );
         }
 
     WRITELOG( "CFastFindFileServerPlugin::DoRequestL() - return" );
+    OstTraceFunctionExit0( DUP9_CFASTFINDFILESERVERPLUGIN_DOREQUESTL_EXIT );
     return err;
     }
 
@@ -409,6 +489,7 @@
 CFastFindFileServerPluginConn* CFastFindFileServerPluginConn::NewL( 
 		CFastFindFileServerPlugin& aPlugin )
     {
+    OstTrace0( TRACE_NORMAL, CFASTFINDFILESERVERPLUGINCONN_NEWL, "CFastFindFileServerPluginConn::NewL()" );
     WRITELOG( "CFastFindFileServerPluginConn::NewL()" );
     return new (ELeave) CFastFindFileServerPluginConn( aPlugin );
     }
@@ -422,6 +503,7 @@
                CFastFindFileServerPlugin& aPlugin )
   : iPlugin( aPlugin )
     {
+    OstTrace0( TRACE_NORMAL, CFASTFINDFILESERVERPLUGINCONN_CFASTFINDFILESERVERPLUGINCONN, "CFastFindFileServerPluginConn::CFastFindFileServerPluginConn()" );
     WRITELOG( "CFastFindFileServerPluginConn::CFastFindFileServerPluginConn()" );
 
     iPlugin.AddConnection();
@@ -434,6 +516,7 @@
 */
 CFastFindFileServerPluginConn::~CFastFindFileServerPluginConn()
     {
+    OstTrace0( TRACE_NORMAL, DUP1_CFASTFINDFILESERVERPLUGINCONN_CFASTFINDFILESERVERPLUGINCONN, "CFastFindFileServerPluginConn::~CFastFindFileServerPluginConn()" );
     WRITELOG( "CFastFindFileServerPluginConn::~CFastFindFileServerPluginConn()" );
 
     iPlugin.RemoveConnection();
@@ -445,6 +528,7 @@
 //
 TInt CFastFindFileServerPluginConn::DoControl( CFsPluginConnRequest& aRequest )
     {
+    OstTrace0( TRACE_NORMAL, CFASTFINDFILESERVERPLUGINCONN_DOCONTROL, "CFastFindFileServerPluginConn::DoControl()" );
     WRITELOG( "CFastFindFileServerPluginConn::DoControl()" );
     TInt err = KErrNotSupported;
     
@@ -454,6 +538,7 @@
         {
         case EFastFindFSPOpEnable:
             {
+            OstTrace0( TRACE_NORMAL, DUP1_CFASTFINDFILESERVERPLUGINCONN_DOCONTROL, "CFastFindFileServerPluginConn::DoControl() - EFastFindFSPOpEnable" );
             WRITELOG( "CFastFindFileServerPluginConn::DoControl() - EFastFindFSPOpEnable" );
             TRAP( err, myPlugin.EnableL() );
             break;
@@ -461,6 +546,7 @@
         
         case EFastFindFSPOpDisable:
             {
+            OstTrace0( TRACE_NORMAL, DUP2_CFASTFINDFILESERVERPLUGINCONN_DOCONTROL, "CFastFindFileServerPluginConn::DoControl() - EFastFindFSPOpDisable" );
             WRITELOG( "CFastFindFileServerPluginConn::DoControl() - EFastFindFSPOpDisable" );
             TRAP( err, myPlugin.DisableL() );
             break;
@@ -468,6 +554,7 @@
         
         default:
             {
+            OstTrace0( TRACE_NORMAL, DUP3_CFASTFINDFILESERVERPLUGINCONN_DOCONTROL, "CFastFindFileServerPluginConn::DoControl() - Unknown Control" );
             WRITELOG( "CFastFindFileServerPluginConn::DoControl() - Unknown Control" );
             break;            
             }
@@ -483,6 +570,7 @@
 //
 void CFastFindFileServerPluginConn::DoRequest( CFsPluginConnRequest& aRequest )
     {
+    OstTraceFunctionEntry0( CFASTFINDFILESERVERPLUGINCONN_DOREQUEST_ENTRY );
     WRITELOG( "CFastFindFileServerPluginConn::DoRequest()" );
     CFastFindFileServerPlugin& myPlugin = *(CFastFindFileServerPlugin*)Plugin();
     
@@ -490,6 +578,7 @@
         {
         case EFastFindFSPOpRegisterNotification:
             {
+            OstTrace0( TRACE_NORMAL, CFASTFINDFILESERVERPLUGINCONN_DOREQUEST, "CFastFindFileServerPluginConn::DoRequest() - EFastFindFSPOpRegisterNotification" );
             WRITELOG( "CFastFindFileServerPluginConn::DoControl() - EFastFindFSPOpRegisterNotification" );
             TInt err = myPlugin.RegisterNotification( aRequest );
             
@@ -502,6 +591,7 @@
             
         case EFastFindFSPOpAddNotificationPath:
             {
+            OstTrace0( TRACE_NORMAL, DUP1_CFASTFINDFILESERVERPLUGINCONN_DOREQUEST, "CFastFindFileServerPluginConn::DoRequest() - EFastFindFSPOpAddNotificationPath" );
             WRITELOG( "CFastFindFileServerPluginConn::DoControl() - EFastFindFSPOpAddNotificationPath" );
             TInt err = myPlugin.AddNotificationPath( aRequest );
             aRequest.Complete( err );
@@ -510,6 +600,7 @@
             
         case EFastFindFSPOpRemoveNotificationPath:
             {
+            OstTrace0( TRACE_NORMAL, DUP2_CFASTFINDFILESERVERPLUGINCONN_DOREQUEST, "CFastFindFileServerPluginConn::DoRequest() - EFastFindFSPOpRemoveNotificationPath" );
             WRITELOG( "CFastFindFileServerPluginConn::DoControl() - EFastFindFSPOpRemoveNotificationPath" );
             TInt err = myPlugin.RemoveNotificationPath( aRequest );
             aRequest.Complete( err );
@@ -518,6 +609,7 @@
             
         case EFastFindFSPOpAddIgnorePath:
             {
+            OstTrace0( TRACE_NORMAL, DUP3_CFASTFINDFILESERVERPLUGINCONN_DOREQUEST, "CFastFindFileServerPluginConn::DoRequest() - EFastFindFSPOpAddIgnorePath" );
             WRITELOG( "CFastFindFileServerPluginConn::DoControl() - EFastFindFSPOpAddIgnorePath" );
             TInt err = myPlugin.AddIgnorePath( aRequest );
             aRequest.Complete( err );
@@ -526,12 +618,14 @@
             
         case EFastFindFSPOpRemoveIgnorePath:
             {
+            OstTrace0( TRACE_NORMAL, DUP4_CFASTFINDFILESERVERPLUGINCONN_DOREQUEST, "CFastFindFileServerPluginConn::DoRequest() - EFastFindFSPOpRemoveIgnorePath" );
             WRITELOG( "CFastFindFileServerPluginConn::DoControl() - EFastFindFSPOpRemoveIgnorePath" );
             TInt err = myPlugin.RemoveIgnorePath( aRequest );
             aRequest.Complete( err );
             break;
             }
         }
+    OstTraceFunctionExit0( CFASTFINDFILESERVERPLUGINCONN_DOREQUEST_EXIT );
     }
 
 //-----------------------------------------------------------------------------
@@ -540,6 +634,7 @@
 //
 void CFastFindFileServerPluginConn::DoCancel( TInt /*aReqMask*/ )
     {
+    OstTrace0( TRACE_NORMAL, CFASTFINDFILESERVERPLUGINCONN_DOCANCEL, "CFastFindFileServerPluginConn::DoCancel()" );
     WRITELOG( "CFastFindFileServerPluginConn::DoCancel()" );
     iRequestQue.DoCancelAll( KErrCancel );
     }
@@ -550,6 +645,7 @@
 //
 CFsPluginConn* CFastFindFileServerPlugin::NewPluginConnL()
     {
+    OstTrace0( TRACE_NORMAL, CFASTFINDFILESERVERPLUGIN_NEWPLUGINCONNL, "CFastFindFileServerPluginConn::NewPluginConnL()" );
     WRITELOG( "CFastFindFileServerPluginConn::NewPluginConnL()" );
     return CFastFindFileServerPluginConn::NewL( *this );
     }
@@ -560,6 +656,7 @@
 //
 TInt CFastFindFileServerPlugin::RegisterNotification( CFsPluginConnRequest& aRequest )
     {
+    OstTrace0( TRACE_NORMAL, CFASTFINDFILESERVERPLUGIN_REGISTERNOTIFICATION, "CFastFindFileServerPlugin::RegisterNotification()" );
     WRITELOG( "CFastFindFileServerPlugin::RegisterNotification()" );
     
     if ( iNotification )
@@ -571,6 +668,7 @@
     
     if ( iQueue.Count() > 0 )
         {
+        OstTrace0( TRACE_NORMAL, DUP1_CFASTFINDFILESERVERPLUGIN_REGISTERNOTIFICATION, "CFastFindFileServerPlugin::RegisterNotification() - item in queue" );
         WRITELOG( "CFastFindFileServerPlugin::RegisterNotification() - item in queue" );
         
         TFastFindFSPStatus* queueStatus = iQueue[0];
@@ -602,6 +700,7 @@
 //
 TInt CFastFindFileServerPlugin::AddNotificationPath( CFsPluginConnRequest& aRequest )
     {
+    OstTrace0( TRACE_NORMAL, CFASTFINDFILESERVERPLUGIN_ADDNOTIFICATIONPATH, "CFastFindFileServerPlugin::AddNotificationPath()" );
     WRITELOG( "CFastFindFileServerPlugin::AddNotificationPath()" );
     TInt err = KErrNone;
     
@@ -627,6 +726,7 @@
                 }
             }
 
+        OstTraceExt1( TRACE_NORMAL, DUP1_CFASTFINDFILESERVERPLUGIN_ADDNOTIFICATIONPATH, "CFastFindFileServerPlugin::AddNotificationPath;add path=%S", status.iFileName );
         WRITELOG1( "CFastFindFileServerPlugin::AddNotificationPath() - add path: %S", &status.iFileName );
         TFileName* fn = new  TFileName;
         
@@ -654,6 +754,7 @@
 //
 TInt CFastFindFileServerPlugin::RemoveNotificationPath( CFsPluginConnRequest& aRequest )
     {
+    OstTraceFunctionEntry0( CFASTFINDFILESERVERPLUGIN_REMOVENOTIFICATIONPATH_ENTRY );
     WRITELOG( "CFastFindFileServerPlugin::RemoveNotificationPath()" );
     TInt err = KErrNone;
     
@@ -662,6 +763,7 @@
     
     if ( err != KErrNone )
         {
+        OstTraceFunctionExit0( CFASTFINDFILESERVERPLUGIN_REMOVENOTIFICATIONPATH_EXIT );
         return err;
         }
     
@@ -677,6 +779,7 @@
                 TFileName* tf = iPaths[i];
                 if ( tf->Compare(status.iFileName) == 0 )
                     {
+                    OstTraceExt1( TRACE_NORMAL, CFASTFINDFILESERVERPLUGIN_REMOVENOTIFICATIONPATH, "CFastFindFileServerPlugin::RemoveNotificationPath;remove path=%S", status.iFileName );
                     WRITELOG1( "CFastFindFileServerPlugin::RemoveNotificationPath() - remove path: %S", &status.iFileName );
                     delete tf;
                     tf = NULL;
@@ -690,6 +793,7 @@
         err = KErrNotFound;
         }
         
+    OstTraceFunctionExit0( DUP1_CFASTFINDFILESERVERPLUGIN_REMOVENOTIFICATIONPATH_EXIT );
     return err;
     }
     
@@ -699,6 +803,7 @@
 //
 TInt CFastFindFileServerPlugin::AddIgnorePath( CFsPluginConnRequest& aRequest )
     {
+    OstTraceFunctionEntry0( CFASTFINDFILESERVERPLUGIN_ADDIGNOREPATH_ENTRY );
     WRITELOG( "CFastFindFileServerPlugin::AddIgnorePath()" );
     TInt err = KErrNone;
     
@@ -707,6 +812,7 @@
     
     if ( err != KErrNone )
         {
+        OstTraceFunctionExit0( CFASTFINDFILESERVERPLUGIN_ADDIGNOREPATH_EXIT );
         return err;
         }
     
@@ -722,11 +828,13 @@
                 TFileName* tf = iIgnorePaths[i];
                 if( tf->Compare(status.iFileName) == 0 )
                     {
+                    OstTraceFunctionExit0( DUP1_CFASTFINDFILESERVERPLUGIN_ADDIGNOREPATH_EXIT );
                     return KErrNone;
                     }
                 }
             }
             
+        OstTraceExt1( TRACE_NORMAL, CFASTFINDFILESERVERPLUGIN_ADDIGNOREPATH, "CFastFindFileServerPlugin::AddIgnorePath;add path=%S", status.iFileName );
         WRITELOG1( "CFastFindFileServerPlugin::AddIgnorePath() - add path: %S", &status.iFileName );
         TFileName* fn = new TFileName;
         
@@ -745,6 +853,7 @@
         err = KErrNotFound;
         }
         
+    OstTraceFunctionExit0( DUP2_CFASTFINDFILESERVERPLUGIN_ADDIGNOREPATH_EXIT );
     return err;
     }
     
@@ -754,6 +863,7 @@
 //
 TInt CFastFindFileServerPlugin::RemoveIgnorePath( CFsPluginConnRequest& aRequest )
     {
+    OstTraceFunctionEntry0( CFASTFINDFILESERVERPLUGIN_REMOVEIGNOREPATH_ENTRY );
     WRITELOG( "CFastFindFileServerPlugin::RemoveIgnorePath()" );
     TInt err = KErrNone;
     
@@ -762,6 +872,7 @@
     
     if ( err != KErrNone )
         {
+        OstTraceFunctionExit0( CFASTFINDFILESERVERPLUGIN_REMOVEIGNOREPATH_EXIT );
         return err;
         }
     
@@ -777,6 +888,7 @@
                 TFileName* tf = iIgnorePaths[i];
                 if ( tf->Compare(status.iFileName) == 0 )
                     {
+                    OstTraceExt1( TRACE_NORMAL, CFASTFINDFILESERVERPLUGIN_REMOVEIGNOREPATH, "CFastFindFileServerPlugin::RemoveIgnorePath;remove path=%S", status.iFileName );
                     WRITELOG1( "CFastFindFileServerPlugin::RemoveIgnorePath() - remove path: %S", &status.iFileName );
                     delete tf;
                     tf = NULL;
@@ -790,6 +902,7 @@
         err = KErrNotFound;
         }
         
+    OstTraceFunctionExit0( DUP1_CFASTFINDFILESERVERPLUGIN_REMOVEIGNOREPATH_EXIT );
     return err;
     }
     
@@ -898,6 +1011,7 @@
 // @internalComponent
 CFastFindFileServerPluginFactory::CFastFindFileServerPluginFactory()
     {
+    OstTrace0( TRACE_NORMAL, CFASTFINDFILESERVERPLUGINFACTORY_CFASTFINDFILESERVERPLUGINFACTORY, "CFastFindFileServerPluginFactory::CFastFindFileServerPluginFactory()" );
     WRITELOG( "CFastFindFileServerPluginFactory::CFastFindFileServerPluginFactory()" );
     }
 
@@ -905,6 +1019,7 @@
 // @internalComponent
 TInt CFastFindFileServerPluginFactory::Install()
     {
+    OstTrace0( TRACE_NORMAL, CFASTFINDFILESERVERPLUGINFACTORY_INSTALL, "CFastFindFileServerPluginFactory::Install()" );
     WRITELOG( "CFastFindFileServerPluginFactory::Install()" );
     iSupportedDrives = KPluginAutoAttach;
     
@@ -914,6 +1029,7 @@
 // @internalComponent
 TInt CFastFindFileServerPluginFactory::UniquePosition()
     {
+    OstTrace0( TRACE_NORMAL, CFASTFINDFILESERVERPLUGINFACTORY_UNIQUEPOSITION, "CFastFindFileServerPluginFactory::UniquePosition()" );
     WRITELOG( "CFastFindFileServerPluginFactory::UniquePosition()" );
     return( KFastFindFSPluginPosition );
     }
@@ -922,6 +1038,7 @@
 // @internalComponent
 CFsPlugin* CFastFindFileServerPluginFactory::NewPluginL()
     {
+    OstTrace0( TRACE_NORMAL, CFASTFINDFILESERVERPLUGINFACTORY_NEWPLUGINL, "CFastFindFileServerPluginFactory::NewPluginL()" );
     WRITELOG( "CFastFindFileServerPluginFactory::NewPluginL()" );
     return CFastFindFileServerPlugin::NewL();
     }
@@ -932,6 +1049,7 @@
     {
     EXPORT_C CFsPluginFactory* CreateFileSystem()
         {
+        OstTrace0( TRACE_NORMAL, DUP1_CFASTFINDFILESERVERPLUGINFACTORY_NEWPLUGINL, "CFastFindFileServerPluginFactory::CreateFileSystem" );
         WRITELOG( "CFastFindFileServerPluginFactory::CreateFileSystem" );
         return( new CFastFindFileServerPluginFactory() );
         }
@@ -958,6 +1076,8 @@
     User::LeaveIfError( RegisterIntercept( EFsFileSize, EPreIntercept) );
     User::LeaveIfError( RegisterIntercept( EFsFileRename, EPreIntercept) );
     User::LeaveIfError( RegisterIntercept( EFsRename, EPreIntercept) );
+    User::LeaveIfError( RegisterIntercept( EFsMkDir, EPrePostIntercept) );
+    User::LeaveIfError( RegisterIntercept( EFsRmDir, EPrePostIntercept) );
     User::LeaveIfError( RegisterIntercept( EFsFileOpen, EPreIntercept) );
     User::LeaveIfError( RegisterIntercept( EFsFileTemp,    EPreIntercept) );
     User::LeaveIfError( RegisterIntercept( EFsFileUnLock, EPreIntercept) );
@@ -992,6 +1112,8 @@
     User::LeaveIfError( UnregisterIntercept( EFsFileSize, EPrePostIntercept) );
     User::LeaveIfError( UnregisterIntercept( EFsFileRename, EPrePostIntercept) );
     User::LeaveIfError( UnregisterIntercept( EFsRename, EPrePostIntercept) );
+    User::LeaveIfError( UnregisterIntercept( EFsMkDir, EPrePostIntercept) );
+    User::LeaveIfError( UnregisterIntercept( EFsRmDir, EPrePostIntercept) );
     User::LeaveIfError( UnregisterIntercept( EFsFileOpen, EPrePostIntercept) );
     User::LeaveIfError( UnregisterIntercept( EFsFileTemp, EPrePostIntercept) );
     User::LeaveIfError( UnregisterIntercept( EFsFileUnLock, EPrePostIntercept) );
@@ -1016,88 +1138,123 @@
     switch ( aFunction )
         {
         case EFsFileDuplicate:
+            OstTrace0( TRACE_NORMAL, CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS, "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileDuplicate" );
             WRITELOG( "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileDuplicate" );
-            break;
-            
+            break;            
         case EFsFileCreate:
+            OstTrace0( TRACE_NORMAL, DUP1_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS, "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileCreate" );
             WRITELOG( "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileCreate" );
             break;
         case EFsFileWrite:
+            OstTrace0( TRACE_NORMAL, DUP2_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS, "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileWrite" );
             WRITELOG( "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileWrite" );
             break;
         case EFsFileFlush:
+            OstTrace0( TRACE_NORMAL, DUP3_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS, "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileFlush" );
             WRITELOG( "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileFlush" );
             break;
         case EFsFileSetAtt:
+            OstTrace0( TRACE_NORMAL, DUP4_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS, "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileSetAtt" );
             WRITELOG( "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileSetAtt" );
             break;
         case EFsFileChangeMode:
+            OstTrace0( TRACE_NORMAL, DUP5_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS, "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileChangeMode" );
             WRITELOG( "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileChangeMode" );
             break;    
         case EFsDelete:
+            OstTrace0( TRACE_NORMAL, DUP6_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS, "CFastFindFileServerPlugin::PrintDebugEvents() - EFsDelete" );
             WRITELOG( "CFastFindFileServerPlugin::PrintDebugEvents() - EFsDelete" );
             break;    
         case EFsFileAdopt:
+            OstTrace0( TRACE_NORMAL, DUP7_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS, "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileAdopt" );
             WRITELOG( "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileAdopt" );
             break;    
         case EFsFileReplace:
+            OstTrace0( TRACE_NORMAL, DUP8_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS, "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileReplace" );
             WRITELOG( "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileReplace" );
             break;    
         case EFsFileLock:
+            OstTrace0( TRACE_NORMAL, DUP9_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS, "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileLock" );
             WRITELOG( "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileLock" );
             break;    
         case EFsFileSize:
+            OstTrace0( TRACE_NORMAL, DUP10_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS, "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileSize" );
             WRITELOG( "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileSize" );
             break;    
         case EFsFileModified:
+            OstTrace0( TRACE_NORMAL, DUP11_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS, "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileModified" );
             WRITELOG( "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileModified" );
             break;    
         case EFsFileRename:
+            OstTrace0( TRACE_NORMAL, DUP12_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS, "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileRename" );
             WRITELOG( "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileRename" );
             break;    
         case EFsRename:
+            OstTrace0( TRACE_NORMAL, DUP13_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS, "CFastFindFileServerPlugin::PrintDebugEvents() - EFsRename" );
             WRITELOG( "CFastFindFileServerPlugin::PrintDebugEvents() - EFsRename" );
-            break;    
+            break;
+        case EFsMkDir:
+            OstTrace0( TRACE_NORMAL, DUP14_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS, "CFastFindFileServerPlugin::PrintDebugEvents() - EFsMkDir" );
+            WRITELOG( "CFastFindFileServerPlugin::PrintDebugEvents() - EFsMkDir" );
+            break;
+        case EFsRmDir:
+            OstTrace0( TRACE_NORMAL, DUP15_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS, "CFastFindFileServerPlugin::PrintDebugEvents() - EFsRmDir" );
+            WRITELOG( "CFastFindFileServerPlugin::PrintDebugEvents() - EFsRmDir" );
+            break;
         case EFsFileOpen:
+            OstTrace0( TRACE_NORMAL, DUP16_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS, "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileOpen" );
             WRITELOG( "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileOpen" );
             break;    
         case EFsFileTemp:
+            OstTrace0( TRACE_NORMAL, DUP17_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS, "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileTemp" );
             WRITELOG( "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileTemp" );
             break;    
         case EFsFileUnLock:
+            OstTrace0( TRACE_NORMAL, DUP18_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS, "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileUnLock" );
             WRITELOG( "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileUnLock" );
             break;    
         case EFsFileSetSize:
+            OstTrace0( TRACE_NORMAL, DUP19_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS, "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileSetSize" );
             WRITELOG( "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileSetSize" );
             break;    
         case EFsFileSetModified:
+            OstTrace0( TRACE_NORMAL, DUP20_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS, "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileSetModified" );
             WRITELOG( "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileSetModified" );
             break;
         case EFsFileDrive:
+            OstTrace0( TRACE_NORMAL, DUP21_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS, "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileDrive" );
             WRITELOG( "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileDrive" );
             break;    
         case EFsReplace:
+            OstTrace0( TRACE_NORMAL, DUP22_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS, "CFastFindFileServerPlugin::PrintDebugEvents() - EFsReplace" );
             WRITELOG( "CFastFindFileServerPlugin::PrintDebugEvents() - EFsReplace" );
             break;    
         case EFsFileSubClose:
+            OstTrace0( TRACE_NORMAL, DUP23_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS, "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileSubClose" );
             WRITELOG( "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileSubClose" );
             break;    
         case EFsFileRead:
+            OstTrace0( TRACE_NORMAL, DUP24_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS, "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileRead" );
             WRITELOG( "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileRead" );
             break;
         case EFsFileSeek:
+            OstTrace0( TRACE_NORMAL, DUP25_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS, "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileSeek" );
             WRITELOG( "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileSeek" );
             break;    
         case EFsFileAtt:
+            OstTrace0( TRACE_NORMAL, DUP26_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS, "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileAtt" );
             WRITELOG( "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileAtt" );
             break;    
         case EFsFileSet:
+            OstTrace0( TRACE_NORMAL, DUP27_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS, "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileSet" );
             WRITELOG( "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileSet" );
             break;    
         case EFsFileName:
+            OstTrace0( TRACE_NORMAL, DUP28_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS, "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileName" );
             WRITELOG( "CFastFindFileServerPlugin::PrintDebugEvents() - EFsFileName" );
             break;    
         case EFsDirOpen:
+            OstTrace0( TRACE_NORMAL, DUP29_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS, "CFastFindFileServerPlugin::PrintDebugEvents() - EFsDirOpen" );
             WRITELOG( "CFastFindFileServerPlugin::PrintDebugEvents() - EFsDirOpen" );
             break;    
         default:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/file/fastfindfileserverplugin/traces/OstTraceDefinitions.h	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 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: 
+*
+*/
+#ifndef __OSTTRACEDEFINITIONS_H__
+#define __OSTTRACEDEFINITIONS_H__
+// OST_TRACE_COMPILER_IN_USE flag has been added by Trace Compiler
+// REMOVE BEFORE CHECK-IN TO VERSION CONTROL
+//#define OST_TRACE_COMPILER_IN_USE
+#include <opensystemtrace.h>
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/file/fastfindfileserverplugin/traces/fastfindfileserverpluginTraces.h	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,165 @@
+// Created by TraceCompiler 2.1.2
+// DO NOT EDIT, CHANGES WILL BE LOST
+
+#ifndef __FASTFINDFILESERVERPLUGINTRACES_H__
+#define __FASTFINDFILESERVERPLUGINTRACES_H__
+
+#define KOstTraceComponentID 0x2001f6fa
+
+#define CFASTFINDFILESERVERPLUGIN_CFASTFINDFILESERVERPLUGIN 0x860001
+#define DUP1_CFASTFINDFILESERVERPLUGIN_CFASTFINDFILESERVERPLUGIN 0x860002
+#define CFASTFINDFILESERVERPLUGIN_NEWL 0x860003
+#define CFASTFINDFILESERVERPLUGIN_INITIALISEL 0x860004
+#define CFASTFINDFILESERVERPLUGIN_ENABLEL 0x860005
+#define CFASTFINDFILESERVERPLUGIN_DISABLEL 0x860006
+#define CFASTFINDFILESERVERPLUGIN_ADDCONNECTION 0x860007
+#define CFASTFINDFILESERVERPLUGIN_REMOVECONNECTION 0x860008
+#define DUP1_CFASTFINDFILESERVERPLUGIN_REMOVECONNECTION 0x860009
+#define CFASTFINDFILESERVERPLUGIN_DOREQUESTL 0x86000a
+#define DUP1_CFASTFINDFILESERVERPLUGIN_DOREQUESTL 0x86000b
+#define DUP2_CFASTFINDFILESERVERPLUGIN_DOREQUESTL 0x86000c
+#define DUP3_CFASTFINDFILESERVERPLUGIN_DOREQUESTL 0x86000d
+#define DUP4_CFASTFINDFILESERVERPLUGIN_DOREQUESTL 0x86000e
+#define DUP5_CFASTFINDFILESERVERPLUGIN_DOREQUESTL 0x86000f
+#define DUP6_CFASTFINDFILESERVERPLUGIN_DOREQUESTL 0x860010
+#define DUP7_CFASTFINDFILESERVERPLUGIN_DOREQUESTL 0x860011
+#define DUP8_CFASTFINDFILESERVERPLUGIN_DOREQUESTL 0x860012
+#define DUP9_CFASTFINDFILESERVERPLUGIN_DOREQUESTL 0x860013
+#define DUP10_CFASTFINDFILESERVERPLUGIN_DOREQUESTL 0x860014
+#define DUP11_CFASTFINDFILESERVERPLUGIN_DOREQUESTL 0x860015
+#define DUP12_CFASTFINDFILESERVERPLUGIN_DOREQUESTL 0x860016
+#define DUP13_CFASTFINDFILESERVERPLUGIN_DOREQUESTL 0x860017
+#define DUP14_CFASTFINDFILESERVERPLUGIN_DOREQUESTL 0x860018
+#define DUP15_CFASTFINDFILESERVERPLUGIN_DOREQUESTL 0x860019
+#define DUP16_CFASTFINDFILESERVERPLUGIN_DOREQUESTL 0x86001a
+#define DUP17_CFASTFINDFILESERVERPLUGIN_DOREQUESTL 0x86001b
+#define DUP18_CFASTFINDFILESERVERPLUGIN_DOREQUESTL 0x86001c
+#define DUP19_CFASTFINDFILESERVERPLUGIN_DOREQUESTL 0x86001d
+#define DUP20_CFASTFINDFILESERVERPLUGIN_DOREQUESTL 0x86001e
+#define DUP21_CFASTFINDFILESERVERPLUGIN_DOREQUESTL 0x86001f
+#define DUP22_CFASTFINDFILESERVERPLUGIN_DOREQUESTL 0x860020
+#define DUP23_CFASTFINDFILESERVERPLUGIN_DOREQUESTL 0x860021
+#define DUP24_CFASTFINDFILESERVERPLUGIN_DOREQUESTL 0x860022
+#define CFASTFINDFILESERVERPLUGINCONN_NEWL 0x860023
+#define CFASTFINDFILESERVERPLUGINCONN_CFASTFINDFILESERVERPLUGINCONN 0x860024
+#define DUP1_CFASTFINDFILESERVERPLUGINCONN_CFASTFINDFILESERVERPLUGINCONN 0x860025
+#define CFASTFINDFILESERVERPLUGINCONN_DOCONTROL 0x860026
+#define DUP1_CFASTFINDFILESERVERPLUGINCONN_DOCONTROL 0x860027
+#define DUP2_CFASTFINDFILESERVERPLUGINCONN_DOCONTROL 0x860028
+#define DUP3_CFASTFINDFILESERVERPLUGINCONN_DOCONTROL 0x860029
+#define CFASTFINDFILESERVERPLUGINCONN_DOREQUEST 0x86002a
+#define DUP1_CFASTFINDFILESERVERPLUGINCONN_DOREQUEST 0x86002b
+#define DUP2_CFASTFINDFILESERVERPLUGINCONN_DOREQUEST 0x86002c
+#define DUP3_CFASTFINDFILESERVERPLUGINCONN_DOREQUEST 0x86002d
+#define DUP4_CFASTFINDFILESERVERPLUGINCONN_DOREQUEST 0x86002e
+#define CFASTFINDFILESERVERPLUGINCONN_DOCANCEL 0x86002f
+#define CFASTFINDFILESERVERPLUGIN_NEWPLUGINCONNL 0x860030
+#define CFASTFINDFILESERVERPLUGIN_REGISTERNOTIFICATION 0x860031
+#define DUP1_CFASTFINDFILESERVERPLUGIN_REGISTERNOTIFICATION 0x860032
+#define CFASTFINDFILESERVERPLUGIN_ADDNOTIFICATIONPATH 0x860033
+#define DUP1_CFASTFINDFILESERVERPLUGIN_ADDNOTIFICATIONPATH 0x860034
+#define CFASTFINDFILESERVERPLUGIN_REMOVENOTIFICATIONPATH 0x860035
+#define CFASTFINDFILESERVERPLUGIN_ADDIGNOREPATH 0x860036
+#define CFASTFINDFILESERVERPLUGIN_REMOVEIGNOREPATH 0x860037
+#define CFASTFINDFILESERVERPLUGINFACTORY_CFASTFINDFILESERVERPLUGINFACTORY 0x860038
+#define CFASTFINDFILESERVERPLUGINFACTORY_INSTALL 0x860039
+#define CFASTFINDFILESERVERPLUGINFACTORY_UNIQUEPOSITION 0x86003a
+#define CFASTFINDFILESERVERPLUGINFACTORY_NEWPLUGINL 0x86003b
+#define DUP1_CFASTFINDFILESERVERPLUGINFACTORY_NEWPLUGINL 0x86003c
+#define CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS 0x86003d
+#define DUP1_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS 0x86003e
+#define DUP2_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS 0x86003f
+#define DUP3_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS 0x860040
+#define DUP4_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS 0x860041
+#define DUP5_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS 0x860042
+#define DUP6_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS 0x860043
+#define DUP7_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS 0x860044
+#define DUP8_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS 0x860045
+#define DUP9_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS 0x860046
+#define DUP10_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS 0x860047
+#define DUP11_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS 0x860048
+#define DUP12_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS 0x860049
+#define DUP13_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS 0x86004a
+#define DUP14_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS 0x86004b
+#define DUP15_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS 0x86004c
+#define DUP16_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS 0x86004d
+#define DUP17_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS 0x86004e
+#define DUP18_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS 0x86004f
+#define DUP19_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS 0x860050
+#define DUP20_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS 0x860051
+#define DUP21_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS 0x860052
+#define DUP22_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS 0x860053
+#define DUP23_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS 0x860054
+#define DUP24_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS 0x860055
+#define DUP25_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS 0x860056
+#define DUP26_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS 0x860057
+#define DUP27_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS 0x860058
+#define DUP28_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS 0x860059
+#define DUP29_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS 0x86005a
+#define CFASTFINDFILESERVERPLUGIN_DOREQUESTL_ENTRY 0x8a0001
+#define CFASTFINDFILESERVERPLUGIN_DOREQUESTL_EXIT 0x8a0002
+#define DUP1_CFASTFINDFILESERVERPLUGIN_DOREQUESTL_EXIT 0x8a0003
+#define DUP2_CFASTFINDFILESERVERPLUGIN_DOREQUESTL_EXIT 0x8a0004
+#define DUP3_CFASTFINDFILESERVERPLUGIN_DOREQUESTL_EXIT 0x8a0005
+#define DUP4_CFASTFINDFILESERVERPLUGIN_DOREQUESTL_EXIT 0x8a0006
+#define DUP5_CFASTFINDFILESERVERPLUGIN_DOREQUESTL_EXIT 0x8a0007
+#define DUP6_CFASTFINDFILESERVERPLUGIN_DOREQUESTL_EXIT 0x8a0008
+#define DUP7_CFASTFINDFILESERVERPLUGIN_DOREQUESTL_EXIT 0x8a0009
+#define DUP8_CFASTFINDFILESERVERPLUGIN_DOREQUESTL_EXIT 0x8a000a
+#define DUP9_CFASTFINDFILESERVERPLUGIN_DOREQUESTL_EXIT 0x8a000b
+#define CFASTFINDFILESERVERPLUGINCONN_DOREQUEST_ENTRY 0x8a000c
+#define CFASTFINDFILESERVERPLUGINCONN_DOREQUEST_EXIT 0x8a000d
+#define CFASTFINDFILESERVERPLUGIN_REMOVENOTIFICATIONPATH_ENTRY 0x8a000e
+#define CFASTFINDFILESERVERPLUGIN_REMOVENOTIFICATIONPATH_EXIT 0x8a000f
+#define DUP1_CFASTFINDFILESERVERPLUGIN_REMOVENOTIFICATIONPATH_EXIT 0x8a0010
+#define CFASTFINDFILESERVERPLUGIN_ADDIGNOREPATH_ENTRY 0x8a0011
+#define CFASTFINDFILESERVERPLUGIN_ADDIGNOREPATH_EXIT 0x8a0012
+#define DUP1_CFASTFINDFILESERVERPLUGIN_ADDIGNOREPATH_EXIT 0x8a0013
+#define DUP2_CFASTFINDFILESERVERPLUGIN_ADDIGNOREPATH_EXIT 0x8a0014
+#define CFASTFINDFILESERVERPLUGIN_REMOVEIGNOREPATH_ENTRY 0x8a0015
+#define CFASTFINDFILESERVERPLUGIN_REMOVEIGNOREPATH_EXIT 0x8a0016
+#define DUP1_CFASTFINDFILESERVERPLUGIN_REMOVEIGNOREPATH_EXIT 0x8a0017
+
+
+#ifndef __KERNEL_MODE__
+inline TBool OstTraceGen1( TUint32 aTraceID, const TDesC16& aParam1 )
+    {
+    TBool retval;
+    TInt size = aParam1.Size();
+    // BTrace assumes that parameter size is atleast 4 bytes
+    if (size % 4 == 0)
+        {
+        TUint8* ptr = ( TUint8* )aParam1.Ptr();
+        // Data is written directly and length is determined from trace message length
+        retval = OstSendNBytes( EXTRACT_GROUP_ID(aTraceID), EOstTrace, KOstTraceComponentID, aTraceID, ptr, size );
+        }
+    else
+        {
+        TUint8 data[ KOstMaxDataLength ];
+        TUint8* ptr = data;
+        if (size > KOstMaxDataLength)
+            {
+            size = KOstMaxDataLength;
+            }
+        TInt sizeAligned = ( size + 3 ) & ~3;
+        memcpy( ptr, aParam1.Ptr(), size );
+        ptr += size;
+        // Fillers are written to get 32-bit alignment
+        while ( size++ < sizeAligned )
+            {
+            *ptr++ = 0;
+            }
+        ptr -= sizeAligned;
+        size = sizeAligned;
+        // Data is written directly and length is determined from trace message length
+        retval = OstSendNBytes( EXTRACT_GROUP_ID(aTraceID), EOstTrace, KOstTraceComponentID, aTraceID, ptr, size );
+        }
+    return retval;
+    }
+#endif
+
+
+#endif
+
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/file/fastfindfileserverplugin/traces/fixed_id.definitions	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,116 @@
+#Fixed group and trace id definitions. If this file is removed, the identifiers are rebuilt.
+[GROUP]TRACE_FLOW=0x8a
+[GROUP]TRACE_NORMAL=0x86
+[TRACE]TRACE_FLOW[0x8A]_CFASTFINDFILESERVERPLUGINCONN_DOREQUEST_ENTRY=0xc
+[TRACE]TRACE_FLOW[0x8A]_CFASTFINDFILESERVERPLUGINCONN_DOREQUEST_EXIT=0xd
+[TRACE]TRACE_FLOW[0x8A]_CFASTFINDFILESERVERPLUGIN_ADDIGNOREPATH_ENTRY=0x11
+[TRACE]TRACE_FLOW[0x8A]_CFASTFINDFILESERVERPLUGIN_ADDIGNOREPATH_EXIT=0x12
+[TRACE]TRACE_FLOW[0x8A]_CFASTFINDFILESERVERPLUGIN_DOREQUESTL_ENTRY=0x1
+[TRACE]TRACE_FLOW[0x8A]_CFASTFINDFILESERVERPLUGIN_DOREQUESTL_EXIT=0x2
+[TRACE]TRACE_FLOW[0x8A]_CFASTFINDFILESERVERPLUGIN_REMOVEIGNOREPATH_ENTRY=0x15
+[TRACE]TRACE_FLOW[0x8A]_CFASTFINDFILESERVERPLUGIN_REMOVEIGNOREPATH_EXIT=0x16
+[TRACE]TRACE_FLOW[0x8A]_CFASTFINDFILESERVERPLUGIN_REMOVENOTIFICATIONPATH_ENTRY=0xe
+[TRACE]TRACE_FLOW[0x8A]_CFASTFINDFILESERVERPLUGIN_REMOVENOTIFICATIONPATH_EXIT=0xf
+[TRACE]TRACE_FLOW[0x8A]_DUP1_CFASTFINDFILESERVERPLUGIN_ADDIGNOREPATH_EXIT=0x13
+[TRACE]TRACE_FLOW[0x8A]_DUP1_CFASTFINDFILESERVERPLUGIN_DOREQUESTL_EXIT=0x3
+[TRACE]TRACE_FLOW[0x8A]_DUP1_CFASTFINDFILESERVERPLUGIN_REMOVEIGNOREPATH_EXIT=0x17
+[TRACE]TRACE_FLOW[0x8A]_DUP1_CFASTFINDFILESERVERPLUGIN_REMOVENOTIFICATIONPATH_EXIT=0x10
+[TRACE]TRACE_FLOW[0x8A]_DUP2_CFASTFINDFILESERVERPLUGIN_ADDIGNOREPATH_EXIT=0x14
+[TRACE]TRACE_FLOW[0x8A]_DUP2_CFASTFINDFILESERVERPLUGIN_DOREQUESTL_EXIT=0x4
+[TRACE]TRACE_FLOW[0x8A]_DUP3_CFASTFINDFILESERVERPLUGIN_DOREQUESTL_EXIT=0x5
+[TRACE]TRACE_FLOW[0x8A]_DUP4_CFASTFINDFILESERVERPLUGIN_DOREQUESTL_EXIT=0x6
+[TRACE]TRACE_FLOW[0x8A]_DUP5_CFASTFINDFILESERVERPLUGIN_DOREQUESTL_EXIT=0x7
+[TRACE]TRACE_FLOW[0x8A]_DUP6_CFASTFINDFILESERVERPLUGIN_DOREQUESTL_EXIT=0x8
+[TRACE]TRACE_FLOW[0x8A]_DUP7_CFASTFINDFILESERVERPLUGIN_DOREQUESTL_EXIT=0x9
+[TRACE]TRACE_FLOW[0x8A]_DUP8_CFASTFINDFILESERVERPLUGIN_DOREQUESTL_EXIT=0xa
+[TRACE]TRACE_FLOW[0x8A]_DUP9_CFASTFINDFILESERVERPLUGIN_DOREQUESTL_EXIT=0xb
+[TRACE]TRACE_NORMAL[0x86]_CFASTFINDFILESERVERPLUGINCONN_CFASTFINDFILESERVERPLUGINCONN=0x24
+[TRACE]TRACE_NORMAL[0x86]_CFASTFINDFILESERVERPLUGINCONN_DOCANCEL=0x2f
+[TRACE]TRACE_NORMAL[0x86]_CFASTFINDFILESERVERPLUGINCONN_DOCONTROL=0x26
+[TRACE]TRACE_NORMAL[0x86]_CFASTFINDFILESERVERPLUGINCONN_DOREQUEST=0x2a
+[TRACE]TRACE_NORMAL[0x86]_CFASTFINDFILESERVERPLUGINCONN_NEWL=0x23
+[TRACE]TRACE_NORMAL[0x86]_CFASTFINDFILESERVERPLUGINFACTORY_CFASTFINDFILESERVERPLUGINFACTORY=0x38
+[TRACE]TRACE_NORMAL[0x86]_CFASTFINDFILESERVERPLUGINFACTORY_INSTALL=0x39
+[TRACE]TRACE_NORMAL[0x86]_CFASTFINDFILESERVERPLUGINFACTORY_NEWPLUGINL=0x3b
+[TRACE]TRACE_NORMAL[0x86]_CFASTFINDFILESERVERPLUGINFACTORY_UNIQUEPOSITION=0x3a
+[TRACE]TRACE_NORMAL[0x86]_CFASTFINDFILESERVERPLUGIN_ADDCONNECTION=0x7
+[TRACE]TRACE_NORMAL[0x86]_CFASTFINDFILESERVERPLUGIN_ADDIGNOREPATH=0x36
+[TRACE]TRACE_NORMAL[0x86]_CFASTFINDFILESERVERPLUGIN_ADDNOTIFICATIONPATH=0x33
+[TRACE]TRACE_NORMAL[0x86]_CFASTFINDFILESERVERPLUGIN_CFASTFINDFILESERVERPLUGIN=0x1
+[TRACE]TRACE_NORMAL[0x86]_CFASTFINDFILESERVERPLUGIN_DISABLEL=0x6
+[TRACE]TRACE_NORMAL[0x86]_CFASTFINDFILESERVERPLUGIN_DOREQUESTL=0xa
+[TRACE]TRACE_NORMAL[0x86]_CFASTFINDFILESERVERPLUGIN_ENABLEL=0x5
+[TRACE]TRACE_NORMAL[0x86]_CFASTFINDFILESERVERPLUGIN_INITIALISEL=0x4
+[TRACE]TRACE_NORMAL[0x86]_CFASTFINDFILESERVERPLUGIN_NEWL=0x3
+[TRACE]TRACE_NORMAL[0x86]_CFASTFINDFILESERVERPLUGIN_NEWPLUGINCONNL=0x30
+[TRACE]TRACE_NORMAL[0x86]_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS=0x3d
+[TRACE]TRACE_NORMAL[0x86]_CFASTFINDFILESERVERPLUGIN_REGISTERNOTIFICATION=0x31
+[TRACE]TRACE_NORMAL[0x86]_CFASTFINDFILESERVERPLUGIN_REMOVECONNECTION=0x8
+[TRACE]TRACE_NORMAL[0x86]_CFASTFINDFILESERVERPLUGIN_REMOVEIGNOREPATH=0x37
+[TRACE]TRACE_NORMAL[0x86]_CFASTFINDFILESERVERPLUGIN_REMOVENOTIFICATIONPATH=0x35
+[TRACE]TRACE_NORMAL[0x86]_DUP10_CFASTFINDFILESERVERPLUGIN_DOREQUESTL=0x14
+[TRACE]TRACE_NORMAL[0x86]_DUP10_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS=0x47
+[TRACE]TRACE_NORMAL[0x86]_DUP11_CFASTFINDFILESERVERPLUGIN_DOREQUESTL=0x15
+[TRACE]TRACE_NORMAL[0x86]_DUP11_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS=0x48
+[TRACE]TRACE_NORMAL[0x86]_DUP12_CFASTFINDFILESERVERPLUGIN_DOREQUESTL=0x16
+[TRACE]TRACE_NORMAL[0x86]_DUP12_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS=0x49
+[TRACE]TRACE_NORMAL[0x86]_DUP13_CFASTFINDFILESERVERPLUGIN_DOREQUESTL=0x17
+[TRACE]TRACE_NORMAL[0x86]_DUP13_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS=0x4a
+[TRACE]TRACE_NORMAL[0x86]_DUP14_CFASTFINDFILESERVERPLUGIN_DOREQUESTL=0x18
+[TRACE]TRACE_NORMAL[0x86]_DUP14_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS=0x4b
+[TRACE]TRACE_NORMAL[0x86]_DUP15_CFASTFINDFILESERVERPLUGIN_DOREQUESTL=0x19
+[TRACE]TRACE_NORMAL[0x86]_DUP15_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS=0x4c
+[TRACE]TRACE_NORMAL[0x86]_DUP16_CFASTFINDFILESERVERPLUGIN_DOREQUESTL=0x1a
+[TRACE]TRACE_NORMAL[0x86]_DUP16_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS=0x4d
+[TRACE]TRACE_NORMAL[0x86]_DUP17_CFASTFINDFILESERVERPLUGIN_DOREQUESTL=0x1b
+[TRACE]TRACE_NORMAL[0x86]_DUP17_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS=0x4e
+[TRACE]TRACE_NORMAL[0x86]_DUP18_CFASTFINDFILESERVERPLUGIN_DOREQUESTL=0x1c
+[TRACE]TRACE_NORMAL[0x86]_DUP18_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS=0x4f
+[TRACE]TRACE_NORMAL[0x86]_DUP19_CFASTFINDFILESERVERPLUGIN_DOREQUESTL=0x1d
+[TRACE]TRACE_NORMAL[0x86]_DUP19_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS=0x50
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CFASTFINDFILESERVERPLUGINCONN_CFASTFINDFILESERVERPLUGINCONN=0x25
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CFASTFINDFILESERVERPLUGINCONN_DOCONTROL=0x27
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CFASTFINDFILESERVERPLUGINCONN_DOREQUEST=0x2b
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CFASTFINDFILESERVERPLUGINFACTORY_NEWPLUGINL=0x3c
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CFASTFINDFILESERVERPLUGIN_ADDNOTIFICATIONPATH=0x34
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CFASTFINDFILESERVERPLUGIN_CFASTFINDFILESERVERPLUGIN=0x2
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CFASTFINDFILESERVERPLUGIN_DOREQUESTL=0xb
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS=0x3e
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CFASTFINDFILESERVERPLUGIN_REGISTERNOTIFICATION=0x32
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CFASTFINDFILESERVERPLUGIN_REMOVECONNECTION=0x9
+[TRACE]TRACE_NORMAL[0x86]_DUP20_CFASTFINDFILESERVERPLUGIN_DOREQUESTL=0x1e
+[TRACE]TRACE_NORMAL[0x86]_DUP20_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS=0x51
+[TRACE]TRACE_NORMAL[0x86]_DUP21_CFASTFINDFILESERVERPLUGIN_DOREQUESTL=0x1f
+[TRACE]TRACE_NORMAL[0x86]_DUP21_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS=0x52
+[TRACE]TRACE_NORMAL[0x86]_DUP22_CFASTFINDFILESERVERPLUGIN_DOREQUESTL=0x20
+[TRACE]TRACE_NORMAL[0x86]_DUP22_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS=0x53
+[TRACE]TRACE_NORMAL[0x86]_DUP23_CFASTFINDFILESERVERPLUGIN_DOREQUESTL=0x21
+[TRACE]TRACE_NORMAL[0x86]_DUP23_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS=0x54
+[TRACE]TRACE_NORMAL[0x86]_DUP24_CFASTFINDFILESERVERPLUGIN_DOREQUESTL=0x22
+[TRACE]TRACE_NORMAL[0x86]_DUP24_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS=0x55
+[TRACE]TRACE_NORMAL[0x86]_DUP25_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS=0x56
+[TRACE]TRACE_NORMAL[0x86]_DUP26_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS=0x57
+[TRACE]TRACE_NORMAL[0x86]_DUP27_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS=0x58
+[TRACE]TRACE_NORMAL[0x86]_DUP28_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS=0x59
+[TRACE]TRACE_NORMAL[0x86]_DUP29_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS=0x5a
+[TRACE]TRACE_NORMAL[0x86]_DUP2_CFASTFINDFILESERVERPLUGINCONN_DOCONTROL=0x28
+[TRACE]TRACE_NORMAL[0x86]_DUP2_CFASTFINDFILESERVERPLUGINCONN_DOREQUEST=0x2c
+[TRACE]TRACE_NORMAL[0x86]_DUP2_CFASTFINDFILESERVERPLUGIN_DOREQUESTL=0xc
+[TRACE]TRACE_NORMAL[0x86]_DUP2_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS=0x3f
+[TRACE]TRACE_NORMAL[0x86]_DUP3_CFASTFINDFILESERVERPLUGINCONN_DOCONTROL=0x29
+[TRACE]TRACE_NORMAL[0x86]_DUP3_CFASTFINDFILESERVERPLUGINCONN_DOREQUEST=0x2d
+[TRACE]TRACE_NORMAL[0x86]_DUP3_CFASTFINDFILESERVERPLUGIN_DOREQUESTL=0xd
+[TRACE]TRACE_NORMAL[0x86]_DUP3_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS=0x40
+[TRACE]TRACE_NORMAL[0x86]_DUP4_CFASTFINDFILESERVERPLUGINCONN_DOREQUEST=0x2e
+[TRACE]TRACE_NORMAL[0x86]_DUP4_CFASTFINDFILESERVERPLUGIN_DOREQUESTL=0xe
+[TRACE]TRACE_NORMAL[0x86]_DUP4_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS=0x41
+[TRACE]TRACE_NORMAL[0x86]_DUP5_CFASTFINDFILESERVERPLUGIN_DOREQUESTL=0xf
+[TRACE]TRACE_NORMAL[0x86]_DUP5_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS=0x42
+[TRACE]TRACE_NORMAL[0x86]_DUP6_CFASTFINDFILESERVERPLUGIN_DOREQUESTL=0x10
+[TRACE]TRACE_NORMAL[0x86]_DUP6_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS=0x43
+[TRACE]TRACE_NORMAL[0x86]_DUP7_CFASTFINDFILESERVERPLUGIN_DOREQUESTL=0x11
+[TRACE]TRACE_NORMAL[0x86]_DUP7_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS=0x44
+[TRACE]TRACE_NORMAL[0x86]_DUP8_CFASTFINDFILESERVERPLUGIN_DOREQUESTL=0x12
+[TRACE]TRACE_NORMAL[0x86]_DUP8_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS=0x45
+[TRACE]TRACE_NORMAL[0x86]_DUP9_CFASTFINDFILESERVERPLUGIN_DOREQUESTL=0x13
+[TRACE]TRACE_NORMAL[0x86]_DUP9_CFASTFINDFILESERVERPLUGIN_PRINTDEBUGEVENTS=0x46
--- a/harvesterplugins/file/group/fileplugin.mmp	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/file/group/fileplugin.mmp	Mon May 03 12:32:15 2010 +0300
@@ -33,7 +33,7 @@
 SOURCE        cmmcmonitor.cpp
 
 USERINCLUDE   ../inc
-USERINCLUDE   ../inc/monitorplugin
+USERINCLUDE   ../inc/monitorplugin ../traces
 
 APP_LAYER_SYSTEMINCLUDE
 SYSTEMINCLUDE /epoc32/include/ecom
--- a/harvesterplugins/file/inc/cfileplugin.h	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/file/inc/cfileplugin.h	Mon May 03 12:32:15 2010 +0300
@@ -56,11 +56,29 @@
 	void StartHarvestingL(const TDesC& aQualifiedBaseAppClass);
 
 	/**
-	 * CreateFileIndexItemL sends a file for indexing
+	 * CreateContentIndexItemL sends a file for indexing contents
 	 * @aFilename full path and filename of the file to be indexed
 	 * @aActionType action to be taken on the file
 	 */
-	void CreateFileIndexItemL(const TDesC& aFilename, TCPixActionType aActionType);
+	void CreateContentIndexItemL(const TDesC& aFilename, TCPixActionType aActionType);
+	/**
+     * CreateFolderIndexItemL sends a folder/file for indexing
+     * @aFilename full path and filename of the file to be indexed
+     * @aActionType action to be taken on the file
+     */
+	void CreateFolderFileIndexItemL(const TDesC& aFilename, TCPixActionType aActionType, TBool aIsDir = ETrue);
+private:
+	/**
+     * CreateCpixDocumentL creates a document file 
+     * @aFilePath full path of the file/folder to be indexed     
+     */
+	CSearchDocument* CreateCpixDocumentL(const TDesC& aFilePath, TBool aIsDir);	
+	
+	/**
+     * IsFileTypeMedia checks for vaild extention type to be indexed 
+     * @aExt file extention
+     */
+	TBool IsFileTypeMedia(const TDesC& aExt);
 
 public:
 	// 
@@ -105,7 +123,7 @@
 	 * @aBaseAppClass return descriptor containing the baseAppClass
 	 * returns KErrNone on success or a standard error code
 	 */
-	static TInt FormBaseAppClass(TDriveNumber aMedia, TDes& aBaseAppClass);
+	static TInt FormBaseAppClass(TDriveNumber aMedia,const TDesC& aGenericAppClass, TDes& aBaseAppClass);
 	
 	
 	/**
@@ -113,7 +131,7 @@
 	 * @param aMedia - The drive for which the path should be constructed.
 	 * returns pointer to the IndexDb path.
 	 */
-	HBufC* DatabasePathLC(TDriveNumber aMedia);
+	HBufC* DatabasePathLC(TDriveNumber aMedia,const TDesC& aPath);
 
 protected:
 	CFilePlugin();
@@ -122,6 +140,8 @@
 private:
     // CPix database 
     CCPixIndexer* iIndexer[EDriveZ+1]; // EDriveZ enum value is 25, so add 1.
+    
+    CCPixIndexer* iFolderIndexer[EDriveZ+1];
 
     // File system session
     RFs iFs;
@@ -134,8 +154,8 @@
     CFileMonitor* iMonitor;
 
     // MMC monitor
-    CMMCMonitor* iMmcMonitor;
-
+    CMMCMonitor* iMmcMonitor; 
+    
 #ifdef __PERFORMANCE_DATA
     TTime iStartTime[26];// for the all drives
     TTime iCompleteTime;
--- a/harvesterplugins/file/inc/cfolderrenamedharvester.h	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/file/inc/cfolderrenamedharvester.h	Mon May 03 12:32:15 2010 +0300
@@ -117,6 +117,8 @@
         * @return ETrue, if ready.
         */
         void SetNextRequest( TFileHarvesterState aState );
+        
+        void HandleFolderRenameL();
 
     private:
         // File plugin for observing
--- a/harvesterplugins/file/inc/monitorplugin/fastfindfileserverpluginclient.h	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/file/inc/monitorplugin/fastfindfileserverpluginclient.h	Mon May 03 12:32:15 2010 +0300
@@ -50,6 +50,8 @@
 	EFastFindFileDeleted,
 	EFastFindDriveFormatted,
 	EFastFindFileUnknown,
+	EFastFindDirCreated,
+	EFastFindDirDeleted,
 	};
 
 typedef TPckgBuf<TFastFindFSPStatus> TFastFindFSPStatusPckg;
--- a/harvesterplugins/file/src/cfileharvester.cpp	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/file/src/cfileharvester.cpp	Mon May 03 12:32:15 2010 +0300
@@ -24,6 +24,11 @@
 // For Logging
 #include "harvesterserverlogger.h"
 #include "cfileharvester.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "cfileharvesterTraces.h"
+#endif
+
 
 // CONSTANTS
 _LIT( KFileMask, "*.*" );
@@ -67,9 +72,11 @@
     iFilePlugin( aFilePlugin ),
     iFs( aFs )
     {
+    OstTraceFunctionEntry0( CFILEHARVESTER_CFILEHARVESTER_ENTRY );
     CPIXLOGSTRING("ENTER CFileHarvester::CFileHarvester");
     CActiveScheduler::Add( this );
     CPIXLOGSTRING("END CFileHarvester::CFileHarvester");
+    OstTraceFunctionExit0( CFILEHARVESTER_CFILEHARVESTER_EXIT );
     }
 
 
@@ -89,6 +96,7 @@
 //
 void CFileHarvester::StartL( const TDriveNumber aDriveNumber )
     {
+    OstTraceFunctionEntry0( CFILEHARVESTER_STARTL_ENTRY );
     CPIXLOGSTRING("ENTER CFileHarvester::Start");
 
     TFileName rootPath;
@@ -100,6 +108,7 @@
 	iCurrentHarvestDrive = aDriveNumber;
 	SetNextRequest( EHarvesterStartHarvest );
     CPIXLOGSTRING("END CFileHarvester::Start");
+    OstTraceFunctionExit0( CFILEHARVESTER_STARTL_EXIT );
     }
 
 
@@ -116,6 +125,7 @@
     ignorePath.Append( chr );
     ignorePath.Append( KExcludePathSystem );
     AddIgnorePathL( ignorePath );
+    OstTraceExt1( TRACE_NORMAL, CFILEHARVESTER_ADDIGNOREPATHSL, "CFileHarvester::AddIgnorePathsL;AddIgnorePath=%S", ignorePath );
     CPIXLOGSTRING2("CFileHarvester::AddIgnorePathsL - AddIgnorePath: %S", &ignorePath );
 
     ignorePath.Zero();
@@ -125,6 +135,7 @@
     ignorePath.Append( chr );
     ignorePath.Append( KExcludePathPrivate );
     AddIgnorePathL( ignorePath );
+    OstTraceExt1( TRACE_NORMAL, DUP1_CFILEHARVESTER_ADDIGNOREPATHSL, "CFileHarvester::AddIgnorePathsL;AddIgnorePath=%S", ignorePath );
     CPIXLOGSTRING2("CFileHarvester::AddIgnorePathsL - AddIgnorePath: %S", &ignorePath );
 
     ignorePath.Zero();
@@ -133,6 +144,7 @@
     ignorePath.Append( chr );
     ignorePath.Append( KExcludePathMapsCities );
     AddIgnorePathL( ignorePath );
+    OstTraceExt1( TRACE_NORMAL, DUP2_CFILEHARVESTER_ADDIGNOREPATHSL, "CFileHarvester::AddIgnorePathsL;AddIgnorePath=%S", ignorePath );
     CPIXLOGSTRING2("CFileHarvester::AddIgnorePathsL - AddIgnorePath: %S", &ignorePath );
     }
 
@@ -150,6 +162,7 @@
     ignorePath.Append( chr );
     ignorePath.Append( KExcludePathSystem );
     RemoveIgnorePath( ignorePath );
+    OstTraceExt1( TRACE_NORMAL, CFILEHARVESTER_REMOVEIGNOREPATHS, "CFileHarvester::RemoveIgnorePaths;RemoveIgnorePath=%S", ignorePath );
     CPIXLOGSTRING2("CFileHarvester::RemoveIgnorePaths - RemoveIgnorePath: %S", &ignorePath );
 
     ignorePath.Zero();
@@ -159,6 +172,7 @@
     ignorePath.Append( chr );
     ignorePath.Append( KExcludePathPrivate );
     RemoveIgnorePath( ignorePath );
+    OstTraceExt1( TRACE_NORMAL, DUP1_CFILEHARVESTER_REMOVEIGNOREPATHS, "CFileHarvester::RemoveIgnorePaths;RemoveIgnorePath=%S", ignorePath );
     CPIXLOGSTRING2("CFileHarvester::RemoveIgnorePaths - RemoveIgnorePath: %S", &ignorePath );
 
     ignorePath.Zero();
@@ -167,6 +181,7 @@
     ignorePath.Append( chr );
     ignorePath.Append( KExcludePathMapsCities );
     RemoveIgnorePath( ignorePath );
+    OstTraceExt1( TRACE_NORMAL, DUP2_CFILEHARVESTER_REMOVEIGNOREPATHS, "CFileHarvester::RemoveIgnorePaths;RemoveIgnorePath=%S", ignorePath );
     CPIXLOGSTRING2("CFileHarvester::RemoveIgnorePaths - RemoveIgnorePath: %S", &ignorePath );
     }
 
@@ -232,6 +247,7 @@
                 TFileName* tf = iIgnorePaths[i];
                 if ( tf->Compare(aIgnorePath) == 0 )
                     {
+                    OstTraceExt1( TRACE_NORMAL, CFILEHARVESTER_REMOVEIGNOREPATH, "CFileHarvester::RemoveIgnorePath;remove path=%S", aIgnorePath );
                     CPIXLOGSTRING2( "CFileHarvester::RemoveIgnorePath() - remove path: %S", &aIgnorePath );
                     delete tf;
                     tf = NULL;
@@ -269,6 +285,7 @@
 			tempFileName.LowerCase();
 			if ( tempFileName.Find(*pathName) != KErrNotFound )
 				{
+				OstTrace0( TRACE_NORMAL, CFILEHARVESTER_CHECKPATH, "CFileHarvester::CheckPath() - is ignore path" );
 				CPIXLOGSTRING( "CFileHarvester::CheckPath() - is ignore path" );
 				return EFalse;
 				}
@@ -284,6 +301,7 @@
 //		
 void CFileHarvester::GetNextFolderL()
     {
+    OstTraceFunctionEntry0( CFILEHARVESTER_GETNEXTFOLDERL_ENTRY );
     CPIXLOGSTRING("ENTER CFileHarvester::GetNextFolderL");
 
     delete iDir;
@@ -297,21 +315,25 @@
         // if folder is in ignore path then skip it
         if ( !CheckPath( iDirscan->FullPath() ) )
         	{
+			OstTrace0( TRACE_NORMAL, CFILEHARVESTER_GETNEXTFOLDERL, "CFileHarvester::GetNextFolderL - IF EHarvesterStartHarvest" );
 			CPIXLOGSTRING("CFileHarvester::GetNextFolderL - IF EHarvesterStartHarvest");
         	SetNextRequest( EHarvesterStartHarvest );
         	}
         else
 			{
+			OstTrace0( TRACE_NORMAL, DUP1_CFILEHARVESTER_GETNEXTFOLDERL, "CFileHarvester::GetNextFolderL - IF EHarvesterGetFileId" );
 			CPIXLOGSTRING("CFileHarvester::GetNextFolderL - IF EHarvesterGetFileId");
 			SetNextRequest( EHarvesterGetFileId );
 			}
     	}
     else
         {
+        OstTrace0( TRACE_NORMAL, DUP2_CFILEHARVESTER_GETNEXTFOLDERL, "CFileHarvester::GetNextFolderL - IF EHarvesterIdle" );
         CPIXLOGSTRING("CFileHarvester::GetNextFolderL - IF EHarvesterIdle");
         SetNextRequest( EHarvesterIdleState );
         }
     CPIXLOGSTRING("END CFileHarvester::GetNextFolderL");
+    OstTraceFunctionExit0( CFILEHARVESTER_GETNEXTFOLDERL_EXIT );
     }
 
 
@@ -322,6 +344,7 @@
 //
 void CFileHarvester::GetFileIdL()
     {
+    OstTraceFunctionEntry0( CFILEHARVESTER_GETFILEIDL_ENTRY );
     CPIXLOGSTRING("ENTER CFileHarvester::GetFileId");
 
     if( iCurrentIndex == 0 )
@@ -346,11 +369,21 @@
             TEntry aEntry = (*iDir)[iCurrentIndex];
             // Check if entry is a hidden or system file
             // if true -> continue until find something to index or have checked whole directory
-            if( !aEntry.IsHidden() && !aEntry.IsSystem() && !aEntry.IsDir() )
+            // if the entry is a file, index both its filename and contents, for folder index the 
+            // folder name
+            if( !aEntry.IsHidden() && !aEntry.IsSystem())
                 {
                 TParse fileParser;
                 fileParser.Set( iDirscan->FullPath(), &(*iDir)[iCurrentIndex].iName, NULL );
-                iFilePlugin.CreateFileIndexItemL(fileParser.FullName(), ECPixAddAction);
+                if(aEntry.IsDir())
+                    {                    
+                    iFilePlugin.CreateFolderFileIndexItemL(fileParser.FullName(), ECPixAddAction);
+                    }
+                else
+                    {
+                    iFilePlugin.CreateContentIndexItemL(fileParser.FullName(), ECPixAddAction);
+                    iFilePlugin.CreateFolderFileIndexItemL(fileParser.FullName(), ECPixAddAction, false);
+                    }
                 // TODO: If this is not TRAPPED, state machine breaks 
                 iStepNumber++;
                 }
@@ -374,6 +407,7 @@
         SetNextRequest( EHarvesterStartHarvest );
         }
     CPIXLOGSTRING("END CFileHarvester::GetFileId");
+    OstTraceFunctionExit0( CFILEHARVESTER_GETFILEIDL_EXIT );
     }
 
 
@@ -383,6 +417,7 @@
 //   
 void CFileHarvester::DoCancel()
 	{
+    OstTrace0( TRACE_NORMAL, CFILEHARVESTER_DOCANCEL, "CFileHarvester::DoCancel" );
     CPIXLOGSTRING("CFileHarvester::DoCancel");
 	}
 
@@ -393,6 +428,7 @@
 //   
 void CFileHarvester::RunL()
     {
+    OstTraceFunctionEntry0( CFILEHARVESTER_RUNL_ENTRY );
     CPIXLOGSTRING("ENTER CFileHarvester::RunL");
     // Simple Round-Robin scheduling.
     Deque();
@@ -422,6 +458,7 @@
 			break;
 		}
 	CPIXLOGSTRING("END CFileHarvester::RunL");
+	OstTraceFunctionExit0( CFILEHARVESTER_RUNL_EXIT );
 	}
 
 
@@ -431,6 +468,7 @@
 //   
 TInt CFileHarvester::RunError(TInt aError)
 	{
+    OstTrace1( TRACE_NORMAL, CFILEHARVESTER_RUNERROR, "CFileHarvester::RunError;aError=%d", aError );
     CPIXLOGSTRING2("CFileHarvester::RunError - aError: %d", aError );
 	iHarvestState = EHarvesterIdleState;
     iFilePlugin.HarvestingCompleted(iCurrentHarvestDrive, aError);
@@ -444,6 +482,7 @@
 //
 void CFileHarvester::SetNextRequest( TFileHarvesterState aState )
     {
+    OstTrace0( TRACE_NORMAL, CFILEHARVESTER_SETNEXTREQUEST, "CFileHarvester::SetNextRequest" );
     CPIXLOGSTRING("CFileHarvester::SetNextRequest");
     if ( !IsActive() )
         {
--- a/harvesterplugins/file/src/cfilemonitor.cpp	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/file/src/cfilemonitor.cpp	Mon May 03 12:32:15 2010 +0300
@@ -22,6 +22,11 @@
 #include "cfilemonitor.h"
 #include "cfolderrenamedharvester.h"
 #include "harvesterserverlogger.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "cfilemonitorTraces.h"
+#endif
+
 
 // -----------------------------------------------------------------------------
 // CFileMonitor::NewL
@@ -44,10 +49,12 @@
                             CActive(CActive::EPriorityStandard),
                             iFilePlugin( aFilePlugin )
     {
+    OstTraceFunctionEntry0( CFILEMONITOR_CFILEMONITOR_ENTRY );
     CPIXLOGSTRING("ENTER CFileMonitor::CFileMonitor");
     CActiveScheduler::Add(this);
     iFsSession = aFsSession;
     CPIXLOGSTRING("END CFileMonitor::CFileMonitor");
+    OstTraceFunctionExit0( CFILEMONITOR_CFILEMONITOR_EXIT );
     }
 
 // -----------------------------------------------------------------------------
@@ -79,6 +86,7 @@
 //
 TInt CFileMonitor::RunError( TInt aError )
 	{
+	OstTrace1( TRACE_NORMAL, CFILEMONITOR_RUNERROR, "CFileMonitor::RunError;aError=%d", aError );
 	CPIXLOGSTRING2( "CFileMonitor::RunError %d", aError );
 	return KErrNone;
 	}
@@ -98,6 +106,7 @@
 //	
 void CFileMonitor::RunL()
     {
+    OstTraceFunctionEntry0( CFILEMONITOR_RUNL_ENTRY );
     CPIXLOGSTRING("ENTER CFileMonitor::RunL");
     Deque();
     CActiveScheduler::Add( this );
@@ -118,15 +127,19 @@
     * Rename of whole directory happens as change to every file in dir.
     * We get an event of every file in dir.
     */
+    OstTrace1( TRACE_NORMAL, DUP1_CFILEMONITOR_RUNL, "CFileMonitor::RunL;status.iFileEventType=%d", status.iFileEventType );
     CPIXLOGSTRING2("CFileMonitor::RunL, status.iFileEventType: %i", status.iFileEventType );    
     switch(status.iFileEventType)
 		{
 		case EFastFindFileCreated:
 			{
+			OstTraceExt1( TRACE_NORMAL, DUP4_CFILEMONITOR_RUNL, "CFileMonitor::RunL;EFastFindFileCreated old=%S", fileNameOld );
 			CPIXLOGSTRING2("CFileMonitor::RunL, EFastFindFileCreated old = %S", &fileNameOld);
+			OstTraceExt1( TRACE_NORMAL, DUP2_CFILEMONITOR_RUNL, "CFileMonitor::RunL;EFastFindFileCreated new=%S", fileNameNew );
 			CPIXLOGSTRING2("CFileMonitor::RunL, EFastFindFileCreated new = %S", &fileNameNew);
-            // File creation (for example over PC suite) gives fileNameOld as the created files, fileNameOld is empty.
-            iFilePlugin.CreateFileIndexItemL(fileNameOld, ECPixAddAction);
+            // File creation (for example over PC suite) gives fileNameOld as the created files, fileNameOld is empty.			
+            iFilePlugin.CreateContentIndexItemL(fileNameOld, ECPixAddAction);
+            iFilePlugin.CreateFolderFileIndexItemL(fileNameOld, ECPixAddAction, false);
 			}
 		break;
 		
@@ -142,16 +155,21 @@
 			// new active object state into the CFileMonitor.
 			User::After(50000); // 0.05 seconds
 			
+			OstTraceExt1( TRACE_NORMAL, DUP3_CFILEMONITOR_RUNL, "CFileMonitor::RunL;EFastFindFileModified old=%S", fileNameOld );
 			CPIXLOGSTRING2("CFileMonitor::RunL, EFastFindFileModified old = %S", &fileNameOld);
+			OstTraceExt1( TRACE_NORMAL, DUP5_CFILEMONITOR_RUNL, "CFileMonitor::RunL;EFastFindFileModified new=%S", fileNameNew );
 			CPIXLOGSTRING2("CFileMonitor::RunL, EFastFindFileModified new = %S", &fileNameNew);
 			// File copy, fileNameOld contains the file name, fileNameNew is empty
-			iFilePlugin.CreateFileIndexItemL(fileNameOld, ECPixUpdateAction);
+			iFilePlugin.CreateContentIndexItemL(fileNameOld, ECPixUpdateAction);
+			iFilePlugin.CreateFolderFileIndexItemL(fileNameOld, ECPixUpdateAction, false);
 			}
 		break;
 		
 		case EFastFindFileRenamed:
 			{
+			OstTraceExt1( TRACE_NORMAL, DUP6_CFILEMONITOR_RUNL, "CFileMonitor::RunL;EFastFindFileRenamed old=%S", fileNameOld );
 			CPIXLOGSTRING2("CFileMonitor::RunL, EFastFindFileRenamed old = %S", &fileNameOld);
+			OstTraceExt1( TRACE_NORMAL, DUP7_CFILEMONITOR_RUNL, "CFileMonitor::RunL;EFastFindFileRenamed new=%S", fileNameNew );
 			CPIXLOGSTRING2("CFileMonitor::RunL, EFastFindFileRenamed new = %S", &fileNameNew);
 			TEntry entry; 
 			if ( iFsSession->Entry( fileNameNew, entry ) == KErrNone ) 
@@ -160,9 +178,11 @@
 					{
 					if (fileNameOld.Length()>0 && fileNameOld.Compare(fileNameNew)!=0)
 						{
-						iFilePlugin.CreateFileIndexItemL(fileNameOld, ECPixRemoveAction);
+						iFilePlugin.CreateContentIndexItemL(fileNameOld, ECPixRemoveAction);
+						iFilePlugin.CreateFolderFileIndexItemL(fileNameOld, ECPixRemoveAction, false);
 						}
-					iFilePlugin.CreateFileIndexItemL(fileNameNew, ECPixUpdateAction);
+					iFilePlugin.CreateContentIndexItemL(fileNameNew, ECPixUpdateAction);
+					iFilePlugin.CreateFolderFileIndexItemL(fileNameNew, ECPixUpdateAction, false);
 					}
 				else
 					{
@@ -174,27 +194,49 @@
 		
 		case EFastFindFileReplaced:
 			{
+			OstTraceExt1( TRACE_NORMAL, DUP8_CFILEMONITOR_RUNL, "CFileMonitor::RunL;EFastFindFileReplaced old=%S", fileNameOld );
 			CPIXLOGSTRING2("CFileMonitor::RunL, EFastFindFileReplaced old = %S", &fileNameOld);
+			OstTraceExt1( TRACE_NORMAL, DUP9_CFILEMONITOR_RUNL, "CFileMonitor::RunL;EFastFindFileReplaced new=%S", fileNameNew );
 			CPIXLOGSTRING2("CFileMonitor::RunL, EFastFindFileReplaced new = %S", &fileNameNew);
 			// File rename (funnily), fileNameOld contains the old file name, fileNameNew the new name
 			if (fileNameOld.Length()>0 && fileNameOld.Compare(fileNameNew)!=0)
-				iFilePlugin.CreateFileIndexItemL(fileNameOld, ECPixRemoveAction);
-			iFilePlugin.CreateFileIndexItemL(fileNameNew, ECPixUpdateAction);
+			    {
+				iFilePlugin.CreateContentIndexItemL(fileNameOld, ECPixRemoveAction);
+				iFilePlugin.CreateFolderFileIndexItemL(fileNameOld, ECPixRemoveAction, false);
+			    }
+			iFilePlugin.CreateContentIndexItemL(fileNameNew, ECPixUpdateAction);
+			iFilePlugin.CreateFolderFileIndexItemL(fileNameOld, ECPixUpdateAction, false);
 			}
 		break;
 				
 		case EFastFindFileDeleted:
 			{
+			OstTraceExt1( TRACE_NORMAL, DUP10_CFILEMONITOR_RUNL, "CFileMonitor::RunL;EFastFindFileDeleted old=%S", fileNameOld );
 			CPIXLOGSTRING2("CFileMonitor::RunL, EFastFindFileDeleted old = %S", &fileNameOld);
+			OstTraceExt1( TRACE_NORMAL, DUP11_CFILEMONITOR_RUNL, "CFileMonitor::RunL;EFastFindFileDeleted new=%S", fileNameNew );
 			CPIXLOGSTRING2("CFileMonitor::RunL, EFastFindFileDeleted new = %S", &fileNameNew);
 			// File delete, fileNameOld contains the name of the deleted file
-			iFilePlugin.CreateFileIndexItemL(fileNameOld, ECPixRemoveAction);
+			iFilePlugin.CreateContentIndexItemL(fileNameOld, ECPixRemoveAction);
+			iFilePlugin.CreateFolderFileIndexItemL(fileNameOld, ECPixRemoveAction, false);
 			}
 		break;
+		
+		case EFastFindDirCreated:
+            {
+            iFilePlugin.CreateFolderFileIndexItemL(fileNameOld, ECPixAddAction);
+            }
+            break;
 
+		case EFastFindDirDeleted:
+            {
+            iFilePlugin.CreateFolderFileIndexItemL(fileNameOld, ECPixRemoveAction);
+            }
+            break;
 		default:
 			{
+			OstTraceExt1( TRACE_NORMAL, DUP12_CFILEMONITOR_RUNL, "CFileMonitor::RunL;unknown event old=%S", fileNameOld );
 			CPIXLOGSTRING2("CFileMonitor::RunL, unknown event old = %S", &fileNameOld);
+			OstTraceExt1( TRACE_NORMAL, DUP13_CFILEMONITOR_RUNL, "CFileMonitor::RunL;unknown event new=%S", fileNameNew );
 			CPIXLOGSTRING2("CFileMonitor::RunL, unknown event new = %S", &fileNameNew);
 			}
 		break;
@@ -202,7 +244,8 @@
     ResetStatus();
     iEngine.RegisterNotification(iPckg, iStatus);
     CPIXLOGSTRING("END CFileMonitor::RunL");
-    SetActive();
+    OstTraceFunctionExit0( CFILEMONITOR_RUNL_EXIT );
+    SetActive();    
     }
 
 // -----------------------------------------------------------------------------
@@ -211,11 +254,13 @@
 //
 TBool CFileMonitor::StartMonitoring()
 	{
-	CPIXLOGSTRING("ENTER CFileMonitor::StartMonitoring")
+	OstTraceFunctionEntry0( CFILEMONITOR_STARTMONITORING_ENTRY );
+	CPIXLOGSTRING("ENTER CFileMonitor::StartMonitoring");
     
     if ( !IsActive() )
 		{
-		CPIXLOGSTRING("CFileMonitor::StartMonitoring - IF ")
+		OstTrace0( TRACE_NORMAL, CFILEMONITOR_STARTMONITORING, "CFileMonitor::StartMonitoring - IF" );
+		CPIXLOGSTRING("CFileMonitor::StartMonitoring - IF ");
 		iEngine.Enable();
 		ResetStatus();
 	    iEngine.RegisterNotification( iPckg, iStatus );
@@ -224,6 +269,7 @@
     
 	CPIXLOGSTRING("END CFileMonitor::StartMonitoring");	
 		
+	OstTraceFunctionExit0( CFILEMONITOR_STARTMONITORING_EXIT );
 	return ETrue;
 	}
 
@@ -233,6 +279,7 @@
 //
 void CFileMonitor::ResetStatus()
     {
+    OstTrace0( TRACE_NORMAL, CFILEMONITOR_RESETSTATUS, "CFileMonitor::ResetStatus" );
     CPIXLOGSTRING( "CFileMonitor::ResetStatus" );
     
     TFastFindFSPStatus& status = iPckg();
@@ -250,16 +297,21 @@
 //	
 TInt CFileMonitor::Initialize()
     {
+    OstTraceFunctionEntry0( CFILEMONITOR_INITIALIZE_ENTRY );
     CPIXLOGSTRING("ENTER CFileMonitor::Initialize");
     TInt err = OpenEngine();
+    OstTrace1( TRACE_NORMAL, CFILEMONITOR_INITIALIZE, "CFileMonitor::Initialize;OpenEngine=%d", err );
     CPIXLOGSTRING2("CFileMonitor::Initialize - OpenEngine: %i", err );
 	if ( err != KErrNone )
 		{
+		OstTrace0( TRACE_NORMAL, DUP1_CFILEMONITOR_INITIALIZE, "CFileMonitor::Initialize if( err != KErrNone )" );
 		CPIXLOGSTRING("CFileMonitor::Initialize if( err != KErrNone ) ");
+		OstTraceFunctionExit0( CFILEMONITOR_INITIALIZE_EXIT );
 		return err;
 		}
 	
 	CPIXLOGSTRING("END CFileMonitor::Initialize");
+	OstTraceFunctionExit0( DUP1_CFILEMONITOR_INITIALIZE_EXIT );
 	return err;
     }
 
@@ -298,6 +350,7 @@
     notificationPath.Append( chr );
     notificationPath.Append( KExcludePathSystem );
     iEngine.AddIgnorePath( notificationPath );
+	OstTraceExt1( TRACE_NORMAL, CFILEMONITOR_ADDNOTIFICATIONPATHSL, "CFileMonitor::AddNotificationPathsL;AddIgnorePath=%S", notificationPath );
 	CPIXLOGSTRING2("CFileMonitor::AddNotificationPathsL - AddIgnorePath: %S", &notificationPath );
 
     notificationPath.Zero();
@@ -307,6 +360,7 @@
     notificationPath.Append( chr );
     notificationPath.Append( KExcludePathPrivate );
     iEngine.AddIgnorePath( notificationPath );
+    OstTraceExt1( TRACE_NORMAL, DUP1_CFILEMONITOR_ADDNOTIFICATIONPATHSL, "CFileMonitor::AddNotificationPathsL;AddIgnorePath=%S", notificationPath );
     CPIXLOGSTRING2("CFileMonitor::AddNotificationPathsL - AddIgnorePath: %S", &notificationPath );
 
     notificationPath.Zero();
@@ -315,12 +369,14 @@
     notificationPath.Append( chr );
     notificationPath.Append( KExcludePathMapsCities );
     iEngine.AddIgnorePath( notificationPath );
+    OstTraceExt1( TRACE_NORMAL, DUP2_CFILEMONITOR_ADDNOTIFICATIONPATHSL, "CFileMonitor::AddNotificationPathsL;AddIgnorePath=%S", notificationPath );
     CPIXLOGSTRING2("CFileMonitor::AddNotificationPathsL - AddIgnorePath: %S", &notificationPath );
 
     notificationPath.Zero();
 
     User::LeaveIfError( PathInfo::GetRootPath( notificationPath, aDriveNumber ) );
     iEngine.AddNotificationPath( notificationPath );
+    OstTraceExt1( TRACE_NORMAL, DUP3_CFILEMONITOR_ADDNOTIFICATIONPATHSL, "CFileMonitor::AddNotificationPathsL;AddIgnorePath=%S", notificationPath );
     CPIXLOGSTRING2("CFileMonitor::AddNotificationPathsL - AddNotificationPath: %S", &notificationPath );
     }
 
@@ -337,6 +393,7 @@
     ignorePath.Append( chr );
     ignorePath.Append( KExcludePathSystem );
     iEngine.RemoveIgnorePath( ignorePath );
+    OstTraceExt1( TRACE_NORMAL, CFILEMONITOR_REMOVENOTIFICATIONPATHS, "CFileMonitor::RemoveNotificationPaths;RemoveIgnorePath=%S", ignorePath );
     CPIXLOGSTRING2("CFileMonitor::RemoveNotificationPaths - RemoveIgnorePath: %S", &ignorePath );
 
     ignorePath.Zero();
@@ -346,6 +403,7 @@
     ignorePath.Append( chr );
     ignorePath.Append( KExcludePathPrivate );
     iEngine.RemoveIgnorePath( ignorePath );
+    OstTraceExt1( TRACE_NORMAL, DUP1_CFILEMONITOR_REMOVENOTIFICATIONPATHS, "CFileMonitor::RemoveNotificationPaths;RemoveIgnorePath=%S", ignorePath );
     CPIXLOGSTRING2("CFileMonitor::RemoveNotificationPaths - RemoveIgnorePath: %S", &ignorePath );
 
     ignorePath.Zero();
@@ -354,12 +412,14 @@
     ignorePath.Append( chr );
     ignorePath.Append( KExcludePathMapsCities );
     iEngine.RemoveIgnorePath( ignorePath );
+    OstTraceExt1( TRACE_NORMAL, DUP2_CFILEMONITOR_REMOVENOTIFICATIONPATHS, "CFileMonitor::RemoveNotificationPaths;RemoveIgnorePath=%S", ignorePath );
     CPIXLOGSTRING2("CFileMonitor::RemoveNotificationPaths - RemoveIgnorePath: %S", &ignorePath );
 
     ignorePath.Zero();
 
     PathInfo::GetRootPath( ignorePath, aDriveNumber );
     iEngine.RemoveNotificationPath( ignorePath );
+    OstTraceExt1( TRACE_NORMAL, DUP3_CFILEMONITOR_REMOVENOTIFICATIONPATHS, "CFileMonitor::RemoveNotificationPaths;RemoveIgnorePath=%S", ignorePath );
     CPIXLOGSTRING2("CFileMonitor::RemoveNotificationPaths - RemoveNotificationPath: %S", &ignorePath );
     }
 
--- 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 <common.h>
 
 #include <ccpixindexer.h>
+#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<KFilePluginBaseAppClassMaxLen> baseAppClass;
-    FormBaseAppClass(aMedia, baseAppClass);
-
-    // Define this volume
-    HBufC* path = DatabasePathLC(aMedia);
-    User::LeaveIfError(iSearchSession.DefineVolume(baseAppClass, *path));
+    // Form the baseappclass for folder
+    TBuf<KFilePluginBaseAppClassMaxLen> baseFolderAppClass;
+    FormBaseAppClass(aMedia,KFileBaseAppClassFolder, baseFolderAppClass);
+    //Form the baseappclass for content
+    TBuf<KFilePluginBaseAppClassMaxLen> 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<KFilePluginBaseAppClassMaxLen> baseAppClass;
-    FormBaseAppClass(aMedia, baseAppClass);
+    // Form the baseappclass for folder
+    TBuf<KFilePluginBaseAppClassMaxLen> baseFolderAppClass;
+    FormBaseAppClass(aMedia,KFileBaseAppClassFolder, baseFolderAppClass);
+    //Form the baseappclass for content
+    TBuf<KFilePluginBaseAppClassMaxLen> 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<KFilePluginBaseAppClassMaxLen> baseAppClass;
-    FormBaseAppClass(TDriveNumber(aDriveNumber), baseAppClass);
+    if (iFolderIndexer[aDriveNumber])
+        {
+        Flush(*iFolderIndexer[aDriveNumber]);
+        }
+    
+    //Form baseapp class for folder and content database
+    TBuf<KFilePluginBaseAppClassMaxLen> 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 */
--- a/harvesterplugins/file/src/cfolderrenamedharvester.cpp	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/file/src/cfolderrenamedharvester.cpp	Mon May 03 12:32:15 2010 +0300
@@ -26,17 +26,23 @@
 
 #include "cfileplugin.h"
 #include "cfolderrenamedharvester.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "cfolderrenamedharvesterTraces.h"
+#endif
+
 
 // CONSTANTS
 _LIT( KFileMask, "*.*" );
 const TInt KItemsPerRun = 1;
 
+
 namespace {
 
 void AppendBackslash( TDes& aDirectory )
-    {
+    {    
+    const TInt lastChar = aDirectory.Length() - 1;
     const TChar KBackslashChar( '\\' );
-    const TInt lastChar = aDirectory.Length() - 1;
 
     // If it is directory which not contain backslash. 
     if ( KBackslashChar != aDirectory[lastChar] )
@@ -45,6 +51,21 @@
        }
     }
 
+void RemoveBackslash( TDes& aDirectory )
+    {
+    const TInt lastChar = aDirectory.Length() - 1;
+    const TChar KBackslashChar( '\\' );
+    
+    //If directory contains slash at the end
+    if ( KBackslashChar == aDirectory[lastChar] )
+        {
+        TPtrC temppath( aDirectory.Left( lastChar ) );
+        aDirectory.Zero();
+        aDirectory.Append(temppath);
+        }
+    
+    }
+
 } // namespace
 
 // ============================ MEMBER FUNCTIONS ===============================
@@ -149,9 +170,11 @@
     iFilePlugin( aFilePlugin ),
     iFs( aFs )
     {
+    OstTraceFunctionEntry0( CFOLDERRENAMEDHARVESTER_CFOLDERRENAMEDHARVESTER_ENTRY );
     CPIXLOGSTRING("ENTER CFolderRenamedHarvester::CFolderRenamedHarvester");
     CActiveScheduler::Add( this );
     CPIXLOGSTRING("END CFolderRenamedHarvester::CFolderRenamedHarvester");
+    OstTraceFunctionExit0( CFOLDERRENAMEDHARVESTER_CFOLDERRENAMEDHARVESTER_EXIT );
     }
 
 
@@ -171,6 +194,7 @@
 TBool CFolderRenamedHarvester::StartL( const TFileName& aOldDirectoryName, 
 									   const TFileName& aNewDirectoryName )
     {
+    OstTraceFunctionEntry0( CFOLDERRENAMEDHARVESTER_STARTL_ENTRY );
     CPIXLOGSTRING("ENTER CFolderRenamedHarvester::Start");
 
     // Append trailing backslash if required
@@ -184,6 +208,7 @@
 
 	SetNextRequest( EFolderRenamedIdleState );
     CPIXLOGSTRING("END CFolderRenamedHarvester::Start");
+    OstTraceFunctionExit0( CFOLDERRENAMEDHARVESTER_STARTL_EXIT );
     return ETrue;
     }
 
@@ -193,6 +218,7 @@
 //		
 void CFolderRenamedHarvester::GetNextFolderL()
     {
+    OstTraceFunctionEntry0( CFOLDERRENAMEDHARVESTER_GETNEXTFOLDERL_ENTRY );
     CPIXLOGSTRING("ENTER CFolderRenamedHarvester::GetNextFolderL");   
 
     delete iDir;
@@ -203,13 +229,15 @@
 
     if( iDir )
         {
+        OstTrace0( TRACE_NORMAL, CFOLDERRENAMEDHARVESTER_GETNEXTFOLDERL, "CFolderRenamedHarvester::GetNextFolderL - IF EHarvesterGetFileId" );
         CPIXLOGSTRING("CFolderRenamedHarvester::GetNextFolderL - IF EHarvesterGetFileId"); 
         SetNextRequest( EFolderRenamedGetFileId );
         }
     else
         {
+        OstTrace0( TRACE_NORMAL, DUP1_CFOLDERRENAMEDHARVESTER_GETNEXTFOLDERL, "CFolderRenamedHarvester::GetNextFolderL - IF EHarvesterIdle" );
         CPIXLOGSTRING("CFolderRenamedHarvester::GetNextFolderL - IF EHarvesterIdle");
-
+        HandleFolderRenameL();
         // finished folder rename, delete the folder from the array.
         CFolderRenamedItem *item = iRenamedFolders[0];
         iRenamedFolders.Remove(0);
@@ -218,6 +246,7 @@
         SetNextRequest( EFolderRenamedIdleState );
         }
     CPIXLOGSTRING("END CFolderRenamedHarvester::GetNextFolderL");
+    OstTraceFunctionExit0( CFOLDERRENAMEDHARVESTER_GETNEXTFOLDERL_EXIT );
     }
 
 // ---------------------------------------------------------------------------
@@ -227,6 +256,7 @@
 //		    
 void CFolderRenamedHarvester::GetFileIdL()
     {
+    OstTraceFunctionEntry0( CFOLDERRENAMEDHARVESTER_GETFILEIDL_ENTRY );
     CPIXLOGSTRING("ENTER CFolderRenamedHarvester::GetFileId");
 
     if( iCurrentIndex == 0 )
@@ -251,7 +281,7 @@
             TEntry entry = (*iDir)[iCurrentIndex];
             // Check if entry is a hidden or system file
             // if true -> continue until find something to index or have checked whole directory
-            if( !entry.IsHidden() && !entry.IsSystem() && !entry.IsDir() )
+            if( !entry.IsHidden() && !entry.IsSystem() )
                 {
                 TParse fileParser;
                 fileParser.Set( iDirscan->FullPath(), &(*iDir)[iCurrentIndex].iName, NULL );
@@ -260,12 +290,22 @@
                 TPtrC leaf( fileNamePtr.Right( fileNamePtr.Length() - iNewFolderName.Length() ) );
                 TFileName oldFileName( iOldFolderName );
                 oldFileName.Append( leaf );
-
-                iFilePlugin.CreateFileIndexItemL( oldFileName, ECPixRemoveAction );
-                iFilePlugin.CreateFileIndexItemL( fileParser.FullName(), ECPixAddAction );
+                if(entry.IsDir())
+                    {
+                    iFilePlugin.CreateFolderFileIndexItemL( oldFileName, ECPixRemoveAction );
+                    iFilePlugin.CreateFolderFileIndexItemL( fileParser.FullName(), ECPixAddAction );                
+                    }  
+                else
+                    {
+                    iFilePlugin.CreateContentIndexItemL( oldFileName, ECPixRemoveAction );
+                    iFilePlugin.CreateFolderFileIndexItemL( oldFileName, ECPixRemoveAction, false );
+                
+                    iFilePlugin.CreateContentIndexItemL( fileParser.FullName(), ECPixAddAction );
+                    iFilePlugin.CreateFolderFileIndexItemL( fileParser.FullName(), ECPixAddAction, false );
+                    }                
                 // TODO: If this is not TRAPPED, state machine breaks 
                 iStepNumber++;
-                }
+                }            
             iCurrentIndex++;
             }
             
@@ -286,6 +326,7 @@
         SetNextRequest( EFolderRenamedStartHarvest );
         }
     CPIXLOGSTRING("END CFolderRenamedHarvester::GetFileId"); 
+    OstTraceFunctionExit0( CFOLDERRENAMEDHARVESTER_GETFILEIDL_EXIT );
     }			
 
       
@@ -295,6 +336,7 @@
 //   
 void CFolderRenamedHarvester::DoCancel()
 	{
+	OstTrace0( TRACE_NORMAL, CFOLDERRENAMEDHARVESTER_DOCANCEL, "CFolderRenamedHarvester::DoCancel" );
 	CPIXLOGSTRING("CFolderRenamedHarvester::DoCancel");
 	}
 
@@ -304,6 +346,7 @@
 //   
 void CFolderRenamedHarvester::RunL()
     {
+    OstTraceFunctionEntry0( CFOLDERRENAMEDHARVESTER_RUNL_ENTRY );
     CPIXLOGSTRING("ENTER CFolderRenamedHarvester::RunL");
      // Simple Round-Robin scheduling.
     Deque();
@@ -315,6 +358,7 @@
 			{
 			if ( iRenamedFolders.Count() == 0 )
 				{
+				OstTraceFunctionExit0( CFOLDERRENAMEDHARVESTER_RUNL_EXIT );
 				return; // Nothing to do.
 				}
 
@@ -342,6 +386,7 @@
 			break;
         }
     CPIXLOGSTRING("END CFolderRenamedHarvester::RunL");
+    OstTraceFunctionExit0( DUP1_CFOLDERRENAMEDHARVESTER_RUNL_EXIT );
     }
 
 // -----------------------------------------------------------------------------
@@ -350,6 +395,7 @@
 //   
 TInt CFolderRenamedHarvester::RunError(TInt aError)
 	{
+    OstTrace1( TRACE_NORMAL, CFOLDERRENAMEDHARVESTER_RUNERROR, "CFolderRenamedHarvester::RunError;aError=%d", aError );
     CPIXLOGSTRING2("CFolderRenamedHarvester::RunError - aError: %d", aError );
     iRenamedFolders.ResetAndDestroy();
 	iHarvestState = EFolderRenamedIdleState;
@@ -363,6 +409,7 @@
 //
 void CFolderRenamedHarvester::SetNextRequest( TFileHarvesterState aState )
     {
+    OstTrace0( TRACE_NORMAL, CFOLDERRENAMEDHARVESTER_SETNEXTREQUEST, "CFolderRenamedHarvester::SetNextRequest" );
     CPIXLOGSTRING("CFolderRenamedHarvester::SetNextRequest");
     if ( !IsActive() )
         {
@@ -373,5 +420,11 @@
         }
     }
 
-
+void CFolderRenamedHarvester::HandleFolderRenameL()
+    {
+    RemoveBackslash(iOldFolderName);
+    iFilePlugin.CreateFolderFileIndexItemL( iOldFolderName, ECPixRemoveAction );
+    RemoveBackslash(iNewFolderName);
+    iFilePlugin.CreateFolderFileIndexItemL( iNewFolderName, ECPixAddAction );
+    }
 // End of File
--- a/harvesterplugins/file/src/cmmcmonitor.cpp	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/file/src/cmmcmonitor.cpp	Mon May 03 12:32:15 2010 +0300
@@ -26,7 +26,12 @@
 #include <f32file.h> // TDriveNumber
 #include <driveinfo.h> // TDriveInfo
 
-#include <uikoninternalpskeys.h>
+#include <UikonInternalPSKeys.h>
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "cmmcmonitorTraces.h"
+#endif
+
 
 // CONSTANTS
 // 
@@ -55,9 +60,11 @@
     : CActive( CActive::EPriorityStandard ),
       iFilePlugin( aFilePlugin )
     {
+    OstTraceFunctionEntry0( CMMCMONITOR_CMMCMONITOR_ENTRY );
     CPIXLOGSTRING("ENTER CMMCMonitor::CMMCMonitor");
     CActiveScheduler::Add( this );
     CPIXLOGSTRING("END CMMCMonitor::CMMCMonitor");
+    OstTraceFunctionExit0( CMMCMONITOR_CMMCMONITOR_EXIT );
     }
 
 
@@ -81,23 +88,31 @@
 //
 void CMMCMonitor::ConstructL( RFs* aFsSession )
     {
+    OstTraceFunctionEntry0( CMMCMONITOR_CONSTRUCTL_ENTRY );
     CPIXLOGSTRING("ENTER CMMCMonitor::ConstructL Foobar");
     iFsSession = aFsSession;
     
     TInt error = iProperty.Attach( KPSUidUikon, KUikMMCInserted );
-    if ( error != KErrNone ) CPIXLOGSTRING("END CMMCMonitor::Attach to MMCInserted failed");
+    if ( error != KErrNone ) 
+        {
+        OstTrace0( TRACE_NORMAL, CMMCMONITOR_CONSTRUCTL, "END CMMCMonitor::Attach to MMCInserted failed" );
+        CPIXLOGSTRING("END CMMCMonitor::Attach to MMCInserted failed");
+        }
     
     error = iProperty.Get( KPSUidUikon, KUikMMCInserted, iMmcStatus );
     if ( error != KErrNone ) 
     	{
+		OstTrace0( TRACE_NORMAL, DUP1_CMMCMONITOR_CONSTRUCTL, "CMMCMonitor::Get MMCInserted failed" );
 		CPIXLOGSTRING("CMMCMonitor::Get MMCInserted failed");
     	} 
     else if ( iMmcStatus ) 	 
     	{
+    	OstTrace0( TRACE_NORMAL, DUP2_CMMCMONITOR_CONSTRUCTL, "CMMCMonitor::MMC card is in" );
     	CPIXLOGSTRING("CMMCMonitor::MMC card is in");
     	}
     else 
     	{
+    	OstTrace0( TRACE_NORMAL, DUP3_CMMCMONITOR_CONSTRUCTL, "CMMCMonitor::no MMC card" );
     	CPIXLOGSTRING("CMMCMonitor::no MMC card");
     	}
 
@@ -106,6 +121,7 @@
     // CMMCMonitor::RunL().
     //
     CPIXLOGSTRING("END CMMCMonitor::ConstructL");
+    OstTraceFunctionExit0( CMMCMONITOR_CONSTRUCTL_EXIT );
     }
 
 
@@ -115,9 +131,11 @@
 //
 TBool CMMCMonitor::StartMonitoring()
     {
+    OstTraceFunctionEntry0( CMMCMONITOR_STARTMONITORING_ENTRY );
     CPIXLOGSTRING("ENTER CMMCMonitor::StartMonitoring");
     TRAP_IGNORE( RunL() ); // Need to TRAP this rather than use RunError
     CPIXLOGSTRING("END CMMCMonitor::StartMonitoring");
+    OstTraceFunctionExit0( CMMCMONITOR_STARTMONITORING_EXIT );
     return ETrue;
     }
 
@@ -142,6 +160,7 @@
         if ( ( drvStatus & DriveInfo::EDriveRemovable ) &&
              ( drvStatus & DriveInfo::EDriveUserVisible ) )
                 {
+                OstTrace1( TRACE_NORMAL, CMMCMONITOR_MMCSTATUS, "CMMCMonitor::MmcStatus;Drive Number=%d", aDriveNumber );
                 CPIXLOGSTRING2("CMMCMonitor::MmcStatus Drive Number %d", aDriveNumber);
                 isMmcPresent = ETrue;
                 }
@@ -156,6 +175,7 @@
 //
 TInt CMMCMonitor::RunError( TInt aError )
     {
+    OstTrace1( TRACE_NORMAL, CMMCMONITOR_RUNERROR, "CMMCMonitor::RunError;aError=%d", aError );
     CPIXLOGSTRING2("CMMCMonitor::RunError Error:",aError);
     return KErrNone;
     }
@@ -167,9 +187,11 @@
 //
 void CMMCMonitor::DoCancel()
     {
+    OstTraceFunctionEntry0( CMMCMONITOR_DOCANCEL_ENTRY );
     CPIXLOGSTRING("ENTER CMMCMonitor::DoCancel");
     iProperty.Cancel();
     CPIXLOGSTRING("END CMMCMonitor::DoCancel");
+    OstTraceFunctionExit0( CMMCMONITOR_DOCANCEL_EXIT );
     }
 
 
@@ -179,6 +201,7 @@
 //
 void CMMCMonitor::RunL()
     {
+    OstTraceFunctionEntry0( CMMCMONITOR_RUNL_ENTRY );
     CPIXLOGSTRING("ENTER CMMCMonitor::RunL");
     iProperty.Subscribe( iStatus );
     SetActive();
@@ -186,10 +209,12 @@
     
     if ( iMmcStatus )
     	{
+    	OstTrace0( TRACE_NORMAL, CMMCMONITOR_RUNL, "CMMCMonitor::MMC card is in" );
     	CPIXLOGSTRING("CMMCMonitor::MMC card is in");
     	}
     else 
     	{
+		OstTrace0( TRACE_NORMAL, DUP1_CMMCMONITOR_RUNL, "CMMCMonitor::no MMC card" );
 		CPIXLOGSTRING("CMMCMonitor::no MMC card");
     	}
 
@@ -214,12 +239,14 @@
 
         if ( drvStatus & DriveInfo::EDrivePresent )
             {
+            OstTrace0( TRACE_NORMAL, DUP2_CMMCMONITOR_RUNL, "CMMCMonitor::RunL insert event" );
             CPIXLOGSTRING("CMMCMonitor::RunL insert event");
             // Mount MMC and force reharvest
             iFilePlugin.MountL(drv, ETrue);
             }
         else
             {
+            OstTrace0( TRACE_NORMAL, DUP3_CMMCMONITOR_RUNL, "CMMCMonitor::RunL eject event" );
             CPIXLOGSTRING("CMMCMonitor::RunL eject event");
             // If the MMC has been ejected, then need to dismount 
             // and undefine the volume
@@ -227,6 +254,7 @@
             }
         }
     CPIXLOGSTRING("END CMMCMonitor::RunL");
+    OstTraceFunctionExit0( CMMCMONITOR_RUNL_EXIT );
     }
 
 // End Of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/file/traces/OstTraceDefinitions.h	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 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: 
+*
+*/
+#ifndef __OSTTRACEDEFINITIONS_H__
+#define __OSTTRACEDEFINITIONS_H__
+// OST_TRACE_COMPILER_IN_USE flag has been added by Trace Compiler
+// REMOVE BEFORE CHECK-IN TO VERSION CONTROL
+//#define OST_TRACE_COMPILER_IN_USE
+#include <opensystemtrace.h>
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/file/traces/cfileharvesterTraces.h	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,76 @@
+// Created by TraceCompiler 2.1.2
+// DO NOT EDIT, CHANGES WILL BE LOST
+
+#ifndef __CFILEHARVESTERTRACES_H__
+#define __CFILEHARVESTERTRACES_H__
+
+#define KOstTraceComponentID 0x2001f703
+
+#define CFILEHARVESTER_CFILEHARVESTER_ENTRY 0x8a0001
+#define CFILEHARVESTER_CFILEHARVESTER_EXIT 0x8a0002
+#define CFILEHARVESTER_STARTL_ENTRY 0x8a0003
+#define CFILEHARVESTER_STARTL_EXIT 0x8a0004
+#define CFILEHARVESTER_GETNEXTFOLDERL_ENTRY 0x8a0005
+#define CFILEHARVESTER_GETNEXTFOLDERL_EXIT 0x8a0006
+#define CFILEHARVESTER_GETFILEIDL_ENTRY 0x8a0007
+#define CFILEHARVESTER_GETFILEIDL_EXIT 0x8a0008
+#define CFILEHARVESTER_RUNL_ENTRY 0x8a0009
+#define CFILEHARVESTER_RUNL_EXIT 0x8a000a
+#define CFILEHARVESTER_ADDIGNOREPATHSL 0x860001
+#define DUP1_CFILEHARVESTER_ADDIGNOREPATHSL 0x860002
+#define DUP2_CFILEHARVESTER_ADDIGNOREPATHSL 0x860003
+#define CFILEHARVESTER_REMOVEIGNOREPATHS 0x860004
+#define DUP1_CFILEHARVESTER_REMOVEIGNOREPATHS 0x860005
+#define DUP2_CFILEHARVESTER_REMOVEIGNOREPATHS 0x860006
+#define CFILEHARVESTER_REMOVEIGNOREPATH 0x860007
+#define CFILEHARVESTER_CHECKPATH 0x860008
+#define CFILEHARVESTER_GETNEXTFOLDERL 0x860009
+#define DUP1_CFILEHARVESTER_GETNEXTFOLDERL 0x86000a
+#define DUP2_CFILEHARVESTER_GETNEXTFOLDERL 0x86000b
+#define CFILEHARVESTER_DOCANCEL 0x86000c
+#define CFILEHARVESTER_RUNERROR 0x86000d
+#define CFILEHARVESTER_SETNEXTREQUEST 0x86000e
+
+
+#ifndef __KERNEL_MODE__
+inline TBool OstTraceGen1( TUint32 aTraceID, const TDesC16& aParam1 )
+    {
+    TBool retval;
+    TInt size = aParam1.Size();
+    // BTrace assumes that parameter size is atleast 4 bytes
+    if (size % 4 == 0)
+        {
+        TUint8* ptr = ( TUint8* )aParam1.Ptr();
+        // Data is written directly and length is determined from trace message length
+        retval = OstSendNBytes( EXTRACT_GROUP_ID(aTraceID), EOstTrace, KOstTraceComponentID, aTraceID, ptr, size );
+        }
+    else
+        {
+        TUint8 data[ KOstMaxDataLength ];
+        TUint8* ptr = data;
+        if (size > KOstMaxDataLength)
+            {
+            size = KOstMaxDataLength;
+            }
+        TInt sizeAligned = ( size + 3 ) & ~3;
+        memcpy( ptr, aParam1.Ptr(), size );
+        ptr += size;
+        // Fillers are written to get 32-bit alignment
+        while ( size++ < sizeAligned )
+            {
+            *ptr++ = 0;
+            }
+        ptr -= sizeAligned;
+        size = sizeAligned;
+        // Data is written directly and length is determined from trace message length
+        retval = OstSendNBytes( EXTRACT_GROUP_ID(aTraceID), EOstTrace, KOstTraceComponentID, aTraceID, ptr, size );
+        }
+    return retval;
+    }
+#endif
+
+
+#endif
+
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/file/traces/cfilemonitorTraces.h	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,87 @@
+// Created by TraceCompiler 2.1.2
+// DO NOT EDIT, CHANGES WILL BE LOST
+
+#ifndef __CFILEMONITORTRACES_H__
+#define __CFILEMONITORTRACES_H__
+
+#define KOstTraceComponentID 0x2001f703
+
+#define CFILEMONITOR_CFILEMONITOR_ENTRY 0x8a000b
+#define CFILEMONITOR_CFILEMONITOR_EXIT 0x8a000c
+#define CFILEMONITOR_RUNL_ENTRY 0x8a000d
+#define CFILEMONITOR_RUNL_EXIT 0x8a000e
+#define CFILEMONITOR_STARTMONITORING_ENTRY 0x8a000f
+#define CFILEMONITOR_STARTMONITORING_EXIT 0x8a0010
+#define CFILEMONITOR_INITIALIZE_ENTRY 0x8a0011
+#define CFILEMONITOR_INITIALIZE_EXIT 0x8a0012
+#define DUP1_CFILEMONITOR_INITIALIZE_EXIT 0x8a0013
+#define CFILEMONITOR_RUNERROR 0x86000f
+#define DUP1_CFILEMONITOR_RUNL 0x860010
+#define DUP4_CFILEMONITOR_RUNL 0x860011
+#define DUP2_CFILEMONITOR_RUNL 0x860012
+#define DUP3_CFILEMONITOR_RUNL 0x860013
+#define DUP5_CFILEMONITOR_RUNL 0x860014
+#define DUP6_CFILEMONITOR_RUNL 0x860015
+#define DUP7_CFILEMONITOR_RUNL 0x860016
+#define DUP8_CFILEMONITOR_RUNL 0x860017
+#define DUP9_CFILEMONITOR_RUNL 0x860018
+#define DUP10_CFILEMONITOR_RUNL 0x860019
+#define DUP11_CFILEMONITOR_RUNL 0x86001a
+#define DUP12_CFILEMONITOR_RUNL 0x86001b
+#define DUP13_CFILEMONITOR_RUNL 0x86001c
+#define CFILEMONITOR_STARTMONITORING 0x86001d
+#define CFILEMONITOR_RESETSTATUS 0x86001e
+#define CFILEMONITOR_INITIALIZE 0x86001f
+#define DUP1_CFILEMONITOR_INITIALIZE 0x860020
+#define CFILEMONITOR_ADDNOTIFICATIONPATHSL 0x860021
+#define DUP1_CFILEMONITOR_ADDNOTIFICATIONPATHSL 0x860022
+#define DUP2_CFILEMONITOR_ADDNOTIFICATIONPATHSL 0x860023
+#define DUP3_CFILEMONITOR_ADDNOTIFICATIONPATHSL 0x860024
+#define CFILEMONITOR_REMOVENOTIFICATIONPATHS 0x860025
+#define DUP1_CFILEMONITOR_REMOVENOTIFICATIONPATHS 0x860026
+#define DUP2_CFILEMONITOR_REMOVENOTIFICATIONPATHS 0x860027
+#define DUP3_CFILEMONITOR_REMOVENOTIFICATIONPATHS 0x860028
+
+
+#ifndef __KERNEL_MODE__
+inline TBool OstTraceGen1( TUint32 aTraceID, const TDesC16& aParam1 )
+    {
+    TBool retval;
+    TInt size = aParam1.Size();
+    // BTrace assumes that parameter size is atleast 4 bytes
+    if (size % 4 == 0)
+        {
+        TUint8* ptr = ( TUint8* )aParam1.Ptr();
+        // Data is written directly and length is determined from trace message length
+        retval = OstSendNBytes( EXTRACT_GROUP_ID(aTraceID), EOstTrace, KOstTraceComponentID, aTraceID, ptr, size );
+        }
+    else
+        {
+        TUint8 data[ KOstMaxDataLength ];
+        TUint8* ptr = data;
+        if (size > KOstMaxDataLength)
+            {
+            size = KOstMaxDataLength;
+            }
+        TInt sizeAligned = ( size + 3 ) & ~3;
+        memcpy( ptr, aParam1.Ptr(), size );
+        ptr += size;
+        // Fillers are written to get 32-bit alignment
+        while ( size++ < sizeAligned )
+            {
+            *ptr++ = 0;
+            }
+        ptr -= sizeAligned;
+        size = sizeAligned;
+        // Data is written directly and length is determined from trace message length
+        retval = OstSendNBytes( EXTRACT_GROUP_ID(aTraceID), EOstTrace, KOstTraceComponentID, aTraceID, ptr, size );
+        }
+    return retval;
+    }
+#endif
+
+
+#endif
+
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/file/traces/cfilepluginTraces.h	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,165 @@
+// Created by TraceCompiler 2.1.2
+// DO NOT EDIT, CHANGES WILL BE LOST
+
+#ifndef __CFILEPLUGINTRACES_H__
+#define __CFILEPLUGINTRACES_H__
+
+#define KOstTraceComponentID 0x2001f703
+
+#define CFILEPLUGIN_MOUNTL_ENTRY 0x8a0014
+#define CFILEPLUGIN_MOUNTL_EXIT 0x8a0015
+#define CFILEPLUGIN_UNMOUNT_ENTRY 0x8a0016
+#define CFILEPLUGIN_UNMOUNT_EXIT 0x8a0017
+#define DUP1_CFILEPLUGIN_UNMOUNT_EXIT 0x8a0018
+#define CFILEPLUGIN_STARTHARVESTINGL_ENTRY 0x8a0019
+#define CFILEPLUGIN_STARTHARVESTINGL_EXIT 0x8a001a
+#define CFILEPLUGIN_HARVESTINGCOMPLETED_ENTRY 0x8a001b
+#define CFILEPLUGIN_HARVESTINGCOMPLETED_EXIT 0x8a001c
+#define CFILEPLUGIN_ADDNOTIFICATIONPATHSL_ENTRY 0x8a001d
+#define CFILEPLUGIN_ADDNOTIFICATIONPATHSL_EXIT 0x8a001e
+#define CFILEPLUGIN_REMOVENOTIFICATIONPATHS_ENTRY 0x8a001f
+#define CFILEPLUGIN_REMOVENOTIFICATIONPATHS_EXIT 0x8a0020
+#define CFILEPLUGIN_FORMBASEAPPCLASS_ENTRY 0x8a0021
+#define CFILEPLUGIN_FORMBASEAPPCLASS_EXIT 0x8a0022
+#define CFILEPLUGIN_DATABASEPATHLC_ENTRY 0x8a0023
+#define CFILEPLUGIN_DATABASEPATHLC_EXIT 0x8a0024
+#define CFILEPLUGIN_CONSTRUCTL 0x860029
+#define DUP1_CFILEPLUGIN_CONSTRUCTL 0x86002a
+#define DUP2_CFILEPLUGIN_CONSTRUCTL 0x86002b
+#define DUP3_CFILEPLUGIN_CONSTRUCTL 0x86002c
+#define DUP4_CFILEPLUGIN_CONSTRUCTL 0x86002d
+#define DUP5_CFILEPLUGIN_CONSTRUCTL 0x86002e
+#define CFILEPLUGIN_STARTPLUGINL 0x86002f
+#define DUP1_CFILEPLUGIN_STARTPLUGINL 0x860030
+#define DUP2_CFILEPLUGIN_STARTPLUGINL 0x860031
+#define DUP1_CFILEPLUGIN_CREATECONTENTINDEXITEML 0x860032
+#define DUP2_CFILEPLUGIN_CREATECONTENTINDEXITEML 0x860033
+#define CFILEPLUGIN_CREATECONTENTINDEXITEML 0x860034
+#define DUP3_CFILEPLUGIN_CREATECONTENTINDEXITEML 0x860035
+#define DUP4_CFILEPLUGIN_CREATECONTENTINDEXITEML 0x860036
+#define CFILEPLUGIN_CREATEFOLDERFILEINDEXITEML 0x860037
+#define DUP1_CFILEPLUGIN_CREATEFOLDERFILEINDEXITEML 0x860038
+#define DUP2_CFILEPLUGIN_CREATEFOLDERFILEINDEXITEML 0x860039
+#define DUP3_CFILEPLUGIN_CREATEFOLDERFILEINDEXITEML 0x86003a
+#define DUP4_CFILEPLUGIN_CREATEFOLDERFILEINDEXITEML 0x86003b
+
+
+#ifndef __KERNEL_MODE__
+inline TBool OstTraceGen2( TUint32 aTraceID, const TDesC16& aParam1, TInt aParam2 )
+    {
+    TBool retval = BTraceFiltered8( EXTRACT_GROUP_ID(aTraceID), EOstTraceActivationQuery, KOstTraceComponentID, aTraceID );
+    if ( retval )
+        {
+        TInt length = 0;
+        // Check that parameter lenght is not too long
+        TInt length1 = aParam1.Size();
+        if ((length + length1 + sizeof ( TUint32 )) > KOstMaxDataLength)
+            {
+            length1 = KOstMaxDataLength - (length + sizeof ( TUint32 ));
+            }
+        TInt lengthAligned1 = ( length1 + 3 ) & ~3;
+        if (lengthAligned1 > 0)
+            {
+            length = length + sizeof ( TUint32 ) + lengthAligned1;
+            }
+        TUint8 data[ KOstMaxDataLength ];
+        TUint8* ptr = data;
+        // Set length to zero and calculate it againg
+        // when adding parameters
+        length = 0;
+        if (length1 > 0)
+            {
+            // Number of elements is written before data
+            // In case of Unicode string, number of elements is half of length
+            *( ( TUint32* )ptr ) = length1 / (aParam1.Size() / aParam1.Length());
+            ptr += sizeof ( TUint32 );
+            memcpy( ptr, aParam1.Ptr(), length1 );
+            ptr += length1;
+            // Fillers are written to get 32-bit alignment
+            while ( length1++ < lengthAligned1 )
+                {
+                *ptr++ = 0;
+                }
+            length += sizeof ( TUint32 ) + lengthAligned1;
+            }
+        else if (length + sizeof ( TUint32 ) <= KOstMaxDataLength)
+            {
+            *( ( TUint32* )ptr ) = 0;
+            ptr += sizeof ( TUint32 );
+            length += sizeof ( TUint32 );
+            }
+        // Check that there are enough space to next parameter
+        if ((length + sizeof ( TInt )) <= KOstMaxDataLength)
+            {
+            *( ( TInt* )ptr ) = aParam2;
+            ptr += sizeof ( TInt );
+            length += sizeof ( TInt );
+            }
+        ptr -= length;
+        retval = OstSendNBytes( EXTRACT_GROUP_ID(aTraceID), EOstTrace, KOstTraceComponentID, aTraceID, ptr, length );
+        }
+    return retval;
+    }
+
+inline TBool OstTraceGen2( TUint32 aTraceID, const TDesC16& aParam1, TInt32 aParam2 )
+    {
+    TBool retval = BTraceFiltered8( EXTRACT_GROUP_ID(aTraceID), EOstTraceActivationQuery, KOstTraceComponentID, aTraceID );
+    if ( retval )
+        {
+        TInt length = 0;
+        // Check that parameter lenght is not too long
+        TInt length1 = aParam1.Size();
+        if ((length + length1 + sizeof ( TUint32 )) > KOstMaxDataLength)
+            {
+            length1 = KOstMaxDataLength - (length + sizeof ( TUint32 ));
+            }
+        TInt lengthAligned1 = ( length1 + 3 ) & ~3;
+        if (lengthAligned1 > 0)
+            {
+            length = length + sizeof ( TUint32 ) + lengthAligned1;
+            }
+        TUint8 data[ KOstMaxDataLength ];
+        TUint8* ptr = data;
+        // Set length to zero and calculate it againg
+        // when adding parameters
+        length = 0;
+        if (length1 > 0)
+            {
+            // Number of elements is written before data
+            // In case of Unicode string, number of elements is half of length
+            *( ( TUint32* )ptr ) = length1 / (aParam1.Size() / aParam1.Length());
+            ptr += sizeof ( TUint32 );
+            memcpy( ptr, aParam1.Ptr(), length1 );
+            ptr += length1;
+            // Fillers are written to get 32-bit alignment
+            while ( length1++ < lengthAligned1 )
+                {
+                *ptr++ = 0;
+                }
+            length += sizeof ( TUint32 ) + lengthAligned1;
+            }
+        else if (length + sizeof ( TUint32 ) <= KOstMaxDataLength)
+            {
+            *( ( TUint32* )ptr ) = 0;
+            ptr += sizeof ( TUint32 );
+            length += sizeof ( TUint32 );
+            }
+        // Check that there are enough space to next parameter
+        if ((length + sizeof ( TInt )) <= KOstMaxDataLength)
+            {
+            *( ( TInt* )ptr ) = aParam2;
+            ptr += sizeof ( TInt );
+            length += sizeof ( TInt );
+            }
+        ptr -= length;
+        retval = OstSendNBytes( EXTRACT_GROUP_ID(aTraceID), EOstTrace, KOstTraceComponentID, aTraceID, ptr, length );
+        }
+    return retval;
+    }
+#endif
+
+
+#endif
+
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/file/traces/cfolderrenamedharvesterTraces.h	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,30 @@
+// Created by TraceCompiler 2.1.2
+// DO NOT EDIT, CHANGES WILL BE LOST
+
+#ifndef __CFOLDERRENAMEDHARVESTERTRACES_H__
+#define __CFOLDERRENAMEDHARVESTERTRACES_H__
+
+#define KOstTraceComponentID 0x2001f703
+
+#define CFOLDERRENAMEDHARVESTER_CFOLDERRENAMEDHARVESTER_ENTRY 0x8a0025
+#define CFOLDERRENAMEDHARVESTER_CFOLDERRENAMEDHARVESTER_EXIT 0x8a0026
+#define CFOLDERRENAMEDHARVESTER_STARTL_ENTRY 0x8a0027
+#define CFOLDERRENAMEDHARVESTER_STARTL_EXIT 0x8a0028
+#define CFOLDERRENAMEDHARVESTER_GETNEXTFOLDERL_ENTRY 0x8a0029
+#define CFOLDERRENAMEDHARVESTER_GETNEXTFOLDERL_EXIT 0x8a002a
+#define CFOLDERRENAMEDHARVESTER_GETFILEIDL_ENTRY 0x8a002b
+#define CFOLDERRENAMEDHARVESTER_GETFILEIDL_EXIT 0x8a002c
+#define CFOLDERRENAMEDHARVESTER_RUNL_ENTRY 0x8a002d
+#define CFOLDERRENAMEDHARVESTER_RUNL_EXIT 0x8a002e
+#define DUP1_CFOLDERRENAMEDHARVESTER_RUNL_EXIT 0x8a002f
+#define CFOLDERRENAMEDHARVESTER_GETNEXTFOLDERL 0x86003c
+#define DUP1_CFOLDERRENAMEDHARVESTER_GETNEXTFOLDERL 0x86003d
+#define CFOLDERRENAMEDHARVESTER_DOCANCEL 0x86003e
+#define CFOLDERRENAMEDHARVESTER_RUNERROR 0x86003f
+#define CFOLDERRENAMEDHARVESTER_SETNEXTREQUEST 0x860040
+
+
+#endif
+
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/file/traces/cmmcmonitorTraces.h	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,34 @@
+// Created by TraceCompiler 2.1.2
+// DO NOT EDIT, CHANGES WILL BE LOST
+
+#ifndef __CMMCMONITORTRACES_H__
+#define __CMMCMONITORTRACES_H__
+
+#define KOstTraceComponentID 0x2001f703
+
+#define CMMCMONITOR_CMMCMONITOR_ENTRY 0x8a0030
+#define CMMCMONITOR_CMMCMONITOR_EXIT 0x8a0031
+#define CMMCMONITOR_CONSTRUCTL_ENTRY 0x8a0032
+#define CMMCMONITOR_CONSTRUCTL_EXIT 0x8a0033
+#define CMMCMONITOR_STARTMONITORING_ENTRY 0x8a0034
+#define CMMCMONITOR_STARTMONITORING_EXIT 0x8a0035
+#define CMMCMONITOR_DOCANCEL_ENTRY 0x8a0036
+#define CMMCMONITOR_DOCANCEL_EXIT 0x8a0037
+#define CMMCMONITOR_RUNL_ENTRY 0x8a0038
+#define CMMCMONITOR_RUNL_EXIT 0x8a0039
+#define CMMCMONITOR_CONSTRUCTL 0x860041
+#define DUP1_CMMCMONITOR_CONSTRUCTL 0x860042
+#define DUP2_CMMCMONITOR_CONSTRUCTL 0x860043
+#define DUP3_CMMCMONITOR_CONSTRUCTL 0x860044
+#define CMMCMONITOR_MMCSTATUS 0x860045
+#define CMMCMONITOR_RUNERROR 0x860046
+#define CMMCMONITOR_RUNL 0x860047
+#define DUP1_CMMCMONITOR_RUNL 0x860048
+#define DUP2_CMMCMONITOR_RUNL 0x860049
+#define DUP3_CMMCMONITOR_RUNL 0x86004a
+
+
+#endif
+
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/file/traces/fixed_id.definitions	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,134 @@
+#Fixed group and trace id definitions. If this file is removed, the identifiers are rebuilt.
+[GROUP]TRACE_FLOW=0x8a
+[GROUP]TRACE_NORMAL=0x86
+[TRACE]TRACE_FLOW[0x8A]_CFILEHARVESTER_CFILEHARVESTER_ENTRY=0x1
+[TRACE]TRACE_FLOW[0x8A]_CFILEHARVESTER_CFILEHARVESTER_EXIT=0x2
+[TRACE]TRACE_FLOW[0x8A]_CFILEHARVESTER_GETFILEIDL_ENTRY=0x7
+[TRACE]TRACE_FLOW[0x8A]_CFILEHARVESTER_GETFILEIDL_EXIT=0x8
+[TRACE]TRACE_FLOW[0x8A]_CFILEHARVESTER_GETNEXTFOLDERL_ENTRY=0x5
+[TRACE]TRACE_FLOW[0x8A]_CFILEHARVESTER_GETNEXTFOLDERL_EXIT=0x6
+[TRACE]TRACE_FLOW[0x8A]_CFILEHARVESTER_RUNL_ENTRY=0x9
+[TRACE]TRACE_FLOW[0x8A]_CFILEHARVESTER_RUNL_EXIT=0xa
+[TRACE]TRACE_FLOW[0x8A]_CFILEHARVESTER_STARTL_ENTRY=0x3
+[TRACE]TRACE_FLOW[0x8A]_CFILEHARVESTER_STARTL_EXIT=0x4
+[TRACE]TRACE_FLOW[0x8A]_CFILEMONITOR_CFILEMONITOR_ENTRY=0xb
+[TRACE]TRACE_FLOW[0x8A]_CFILEMONITOR_CFILEMONITOR_EXIT=0xc
+[TRACE]TRACE_FLOW[0x8A]_CFILEMONITOR_INITIALIZE_ENTRY=0x11
+[TRACE]TRACE_FLOW[0x8A]_CFILEMONITOR_INITIALIZE_EXIT=0x12
+[TRACE]TRACE_FLOW[0x8A]_CFILEMONITOR_RUNL_ENTRY=0xd
+[TRACE]TRACE_FLOW[0x8A]_CFILEMONITOR_RUNL_EXIT=0xe
+[TRACE]TRACE_FLOW[0x8A]_CFILEMONITOR_STARTMONITORING_ENTRY=0xf
+[TRACE]TRACE_FLOW[0x8A]_CFILEMONITOR_STARTMONITORING_EXIT=0x10
+[TRACE]TRACE_FLOW[0x8A]_CFILEPLUGIN_ADDNOTIFICATIONPATHSL_ENTRY=0x1d
+[TRACE]TRACE_FLOW[0x8A]_CFILEPLUGIN_ADDNOTIFICATIONPATHSL_EXIT=0x1e
+[TRACE]TRACE_FLOW[0x8A]_CFILEPLUGIN_DATABASEPATHLC_ENTRY=0x23
+[TRACE]TRACE_FLOW[0x8A]_CFILEPLUGIN_DATABASEPATHLC_EXIT=0x24
+[TRACE]TRACE_FLOW[0x8A]_CFILEPLUGIN_FORMBASEAPPCLASS_ENTRY=0x21
+[TRACE]TRACE_FLOW[0x8A]_CFILEPLUGIN_FORMBASEAPPCLASS_EXIT=0x22
+[TRACE]TRACE_FLOW[0x8A]_CFILEPLUGIN_HARVESTINGCOMPLETED_ENTRY=0x1b
+[TRACE]TRACE_FLOW[0x8A]_CFILEPLUGIN_HARVESTINGCOMPLETED_EXIT=0x1c
+[TRACE]TRACE_FLOW[0x8A]_CFILEPLUGIN_MOUNTL_ENTRY=0x14
+[TRACE]TRACE_FLOW[0x8A]_CFILEPLUGIN_MOUNTL_EXIT=0x15
+[TRACE]TRACE_FLOW[0x8A]_CFILEPLUGIN_REMOVENOTIFICATIONPATHS_ENTRY=0x1f
+[TRACE]TRACE_FLOW[0x8A]_CFILEPLUGIN_REMOVENOTIFICATIONPATHS_EXIT=0x20
+[TRACE]TRACE_FLOW[0x8A]_CFILEPLUGIN_STARTHARVESTINGL_ENTRY=0x19
+[TRACE]TRACE_FLOW[0x8A]_CFILEPLUGIN_STARTHARVESTINGL_EXIT=0x1a
+[TRACE]TRACE_FLOW[0x8A]_CFILEPLUGIN_UNMOUNT_ENTRY=0x16
+[TRACE]TRACE_FLOW[0x8A]_CFILEPLUGIN_UNMOUNT_EXIT=0x17
+[TRACE]TRACE_FLOW[0x8A]_CFOLDERRENAMEDHARVESTER_CFOLDERRENAMEDHARVESTER_ENTRY=0x25
+[TRACE]TRACE_FLOW[0x8A]_CFOLDERRENAMEDHARVESTER_CFOLDERRENAMEDHARVESTER_EXIT=0x26
+[TRACE]TRACE_FLOW[0x8A]_CFOLDERRENAMEDHARVESTER_GETFILEIDL_ENTRY=0x2b
+[TRACE]TRACE_FLOW[0x8A]_CFOLDERRENAMEDHARVESTER_GETFILEIDL_EXIT=0x2c
+[TRACE]TRACE_FLOW[0x8A]_CFOLDERRENAMEDHARVESTER_GETNEXTFOLDERL_ENTRY=0x29
+[TRACE]TRACE_FLOW[0x8A]_CFOLDERRENAMEDHARVESTER_GETNEXTFOLDERL_EXIT=0x2a
+[TRACE]TRACE_FLOW[0x8A]_CFOLDERRENAMEDHARVESTER_RUNL_ENTRY=0x2d
+[TRACE]TRACE_FLOW[0x8A]_CFOLDERRENAMEDHARVESTER_RUNL_EXIT=0x2e
+[TRACE]TRACE_FLOW[0x8A]_CFOLDERRENAMEDHARVESTER_STARTL_ENTRY=0x27
+[TRACE]TRACE_FLOW[0x8A]_CFOLDERRENAMEDHARVESTER_STARTL_EXIT=0x28
+[TRACE]TRACE_FLOW[0x8A]_CMMCMONITOR_CMMCMONITOR_ENTRY=0x30
+[TRACE]TRACE_FLOW[0x8A]_CMMCMONITOR_CMMCMONITOR_EXIT=0x31
+[TRACE]TRACE_FLOW[0x8A]_CMMCMONITOR_CONSTRUCTL_ENTRY=0x32
+[TRACE]TRACE_FLOW[0x8A]_CMMCMONITOR_CONSTRUCTL_EXIT=0x33
+[TRACE]TRACE_FLOW[0x8A]_CMMCMONITOR_DOCANCEL_ENTRY=0x36
+[TRACE]TRACE_FLOW[0x8A]_CMMCMONITOR_DOCANCEL_EXIT=0x37
+[TRACE]TRACE_FLOW[0x8A]_CMMCMONITOR_RUNL_ENTRY=0x38
+[TRACE]TRACE_FLOW[0x8A]_CMMCMONITOR_RUNL_EXIT=0x39
+[TRACE]TRACE_FLOW[0x8A]_CMMCMONITOR_STARTMONITORING_ENTRY=0x34
+[TRACE]TRACE_FLOW[0x8A]_CMMCMONITOR_STARTMONITORING_EXIT=0x35
+[TRACE]TRACE_FLOW[0x8A]_DUP1_CFILEMONITOR_INITIALIZE_EXIT=0x13
+[TRACE]TRACE_FLOW[0x8A]_DUP1_CFILEPLUGIN_UNMOUNT_EXIT=0x18
+[TRACE]TRACE_FLOW[0x8A]_DUP1_CFOLDERRENAMEDHARVESTER_RUNL_EXIT=0x2f
+[TRACE]TRACE_NORMAL[0x86]_CFILEHARVESTER_ADDIGNOREPATHSL=0x1
+[TRACE]TRACE_NORMAL[0x86]_CFILEHARVESTER_CHECKPATH=0x8
+[TRACE]TRACE_NORMAL[0x86]_CFILEHARVESTER_DOCANCEL=0xc
+[TRACE]TRACE_NORMAL[0x86]_CFILEHARVESTER_GETNEXTFOLDERL=0x9
+[TRACE]TRACE_NORMAL[0x86]_CFILEHARVESTER_REMOVEIGNOREPATH=0x7
+[TRACE]TRACE_NORMAL[0x86]_CFILEHARVESTER_REMOVEIGNOREPATHS=0x4
+[TRACE]TRACE_NORMAL[0x86]_CFILEHARVESTER_RUNERROR=0xd
+[TRACE]TRACE_NORMAL[0x86]_CFILEHARVESTER_SETNEXTREQUEST=0xe
+[TRACE]TRACE_NORMAL[0x86]_CFILEMONITOR_ADDNOTIFICATIONPATHSL=0x21
+[TRACE]TRACE_NORMAL[0x86]_CFILEMONITOR_INITIALIZE=0x1f
+[TRACE]TRACE_NORMAL[0x86]_CFILEMONITOR_REMOVENOTIFICATIONPATHS=0x25
+[TRACE]TRACE_NORMAL[0x86]_CFILEMONITOR_RESETSTATUS=0x1e
+[TRACE]TRACE_NORMAL[0x86]_CFILEMONITOR_RUNERROR=0xf
+[TRACE]TRACE_NORMAL[0x86]_CFILEMONITOR_STARTMONITORING=0x1d
+[TRACE]TRACE_NORMAL[0x86]_CFILEPLUGIN_CONSTRUCTL=0x29
+[TRACE]TRACE_NORMAL[0x86]_CFILEPLUGIN_CREATECONTENTINDEXITEML=0x34
+[TRACE]TRACE_NORMAL[0x86]_CFILEPLUGIN_CREATEFOLDERFILEINDEXITEML=0x37
+[TRACE]TRACE_NORMAL[0x86]_CFILEPLUGIN_STARTPLUGINL=0x2f
+[TRACE]TRACE_NORMAL[0x86]_CFOLDERRENAMEDHARVESTER_DOCANCEL=0x3e
+[TRACE]TRACE_NORMAL[0x86]_CFOLDERRENAMEDHARVESTER_GETNEXTFOLDERL=0x3c
+[TRACE]TRACE_NORMAL[0x86]_CFOLDERRENAMEDHARVESTER_RUNERROR=0x3f
+[TRACE]TRACE_NORMAL[0x86]_CFOLDERRENAMEDHARVESTER_SETNEXTREQUEST=0x40
+[TRACE]TRACE_NORMAL[0x86]_CMMCMONITOR_CONSTRUCTL=0x41
+[TRACE]TRACE_NORMAL[0x86]_CMMCMONITOR_MMCSTATUS=0x45
+[TRACE]TRACE_NORMAL[0x86]_CMMCMONITOR_RUNERROR=0x46
+[TRACE]TRACE_NORMAL[0x86]_CMMCMONITOR_RUNL=0x47
+[TRACE]TRACE_NORMAL[0x86]_DUP10_CFILEMONITOR_RUNL=0x19
+[TRACE]TRACE_NORMAL[0x86]_DUP11_CFILEMONITOR_RUNL=0x1a
+[TRACE]TRACE_NORMAL[0x86]_DUP12_CFILEMONITOR_RUNL=0x1b
+[TRACE]TRACE_NORMAL[0x86]_DUP13_CFILEMONITOR_RUNL=0x1c
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CFILEHARVESTER_ADDIGNOREPATHSL=0x2
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CFILEHARVESTER_GETNEXTFOLDERL=0xa
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CFILEHARVESTER_REMOVEIGNOREPATHS=0x5
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CFILEMONITOR_ADDNOTIFICATIONPATHSL=0x22
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CFILEMONITOR_INITIALIZE=0x20
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CFILEMONITOR_REMOVENOTIFICATIONPATHS=0x26
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CFILEMONITOR_RUNL=0x10
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CFILEPLUGIN_CONSTRUCTL=0x2a
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CFILEPLUGIN_CREATECONTENTINDEXITEML=0x32
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CFILEPLUGIN_CREATEFOLDERFILEINDEXITEML=0x38
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CFILEPLUGIN_STARTPLUGINL=0x30
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CFOLDERRENAMEDHARVESTER_GETNEXTFOLDERL=0x3d
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CMMCMONITOR_CONSTRUCTL=0x42
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CMMCMONITOR_RUNL=0x48
+[TRACE]TRACE_NORMAL[0x86]_DUP2_CFILEHARVESTER_ADDIGNOREPATHSL=0x3
+[TRACE]TRACE_NORMAL[0x86]_DUP2_CFILEHARVESTER_GETNEXTFOLDERL=0xb
+[TRACE]TRACE_NORMAL[0x86]_DUP2_CFILEHARVESTER_REMOVEIGNOREPATHS=0x6
+[TRACE]TRACE_NORMAL[0x86]_DUP2_CFILEMONITOR_ADDNOTIFICATIONPATHSL=0x23
+[TRACE]TRACE_NORMAL[0x86]_DUP2_CFILEMONITOR_REMOVENOTIFICATIONPATHS=0x27
+[TRACE]TRACE_NORMAL[0x86]_DUP2_CFILEMONITOR_RUNL=0x12
+[TRACE]TRACE_NORMAL[0x86]_DUP2_CFILEPLUGIN_CONSTRUCTL=0x2b
+[TRACE]TRACE_NORMAL[0x86]_DUP2_CFILEPLUGIN_CREATECONTENTINDEXITEML=0x33
+[TRACE]TRACE_NORMAL[0x86]_DUP2_CFILEPLUGIN_CREATEFOLDERFILEINDEXITEML=0x39
+[TRACE]TRACE_NORMAL[0x86]_DUP2_CFILEPLUGIN_STARTPLUGINL=0x31
+[TRACE]TRACE_NORMAL[0x86]_DUP2_CMMCMONITOR_CONSTRUCTL=0x43
+[TRACE]TRACE_NORMAL[0x86]_DUP2_CMMCMONITOR_RUNL=0x49
+[TRACE]TRACE_NORMAL[0x86]_DUP3_CFILEMONITOR_ADDNOTIFICATIONPATHSL=0x24
+[TRACE]TRACE_NORMAL[0x86]_DUP3_CFILEMONITOR_REMOVENOTIFICATIONPATHS=0x28
+[TRACE]TRACE_NORMAL[0x86]_DUP3_CFILEMONITOR_RUNL=0x13
+[TRACE]TRACE_NORMAL[0x86]_DUP3_CFILEPLUGIN_CONSTRUCTL=0x2c
+[TRACE]TRACE_NORMAL[0x86]_DUP3_CFILEPLUGIN_CREATECONTENTINDEXITEML=0x35
+[TRACE]TRACE_NORMAL[0x86]_DUP3_CFILEPLUGIN_CREATEFOLDERFILEINDEXITEML=0x3a
+[TRACE]TRACE_NORMAL[0x86]_DUP3_CMMCMONITOR_CONSTRUCTL=0x44
+[TRACE]TRACE_NORMAL[0x86]_DUP3_CMMCMONITOR_RUNL=0x4a
+[TRACE]TRACE_NORMAL[0x86]_DUP4_CFILEMONITOR_RUNL=0x11
+[TRACE]TRACE_NORMAL[0x86]_DUP4_CFILEPLUGIN_CONSTRUCTL=0x2d
+[TRACE]TRACE_NORMAL[0x86]_DUP4_CFILEPLUGIN_CREATECONTENTINDEXITEML=0x36
+[TRACE]TRACE_NORMAL[0x86]_DUP4_CFILEPLUGIN_CREATEFOLDERFILEINDEXITEML=0x3b
+[TRACE]TRACE_NORMAL[0x86]_DUP5_CFILEMONITOR_RUNL=0x14
+[TRACE]TRACE_NORMAL[0x86]_DUP5_CFILEPLUGIN_CONSTRUCTL=0x2e
+[TRACE]TRACE_NORMAL[0x86]_DUP6_CFILEMONITOR_RUNL=0x15
+[TRACE]TRACE_NORMAL[0x86]_DUP7_CFILEMONITOR_RUNL=0x16
+[TRACE]TRACE_NORMAL[0x86]_DUP8_CFILEMONITOR_RUNL=0x17
+[TRACE]TRACE_NORMAL[0x86]_DUP9_CFILEMONITOR_RUNL=0x18
--- a/harvesterplugins/media/audio/data/20029ab9.rss	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/media/audio/data/20029ab9.rss	Mon May 03 12:32:15 2010 +0300
@@ -36,7 +36,7 @@
                                         {
                                         implementation_uid = 0x20029AB9;
                                         version_no = 1;
-                                        display_name = "Media harvester plugin";
+                                        display_name = "Audios";
                                         default_data = "Media";
                                         opaque_data = "";
                                         }
--- a/harvesterplugins/media/audio/group/audioplugin.mmp	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/media/audio/group/audioplugin.mmp	Mon May 03 12:32:15 2010 +0300
@@ -31,7 +31,7 @@
 SOURCE        tproxy.cpp
 
 USERINCLUDE   ../inc
-USERINCLUDE   ../../mediautils/inc
+USERINCLUDE   ../../mediautils/inc ../traces
 
 APP_LAYER_SYSTEMINCLUDE
 SYSTEMINCLUDE /epoc32/include/ecom
--- a/harvesterplugins/media/audio/src/cpixmediaaudiodoc.cpp	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/media/audio/src/cpixmediaaudiodoc.cpp	Mon May 03 12:32:15 2010 +0300
@@ -23,6 +23,11 @@
 #include <mdeconstants.h>
 #include <mdeobjectdef.h>
 #include "harvesterserverlogger.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "cpixmediaaudiodocTraces.h"
+#endif
+
 
 // -----------------------------------------------------------------------------
 // CCPIXDocFetcher::NewL()
@@ -83,6 +88,7 @@
                                               const TDesC& aAppClass,
                                               CMdEObjectDef& aObjectDef)
     {
+    OstTraceFunctionEntry0( CCPIXMEDIAAUDIODOC_GETCPIXDOCUMENTL_ENTRY );
     CPIXLOGSTRING("START CCPIXMediaAudioDoc::GetCpixDocumentL");
     //Get basic document
     CSearchDocument* index_item = CCPIXDocFetcher::GetCpixDocumentL(aObject,aAppClass,aObjectDef);
@@ -134,6 +140,7 @@
                              textProperty->Value());
        }   
     CPIXLOGSTRING("END CCPIXMediaAudioDoc::GetCpixDocumentL");
+    OstTraceFunctionExit0( CCPIXMEDIAAUDIODOC_GETCPIXDOCUMENTL_EXIT );
     return index_item;
     }
 //End of life
--- a/harvesterplugins/media/audio/src/mediaplugin.cpp	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/media/audio/src/mediaplugin.cpp	Mon May 03 12:32:15 2010 +0300
@@ -33,6 +33,11 @@
 #include "mmcmonitor.h"
 #include "cpixmdedbmanager.h"
 #include "mdsitementity.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "mediapluginTraces.h"
+#endif
+
 
 //Constants
 _LIT(KPathTrailer, "\\root\\media\\audio");
@@ -98,6 +103,7 @@
 // -----------------------------------------------------------------------------
 void CAudioPlugin::StartPluginL()
 	{
+    OstTraceFunctionEntry0( CAUDIOPLUGIN_STARTPLUGINL_ENTRY );
     CPIXLOGSTRING("CAudioPlugin::StartPluginL");
 	// Define this base application class, use default location
 	iIndexerUtil = CCPixIndexerUtils::NewL(iSearchSession);
@@ -122,6 +128,7 @@
 	TUid uidOfPlugin = {0x20029AB9};
 	iDBManager = CCPIXMDEDbManager::NewL(uidOfPlugin);
 	iMdsItem = CMDSEntity::NewL();
+	OstTraceFunctionExit0( CAUDIOPLUGIN_STARTPLUGINL_EXIT );
 	}
 
 void CAudioPlugin::HarvestingCompletedL()
@@ -134,6 +141,7 @@
 // -----------------------------------------------------------------------------
 void CAudioPlugin::StartHarvestingL( const TDesC& /*aMedia*/ )
     {
+    OstTraceFunctionEntry0( CAUDIOPLUGIN_STARTHARVESTINGL_ENTRY );
     //iIndexer->ResetL();//reset any indexes if exist already
     CPIXLOGSTRING("CAudioPlugin::StartHarvestingL");
     iDBManager->ResetL();
@@ -143,6 +151,7 @@
     iStartTime.UniversalTime();
 #endif  
     iMdeHarvester->DoHarvesetL(MdeConstants::Audio::KAudioObject);//Start Harvesting
+    OstTraceFunctionExit0( CAUDIOPLUGIN_STARTHARVESTINGL_EXIT );
     }
 
 //handle MMC event for the Drive
@@ -170,6 +179,7 @@
 void CAudioPlugin::HandleMdeItemL( TItemId aObjId, TCPixActionType aActionType)
     {
     //Get the object from object utils and get the CPIX document and add delete or update
+    OstTrace1( TRACE_NORMAL, CAUDIOPLUGIN_HANDLEMDEITEML, "CAudioPlugin::HandleMdeItemL;aObjId=%d", aObjId );
     CPIXLOGSTRING2("CAudioPlugin::HandleMdeItemL(): aObjId = %d ", aObjId );
     // creating CSearchDocument object with unique ID for this application
     TBuf<KMaxFileName> docid_str;
@@ -179,6 +189,7 @@
         //and we already have in our database just return in case of update move forward
         if(iDBManager->IsAlreadyExistL(aObjId) && aActionType == ECPixAddAction)//Avoid reharvesting
             {
+            OstTrace0( TRACE_NORMAL, DUP1_CAUDIOPLUGIN_HANDLEMDEITEML, "CAudioPlugin::HandleMdeItemL(): Already harvested returning" );
             CPIXLOGSTRING("CAudioPlugin::HandleMdeItemL(): Already harvested returning");
             return;
             }
@@ -191,6 +202,7 @@
         if(!iIndexer)
             {
             delete index_item;//Remove
+            OstTrace0( TRACE_NORMAL, DUP2_CAUDIOPLUGIN_HANDLEMDEITEML, "CAudioPlugin::HandleMdeItemL(): Indexer not found" );
             CPIXLOGSTRING("CAudioPlugin::HandleMdeItemL(): Indexer not found");
             return;
             }
@@ -200,6 +212,7 @@
 #ifdef __PERFORMANCE_DATA
             ++count;
 #endif
+            OstTrace0( TRACE_NORMAL, DUP3_CAUDIOPLUGIN_HANDLEMDEITEML, "CAudioPlugin::HandleMdeItemL(): Indexer found calling AddL" );
             CPIXLOGSTRING("CAudioPlugin::HandleMdeItemL(): Indexer found calling AddL");
             //First check if it already exist in database
             TRAPD(err, iIndexer->UpdateL(*index_item)); //Always Update to avoid reharvesting
@@ -213,10 +226,12 @@
                 iIndexerUtil->GetDriveFromMediaId(object.MediaId(),drive);
                 iMdsItem->SetDrive(drive);
                 iDBManager->AddL(aObjId,*iMdsItem);//Add to SyncDB
+                OstTrace0( TRACE_NORMAL, DUP4_CAUDIOPLUGIN_HANDLEMDEITEML, "CAudioPlugin::HandleMdeItemL(): Added." );
                 CPIXLOGSTRING("CAudioPlugin::HandleMdeItemL(): Added.");
                 }
             else
                 {
+                OstTrace1( TRACE_NORMAL, DUP5_CAUDIOPLUGIN_HANDLEMDEITEML, "CAudioPlugin::HandleMdeItemL;Error %d in adding", err );
                 CPIXLOGSTRING2("CAudioPlugin::HandleMdeItemL(): Error %d in adding.", err);
                 }
             }
@@ -237,6 +252,7 @@
                    CCPixIndexer *tempIndexer;            
                    tempIndexer = iIndexerUtil->GetIndexerFromDrive(iMdsItem->DriveNumber());
                    tempIndexer->DeleteL(iMdsItem->Uri());
+                   OstTrace0( TRACE_NORMAL, DUP6_CAUDIOPLUGIN_HANDLEMDEITEML, "CAudioPlugin::HandleMdeItemL(): Deleted existing URI for update" );
                    CPIXLOGSTRING("CAudioPlugin::HandleMdeItemL(): Deleted existing URI for update");
                    }
                 TRAPD(error, iIndexer->UpdateL(*index_item));
@@ -248,10 +264,12 @@
                     iIndexerUtil->GetDriveFromMediaId(object.MediaId(),drive);
                     iMdsItem->Set(aObjId,iAudioDocument->GetUri(),drive);
                     iDBManager->UpdateL(aObjId,*iMdsItem);//Add to SyncDB
+                    OstTrace0( TRACE_NORMAL, DUP7_CAUDIOPLUGIN_HANDLEMDEITEML, "CAudioPlugin::HandleMdeItemL(): Updated." );
                     CPIXLOGSTRING("CAudioPlugin::HandleMdeItemL(): Updated.");
                     }
                 else
                     {
+                    OstTrace1( TRACE_NORMAL, DUP8_CAUDIOPLUGIN_HANDLEMDEITEML, "CAudioPlugin::HandleMdeItemL;Error %d in Updating", err );
                     CPIXLOGSTRING2("CAudioPlugin::HandleMdeItemL(): Error %d in updating.", error);
                     }
                }
@@ -271,6 +289,7 @@
                     iIndexerUtil->GetDriveFromMediaId(object.MediaId(),drive);
                     iMdsItem->SetDrive(drive);
                     iDBManager->AddL(aObjId,*iMdsItem);//Add to SyncDB
+                    OstTrace0( TRACE_NORMAL, DUP9_CAUDIOPLUGIN_HANDLEMDEITEML, "CAudioPlugin::HandleMdeItemL(): Added Item before Update." );
                     CPIXLOGSTRING("CAudioPlugin::HandleMdeItemL(): Added Item before Update.");
                     }
                 }            
@@ -293,10 +312,12 @@
                 TRAPD(err, iIndexer->DeleteL(docid_str));//Delete it
                 if (err == KErrNone)
                     {
+                    OstTrace0( TRACE_NORMAL, DUP10_CAUDIOPLUGIN_HANDLEMDEITEML, "CAudioPlugin::HandleMdeItemL(): Deleted." );
                     CPIXLOGSTRING("CAudioPlugin::HandleMdeItemL(): Deleted.");
                     }
                 else
                     {
+                    OstTrace1( TRACE_NORMAL, DUP11_CAUDIOPLUGIN_HANDLEMDEITEML, "CAudioPlugin::HandleMdeItemL;Error %d in deleting", err );
                     CPIXLOGSTRING2("CAudioPlugin::HandleMdeItemL(): Error %d in deleting.", err);
                     }
                 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/media/audio/traces/OstTraceDefinitions.h	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 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: 
+*
+*/
+#ifndef __OSTTRACEDEFINITIONS_H__
+#define __OSTTRACEDEFINITIONS_H__
+// OST_TRACE_COMPILER_IN_USE flag has been added by Trace Compiler
+// REMOVE BEFORE CHECK-IN TO VERSION CONTROL
+//#define OST_TRACE_COMPILER_IN_USE
+#include <opensystemtrace.h>
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/media/audio/traces/cpixmediaaudiodocTraces.h	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,16 @@
+// Created by TraceCompiler 2.1.2
+// DO NOT EDIT, CHANGES WILL BE LOST
+
+#ifndef __CPIXMEDIAAUDIODOCTRACES_H__
+#define __CPIXMEDIAAUDIODOCTRACES_H__
+
+#define KOstTraceComponentID 0x20029ab9
+
+#define CCPIXMEDIAAUDIODOC_GETCPIXDOCUMENTL_ENTRY 0x8a0001
+#define CCPIXMEDIAAUDIODOC_GETCPIXDOCUMENTL_EXIT 0x8a0002
+
+
+#endif
+
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/media/audio/traces/fixed_id.definitions	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,21 @@
+#Fixed group and trace id definitions. If this file is removed, the identifiers are rebuilt.
+[GROUP]TRACE_FLOW=0x8a
+[GROUP]TRACE_NORMAL=0x86
+[TRACE]TRACE_FLOW[0x8A]_CAUDIOPLUGIN_STARTHARVESTINGL_ENTRY=0x5
+[TRACE]TRACE_FLOW[0x8A]_CAUDIOPLUGIN_STARTHARVESTINGL_EXIT=0x6
+[TRACE]TRACE_FLOW[0x8A]_CAUDIOPLUGIN_STARTPLUGINL_ENTRY=0x3
+[TRACE]TRACE_FLOW[0x8A]_CAUDIOPLUGIN_STARTPLUGINL_EXIT=0x4
+[TRACE]TRACE_FLOW[0x8A]_CCPIXMEDIAAUDIODOC_GETCPIXDOCUMENTL_ENTRY=0x1
+[TRACE]TRACE_FLOW[0x8A]_CCPIXMEDIAAUDIODOC_GETCPIXDOCUMENTL_EXIT=0x2
+[TRACE]TRACE_NORMAL[0x86]_CAUDIOPLUGIN_HANDLEMDEITEML=0x1
+[TRACE]TRACE_NORMAL[0x86]_DUP10_CAUDIOPLUGIN_HANDLEMDEITEML=0xb
+[TRACE]TRACE_NORMAL[0x86]_DUP11_CAUDIOPLUGIN_HANDLEMDEITEML=0xc
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CAUDIOPLUGIN_HANDLEMDEITEML=0x2
+[TRACE]TRACE_NORMAL[0x86]_DUP2_CAUDIOPLUGIN_HANDLEMDEITEML=0x3
+[TRACE]TRACE_NORMAL[0x86]_DUP3_CAUDIOPLUGIN_HANDLEMDEITEML=0x4
+[TRACE]TRACE_NORMAL[0x86]_DUP4_CAUDIOPLUGIN_HANDLEMDEITEML=0x5
+[TRACE]TRACE_NORMAL[0x86]_DUP5_CAUDIOPLUGIN_HANDLEMDEITEML=0x6
+[TRACE]TRACE_NORMAL[0x86]_DUP6_CAUDIOPLUGIN_HANDLEMDEITEML=0x7
+[TRACE]TRACE_NORMAL[0x86]_DUP7_CAUDIOPLUGIN_HANDLEMDEITEML=0x8
+[TRACE]TRACE_NORMAL[0x86]_DUP8_CAUDIOPLUGIN_HANDLEMDEITEML=0x9
+[TRACE]TRACE_NORMAL[0x86]_DUP9_CAUDIOPLUGIN_HANDLEMDEITEML=0xa
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/media/audio/traces/mediapluginTraces.h	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,30 @@
+// Created by TraceCompiler 2.1.2
+// DO NOT EDIT, CHANGES WILL BE LOST
+
+#ifndef __MEDIAPLUGINTRACES_H__
+#define __MEDIAPLUGINTRACES_H__
+
+#define KOstTraceComponentID 0x20029ab9
+
+#define CAUDIOPLUGIN_STARTPLUGINL_ENTRY 0x8a0003
+#define CAUDIOPLUGIN_STARTPLUGINL_EXIT 0x8a0004
+#define CAUDIOPLUGIN_STARTHARVESTINGL_ENTRY 0x8a0005
+#define CAUDIOPLUGIN_STARTHARVESTINGL_EXIT 0x8a0006
+#define CAUDIOPLUGIN_HANDLEMDEITEML 0x860001
+#define DUP1_CAUDIOPLUGIN_HANDLEMDEITEML 0x860002
+#define DUP2_CAUDIOPLUGIN_HANDLEMDEITEML 0x860003
+#define DUP3_CAUDIOPLUGIN_HANDLEMDEITEML 0x860004
+#define DUP4_CAUDIOPLUGIN_HANDLEMDEITEML 0x860005
+#define DUP5_CAUDIOPLUGIN_HANDLEMDEITEML 0x860006
+#define DUP6_CAUDIOPLUGIN_HANDLEMDEITEML 0x860007
+#define DUP7_CAUDIOPLUGIN_HANDLEMDEITEML 0x860008
+#define DUP8_CAUDIOPLUGIN_HANDLEMDEITEML 0x860009
+#define DUP9_CAUDIOPLUGIN_HANDLEMDEITEML 0x86000a
+#define DUP10_CAUDIOPLUGIN_HANDLEMDEITEML 0x86000b
+#define DUP11_CAUDIOPLUGIN_HANDLEMDEITEML 0x86000c
+
+
+#endif
+
+// End of file
+
--- a/harvesterplugins/media/image/data/20029abb.rss	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/media/image/data/20029abb.rss	Mon May 03 12:32:15 2010 +0300
@@ -36,7 +36,7 @@
                                         {
                                         implementation_uid = 0x20029ABB;
                                         version_no = 1;
-                                        display_name = "Media harvester Images plugin";
+                                        display_name = "Images";
                                         default_data = "Images";
                                         opaque_data = "";
                                         }
--- a/harvesterplugins/media/image/group/imageplugin.mmp	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/media/image/group/imageplugin.mmp	Mon May 03 12:32:15 2010 +0300
@@ -32,7 +32,7 @@
 SOURCE        tproxy.cpp
 
 USERINCLUDE   ../inc
-USERINCLUDE   ../../mediautils/inc
+USERINCLUDE   ../../mediautils/inc ../traces
 SYSTEMINCLUDE /epoc32/include/ecom
 APP_LAYER_SYSTEMINCLUDE
 
--- a/harvesterplugins/media/image/src/cpixmediaimagedoc.cpp	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/media/image/src/cpixmediaimagedoc.cpp	Mon May 03 12:32:15 2010 +0300
@@ -23,6 +23,11 @@
 #include <mdeconstants.h>
 #include <mdeobjectdef.h>
 #include "harvesterserverlogger.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "cpixmediaimagedocTraces.h"
+#endif
+
 
 _LIT( KFormatDateTime, "%04d-%02d-%02dT%02d:%02d:%02dZ");    // yyyy-mm-ddThh:mm:ssZ
 
@@ -85,6 +90,7 @@
                                               const TDesC& aAppClass,
                                               CMdEObjectDef& aObjectDef)
     {
+    OstTraceFunctionEntry0( CCPIXMEDIAIMAGEDOC_GETCPIXDOCUMENTL_ENTRY );
     //Get basic document
     CPIXLOGSTRING("START CCPIXMediaImageDoc::GetCpixDocumentL");
     CSearchDocument* index_item = CCPIXDocFetcher::GetCpixDocumentL(aObject,aAppClass,aObjectDef);
@@ -176,6 +182,7 @@
       }
       */
     CPIXLOGSTRING("END CCPIXMediaImageDoc::GetCpixDocumentL");
+    OstTraceFunctionExit0( CCPIXMEDIAIMAGEDOC_GETCPIXDOCUMENTL_EXIT );
     return index_item;
     }
 //End of life
--- a/harvesterplugins/media/image/src/imageplugin.cpp	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/media/image/src/imageplugin.cpp	Mon May 03 12:32:15 2010 +0300
@@ -31,6 +31,11 @@
 #include "mmcmonitor.h"
 #include "cpixmdedbmanager.h"
 #include "mdsitementity.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "imagepluginTraces.h"
+#endif
+
 
 //Constants
 _LIT(KPathTrailer, "\\root\\media\\image");
@@ -96,6 +101,7 @@
 // -----------------------------------------------------------------------------
 void CImagePlugin::StartPluginL()
 	{
+    OstTraceFunctionEntry0( CIMAGEPLUGIN_STARTPLUGINL_ENTRY );
     CPIXLOGSTRING("CImagePlugin::StartPluginL");
 	// Define this base application class, use default location
 	iIndexerUtil = CCPixIndexerUtils::NewL(iSearchSession);
@@ -120,6 +126,7 @@
 	TUid uidOfPlugin = {0x20029ABB};
 	iDBManager = CCPIXMDEDbManager::NewL(uidOfPlugin);
 	iMdsItem = CMDSEntity::NewL();
+	OstTraceFunctionExit0( CIMAGEPLUGIN_STARTPLUGINL_EXIT );
 	}
 
 void CImagePlugin::HarvestingCompletedL()
@@ -132,6 +139,7 @@
 // -----------------------------------------------------------------------------
 void CImagePlugin::StartHarvestingL( const TDesC& /*aMedia*/ )
     {
+    OstTraceFunctionEntry0( CIMAGEPLUGIN_STARTHARVESTINGL_ENTRY );
     //iIndexer->ResetL();//reset any indexes if exist already
     CPIXLOGSTRING("CImagePlugin::StartHarvestingL");
     iDBManager->ResetL();
@@ -141,6 +149,7 @@
     iStartTime.UniversalTime();
 #endif  
     iMdeHarvester->DoHarvesetL(MdeConstants::Image::KImageObject);//Start Harvesting
+    OstTraceFunctionExit0( CIMAGEPLUGIN_STARTHARVESTINGL_EXIT );
     }
 
 //handle MMC event for the Drive
@@ -168,6 +177,7 @@
 void CImagePlugin::HandleMdeItemL( TItemId aObjId, TCPixActionType aActionType)
     {
     //Get the object from object utils and get the CPIX document and add delete or update
+    OstTrace1( TRACE_NORMAL, CIMAGEPLUGIN_HANDLEMDEITEML, "CImagePlugin::HandleMdeItemL;aObjId=%d", aObjId );
     CPIXLOGSTRING2("CImagePlugin::HandleMdeItemL(): aObjId = %d ", aObjId );
     // creating CSearchDocument object with unique ID for this application
     TBuf<KMaxFileName> docid_str;
@@ -176,6 +186,7 @@
         //The caller should always handle leave of HandleMdeItemL
         if(iDBManager->IsAlreadyExistL(aObjId) && aActionType == ECPixAddAction)//Avoid reharvesting
             {
+            OstTrace0( TRACE_NORMAL, DUP1_CIMAGEPLUGIN_HANDLEMDEITEML, "CImagePlugin::HandleMdeItemL(): Already harvested returning" );
             CPIXLOGSTRING("CImagePlugin::HandleMdeItemL(): Already harvested returning");
             return;
             }
@@ -187,6 +198,7 @@
         if(!iIndexer)
             {
             delete index_item;
+            OstTrace0( TRACE_NORMAL, DUP2_CIMAGEPLUGIN_HANDLEMDEITEML, "CImagePlugin::HandleMdeItemL(): Indexer not found" );
             CPIXLOGSTRING("CImagePlugin::HandleMdeItemL(): Indexer not found");
             return;
             }
@@ -196,6 +208,7 @@
 #ifdef __PERFORMANCE_DATA
             ++count;
 # endif
+            OstTrace0( TRACE_NORMAL, DUP3_CIMAGEPLUGIN_HANDLEMDEITEML, "CImagePlugin::HandleMdeItemL(): Indexer found calling AddL" );
             CPIXLOGSTRING("CImagePlugin::HandleMdeItemL(): Indexer found calling AddL");
             //First check if it already exist in database
             TRAPD(err, iIndexer->UpdateL(*index_item)); //Always Update to avoid reharvesting
@@ -209,10 +222,12 @@
                     iIndexerUtil->GetDriveFromMediaId(object.MediaId(),drive);
                     iMdsItem->SetDrive(drive);
                     iDBManager->AddL(aObjId,*iMdsItem);//Add to SyncDB
+                OstTrace0( TRACE_NORMAL, DUP4_CIMAGEPLUGIN_HANDLEMDEITEML, "CImagePlugin::HandleMdeItemL(): Added." );
                 CPIXLOGSTRING("CImagePlugin::HandleMdeItemL(): Added.");
                 }
             else
                 {
+                OstTrace1( TRACE_NORMAL, DUP5_CIMAGEPLUGIN_HANDLEMDEITEML, "CImagePlugin::HandleMdeItemL;Error %d in adding", err );
                 CPIXLOGSTRING2("CImagePlugin::HandleMdeItemL(): Error %d in adding.", err);
                 }
             }
@@ -233,6 +248,7 @@
                     CCPixIndexer *tempIndexer;            
                     tempIndexer = iIndexerUtil->GetIndexerFromDrive(iMdsItem->DriveNumber());
                     tempIndexer->DeleteL(iMdsItem->Uri());
+                    OstTrace0( TRACE_NORMAL, DUP6_CIMAGEPLUGIN_HANDLEMDEITEML, "CImagePlugin::HandleMdeItemL(): Deleted existing URI for update" );
                     CPIXLOGSTRING("CImagePlugin::HandleMdeItemL(): Deleted existing URI for update");
                     }
                 TRAPD(error, iIndexer->UpdateL(*index_item));
@@ -244,10 +260,12 @@
                     iIndexerUtil->GetDriveFromMediaId(object.MediaId(),drive);
                     iMdsItem->Set(aObjId,iImageDocument->GetUri(),drive);
                     iDBManager->UpdateL(aObjId,*iMdsItem);//Add to SyncDB
+                    OstTrace0( TRACE_NORMAL, DUP7_CIMAGEPLUGIN_HANDLEMDEITEML, "CImagePlugin::HandleMdeItemL(): Updated." );
                     CPIXLOGSTRING("CImagePlugin::HandleMdeItemL(): Updated.");
                     }
                 else
                     {
+                    OstTrace1( TRACE_NORMAL, DUP8_CIMAGEPLUGIN_HANDLEMDEITEML, "CImagePlugin::HandleMdeItemL;Error %d in updating", err );
                     CPIXLOGSTRING2("CImagePlugin::HandleMdeItemL(): Error %d in updating.", error);
                     }
                 }
@@ -267,6 +285,7 @@
                     iIndexerUtil->GetDriveFromMediaId(object.MediaId(),drive);
                     iMdsItem->SetDrive(drive);
                     iDBManager->AddL(aObjId,*iMdsItem);//Add to SyncDB
+                    OstTrace0( TRACE_NORMAL, DUP9_CIMAGEPLUGIN_HANDLEMDEITEML, "CImagePlugin::HandleMdeItemL(): Added Item before Update." );
                     CPIXLOGSTRING("CImagePlugin::HandleMdeItemL(): Added Item before Update.");
                     }
                 }                       
@@ -291,10 +310,12 @@
                TRAPD(err, iIndexer->DeleteL(docid_str));//Delete it
                if (err == KErrNone)
                    {
+                    OstTrace0( TRACE_NORMAL, DUP10_CIMAGEPLUGIN_HANDLEMDEITEML, "CImagePlugin::HandleMdeItemL(): Deleted." );
                     CPIXLOGSTRING("CImagePlugin::HandleMdeItemL(): Deleted.");
                    }
                else
                    {
+                    OstTrace1( TRACE_NORMAL, DUP11_CIMAGEPLUGIN_HANDLEMDEITEML, "CImagePlugin::HandleMdeItemL;Error %d in deleting", err );
                     CPIXLOGSTRING2("CImagePlugin::HandleMdeItemL(): Error %d in deleting.", err);
                    }
                }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/media/image/traces/OstTraceDefinitions.h	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 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: 
+*
+*/
+#ifndef __OSTTRACEDEFINITIONS_H__
+#define __OSTTRACEDEFINITIONS_H__
+// OST_TRACE_COMPILER_IN_USE flag has been added by Trace Compiler
+// REMOVE BEFORE CHECK-IN TO VERSION CONTROL
+//#define OST_TRACE_COMPILER_IN_USE
+#include <opensystemtrace.h>
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/media/image/traces/cpixmediaimagedocTraces.h	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,16 @@
+// Created by TraceCompiler 2.1.2
+// DO NOT EDIT, CHANGES WILL BE LOST
+
+#ifndef __CPIXMEDIAIMAGEDOCTRACES_H__
+#define __CPIXMEDIAIMAGEDOCTRACES_H__
+
+#define KOstTraceComponentID 0x20029abb
+
+#define CCPIXMEDIAIMAGEDOC_GETCPIXDOCUMENTL_ENTRY 0x8a0001
+#define CCPIXMEDIAIMAGEDOC_GETCPIXDOCUMENTL_EXIT 0x8a0002
+
+
+#endif
+
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/media/image/traces/fixed_id.definitions	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,21 @@
+#Fixed group and trace id definitions. If this file is removed, the identifiers are rebuilt.
+[GROUP]TRACE_FLOW=0x8a
+[GROUP]TRACE_NORMAL=0x86
+[TRACE]TRACE_FLOW[0x8A]_CCPIXMEDIAIMAGEDOC_GETCPIXDOCUMENTL_ENTRY=0x1
+[TRACE]TRACE_FLOW[0x8A]_CCPIXMEDIAIMAGEDOC_GETCPIXDOCUMENTL_EXIT=0x2
+[TRACE]TRACE_FLOW[0x8A]_CIMAGEPLUGIN_STARTHARVESTINGL_ENTRY=0x5
+[TRACE]TRACE_FLOW[0x8A]_CIMAGEPLUGIN_STARTHARVESTINGL_EXIT=0x6
+[TRACE]TRACE_FLOW[0x8A]_CIMAGEPLUGIN_STARTPLUGINL_ENTRY=0x3
+[TRACE]TRACE_FLOW[0x8A]_CIMAGEPLUGIN_STARTPLUGINL_EXIT=0x4
+[TRACE]TRACE_NORMAL[0x86]_CIMAGEPLUGIN_HANDLEMDEITEML=0x1
+[TRACE]TRACE_NORMAL[0x86]_DUP10_CIMAGEPLUGIN_HANDLEMDEITEML=0xb
+[TRACE]TRACE_NORMAL[0x86]_DUP11_CIMAGEPLUGIN_HANDLEMDEITEML=0xc
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CIMAGEPLUGIN_HANDLEMDEITEML=0x2
+[TRACE]TRACE_NORMAL[0x86]_DUP2_CIMAGEPLUGIN_HANDLEMDEITEML=0x3
+[TRACE]TRACE_NORMAL[0x86]_DUP3_CIMAGEPLUGIN_HANDLEMDEITEML=0x4
+[TRACE]TRACE_NORMAL[0x86]_DUP4_CIMAGEPLUGIN_HANDLEMDEITEML=0x5
+[TRACE]TRACE_NORMAL[0x86]_DUP5_CIMAGEPLUGIN_HANDLEMDEITEML=0x6
+[TRACE]TRACE_NORMAL[0x86]_DUP6_CIMAGEPLUGIN_HANDLEMDEITEML=0x7
+[TRACE]TRACE_NORMAL[0x86]_DUP7_CIMAGEPLUGIN_HANDLEMDEITEML=0x8
+[TRACE]TRACE_NORMAL[0x86]_DUP8_CIMAGEPLUGIN_HANDLEMDEITEML=0x9
+[TRACE]TRACE_NORMAL[0x86]_DUP9_CIMAGEPLUGIN_HANDLEMDEITEML=0xa
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/media/image/traces/imagepluginTraces.h	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,30 @@
+// Created by TraceCompiler 2.1.2
+// DO NOT EDIT, CHANGES WILL BE LOST
+
+#ifndef __IMAGEPLUGINTRACES_H__
+#define __IMAGEPLUGINTRACES_H__
+
+#define KOstTraceComponentID 0x20029abb
+
+#define CIMAGEPLUGIN_STARTPLUGINL_ENTRY 0x8a0003
+#define CIMAGEPLUGIN_STARTPLUGINL_EXIT 0x8a0004
+#define CIMAGEPLUGIN_STARTHARVESTINGL_ENTRY 0x8a0005
+#define CIMAGEPLUGIN_STARTHARVESTINGL_EXIT 0x8a0006
+#define CIMAGEPLUGIN_HANDLEMDEITEML 0x860001
+#define DUP1_CIMAGEPLUGIN_HANDLEMDEITEML 0x860002
+#define DUP2_CIMAGEPLUGIN_HANDLEMDEITEML 0x860003
+#define DUP3_CIMAGEPLUGIN_HANDLEMDEITEML 0x860004
+#define DUP4_CIMAGEPLUGIN_HANDLEMDEITEML 0x860005
+#define DUP5_CIMAGEPLUGIN_HANDLEMDEITEML 0x860006
+#define DUP6_CIMAGEPLUGIN_HANDLEMDEITEML 0x860007
+#define DUP7_CIMAGEPLUGIN_HANDLEMDEITEML 0x860008
+#define DUP8_CIMAGEPLUGIN_HANDLEMDEITEML 0x860009
+#define DUP9_CIMAGEPLUGIN_HANDLEMDEITEML 0x86000a
+#define DUP10_CIMAGEPLUGIN_HANDLEMDEITEML 0x86000b
+#define DUP11_CIMAGEPLUGIN_HANDLEMDEITEML 0x86000c
+
+
+#endif
+
+// End of file
+
--- a/harvesterplugins/media/mediautils/src/cpixdocfetcher.cpp	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/media/mediautils/src/cpixdocfetcher.cpp	Mon May 03 12:32:15 2010 +0300
@@ -102,10 +102,14 @@
         {
         SetAbsoluteURI(aObject.Uri());//Convert URI to absolute path 
         index_item = CSearchDocument::NewLC(GetUri(), aAppClass);
+        
+        TInt slashpos = GetUri().LocateReverse('\\');
+        
+        TPtrC name = GetUri().Mid( (slashpos+1) );
         //Uri is our Document ID
         AddFiledtoDocumentL(*index_item,
                                KNameField, //URI as Name field
-                               GetUri());
+                               name);
         //Store media ID for client to generate path and launch corresponding Item
         TBuf<KMaxMediaLength> mediaBuf;        
         
--- a/harvesterplugins/media/mediautils/src/mmcmonitor.cpp	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/media/mediautils/src/mmcmonitor.cpp	Mon May 03 12:32:15 2010 +0300
@@ -25,7 +25,7 @@
 #include <f32file.h> // TDriveNumber
 #include <driveinfo.h> // TDriveInfo
 
-#include <uikoninternalpskeys.h>
+#include <UikonInternalPSKeys.h>
 
 // CONSTANTS
 // 
--- a/harvesterplugins/media/video/data/20029aba.rss	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/media/video/data/20029aba.rss	Mon May 03 12:32:15 2010 +0300
@@ -36,7 +36,7 @@
                                         {
                                         implementation_uid = 0x20029ABA;
                                         version_no = 1;
-                                        display_name = "Media harvester Video plugin";
+                                        display_name = "Videos";
                                         default_data = "Videos";
                                         opaque_data = "";
                                         }
--- a/harvesterplugins/media/video/group/videoplugin.mmp	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/media/video/group/videoplugin.mmp	Mon May 03 12:32:15 2010 +0300
@@ -31,7 +31,7 @@
 SOURCE 		  cpixmediavideodoc.cpp
 
 USERINCLUDE   ../inc
-USERINCLUDE   ../../mediautils/inc
+USERINCLUDE   ../../mediautils/inc ../traces
 APP_LAYER_SYSTEMINCLUDE
 SYSTEMINCLUDE /epoc32/include/ecom
 
--- a/harvesterplugins/media/video/src/cpixmediavideodoc.cpp	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/media/video/src/cpixmediavideodoc.cpp	Mon May 03 12:32:15 2010 +0300
@@ -23,6 +23,11 @@
 #include <mdeconstants.h>
 #include <mdeobjectdef.h>
 #include "harvesterserverlogger.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "cpixmediavideodocTraces.h"
+#endif
+
 
 // -----------------------------------------------------------------------------
 // CCPIXDocFetcher::NewL()
@@ -83,6 +88,7 @@
                                               const TDesC& aAppClass,
                                               CMdEObjectDef& aObjectDef)
     {
+    OstTraceFunctionEntry0( CCPIXMEDIAVIDEODOC_GETCPIXDOCUMENTL_ENTRY );
     //Get basic document
     CPIXLOGSTRING("CCPIXMediaVideoDoc::GetCpixDocumentL()");
     CSearchDocument* index_item = CCPIXDocFetcher::GetCpixDocumentL(aObject,aAppClass,aObjectDef);
@@ -133,6 +139,7 @@
                    MdeConstants::MediaObject::KCommentProperty,
                    textProperty->Value());
        }
+    OstTraceFunctionExit0( CCPIXMEDIAVIDEODOC_GETCPIXDOCUMENTL_EXIT );
     return index_item;
     }
 
--- a/harvesterplugins/media/video/src/videoplugin.cpp	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/media/video/src/videoplugin.cpp	Mon May 03 12:32:15 2010 +0300
@@ -31,6 +31,11 @@
 #include "mmcmonitor.h"
 #include "cpixmdedbmanager.h"
 #include "mdsitementity.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "videopluginTraces.h"
+#endif
+
 
 //Constants
 _LIT(KPathTrailer, "\\root\\media\\video");
@@ -76,6 +81,7 @@
 
 void CVideoPlugin::StartPluginL()
     {
+    OstTraceFunctionEntry0( CVIDEOPLUGIN_STARTPLUGINL_ENTRY );
     //Define the basic application class 
     CPIXLOGSTRING("CVideoPlugin::StartPluginL");
     iIndexerUtil = CCPixIndexerUtils::NewL( iSearchSession );
@@ -99,10 +105,12 @@
     TUid uidOfPlugin = {0x20029ABA};
     iDBManager = CCPIXMDEDbManager::NewL(uidOfPlugin);
     iMdsItem = CMDSEntity::NewL();
+    OstTraceFunctionExit0( CVIDEOPLUGIN_STARTPLUGINL_EXIT );
     }
 
 void CVideoPlugin::StartHarvestingL( const TDesC& /*aMedia*/ )
     {
+    OstTraceFunctionEntry0( CVIDEOPLUGIN_STARTHARVESTINGL_ENTRY );
     CPIXLOGSTRING("CVideoPlugin::StartHarvestingL");
     iDBManager->ResetL();
     iIndexerUtil->ResetAllL();
@@ -111,15 +119,18 @@
     iStartTime.UniversalTime();
 #endif
     iMdeHarvester->DoHarvesetL( MdeConstants::Video::KVideoObject );      
+    OstTraceFunctionExit0( CVIDEOPLUGIN_STARTHARVESTINGL_EXIT );
     }
 
 void CVideoPlugin::HarvestingCompletedL()
     {
+    OstTraceFunctionEntry0( CVIDEOPLUGIN_HARVESTINGCOMPLETEDL_ENTRY );
     CPIXLOGSTRING("CVideoPlugin::HarvestingCompletedL");
 #ifdef __PERFORMANCE_DATA
     UpdatePerformaceDataL();
 #endif
     iObserver->HarvestingCompleted(this, _L(MEDIA_QBASEAPPCLASS), KErrNone);    
+    OstTraceFunctionExit0( CVIDEOPLUGIN_HARVESTINGCOMPLETEDL_EXIT );
     }
 
 //handle MMC event for the Drive
@@ -144,6 +155,7 @@
 void CVideoPlugin::HandleMdeItemL( TItemId aObjId, TCPixActionType aActionType)
     {
     //Get the object from object utils and get the CPIX document and add delete or update
+    OstTrace1( TRACE_NORMAL, CVIDEOPLUGIN_HANDLEMDEITEML, "CVideoPlugin::HandleMdeItemL;aObjId=%d", aObjId );
     CPIXLOGSTRING2("CVideoPlugin::HandleMdeItemL(): aObjId = %d ", aObjId );
     // creating CSearchDocument object with unique ID for this application
     TBuf<KMaxFileName> docid_str;
@@ -153,6 +165,7 @@
         //and we already have in our database just return in case of update move forward
         if(iDBManager->IsAlreadyExistL(aObjId) && aActionType == ECPixAddAction)//Avoid reharvesting
            {
+           OstTrace0( TRACE_NORMAL, DUP1_CVIDEOPLUGIN_HANDLEMDEITEML, "CVideoPlugin::HandleMdeItemL(): Already harvested returning" );
            CPIXLOGSTRING("CVideoPlugin::HandleMdeItemL(): Already harvested returning");
            return;
            }
@@ -165,6 +178,7 @@
         if (!iIndexer)
             {
             delete index_item;
+            OstTrace0( TRACE_NORMAL, DUP2_CVIDEOPLUGIN_HANDLEMDEITEML, "CVideoPlugin::HandleMdeItemL(): Indexer not found" );
             CPIXLOGSTRING("CVideoPlugin::HandleMdeItemL(): Indexer not found");
             return;
             }
@@ -174,6 +188,7 @@
 #ifdef __PERFORMANCE_DATA
             ++count;
 #endif
+            OstTrace0( TRACE_NORMAL, DUP3_CVIDEOPLUGIN_HANDLEMDEITEML, "CVideoPlugin::HandleMdeItemL(): Indexer found calling AddL" );
             CPIXLOGSTRING("CVideoPlugin::HandleMdeItemL(): Indexer found calling AddL");
             //First check if it already exist in database
             TRAPD(err, iIndexer->UpdateL(*index_item)); //Always Update to avoid reharvesting
@@ -187,10 +202,12 @@
                 iIndexerUtil->GetDriveFromMediaId(object.MediaId(),drive);
                 iMdsItem->SetDrive(drive);
                 iDBManager->AddL(aObjId,*iMdsItem);//Add to SyncDB
+                OstTrace0( TRACE_NORMAL, DUP4_CVIDEOPLUGIN_HANDLEMDEITEML, "CVideoPlugin::HandleMdeItemL(): Added." );
                 CPIXLOGSTRING("CVideoPlugin::HandleMdeItemL(): Added.");
                 }
             else
                 {
+                OstTrace1( TRACE_NORMAL, DUP5_CVIDEOPLUGIN_HANDLEMDEITEML, "CVideoPlugin::HandleMdeItemL;Error %d in adding", err );
                 CPIXLOGSTRING2("CVideoPlugin::HandleMdeItemL(): Error %d in adding.", err);
                 }           
             }
@@ -211,6 +228,7 @@
                     CCPixIndexer *tempIndexer;                
                     tempIndexer = iIndexerUtil->GetIndexerFromDrive(iMdsItem->DriveNumber());
                     tempIndexer->DeleteL(iMdsItem->Uri());
+                    OstTrace0( TRACE_NORMAL, DUP6_CVIDEOPLUGIN_HANDLEMDEITEML, "CVideoPlugin::HandleMdeItemL(): Deleted existing URI for update" );
                     CPIXLOGSTRING("CVideoPlugin::HandleMdeItemL(): Deleted existing URI for update");
                     }
                 TRAPD(error, iIndexer->UpdateL(*index_item));
@@ -222,10 +240,12 @@
                     iIndexerUtil->GetDriveFromMediaId(object.MediaId(),drive);
                     iMdsItem->Set(aObjId,iVideoDocument->GetUri(),drive);
                     iDBManager->UpdateL(aObjId,*iMdsItem);//Add to SyncDB
+                    OstTrace0( TRACE_NORMAL, DUP7_CVIDEOPLUGIN_HANDLEMDEITEML, "CVideoPlugin::HandleMdeItemL(): Updated." );
                     CPIXLOGSTRING("CVideoPlugin::HandleMdeItemL(): Updated.");
                     }
                 else
                     {
+                    OstTrace1( TRACE_NORMAL, DUP8_CVIDEOPLUGIN_HANDLEMDEITEML, "CVideoPlugin::HandleMdeItemL;Error %d in updating", err );
                     CPIXLOGSTRING2("CVideoPlugin::HandleMdeItemL(): Error %d in updating.", error);
                     }   
                 }
@@ -245,6 +265,7 @@
                     iIndexerUtil->GetDriveFromMediaId(object.MediaId(),drive);
                     iMdsItem->SetDrive(drive);
                     iDBManager->AddL(aObjId,*iMdsItem);//Add to SyncDB
+                    OstTrace0( TRACE_NORMAL, DUP9_CVIDEOPLUGIN_HANDLEMDEITEML, "CVideoPlugin::HandleMdeItemL(): Added Item before Update." );
                     CPIXLOGSTRING("CVideoPlugin::HandleMdeItemL(): Added Item before Update.");
                     }
                 }                    
@@ -267,10 +288,12 @@
                     TRAPD(err, iIndexer->DeleteL(docid_str));//Delete it
                     if (err == KErrNone)
                         {
+                        OstTrace0( TRACE_NORMAL, DUP10_CVIDEOPLUGIN_HANDLEMDEITEML, "CVideoPlugin::HandleMdeItemL(): Deleted." );
                         CPIXLOGSTRING("CVideoPlugin::HandleMdeItemL(): Deleted.");
                         }
                     else
                         {
+                        OstTrace1( TRACE_NORMAL, DUP11_CVIDEOPLUGIN_HANDLEMDEITEML, "CVideoPlugin::HandleMdeItemL;Error %d in deleting", err );
                         CPIXLOGSTRING2("CVideoPlugin::HandleMdeItemL(): Error %d in deleting.", err);
                         }
                     }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/media/video/traces/OstTraceDefinitions.h	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 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: 
+*
+*/
+#ifndef __OSTTRACEDEFINITIONS_H__
+#define __OSTTRACEDEFINITIONS_H__
+// OST_TRACE_COMPILER_IN_USE flag has been added by Trace Compiler
+// REMOVE BEFORE CHECK-IN TO VERSION CONTROL
+//#define OST_TRACE_COMPILER_IN_USE
+#include <opensystemtrace.h>
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/media/video/traces/cpixmediavideodocTraces.h	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,16 @@
+// Created by TraceCompiler 2.1.2
+// DO NOT EDIT, CHANGES WILL BE LOST
+
+#ifndef __CPIXMEDIAVIDEODOCTRACES_H__
+#define __CPIXMEDIAVIDEODOCTRACES_H__
+
+#define KOstTraceComponentID 0x20029aba
+
+#define CCPIXMEDIAVIDEODOC_GETCPIXDOCUMENTL_ENTRY 0x8a0001
+#define CCPIXMEDIAVIDEODOC_GETCPIXDOCUMENTL_EXIT 0x8a0002
+
+
+#endif
+
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/media/video/traces/fixed_id.definitions	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,23 @@
+#Fixed group and trace id definitions. If this file is removed, the identifiers are rebuilt.
+[GROUP]TRACE_FLOW=0x8a
+[GROUP]TRACE_NORMAL=0x86
+[TRACE]TRACE_FLOW[0x8A]_CCPIXMEDIAVIDEODOC_GETCPIXDOCUMENTL_ENTRY=0x1
+[TRACE]TRACE_FLOW[0x8A]_CCPIXMEDIAVIDEODOC_GETCPIXDOCUMENTL_EXIT=0x2
+[TRACE]TRACE_FLOW[0x8A]_CVIDEOPLUGIN_HARVESTINGCOMPLETEDL_ENTRY=0x7
+[TRACE]TRACE_FLOW[0x8A]_CVIDEOPLUGIN_HARVESTINGCOMPLETEDL_EXIT=0x8
+[TRACE]TRACE_FLOW[0x8A]_CVIDEOPLUGIN_STARTHARVESTINGL_ENTRY=0x5
+[TRACE]TRACE_FLOW[0x8A]_CVIDEOPLUGIN_STARTHARVESTINGL_EXIT=0x6
+[TRACE]TRACE_FLOW[0x8A]_CVIDEOPLUGIN_STARTPLUGINL_ENTRY=0x3
+[TRACE]TRACE_FLOW[0x8A]_CVIDEOPLUGIN_STARTPLUGINL_EXIT=0x4
+[TRACE]TRACE_NORMAL[0x86]_CVIDEOPLUGIN_HANDLEMDEITEML=0x1
+[TRACE]TRACE_NORMAL[0x86]_DUP10_CVIDEOPLUGIN_HANDLEMDEITEML=0xb
+[TRACE]TRACE_NORMAL[0x86]_DUP11_CVIDEOPLUGIN_HANDLEMDEITEML=0xc
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CVIDEOPLUGIN_HANDLEMDEITEML=0x2
+[TRACE]TRACE_NORMAL[0x86]_DUP2_CVIDEOPLUGIN_HANDLEMDEITEML=0x3
+[TRACE]TRACE_NORMAL[0x86]_DUP3_CVIDEOPLUGIN_HANDLEMDEITEML=0x4
+[TRACE]TRACE_NORMAL[0x86]_DUP4_CVIDEOPLUGIN_HANDLEMDEITEML=0x5
+[TRACE]TRACE_NORMAL[0x86]_DUP5_CVIDEOPLUGIN_HANDLEMDEITEML=0x6
+[TRACE]TRACE_NORMAL[0x86]_DUP6_CVIDEOPLUGIN_HANDLEMDEITEML=0x7
+[TRACE]TRACE_NORMAL[0x86]_DUP7_CVIDEOPLUGIN_HANDLEMDEITEML=0x8
+[TRACE]TRACE_NORMAL[0x86]_DUP8_CVIDEOPLUGIN_HANDLEMDEITEML=0x9
+[TRACE]TRACE_NORMAL[0x86]_DUP9_CVIDEOPLUGIN_HANDLEMDEITEML=0xa
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/media/video/traces/videopluginTraces.h	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,32 @@
+// Created by TraceCompiler 2.1.2
+// DO NOT EDIT, CHANGES WILL BE LOST
+
+#ifndef __VIDEOPLUGINTRACES_H__
+#define __VIDEOPLUGINTRACES_H__
+
+#define KOstTraceComponentID 0x20029aba
+
+#define CVIDEOPLUGIN_STARTPLUGINL_ENTRY 0x8a0003
+#define CVIDEOPLUGIN_STARTPLUGINL_EXIT 0x8a0004
+#define CVIDEOPLUGIN_STARTHARVESTINGL_ENTRY 0x8a0005
+#define CVIDEOPLUGIN_STARTHARVESTINGL_EXIT 0x8a0006
+#define CVIDEOPLUGIN_HARVESTINGCOMPLETEDL_ENTRY 0x8a0007
+#define CVIDEOPLUGIN_HARVESTINGCOMPLETEDL_EXIT 0x8a0008
+#define CVIDEOPLUGIN_HANDLEMDEITEML 0x860001
+#define DUP1_CVIDEOPLUGIN_HANDLEMDEITEML 0x860002
+#define DUP2_CVIDEOPLUGIN_HANDLEMDEITEML 0x860003
+#define DUP3_CVIDEOPLUGIN_HANDLEMDEITEML 0x860004
+#define DUP4_CVIDEOPLUGIN_HANDLEMDEITEML 0x860005
+#define DUP5_CVIDEOPLUGIN_HANDLEMDEITEML 0x860006
+#define DUP6_CVIDEOPLUGIN_HANDLEMDEITEML 0x860007
+#define DUP7_CVIDEOPLUGIN_HANDLEMDEITEML 0x860008
+#define DUP8_CVIDEOPLUGIN_HANDLEMDEITEML 0x860009
+#define DUP9_CVIDEOPLUGIN_HANDLEMDEITEML 0x86000a
+#define DUP10_CVIDEOPLUGIN_HANDLEMDEITEML 0x86000b
+#define DUP11_CVIDEOPLUGIN_HANDLEMDEITEML 0x86000c
+
+
+#endif
+
+// End of file
+
--- a/harvesterplugins/messaging/data/2001f701.rss	Mon Apr 19 14:40:05 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-/*
-* Copyright (c) 2010 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: 
-*
-*/
-// 0x2001F701.RSS
-
-#include <registryinfo.rh>
-
-// Declares info for one test implementation
-RESOURCE REGISTRY_INFO theInfo
-        {
-        // UID for the DLL        
-        dll_uid = 0x2001F701; // ECOM Messaging Plugin dll UID
-        // Declare array of interface info
-        interfaces = 
-                {
-                INTERFACE_INFO
-                        {
-                        // UID of interface that is implemented
-                        interface_uid = 0x2001F700; // CPixSearch Plugin Interface UID
-                        implementations = 
-                                {
-                                // Info for CMessagePlugin
-                                IMPLEMENTATION_INFO
-                                        {
-                                        implementation_uid = 0x2001F701;
-                                        version_no = 1;
-                                        display_name = "CPix Search Messaging plugin";
-                                        default_data = "Messaging";
-                                        opaque_data = "";
-                                        }
-                                };
-                        }
-                };
-        }
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/messaging/email/data/20029b09.rss	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,48 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+// 0x20029b09.RSS
+
+#include <registryinfo.rh>
+
+// Declares info for one test implementation
+RESOURCE REGISTRY_INFO theInfo
+        {
+        // UID for the DLL        
+        dll_uid = 0x20029b09; // ECOM Email Plugin dll UID
+        // Declare array of interface info
+        interfaces = 
+                {
+                INTERFACE_INFO
+                        {
+                        // UID of interface that is implemented
+                        interface_uid = 0x2001F700; // CPixSearch Plugin Interface UID
+                        implementations = 
+                                {
+                                // Info for Email Plugin
+                                IMPLEMENTATION_INFO
+                                        {
+                                        implementation_uid = 0x20029b09;
+                                        version_no = 1;
+                                        display_name = "Email";
+                                        default_data = "Messaging";
+                                        opaque_data = "";
+                                        }
+                                };
+                        }
+                };
+        }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/messaging/email/group/bld.inf	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+PRJ_MMPFILES
+
+emailplugin.mmp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/messaging/email/group/emailplugin.mmp	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,62 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+TARGET        cpixemailplugin.dll
+TARGETTYPE    PLUGIN
+ 
+#include          <platform_paths.hrh>
+CAPABILITY   CAP_GENERAL_DLL -AllFiles -DRM
+#include "../../../../harvesterplugins/inc/s60performance.h"
+// ECom Dll recognition UID followed by the unique UID for this dll
+UID           0x10009D8D 0x20029b09 
+
+SOURCEPATH    ../src
+SOURCE        cemailplugin.cpp
+SOURCE        tproxy.cpp
+
+USERINCLUDE   ../inc
+USERINCLUDE   ../qtemailfetcher
+
+APP_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE       /epoc32/include/ecom
+SYSTEMINCLUDE		/epoc32/include/mw/QtCore
+SYSTEMINCLUDE		/epoc32/include/stdapis
+SYSTEMINCLUDE		/epoc32/include/stdapis/sys
+SYSTEMINCLUDE		.
+SYSTEMINCLUDE		/epoc32/include/stdapis/stlport
+
+SOURCEPATH    ../data
+start RESOURCE 20029b09.rss
+target  cpixemailplugin.rsc
+end
+
+LIBRARY       euser.lib
+LIBRARY       ecom.lib
+LIBRARY       efsrv.lib
+LIBRARY       cpixharvesterplugininterface.lib
+LIBRARY       cpixsearchclient.lib
+LIBRARY       qtemailfetcher.lib
+LIBRARY       qtcore.lib
+
+OPTION CW -wchar_t on
+MACRO _WCHAR_T_DECLARED
+
+// For logging
+LIBRARY 	  flogger.lib 
+
+EXPORTUNFROZEN
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/messaging/email/inc/cemailplugin.h	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,111 @@
+/*
+* Copyright (c) 2010 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:  
+*
+*/
+
+
+#ifndef CEMAILPLUGIN_H
+#define CEMAILPLUGIN_H
+
+#include <e32base.h>
+#include <cindexingplugin.h>
+#include <common.h>
+#include <memailitemobserver.h>
+
+class CSearchDocument;
+class CCPixIndexer;
+class QEmailFetcher;
+
+class CEmailPlugin : public CIndexingPlugin, public MEmailItemObserver
+{
+public:
+	static CEmailPlugin* NewL();
+	static CEmailPlugin* NewLC();
+	virtual ~CEmailPlugin();
+	
+	/**
+	 * From CIndexingPlugin
+	 */
+	 void StartPluginL();
+	 void StartHarvestingL(const TDesC& aQualifiedBaseAppClass);
+	 
+	/**
+	 * From MEmailItemObserver
+	 */
+	 void HandleDocumentL(const CSearchDocument* aSearchDocument, TCPixActionType aActionType);
+	  
+	 /**
+     * Gets the database observer class
+     */
+    CCPixIndexer* GetIndexer(); //SPB { return iIndexer; }
+	
+	 /**
+     * MountL - Mount an IndexDB.
+     * @aMedia drive to mount.
+     * @aForceReharvesting to reharvest or not
+     */
+    void MountL(TDriveNumber aMedia, TBool aForceReharvesting=EFalse);
+
+    /**
+     * UnMount - Dismount a IndexDB for drive aMedia.
+     * @aMedia drive to unmount.
+     * @aUndefineAsWell if ETrue then undefine the volume as well
+     * 
+     */
+    void UnMount(TDriveNumber aMedia, TBool aUndefineAsWell = ETrue);
+    
+    /**
+     * FormBaseAppClass - constructs a baseAppClass for the given drive.
+     * @aMedia drive to form the baseAppClass for.
+     * @aBaseAppClass return descriptor containing the baseAppClass
+     * returns KErrNone on success or a standard error code
+     */
+    static TInt FormBaseAppClass(TDriveNumber aMedia, TDes& aBaseAppClass);
+    
+    /**
+     * DatabasePathL - Forms IndexDb path.
+     * @param aMedia - The drive for which the path should be constructed.
+     * returns pointer to the IndexDb path.
+     */
+    HBufC* DatabasePathLC(TDriveNumber aMedia);
+    
+public:
+	/*
+	 * Notifies the indexing manager of completed harvesting, called by CMessageHarvester
+	 */
+	void HarvestingCompleted(TInt aError);
+
+protected:
+	CEmailPlugin();
+	void ConstructL();
+
+private:
+    // CPix indexer 
+    CCPixIndexer* iIndexer[EDriveZ+1]; // EDriveZ enum value is 25, so add 1.
+    //Currently used Drive by messaging application it is Default drive
+    TInt     iCurrentDrive;
+    // File system session
+    RFs iFs;
+    //Email fecther from Qt Module
+    QEmailFetcher* iQEmailFetcher;
+#ifdef __PERFORMANCE_DATA
+    TTime iStartTime;
+    TTime iCompleteTime;
+    void UpdatePerformaceDataL();
+    void UpdatePerformaceDataL(TMsvSessionEvent);
+#endif
+};
+
+#endif // CEMAILPLUGIN_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/messaging/email/inc/memailitemobserver.h	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 2010 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:  
+*
+*/
+
+#ifndef MEMAILITEMOBSERVER_H
+#define MEMAILITEMOBSERVER_H
+
+#include <e32base.h>
+#include <common.h>
+
+/**
+ * @file 
+ * @ingroup Email Plugin internal API
+ * @brief Contains Interface to handle e-mail documents from e-mail fetcher
+ */
+
+class CSearchDocument;
+
+/**
+ * @brief The interface providing way to handle search document and update index database from action
+ * @ingroup Email Plugin internal API
+ * 
+ * MEmailItemObserver provides callback to email plugin from email fetcher. 
+ * 
+ */
+class MEmailItemObserver
+{
+public:
+	    	
+	/**
+	 * A pure virtual method which is called by the email fetcher when it wants to send a document to
+	 * e-mail plugin for action on that document add/delete or update.
+	 *
+	 * @param aSearchDocument search document created by email fetcher
+   * @param aActionType action to be taken on document
+	 */
+	virtual void HandleDocumentL(const CSearchDocument* aSearchDocument, TCPixActionType aActionType) = 0;
+
+};
+
+#endif // MEMAILITEMOBSERVER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/messaging/email/qtemailfetcher/bwins/qtemailfetcheru.def	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,22 @@
+EXPORTS
+	?initialize@QEmailFetcher@@CAXPAV1@@Z @ 1 NONAME ; void QEmailFetcher::initialize(class QEmailFetcher *)
+	?processMessages@QEmailFetcher@@QAEXH@Z @ 2 NONAME ; void QEmailFetcher::processMessages(int)
+	?trUtf8@QEmailFetcher@@SA?AVQString@@PBD0@Z @ 3 NONAME ; class QString QEmailFetcher::trUtf8(char const *, char const *)
+	?qt_metacall@QEmailFetcher@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 4 NONAME ; int QEmailFetcher::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?tr@QEmailFetcher@@SA?AVQString@@PBD0@Z @ 5 NONAME ; class QString QEmailFetcher::tr(char const *, char const *)
+	?StartHarvesting@QEmailFetcher@@QAEXXZ @ 6 NONAME ; void QEmailFetcher::StartHarvesting(void)
+	?tr@QEmailFetcher@@SA?AVQString@@PBD0H@Z @ 7 NONAME ; class QString QEmailFetcher::tr(char const *, char const *, int)
+	?getStaticMetaObject@QEmailFetcher@@SAABUQMetaObject@@XZ @ 8 NONAME ; struct QMetaObject const & QEmailFetcher::getStaticMetaObject(void)
+	?staticMetaObject@QEmailFetcher@@2UQMetaObject@@B @ 9 NONAME ; struct QMetaObject const QEmailFetcher::staticMetaObject
+	?handleMailboxesListed@QEmailFetcher@@QAEXH@Z @ 10 NONAME ; void QEmailFetcher::handleMailboxesListed(int)
+	??1QEmailFetcher@@UAE@XZ @ 11 NONAME ; QEmailFetcher::~QEmailFetcher(void)
+	?mailFoldersListed@QEmailFetcher@@QAEXH@Z @ 12 NONAME ; void QEmailFetcher::mailFoldersListed(int)
+	?emailServiceIntialized@QEmailFetcher@@QAEX_N@Z @ 13 NONAME ; void QEmailFetcher::emailServiceIntialized(bool)
+	?qt_metacast@QEmailFetcher@@UAEPAXPBD@Z @ 14 NONAME ; void * QEmailFetcher::qt_metacast(char const *)
+	?newInstance@QEmailFetcher@@SAPAV1@AAVMEmailItemObserver@@@Z @ 15 NONAME ; class QEmailFetcher * QEmailFetcher::newInstance(class MEmailItemObserver &)
+	?trUtf8@QEmailFetcher@@SA?AVQString@@PBD0H@Z @ 16 NONAME ; class QString QEmailFetcher::trUtf8(char const *, char const *, int)
+	?metaObject@QEmailFetcher@@UBEPBUQMetaObject@@XZ @ 17 NONAME ; struct QMetaObject const * QEmailFetcher::metaObject(void) const
+	??0QEmailFetcher@@AAE@AAVMEmailItemObserver@@@Z @ 18 NONAME ; QEmailFetcher::QEmailFetcher(class MEmailItemObserver &)
+	??_EQEmailFetcher@@UAE@I@Z @ 19 NONAME ; QEmailFetcher::~QEmailFetcher(unsigned int)
+	?handleMessageEvent@QEmailFetcher@@QAEXW4MessageEvent@@_K1V?$QList@_K@@@Z @ 20 NONAME ; void QEmailFetcher::handleMessageEvent(enum MessageEvent, unsigned long long, unsigned long long, class QList<unsigned long long>)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/messaging/email/qtemailfetcher/eabi/qtemailfetcheru.def	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,22 @@
+EXPORTS
+	_ZN13QEmailFetcher10initializeEPS_ @ 1 NONAME
+	_ZN13QEmailFetcher11newInstanceER18MEmailItemObserver @ 2 NONAME
+	_ZN13QEmailFetcher11qt_metacallEN11QMetaObject4CallEiPPv @ 3 NONAME
+	_ZN13QEmailFetcher11qt_metacastEPKc @ 4 NONAME
+	_ZN13QEmailFetcher15StartHarvestingEv @ 5 NONAME
+	_ZN13QEmailFetcher15processMessagesEi @ 6 NONAME
+	_ZN13QEmailFetcher16staticMetaObjectE @ 7 NONAME DATA 16
+	_ZN13QEmailFetcher17mailFoldersListedEi @ 8 NONAME
+	_ZN13QEmailFetcher18handleMessageEventE12MessageEventyy5QListIyE @ 9 NONAME
+	_ZN13QEmailFetcher19getStaticMetaObjectEv @ 10 NONAME
+	_ZN13QEmailFetcher21handleMailboxesListedEi @ 11 NONAME
+	_ZN13QEmailFetcher22emailServiceIntializedEb @ 12 NONAME
+	_ZN13QEmailFetcherC1ER18MEmailItemObserver @ 13 NONAME
+	_ZN13QEmailFetcherC2ER18MEmailItemObserver @ 14 NONAME
+	_ZN13QEmailFetcherD0Ev @ 15 NONAME
+	_ZN13QEmailFetcherD1Ev @ 16 NONAME
+	_ZN13QEmailFetcherD2Ev @ 17 NONAME
+	_ZNK13QEmailFetcher10metaObjectEv @ 18 NONAME
+	_ZTI13QEmailFetcher @ 19 NONAME
+	_ZTV13QEmailFetcher @ 20 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/messaging/email/qtemailfetcher/qtemailfetcher.cpp	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,249 @@
+/*
+* Copyright (c) 2010 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: Utility class for fetching email.
+*
+*/
+
+#include "qtemailfetcher.h"
+#include <csearchdocument.h>
+#include <cpixmaindefs.h>
+//#include <QThread> //If we happen to use QThread::yieldCurrentThread()
+
+//Symbian specific details; picked up from cemailplugin.cpp. 
+//Refactor it to cpixmaindefs.h
+_LIT(KMsgBaseAppClassGeneric, "root msg email");
+
+_LIT(KMsgSubject, "Subject");
+_LIT(KMsgRecipients, "Recipients");
+_LIT(KMsgBody, "Body");
+_LIT(KMimeTypeField, CPIX_MIMETYPE_FIELD);
+_LIT(KMimeTypeMsg, "Messages");
+
+//------------------------------------------------------------------------------
+QEmailFetcher::QEmailFetcher( MEmailItemObserver& aObserver )
+    :iEmailObserver( aObserver ), 
+     iEmailEventNotifier( NULL ),
+     iEmailService( NULL ),
+     iMailBoxListings( NULL ), 
+     iMailFolderList( NULL ),
+     iEnvelopeListing( NULL )
+    {
+    }
+
+//------------------------------------------------------------------------------
+QEmailFetcher::~QEmailFetcher()
+    {
+    delete iEmailEventNotifier;
+    delete iEmailService;
+    delete iMailBoxListings;
+    delete iMailFolderList;
+    }
+
+//------------------------------------------------------------------------------
+QEmailFetcher* QEmailFetcher::newInstance( MEmailItemObserver& aObserver ){
+    QEmailFetcher* emailFetcher = NULL;
+    
+    //Leak free init.
+    try{
+        QEmailFetcher* emailFetcher = new QEmailFetcher( aObserver );
+        //Uncomment 'this' once the actual APIs are ready.
+        emailFetcher->iEmailService = new NmEmailService( emailFetcher );
+        emailFetcher->iEmailEventNotifier =  new NmEventNotifier( emailFetcher );
+        emailFetcher->iMailBoxListings = new NmMailboxListing( emailFetcher );
+    }catch(...){ //cleanup.
+        delete emailFetcher; 
+        delete emailFetcher->iEmailService;
+        delete emailFetcher->iEmailEventNotifier;
+        delete emailFetcher->iMailBoxListings;
+        emailFetcher->iEmailService = NULL;
+        emailFetcher->iEmailEventNotifier = NULL;
+        emailFetcher->iMailBoxListings = NULL;
+        throw; //rethrow the exception to caller.
+    }
+    initialize( emailFetcher ); //Do the rest of the init.
+    return emailFetcher; //returns only if not null.
+}
+
+//------------------------------------------------------------------------------
+void QEmailFetcher::initialize( QEmailFetcher* aThis ){
+    //The use of 'aThis' is because the current function is static.
+    connect( aThis->iEmailService, SIGNAL(initialized(bool)), 
+             aThis, SLOT(emailServiceIntialized(bool)) );
+    aThis->iEmailService->initialise();
+    aThis->connect( aThis->iEmailEventNotifier, 
+                    SIGNAL(messageEvent(MessageEvent, quint64, quint64, QList<quint64>)),
+                    aThis, 
+                    SLOT(handleMessageEvent(MessageEvent, quint64, quint64, QList<quint64>)) );
+}
+
+//------------------------------------------------------------------------------
+void QEmailFetcher::emailServiceIntialized(bool aAllOk){
+    if( aAllOk ){
+        connect( iMailBoxListings, SIGNAL(mailboxesListed(int)), this, SLOT(handleMailboxesListed(int)) );
+    }
+}
+
+//------------------------------------------------------------------------------
+void QEmailFetcher::StartHarvesting(){
+    iMailBoxListings->start();
+}
+
+//------------------------------------------------------------------------------
+namespace {
+
+// Taken from qt/src/corelib/kernel/qcore_symbian_p.cpp, as recomended in
+// http://qt.nokia.com/files/pdf/whitepaper-using-qt-and-symbian-c-together, page 34.
+// URL last accessed on April 6th, 2010.
+
+// Returned TPtrC is valid as long as the given parameter is valid and unmodified
+static inline TPtrC qt_QString2TPtrC( const QString& string )
+{
+    return TPtrC16(static_cast<const TUint16*>(string.utf16()), string.length());
+}
+
+//------------------------------------------------------------------------------
+// TODO Remove this code if qt_QString2TPtrC works.
+// TODO If this function is used, remember to release memory.
+// Ownership with caller.
+//HBufC* qt_QString2HBufC(const QString& aString)
+//{
+//    HBufC *buffer;
+//#ifdef QT_NO_UNICODE
+//    TPtrC8 ptr(reinterpret_cast<const TUint8*>(aString.toLocal8Bit().constData()));
+//#else
+//    TPtrC16 ptr(qt_QString2TPtrC(aString));
+//#endif
+//    buffer = q_check_ptr(HBufC::New(ptr.Length()));
+//    buffer->Des().Copy(ptr);
+//    return buffer;
+//}
+
+//------------------------------------------------------------------------------
+//Private free function creates CSearchDocument from EMailMessageEnvelope.
+CSearchDocument* getSearchDocument( const NmMessageEnvelope& aEnvelope ){
+    QList<NmEmailAddress> toList;
+    //Need to cast away const-ness since the get method is unfortunately not const.
+    const_cast<NmMessageEnvelope&>(aEnvelope).getToRecipients( toList );
+
+    //We need ALL the recipients in a SINGLE field.
+    QString recipients = "";
+    for( int i=0; i<toList.length(); i++ )
+        recipients += toList.at( i ).displayName() + " "; //or should we get address?
+
+    NmMessageBody body;
+    //Cast away const-ness since the get method is unfortunately not const.
+    //Returns void. Cannot check for success/failure.
+    const_cast<NmMessageEnvelope&>(aEnvelope).getPlainTextBody( body ); 
+    QString msgBody = body.content();
+
+    CSearchDocument* doc = 0;
+    QT_TRAP_THROWING(
+    //Use qt_Qstring2TPtrC since we are working with <b>const</b> EmailMessageEnvelope.
+    doc = CSearchDocument::NewL( qt_QString2TPtrC( QString().setNum( aEnvelope.id() ) ), 
+                                 KMsgBaseAppClassGeneric );
+    doc->AddFieldL( KMimeTypeField, KMimeTypeMsg, CDocumentField::EStoreYes | CDocumentField::EIndexUnTokenized);
+    doc->AddFieldL( KMsgSubject, qt_QString2TPtrC( aEnvelope.subject() ), CDocumentField::EStoreYes | CDocumentField::EIndexTokenized );
+    doc->AddFieldL( KMsgRecipients, qt_QString2TPtrC( recipients ), CDocumentField::EStoreYes | CDocumentField::EIndexTokenized );
+    doc->AddFieldL( KMsgBody, qt_QString2TPtrC( msgBody ), CDocumentField::EStoreYes | CDocumentField::EIndexTokenized );
+    //TODO: What should go in here?
+    doc->AddExcerptL( KNullDesC );
+    );
+    return doc;
+}
+} //anonymous namespace
+
+//------------------------------------------------------------------------------
+//Options to make async (like other plugins' Asynchronizer):
+//1. Use http://doc.trolltech.com/4.6/qtimer.html and connect timeout() signal to something?
+//Downside: 
+//Have to save the state of the function and resume. Achievable via static members. 
+//Remeber to reset counters.
+//2. Use timer; unlike above, have handleMailboxesListed() simply trigger a  
+//Timer controlled function.
+//3. Use QThread::currentThread()->yieldCurrentThread();
+//Downside: Not tested.
+//4. As recommended by the email API documentation, use SingleShotTimer:
+//QTimer::singleShot(nsecs,nmFolderListing,SLOT(start());
+//
+//Recommendation: Use option 4.
+
+void QEmailFetcher::handleMailboxesListed(int aCount){
+    QList<NmMailbox> mailBoxes;
+    if( aCount>0 && iMailBoxListings->getMailboxes( mailBoxes ) ){
+        for( int i=0; i<aCount; i++ ){
+            //Already set to NULL in constructor, so safe to call delete first time.
+            delete iMailFolderList; iMailFolderList = NULL;
+            iMailFolderList = new NmFolderListing( this, mailBoxes.at( i ).id() );
+            connect( iMailFolderList, SIGNAL(foldersListed()), this, SLOT(mailFoldersListed()) );
+            const int waitForSeconds = 30; //TODO Move this constant out of here if needed elsewhere
+            QTimer::singleShot( waitForSeconds, iMailFolderList, SLOT( start()) );
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+void QEmailFetcher::mailFoldersListed(int aCount){
+    if( aCount == NmFolderListing::FolderListingFailed ) return; //silently.
+    QList<NmFolder> folders;
+    if ( aCount && iMailFolderList->getFolders( folders ) ) {
+        for( int i=0; i<aCount; i++ ){
+            //Already set to NULL in constructor, so safe to call delete first time.
+            delete iEnvelopeListing; iEnvelopeListing = NULL; 
+            iEnvelopeListing = new NmEnvelopeListing( this, folders.at( i ).id(), 0 );
+            connect(iEnvelopeListing, SIGNAL(envelopesListed(int)),this,SLOT(processMessages(int)));
+            iEnvelopeListing->start();
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+void QEmailFetcher::processMessages(int aCount){
+    if( aCount == NmMailboxListing::MailboxListingFailed ) return; //silently.
+    QList<NmMessageEnvelope> envelopes;
+    if ( aCount > 0 && iEnvelopeListing->getEnvelopes(envelopes) ) {
+        for( int i=0; i<envelopes.count(); i++ ) {
+        const NmMessageEnvelope &envelope = envelopes.at( i );
+        //Create document and call back observer.
+        QT_TRAP_THROWING( iEmailObserver.HandleDocumentL( getSearchDocument( envelope ), ECPixAddAction ) );
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+void QEmailFetcher::handleMessageEvent( const MessageEvent aEvent, quint64 aMailboxId, quint64 aFolderId, QList<quint64> aMessageList){
+    NmMessageEnvelope envelope;
+    const int messageCount = aMessageList.count();
+    if( messageCount>0 ){
+    if( aEvent == MessageCreated || aEvent == MessageChanged ){
+        for( int i=0; i<messageCount; i++ ){
+            if( iEmailService->getEnvelope( aMailboxId, aFolderId, aMessageList.at( i ), envelope ) ){
+                QT_TRAP_THROWING( 
+                   iEmailObserver.HandleDocumentL( getSearchDocument( envelope ), 
+                           //Doing this simply avoids *duplicate* code for update action.
+                           aEvent == MessageCreated ? ECPixAddAction : ECPixUpdateAction ) );
+            }
+        }
+    }
+    else if( aEvent == MessageDeleted ) {
+        //TODO We can do better. For delete, we dont have to create full document. Just the ID should be enough.
+        //We can have another function called getPartialSearchDocument so deletes will be faster.
+        for( int i=0; i<messageCount; i++ ){
+            if( iEmailService->getEnvelope( aMailboxId, aFolderId, aMessageList.at( i ), envelope ) ){
+                QT_TRAP_THROWING( 
+                iEmailObserver.HandleDocumentL( getSearchDocument( envelope ), ECPixRemoveAction ) );
+            }
+        }
+    }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/messaging/email/qtemailfetcher/qtemailfetcher.h	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,80 @@
+/*
+* Copyright (c) 2010 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: Utility class for fetching email.
+*
+*/
+
+#ifndef _QEMAILFETCHER_H
+#define _QEMAILFETCHER_H
+
+#ifdef BUILD_DLL
+#define DLL_EXPORT Q_DECL_EXPORT
+#else
+#define DLL_EXPORT Q_DECL_IMPORT
+#endif
+
+//TODO: Uncomment when available.
+#include <nmapiemailservice.h>
+#include <nmapieventnotifier.h>
+#include <nmapimailboxlisting.h>
+#include <nmapienvelopelisting.h>
+#include <nmapimessageenvelope.h>
+#include <nmapifolderlisting.h>
+#include <QObject>
+#include "memailitemobserver.h"
+
+using namespace EmailClientApi;
+
+//How this works:
+//1. List all mail boxes.
+//2. In each mail box, list the folders
+//3. In each folder, list the mails
+//4. Process each email
+//
+//We voluntarily relinquish the processor (we sleep) each time we have completed 
+//processing a given folder. This is to avoid 'hogging' the processor.
+
+
+class DLL_EXPORT QEmailFetcher: public QObject
+    {
+    Q_OBJECT
+public:
+    static QEmailFetcher* newInstance(MEmailItemObserver& aObserver);
+    ~QEmailFetcher();
+    void StartHarvesting();
+
+private:
+    QEmailFetcher(MEmailItemObserver& aObserver );
+    static void initialize(QEmailFetcher* aThis); //helper (2nd phase constructor).
+
+    //Private?
+public slots:
+    void emailServiceIntialized( bool );
+    void handleMailboxesListed( int );
+    void mailFoldersListed( int );
+    void processMessages( int );
+    //Connect to messageEvent signal
+    void handleMessageEvent( MessageEvent aEvent, quint64 mailboxId, quint64 folderId, QList<quint64> messageList );
+    
+private:
+    MEmailItemObserver& iEmailObserver;     //The parent/creator. Not owned.
+    NmEventNotifier* iEmailEventNotifier;   //owned; triggers handleMessageEvent.
+    NmEmailService* iEmailService;          //owned. 
+    NmMailboxListing* iMailBoxListings;     //owned.
+    NmFolderListing* iMailFolderList;       //owned.
+    NmEnvelopeListing* iEnvelopeListing;    //owned.
+    NmMessageEnvelope* iMessageListing;     //owned.
+    };
+
+#endif //_QEMAILFETCHER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/messaging/email/qtemailfetcher/qtemailfetcher.pro	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,49 @@
+#
+# Copyright (c) 2010 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: 
+#
+
+TEMPLATE = lib
+TARGET = qtemailfetcher 
+
+QT        += core
+QT        -= gui 
+
+HEADERS   += qtemailfetcher.h
+SOURCES   += qtemailfetcher.cpp
+
+DEFINES += BUILD_DLL
+
+symbian{
+    TARGET.UID3 = 0x20029B0A
+    TARGET.EPOCALLOWDLLDATA = 1
+    TARGET.VID = VID_DEFAULT
+    TARGET.CAPABILITY = CAP_GENERAL_DLL -DRM
+    VERSION = 1.0.0
+    
+    INCLUDEPATH += ../inc
+    
+    HEADERS += memailitemobserver.h
+    LIBS += -lcpixsearchclient
+    LIBS += -lnmailclientapi
+        
+    defFileBlock =                    \
+    "$${LITERAL_HASH}if defined(WINSCW)"    \
+    "DEFFILE bwins/"                        \
+    "$${LITERAL_HASH}else"                  \
+    "DEFFILE eabi/"                         \
+    "$${LITERAL_HASH}endif"                 \
+    
+    MMP_RULES += defFileBlock
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/messaging/email/src/cemailplugin.cpp	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,456 @@
+/*
+* Copyright (c) 2010 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:  
+*
+*/
+
+
+#include <e32base.h> 
+#include <ccpixindexer.h>
+#include <csearchdocument.h>
+#include <QtGlobal>
+#include "cemailplugin.h"
+#include "harvesterserverlogger.h"
+#include "qtemailfetcher.h"
+
+// maximum length that the fully qualified msg Plugin base app class descriptor can be
+// e.g. "@c:root msg email"
+const TInt KMsgPluginBaseAppClassMaxLen = 64;
+
+
+// local declarations and functions
+namespace {
+
+_LIT(KCPixSearchServerPrivateDirectory, "\\Private\\2001f6f7\\");
+_LIT(KPathIndexDbPath, CPIX_INDEVICE_INDEXDB);
+
+_LIT(KPathTrailer, "\\root\\msg\\email");
+_LIT(KMsgBaseAppClassGeneric, ":root msg email");
+_LIT(KAtSign, "@");
+_LIT(KColon, ":");
+
+/**
+* MapFileToDrive - gets the TDriveNumber associated with the aBaseAppClass.
+* @aBaseAppClass e.g. "@c:root file"
+* @aDrive returns the TDriveNumber for the aBaseAppClass
+* returns KErrNone on success or a standard error code
+*/
+TInt MapBaseAppClassToDrive(const TDesC& aBaseAppClass, TDriveNumber& aDrive)
+    {
+    if (KErrNone != aBaseAppClass.Left(1).Compare(KAtSign))
+        {
+        return KErrGeneral;
+        }
+
+    TPtrC drvChar = aBaseAppClass.Left(2).Right(1);
+    TChar d(drvChar[0]);
+    TInt drive;
+    const TInt ret = RFs::CharToDrive(d, drive);
+    if (!ret)
+        {
+        aDrive = TDriveNumber(drive);
+        }
+
+    return ret;
+    }
+
+}// anonymous namespace
+
+
+// ---------------------------------------------------------------------------
+// CEmailPlugin::NewL
+// ---------------------------------------------------------------------------
+//  
+CEmailPlugin* CEmailPlugin::NewL()
+{
+	  CEmailPlugin* instance = CEmailPlugin::NewLC();
+    CleanupStack::Pop(instance);
+    return instance;
+}
+
+// ---------------------------------------------------------------------------
+// CEmailPlugin::NewLC
+// ---------------------------------------------------------------------------
+//  
+CEmailPlugin* CEmailPlugin::NewLC()
+{
+	  CEmailPlugin* instance = new (ELeave)CEmailPlugin();
+    CleanupStack::PushL(instance);
+    instance->ConstructL();
+    return instance;
+}
+
+// ---------------------------------------------------------------------------
+// CEmailPlugin::CEmailPlugin
+// ---------------------------------------------------------------------------
+//  
+CEmailPlugin::CEmailPlugin()
+{
+	
+}
+
+// ---------------------------------------------------------------------------
+// CEmailPlugin::~CEmailPlugin
+// ---------------------------------------------------------------------------
+//  
+CEmailPlugin::~CEmailPlugin()
+{
+    // remove notification paths before destroying iMonitor
+    for (TInt i=EDriveA; i<=EDriveZ; i++)
+        UnMount(TDriveNumber(i), EFalse);
+	  iFs.Close();
+	  delete iQEmailFetcher;  
+}
+
+// ---------------------------------------------------------------------------
+// CEmailPlugin::ConstructL
+// ---------------------------------------------------------------------------
+//  
+void CEmailPlugin::ConstructL()
+{
+	TInt err = iFs.Connect();
+    CPIXLOGSTRING2("CEmailPlugin::ConstructL, iFs.Connect: %i", err);
+    User::LeaveIfError(err);
+    iCurrentDrive = EDriveC; //Default drive is C drive
+    for (TInt i=EDriveA; i<=EDriveZ; i++)
+        {
+        iIndexer[i] = NULL; //Initialize to NULL
+        }
+}
+
+// ---------------------------------------------------------------------------
+// CEmailPlugin::StartPluginL
+// ---------------------------------------------------------------------------
+//  
+void CEmailPlugin::StartPluginL()
+	{
+	CPIXLOGSTRING2("currentDrive used is : %d", iCurrentDrive );
+	MountL(TDriveNumber(iCurrentDrive)); //Mount current drive
+	//create instance of QEmailFetcher
+	QT_TRYCATCH_LEAVING(iQEmailFetcher = QEmailFetcher::newInstance(*this));
+	// Define this base application class, use default location
+	}
+
+// ---------------------------------------------------------------------------
+// CEmailPlugin::StartHarvestingL
+// ---------------------------------------------------------------------------
+//  
+void CEmailPlugin::StartHarvestingL(const TDesC& aQualifiedBaseAppClass)
+	{
+	CPIXLOGSTRING("START CEmailPlugin::StartHarvestingL");
+	// Map base app class to a drive number
+	TDriveNumber drive ( EDriveA );//Initialize to silence compiler warnings.
+	if (KErrNone != MapBaseAppClassToDrive(aQualifiedBaseAppClass, drive))
+	   User::Leave(KErrGeneral);
+
+    // Leave if no indexer for this drive
+	if (!iIndexer[drive])
+	   User::Leave(KErrGeneral);
+	
+	//Complete harvesting here only for time being
+	//HarvestingCompleted(KErrNone);
+    // Reset the database
+	iIndexer[drive]->ResetL();
+#ifdef __PERFORMANCE_DATA
+    iStartTime.UniversalTime();
+#endif
+	}
+
+// ---------------------------------------------------------------------------
+// CEmailPlugin::HandleDocumentL
+// ---------------------------------------------------------------------------
+//
+void CEmailPlugin::HandleDocumentL(const CSearchDocument* aSearchDocument, 
+	                               TCPixActionType aActionType)
+  {
+  CPIXLOGSTRING("START CEmailPlugin::HandleDocumentL");
+  // Index an empty item if removal action
+  if (aActionType == ECPixRemoveAction)
+      {
+      if (GetIndexer())
+          {
+          TRAPD(err, GetIndexer()->DeleteL(aSearchDocument->Id()));
+          if (err == KErrNone)
+              {
+              CPIXLOGSTRING("CEmailPlugin::HandleDocumentL: Document deleted.");
+              }
+          else
+              {
+              CPIXLOGSTRING2("CEmailPlugin::HandleDocumentL: Error %d in deleting the document.", err);              
+              }
+          }
+      return;
+      }
+  //Add or update action do accordingly
+  if (GetIndexer())
+      {
+      if (aActionType == ECPixAddAction)
+          {
+          TRAPD(err, GetIndexer()->AddL(*aSearchDocument));
+          if (err == KErrNone)
+              {
+              CPIXLOGSTRING("CEmailPlugin::HandleDocumentL(): Added.");
+              }
+          else
+              {
+              CPIXLOGSTRING2("CEmailPlugin::HandleDocumentL(): Error %d in adding.", err);
+              }
+          }
+      else if (aActionType == ECPixUpdateAction)
+          {
+          TRAPD(err, GetIndexer()->UpdateL(*aSearchDocument));
+          if (err == KErrNone)
+              {
+              CPIXLOGSTRING("CEmailPlugin::HandleDocumentL(): Updated.");
+              }
+          else
+              {
+              CPIXLOGSTRING2("CEmailPlugin::HandleDocumentL(): Error %d in updating.", err);
+              }
+          }
+      }
+  else
+      {
+      CPIXLOGSTRING("END CEmailPlugin::HandleDocumentL(): No indexer present.");
+      }
+  }
+  
+// ---------------------------------------------------------------------------
+// CEmailPlugin::MountL
+// ---------------------------------------------------------------------------
+//
+void CEmailPlugin::MountL(TDriveNumber aMedia,TBool aForceReharvesting)
+    {
+    CPIXLOGSTRING("START CEmailPlugin::MountL");
+    // Check if already exists
+    if (iIndexer[aMedia])
+        return;
+    
+    // Form the baseappclass for this media
+    TBuf<KMsgPluginBaseAppClassMaxLen> baseAppClass;
+    FormBaseAppClass(aMedia, baseAppClass);
+
+    // Define this volume
+    HBufC* path = DatabasePathLC(aMedia);
+    User::LeaveIfError(iSearchSession.DefineVolume(baseAppClass, *path));
+    CleanupStack::PopAndDestroy(path);
+    
+    // construct and open the database
+    TRAPD(err,iIndexer[aMedia] = CCPixIndexer::NewL(iSearchSession));
+    CPIXLOGSTRING2("CCPixIndexer::NewL returned : %d", err );
+    TRAP(err,iIndexer[aMedia]->OpenDatabaseL(baseAppClass));
+
+    // Add to harvesting queue
+    iObserver->AddHarvestingQueue(this, baseAppClass,aForceReharvesting);  
+    CPIXLOGSTRING("END CEmailPlugin::MountL");
+    }
+
+// ---------------------------------------------------------------------------
+// CEmailPlugin::UnMount
+// ---------------------------------------------------------------------------
+//
+void CEmailPlugin::UnMount(TDriveNumber aMedia, TBool aUndefineAsWell)
+    {
+    CPIXLOGSTRING("START CEmailPlugin::UnMount");
+    // Check if already exists
+    if (!iIndexer[aMedia])
+        return;
+    
+    // Form the baseappclass for this media
+    TBuf<KMsgPluginBaseAppClassMaxLen> baseAppClass;
+    FormBaseAppClass(aMedia, baseAppClass);             
+        
+    // Remove from harvesting queue
+    iObserver->RemoveHarvestingQueue(this, baseAppClass);   
+    
+    // Delete the index object
+    if (iIndexer[aMedia])
+        {
+        delete iIndexer[aMedia];
+        iIndexer[aMedia] = NULL;
+        }
+    
+    // if the aActionType is EFFMmcDismount, then the
+    // parameter aFilename is the baseAppClass of the Index database
+    // to be dropped.
+    if (aUndefineAsWell)
+        iSearchSession.UnDefineVolume(baseAppClass);
+    }
+
+
+// ---------------------------------------------------------------------------
+// CEmailPlugin::FormBaseAppClass
+// ---------------------------------------------------------------------------
+//  
+TInt CEmailPlugin::FormBaseAppClass(TDriveNumber aMedia, TDes& aBaseAppClass)
+    {
+    TChar chr;
+    const TInt ret = RFs::DriveToChar(aMedia, chr);
+    if (KErrNone == ret)
+        {
+        aBaseAppClass.Copy(KAtSign);
+        aBaseAppClass.Append(chr);
+        aBaseAppClass.LowerCase();
+        aBaseAppClass.Append(KMsgBaseAppClassGeneric);
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CEmailPlugin::DatabasePathLC
+// ---------------------------------------------------------------------------
+//
+HBufC* CEmailPlugin::DatabasePathLC(TDriveNumber aMedia)
+    {
+    CPIXLOGSTRING("START CEmailPlugin::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());
+    TPtr indexDbPathPtr = indexDbPath->Des();
+
+#if 1 // Data caging implementation
+    iFs.CreatePrivatePath(aMedia);
+
+    TChar chr;
+    RFs::DriveToChar(aMedia, chr);
+    indexDbPathPtr.Append(chr);
+    indexDbPathPtr.Append(KColon);
+
+    TFileName pathWithoutDrive;
+    iFs.PrivatePath(pathWithoutDrive);
+    indexDbPathPtr.Append(KCPixSearchServerPrivateDirectory);
+#else // here is the way to calculate the path if data caging is not being used.
+    TFileName rootPath;
+    PathInfo::GetRootPath(rootPath, aMedia);
+    indexDbPathPtr.Append(rootPath);
+#endif 
+
+    indexDbPathPtr.Append(KPathIndexDbPath);
+    indexDbPathPtr.Append(KPathTrailer);
+
+    return indexDbPath;
+    }
+
+// ---------------------------------------------------------------------------
+// CEmailPlugin::GetIndexer
+// ---------------------------------------------------------------------------
+//
+CCPixIndexer* CEmailPlugin::GetIndexer()
+    {
+    return iIndexer[iCurrentDrive];
+    }
+
+// ---------------------------------------------------------------------------
+// CEmailPlugin::HarvestingCompleted
+// ---------------------------------------------------------------------------
+//  
+void CEmailPlugin::HarvestingCompleted(TInt aError)
+{
+	// Notifies the indexing manager of completed harvesting, called by CMessageHarvester
+    Flush( *GetIndexer() );
+    TBuf<KMsgPluginBaseAppClassMaxLen> baseAppClass;
+    FormBaseAppClass(TDriveNumber(iCurrentDrive), baseAppClass);
+#ifdef __PERFORMANCE_DATA
+    TRAP_IGNORE( UpdatePerformaceDataL() );
+#endif
+    iObserver->HarvestingCompleted(this, baseAppClass, aError);
+}
+
+// ---------------------------------------------------------------------------
+// CEmailPlugin::UpdatePerformaceDataL
+// ---------------------------------------------------------------------------
+//
+#ifdef __PERFORMANCE_DATA
+void CEmailPlugin::UpdatePerformaceDataL()
+    {
+    TTime now;
+   
+    
+    iCompleteTime.UniversalTime();
+    TTimeIntervalMicroSeconds timeDiff = iCompleteTime.MicroSecondsFrom(iStartTime);
+    
+    RFs fileSession;
+    RFile perfFile;
+    User::LeaveIfError( fileSession.Connect () );
+    
+    
+    /* Open file if it exists, otherwise create it and write content in it */
+    
+        if(perfFile.Open(fileSession, _L("c:\\data\\MessagePerf.txt"), EFileWrite))
+                   User::LeaveIfError(perfFile.Create (fileSession, _L("c:\\data\\MessagePerf.txt"), EFileWrite));
+    
+    HBufC8 *heap = HBufC8::NewL(100);
+    TPtr8 ptr = heap->Des();
+    now.HomeTime();
+    TBuf<50> timeString;             
+                
+    _LIT(KOwnTimeFormat,"%:0%H%:1%T%:2%S");
+    now.FormatL(timeString,KOwnTimeFormat);
+    ptr.AppendNum(now.DateTime().Day());
+    ptr.Append(_L("/"));
+    ptr.AppendNum(now.DateTime().Month());
+    ptr.Append(_L("/"));
+    ptr.AppendNum(now.DateTime().Year());
+    ptr.Append(_L(":"));
+    ptr.Append(timeString);
+    ptr.Append( _L("Time taken for Harvesting Message is : "));
+    ptr.AppendNum(timeDiff.Int64()/1000) ;
+    ptr.Append(_L(" MilliSeonds \n"));
+    TInt myInt = 0;
+    perfFile.Seek(ESeekEnd,myInt);
+    perfFile.Write (ptr);
+    perfFile.Close ();
+    fileSession.Close ();
+    delete heap;
+    }
+
+// ---------------------------------------------------------------------------
+// CEmailPlugin::UpdatePerformaceDataL
+// ---------------------------------------------------------------------------
+//
+void CEmailPlugin::UpdatePerformaceDataL(TMsvSessionEvent action) {
+    
+        iCompleteTime.UniversalTime();
+        TTimeIntervalMicroSeconds timeDiff = iCompleteTime.MicroSecondsFrom(iStartTime);
+        
+        RFs fileSession;
+        RFile perfFile;
+        User::LeaveIfError( fileSession.Connect () );
+        
+        
+        /* Open file if it exists, otherwise create it and write content in it */
+        
+            if(perfFile.Open(fileSession, _L("c:\\data\\MessagePerf.txt"), EFileWrite))
+                       User::LeaveIfError(perfFile.Create (fileSession, _L("c:\\data\\MessagePerf.txt"), EFileWrite));
+        
+        HBufC8 *heap = HBufC8::NewL(100);
+        TPtr8 ptr = heap->Des();
+
+        switch (action) {
+            case EMsvEntriesDeleted: ptr.Append( _L("del "));break;
+            case EMsvEntriesChanged: ptr.Append( _L("upd "));break;
+            case EMsvEntriesMoved: ptr.Append( _L("mov "));break;
+        }
+        ptr.AppendNum(timeDiff.Int64()/1000) ;
+        ptr.Append(_L("\n"));
+        TInt myInt = 0;
+        perfFile.Seek(ESeekEnd,myInt);
+        perfFile.Write (ptr);
+        perfFile.Close ();
+        fileSession.Close ();
+        delete heap;
+    }
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/messaging/email/src/tproxy.cpp	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2010 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:  Message plugin
+*
+*/
+
+
+
+#include <e32std.h>
+#include <implementationproxy.h>
+#include <cindexingplugin.h>
+#include "cemailplugin.h"
+
+
+// Map the interface UIDs to implementation factory functions
+const TImplementationProxy KImplementationTable[] = 
+	{
+	{{0x20029B09},( TProxyNewLPtr) CEmailPlugin::NewL}		
+	};
+
+// Exported proxy for instantiation method resolution
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
+	{
+	aTableCount = sizeof( KImplementationTable ) / sizeof( TImplementationProxy );
+	return KImplementationTable;
+	}
+
--- a/harvesterplugins/messaging/group/bld.inf	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/messaging/group/bld.inf	Mon May 03 12:32:15 2010 +0300
@@ -15,8 +15,5 @@
 *
 */
 
-
 PRJ_MMPFILES
-
-messageplugin.mmp
-
+#include "../smsmms/group/bld.inf"
\ No newline at end of file
--- a/harvesterplugins/messaging/group/messageplugin.mmp	Mon Apr 19 14:40:05 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-/*
-* Copyright (c) 2010 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: 
-*
-*/
-
-TARGET        cpixmessageplugin.dll
-TARGETTYPE    PLUGIN
- 
-#include          <platform_paths.hrh>
-CAPABILITY   CAP_GENERAL_DLL -AllFiles -DRM
-#include "../../../harvesterplugins/inc/s60performance.h"
-// ECom Dll recognition UID followed by the unique UID for this dll
-UID           0x10009D8D 0x2001F701 
-
-SOURCEPATH    ../src
-SOURCE        cmessageplugin.cpp
-SOURCE        cmessagedatahandler.cpp
-SOURCE        cmessageharvester.cpp
-SOURCE        cmessagemonitor.cpp
-SOURCE        tproxy.cpp
-
-USERINCLUDE   ../inc
-
-APP_LAYER_SYSTEMINCLUDE
-SYSTEMINCLUDE /epoc32/include/ecom
-
-
-SOURCEPATH    ../data
-start RESOURCE 2001f701.rss
-target  cpixmessageplugin.rsc
-end
-
-LIBRARY       euser.lib
-LIBRARY       ecom.lib
-LIBRARY       efsrv.lib
-LIBRARY		  msgs.lib
-LIBRARY		  gsmu.lib
-LIBRARY       cpixharvesterplugininterface.lib
-LIBRARY       cpixsearchclient.lib
-LIBRARY		  charconv.lib
-LIBRARY		  imcm.lib // CImHeader, CImEmailMessage
-LIBRARY		  etext.lib // CParaFormatLayer etc
-
-// For logging
-LIBRARY 	  flogger.lib 
-
-EXPORTUNFROZEN
-
--- a/harvesterplugins/messaging/inc/cmessagedatahandler.h	Mon Apr 19 14:40:05 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,169 +0,0 @@
-/*
-* Copyright (c) 2010 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:  Harvester message plugin
- *
-*/
-
-
-#ifndef CMESSAGEDATAHANDLER_H
-#define CMESSAGEDATAHANDLER_H
-
-//  INCLUDES 
-
-#include <e32base.h>
-#include <msvapi.h>
-#include "cmessageplugin.h"
-
-// FORWARD DECLARATIONS
-class CMmsClientMtm;
-class CSmsClientMtm;
-class CClientMtmRegistry;
-class CSmtpClientMtm;
-class CPop3ClientMtm;
-class CImap4ClientMtm;
-
-class CMessageDataHandler : public CActive
-	{
-public:
-	/**
-	 * Construction
-	 * @return Harvester image plugin
-	 */
-	static CMessageDataHandler* NewL(CMessagePlugin& aMessagePlugin,
-			CMsvSession& aSession);
-
-	/**
-	 * Destruction
-	 */
-	virtual ~CMessageDataHandler();
-
-	/**
-	 * Set a item to be indexed.
-	 * @param TMsvId& aMessageId Id of message
-	 * @param TCPixActionType aActionType Action type of item
-	 * @param TMsvId& aFolderId Id of the folder where message is located
-	 */
-	void GatherDataL(TMsvId& aMessageId, TCPixActionType aActionType, TMsvId& aFolderId);
-
-private:
-	//From CActive
-
-	/**
-	 * From CACtive.
-	 */
-	void DoCancel();
-
-	/**
-	 * From CACtive.
-	 */
-	void RunL();
-
-	/**
-	 * From CActive.
-	 * @param aError Leave code from RunL()
-	 * @return Error code, KErrNone if error was handled successfully.
-	 */
-	TInt RunError(TInt aError);
-
-	/**
-	 * Check if the message is valid and what type it is.
-	 * @param TMsvId aIdToCheck Id of the message
-	 * @param TMsgInfo& aMessageType Reference to put message type
-	 * @return TInt error, if any
-	 */
-	TInt IsValidMessageType(TMsvId aIdToCheck, TMsgType& aMessageType);
-	
-	/**
-	 * Launch the next request. 
-	 */
-	void HandleNextRequest();
-
-private:
-
-	/**
-	 * Private constructor
-	 */
-	CMessageDataHandler(CMessagePlugin& aMessagePlugin, CMsvSession& aSession);
-
-	/**
-	 * 2nd phase construction
-	 */
-	void ConstructL();
-
-	/**
-	 * Create a message item to be indexed based on the params.
-	 * @param TMsvId& aMsvId Id of the item to be indexed
-	 * @param TCPixActionType aAction type of the indexing event
-	 * @param TFolderId& aFolderId Id of the folder where indexed message is located
-	 */
-	 void CreateMessageIndexItemL(const TMsvId& aMsvId, TCPixActionType aActionType, const TMsvId& aFolderId);
-
-	 /**
-	  * Creates general message excerpt
-	  */
-	 HBufC* CreateExcerptLC(const TDesC& aFromAddress, 
-							const CDesCArray& aRecipientArray,
-							const TDesC& aSubject,
-							const TDesC& aBodyText,
-							const TMsvId& aFolderId);
-	 
-	 CSearchDocument* CreateSmsDocumentL(const TMsvId& aMsvId, const TMsvId& aFolderId);
-	 CSearchDocument* CreateMmsDocumentL(const TMsvId& aMsvId, const TMsvId& aFolderId);
-	 CSearchDocument* CreateEmailDocumentL(const TMsvId& aMsvId, const TMsvId& aFolderId);
-	 TUint TextFileCharsetL(RFs aFs, RFile aFile);
-	 void ConvertToUcs2FromUtfL(RFs& aFs,
-								  TDes& aUcs2Text,
-								  const TDesC8& aUtfText,
-								  TUint aMibCharset);
-	 TBool IsTextUcs2(const TDesC8& aText);
-	 TBool TextContainsUtf8Bom(const TDesC8& aText);
-
-private:
-	class TMessageItem
-		{
-		public:
-			TMessageItem(TMsvId aMessageId, TCPixActionType aActionType, TMsvId aFolderId)
-				{
-				iMessageId = aMessageId;
-				iActionType = aActionType;
-				iFolderId = aFolderId;
-				}
-			;
-
-		public:
-			TMsvId iMessageId;
-			TCPixActionType iActionType;
-			TMsvId iFolderId;
-		};
-
-private:
-	// Message plugin handle
-	CMessagePlugin& iMessagePlugin;
-	// Session Message server session, own
-	CMsvSession& iMsvSession;
-	// Messages to be handled
-	RArray<TMessageItem> iMessageArray;
-
-	// Data sources
-	CClientMtmRegistry*         iMtmReg;
-	CMmsClientMtm*              iMmsMtm;
-	CSmsClientMtm*              iSmsMtm;
-	CSmtpClientMtm*             iSmtpMtm;                 // client for opening smtp
-	CPop3ClientMtm*				iPop3Mtm;                   // client for opening pop3
-	CImap4ClientMtm*			iImap4Mtm;                  // client for opening imap4
-	RFs							iFs;
-	};
-
-#endif // CMESSAGEDATAHANDLER_H
-// End of File
--- a/harvesterplugins/messaging/inc/cmessageharvester.h	Mon Apr 19 14:40:05 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,136 +0,0 @@
-/*
-* Copyright (c) 2010 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:  Harvester message plugin
-*
-*/
-
-
-#ifndef CMESSAGEHARVESTER_H
-#define CMESSAGEHARVESTER_H
-
-//  INCLUDES 
-
-#include <e32base.h>
-#include <msvapi.h>
-//#include <mdeitem.h>
-
-#include "cmessageplugin.h"
-
-
-class CMessageHarvester : public CActive
-    {
-    public:
-        /**
-        * Construction
-        * @return Harvester image plugin
-        */
-        static CMessageHarvester* NewL( CMessagePlugin& aMessagePlugin, CMsvSession& aSession );
-
-        /**
-        * Destruction
-        */
-        virtual ~CMessageHarvester();
-                
-        /**
-        * Start harvesting message items
-        */
-        void StartHarvestingL();
-
-    private:  //From CActive
-
-	    /**
-	     * From CACtive.
-	     */
-        void DoCancel();
-
-        /**
-	     * From CACtive.
-         */
-        void RunL();
-
-        /**
-	     * From CACtive.
-	     * @param aError Leave code from RunL()
-	     * @return Error code, KErrNone if error was handled successfully.
-         */
-        TInt RunError( TInt aError );
-
-    
-    private:
-
-        /**
-        * Private constructor
-        */    
-        CMessageHarvester( CMessagePlugin& aMessagePlugin, CMsvSession& aSession );
-
-        /**
-        * Get next messaging folder 
-        */
-        void GetNextFolderL();
-        
-        /**
-        * List subfolder from current folder
-        * @param aFolderEntry Folder entry
-        */        
-        void ListSubFoldersL(  const CMsvEntry& aFolderEntry );
-        
-        /**
-        * List subfolder from current folder
-        * @param aFolderId a folder identifier
-        */ 
-        void AddFolderWithSubFoldersL( const TMsvId& aFolderId );
-        
-        /**
-        * Get message folders under the messaging   
-        */ 
-        void GetMessageFoldersL();
-        
-        /**
-        * Get message identifier
-        */ 
-        void GetMessageIdL();
-
-        /**
-        * Handles next request
-        */
-        void HandleNextRequest();      
-
-    private:
-    	enum TState
-    		{
-    		EStateIdle, // Stopped
-    		EStateNextFolder, // Getting the next folder 
-    		EStateNextMessage, // Getting the next message
-    		};
-    	
-    private:
-        // Whether Harvesting is ready   
-        TBool iHarvestCompleted;
-        // Message plugin for observing
-        CMessagePlugin& iMessagePlugin; 
-        // Session Message server session, own
-        CMsvSession& iMsvSession;
-        // Internal state machine state
-        TState iState;
-        // Array of folders to be searched  
-        RArray<TMsvId> iToBeSearchedFolders;
-        // UID of current folder searched
-        TMsvId iCurrentFolder;
-        // Current folder message items 
-        CMsvEntrySelection* iChildren;         
-    };
-
-#endif // CMESSAGEHARVESTER_H
-
-// End of File
--- a/harvesterplugins/messaging/inc/cmessagemonitor.h	Mon Apr 19 14:40:05 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,132 +0,0 @@
-/*
-* Copyright (c) 2010 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:  
-*
-*/
-
-
-#ifndef CMESSAGEMONITOR_H
-#define CMESSAGEMONITOR_H
-
-//  INCLUDES 
-
-#include <e32base.h>
-#include <msvapi.h>
-#include "cmessageplugin.h"
-#include <common.h>
-
-// FORWARD DECLARATIONS
-
-class CMessageMonitor : public CActive
-  	{
-	public:
-		/**
-		* NewL
-		* @return
-		*/
-		static CMessageMonitor* NewL(  CMessagePlugin& aMessagePlugin, CMsvSession& aSession );
-
-		/**
-		* Destructor
-		*/
-		virtual ~CMessageMonitor();
-				
-		/**
-		 * HandleMsgMovedL handle a moved message
-		 */
-		void HandleMsgMovedL( const TMsvId aNewFolderId, 
-							  const TMsvId aOldFolderId, 
-							  const CMsvEntrySelection& aSelection );
-
-		/**
-		 * HandleMsgCreatedChangedL handles a new or changed message
-		 * @param CMsvEntrySelection aSelection list of messages TMsvIds that have changed
-		 * @param TMsvId aFolderId Folder that contains these changed messages
-		 * @param MMsvSessionObserver::TMsvSessionEvent aEvent type of event, not used currently
-		 */	
-	    void HandleMsgCreatedChangedL( const CMsvEntrySelection& aSelection,
-                                          	        const TMsvId aFolderId,
-                                          	        const MMsvSessionObserver::TMsvSessionEvent aEvent );
-	    
-		/**
-		 * HandleMsgCreatedChangedL handles a deleted message
-		 * @param CMsvEntrySelection aSelection list of messages TMsvIds that have been deleted
-		 */		
-        void HandleMsgDeletedL( const CMsvEntrySelection& aSelection );
-        
-	protected:
-		/** 
-		 * inherited from CActive
-		 */
-		void RunL();
-		void DoCancel();
-		TInt RunError(TInt aError);
-        
-	private:
-
-		/**
-		* From Constructor
-		*/
-		CMessageMonitor(  CMessagePlugin& aMessagePlugin, CMsvSession& aSession );
-		
-		/**
-		* 2nd phase construction
-		*/
-		void ConstructL();
-
-		/**
-		 * OverwriteOrAddToQuereL is a helper for MessageItemL. Adds only unique TMsvId's to the processing queue.
-		 * @param TMsvId aMsvId message to be added to the list
-		 * @param TCPixActionType aAction action type to be added to the list
-		 * @param TMsvId aFolderId id of the folder where message is located
-		 */
-		void OverwriteOrAddToQuereL(TMsvId aMsvId, TCPixActionType aAction, TMsvId aFolderId);
-		
-		/**
-		 * MessageItemL adds a message to the delayed queue, and schedules the RunL
-		 * @param TMsvId aMsvId message to be added to the list
-		 * @param TCPixActionType aAction action type to be added to the list
-		 * @param TMsvId aFolderId id of the folder where message is located
-		 */
-		void MessageItemL(TMsvId aMsvId, TCPixActionType aAction, TMsvId aFolderId);
-
-	private:
-		enum TState 
-		{ 
-			EStateNone = 0, 
-			EStateWaiting 
-		};
-		
-		struct TMessageRecord 
-		{
-			TMsvId iMsvId;
-			TCPixActionType iAction;
-			TMsvId iFolderId;
-		};
-	
-	private:
-		// Queue of documents to be indexed
-		RArray<TMessageRecord> iMessages; 
-		
-		// State machine's state
-		TState iState;
-
-		// Timer which is used to delay indexing messages
-		RTimer iTimer;
-		
-		CMsvSession&		iMsvSession;
-		CMessagePlugin&      iMessagePlugin;
-	};
-
-#endif //  CMESSAGEMONITOR_H
--- a/harvesterplugins/messaging/inc/cmessageplugin.h	Mon Apr 19 14:40:05 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,153 +0,0 @@
-/*
-* Copyright (c) 2010 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:  
-*
-*/
-
-
-#ifndef CMESSAGEPLUGIN_H
-#define CMESSAGEPLUGIN_H
-
-#include <e32base.h>
-#include <msvapi.h>
-#include <cindexingplugin.h>
-#include <common.h>
-
-class CMessageMonitor;
-class CMessageHarvester;
-class CMessageDataHandler;
-class CCPixIndexer;
-
-enum TMsgType
-{
-	EMsgTypeInvalid,
-	EMsgTypeSms,
-	EMsgTypeMms,
-	EMsgTypeDraft,
-	EMsgTypeEmailPop3,
-	EMsgTypeEmailSmtp,
-	EMsgTypeEmailImap4
-};
-
-class CMessagePlugin : public CIndexingPlugin, public MMsvSessionObserver
-{
-public:
-	static CMessagePlugin* NewL();
-	static CMessagePlugin* NewLC();
-	virtual ~CMessagePlugin();
-	
-	/**
-	 * From CIndexingPlugin
-	 */
-	void StartPluginL();
-	void StartHarvestingL(const TDesC& aQualifiedBaseAppClass);
-	
-	/**
-	* callback from MMsvSessionObserver
-	*/
-	virtual void HandleSessionEventL(TMsvSessionEvent aEvent, 
-									 TAny* aArg1, 
-									 TAny* aArg2, 
-									 TAny* aArg3);
-
-	/**
-	* Called by Message monitor or harvester when new item is found.
-	*
-	* @param aMsgId Message item identifier
-	* @param TCPixActionType aActionType action type
-	* @param aFolderId identifier of the folder where message is stored 
-	*/
-    void MessageItemL( TMsvId aMsgId, TCPixActionType aActionType, TMsvId aFolderId );
-    	
-	/**
-	* Indentify the message type from TMsvEntry
-	*
-	* @param TMsvEntry& aEntry a entry item to identify
-	*/
-    TMsgType CalculateMessageType (const TMsvEntry& aEntry );
-    
-    /**
-     * Gets the database observer class
-     */
-    CCPixIndexer* GetIndexer(); //SPB { return iIndexer; }
-    /**
-     * MountL - Mount an IndexDB.
-     * @aMedia drive to mount.
-     * @aForceReharvesting to reharvest or not
-     */
-    void MountL(TDriveNumber aMedia, TBool aForceReharvesting=EFalse);
-
-    /**
-     * UnMount - Dismount a IndexDB for drive aMedia.
-     * @aMedia drive to unmount.
-     * @aUndefineAsWell if ETrue then undefine the volume as well
-     * 
-     */
-    void UnMount(TDriveNumber aMedia, TBool aUndefineAsWell = ETrue);
-    
-    /**
-     * FormBaseAppClass - constructs a baseAppClass for the given drive.
-     * @aMedia drive to form the baseAppClass for.
-     * @aBaseAppClass return descriptor containing the baseAppClass
-     * returns KErrNone on success or a standard error code
-     */
-    static TInt FormBaseAppClass(TDriveNumber aMedia, TDes& aBaseAppClass);
-    
-    /**
-     * DatabasePathL - Forms IndexDb path.
-     * @param aMedia - The drive for which the path should be constructed.
-     * returns pointer to the IndexDb path.
-     */
-    HBufC* DatabasePathLC(TDriveNumber aMedia);
-    
-    /**
-     * IsMediaRemovableL - Check media is removable or not.
-     * @param aDrive - The drive for which it is checked.
-     * returns ETrue if it is removable else EFalse.
-     */
-    TBool IsMediaRemovableL(TDriveNumber& aDrive);
-
-public:
-	/*
-	 * Notifies the indexing manager of completed harvesting, called by CMessageHarvester
-	 */
-	void HarvestingCompleted(TInt aError);
-
-protected:
-	CMessagePlugin();
-	void ConstructL();
-
-private:
-    // Session to Messge server session
-    CMsvSession* iMsvSession;
-    CMessageMonitor* iMessageMonitor;    
-    CMessageHarvester* iMessageHarvester;
-    CMessageDataHandler* iMessageDataHandler;
-
-    // File system session
-    RFs iFs;
-    //Currently used Drive by messaging application
-    TInt     iCurrentDrive;
-    // CPix indexer 
-    CCPixIndexer* iIndexer[EDriveZ+1]; // EDriveZ enum value is 25, so add 1.
-
-#ifdef __PERFORMANCE_DATA
-    TTime iStartTime;
-    TTime iCompleteTime;
-    void UpdatePerformaceDataL();
-    void UpdatePerformaceDataL(TMsvSessionEvent);
-#endif
-};
-
-#endif // CMESSAGEPLUGIN_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/messaging/smsmms/data/2001f701.rss	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,48 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+// 0x2001F701.RSS
+
+#include <registryinfo.rh>
+
+// Declares info for one test implementation
+RESOURCE REGISTRY_INFO theInfo
+        {
+        // UID for the DLL        
+        dll_uid = 0x2001F701; // ECOM Messaging Plugin dll UID
+        // Declare array of interface info
+        interfaces = 
+                {
+                INTERFACE_INFO
+                        {
+                        // UID of interface that is implemented
+                        interface_uid = 0x2001F700; // CPixSearch Plugin Interface UID
+                        implementations = 
+                                {
+                                // Info for CMessagePlugin
+                                IMPLEMENTATION_INFO
+                                        {
+                                        implementation_uid = 0x2001F701;
+                                        version_no = 1;
+                                        display_name = "Messages";
+                                        default_data = "Messaging";
+                                        opaque_data = "";
+                                        }
+                                };
+                        }
+                };
+        }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/messaging/smsmms/group/bld.inf	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+
+PRJ_MMPFILES
+
+messageplugin.mmp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/messaging/smsmms/group/messageplugin.mmp	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,60 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+TARGET        cpixmessageplugin.dll
+TARGETTYPE    PLUGIN
+ 
+#include          <platform_paths.hrh>
+CAPABILITY   CAP_GENERAL_DLL -AllFiles -DRM
+#include "../../../../harvesterplugins/inc/s60performance.h"
+// ECom Dll recognition UID followed by the unique UID for this dll
+UID           0x10009D8D 0x2001F701 
+
+SOURCEPATH    ../src
+SOURCE        cmessageplugin.cpp
+SOURCE        cmessagedatahandler.cpp
+SOURCE        cmessageharvester.cpp
+SOURCE        cmessagemonitor.cpp
+SOURCE        tproxy.cpp
+
+USERINCLUDE   ../inc ../traces
+
+APP_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE /epoc32/include/ecom
+
+
+SOURCEPATH    ../data
+start RESOURCE 2001f701.rss
+target  cpixmessageplugin.rsc
+end
+
+LIBRARY       euser.lib
+LIBRARY       ecom.lib
+LIBRARY       efsrv.lib
+LIBRARY		  msgs.lib
+LIBRARY		  gsmu.lib
+LIBRARY       cpixharvesterplugininterface.lib
+LIBRARY       cpixsearchclient.lib
+LIBRARY		  charconv.lib
+LIBRARY		  imcm.lib // CImHeader, CImEmailMessage
+LIBRARY		  etext.lib // CParaFormatLayer etc
+
+// For logging
+LIBRARY 	  flogger.lib 
+
+EXPORTUNFROZEN
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/messaging/smsmms/inc/cmessagedatahandler.h	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,169 @@
+/*
+* Copyright (c) 2010 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:  Harvester message plugin
+ *
+*/
+
+
+#ifndef CMESSAGEDATAHANDLER_H
+#define CMESSAGEDATAHANDLER_H
+
+//  INCLUDES 
+
+#include <e32base.h>
+#include <msvapi.h>
+#include "cmessageplugin.h"
+
+// FORWARD DECLARATIONS
+class CMmsClientMtm;
+class CSmsClientMtm;
+class CClientMtmRegistry;
+class CSmtpClientMtm;
+class CPop3ClientMtm;
+class CImap4ClientMtm;
+
+class CMessageDataHandler : public CActive
+	{
+public:
+	/**
+	 * Construction
+	 * @return Harvester image plugin
+	 */
+	static CMessageDataHandler* NewL(CMessagePlugin& aMessagePlugin,
+			CMsvSession& aSession);
+
+	/**
+	 * Destruction
+	 */
+	virtual ~CMessageDataHandler();
+
+	/**
+	 * Set a item to be indexed.
+	 * @param TMsvId& aMessageId Id of message
+	 * @param TCPixActionType aActionType Action type of item
+	 * @param TMsvId& aFolderId Id of the folder where message is located
+	 */
+	void GatherDataL(TMsvId& aMessageId, TCPixActionType aActionType, TMsvId& aFolderId);
+
+private:
+	//From CActive
+
+	/**
+	 * From CACtive.
+	 */
+	void DoCancel();
+
+	/**
+	 * From CACtive.
+	 */
+	void RunL();
+
+	/**
+	 * From CActive.
+	 * @param aError Leave code from RunL()
+	 * @return Error code, KErrNone if error was handled successfully.
+	 */
+	TInt RunError(TInt aError);
+
+	/**
+	 * Check if the message is valid and what type it is.
+	 * @param TMsvId aIdToCheck Id of the message
+	 * @param TMsgInfo& aMessageType Reference to put message type
+	 * @return TInt error, if any
+	 */
+	TInt IsValidMessageType(TMsvId aIdToCheck, TMsgType& aMessageType);
+	
+	/**
+	 * Launch the next request. 
+	 */
+	void HandleNextRequest();
+
+private:
+
+	/**
+	 * Private constructor
+	 */
+	CMessageDataHandler(CMessagePlugin& aMessagePlugin, CMsvSession& aSession);
+
+	/**
+	 * 2nd phase construction
+	 */
+	void ConstructL();
+
+	/**
+	 * Create a message item to be indexed based on the params.
+	 * @param TMsvId& aMsvId Id of the item to be indexed
+	 * @param TCPixActionType aAction type of the indexing event
+	 * @param TFolderId& aFolderId Id of the folder where indexed message is located
+	 */
+	 void CreateMessageIndexItemL(const TMsvId& aMsvId, TCPixActionType aActionType, const TMsvId& aFolderId);
+
+	 /**
+	  * Creates general message excerpt
+	  */
+	 HBufC* CreateExcerptLC(const TDesC& aFromAddress, 
+							const CDesCArray& aRecipientArray,
+							const TDesC& aSubject,
+							const TDesC& aBodyText,
+							const TMsvId& aFolderId);
+	 
+	 CSearchDocument* CreateSmsDocumentL(const TMsvId& aMsvId, const TMsvId& aFolderId);
+	 CSearchDocument* CreateMmsDocumentL(const TMsvId& aMsvId, const TMsvId& aFolderId);
+	 CSearchDocument* CreateEmailDocumentL(const TMsvId& aMsvId, const TMsvId& aFolderId);
+	 TUint TextFileCharsetL(RFs aFs, RFile aFile);
+	 void ConvertToUcs2FromUtfL(RFs& aFs,
+								  TDes& aUcs2Text,
+								  const TDesC8& aUtfText,
+								  TUint aMibCharset);
+	 TBool IsTextUcs2(const TDesC8& aText);
+	 TBool TextContainsUtf8Bom(const TDesC8& aText);
+
+private:
+	class TMessageItem
+		{
+		public:
+			TMessageItem(TMsvId aMessageId, TCPixActionType aActionType, TMsvId aFolderId)
+				{
+				iMessageId = aMessageId;
+				iActionType = aActionType;
+				iFolderId = aFolderId;
+				}
+			;
+
+		public:
+			TMsvId iMessageId;
+			TCPixActionType iActionType;
+			TMsvId iFolderId;
+		};
+
+private:
+	// Message plugin handle
+	CMessagePlugin& iMessagePlugin;
+	// Session Message server session, own
+	CMsvSession& iMsvSession;
+	// Messages to be handled
+	RArray<TMessageItem> iMessageArray;
+
+	// Data sources
+	CClientMtmRegistry*         iMtmReg;
+	CMmsClientMtm*              iMmsMtm;
+	CSmsClientMtm*              iSmsMtm;
+	CSmtpClientMtm*             iSmtpMtm;                 // client for opening smtp
+	CPop3ClientMtm*				iPop3Mtm;                   // client for opening pop3
+	CImap4ClientMtm*			iImap4Mtm;                  // client for opening imap4
+	RFs							iFs;
+	};
+
+#endif // CMESSAGEDATAHANDLER_H
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/messaging/smsmms/inc/cmessageharvester.h	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,136 @@
+/*
+* Copyright (c) 2010 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:  Harvester message plugin
+*
+*/
+
+
+#ifndef CMESSAGEHARVESTER_H
+#define CMESSAGEHARVESTER_H
+
+//  INCLUDES 
+
+#include <e32base.h>
+#include <msvapi.h>
+//#include <mdeitem.h>
+
+#include "cmessageplugin.h"
+
+
+class CMessageHarvester : public CActive
+    {
+    public:
+        /**
+        * Construction
+        * @return Harvester image plugin
+        */
+        static CMessageHarvester* NewL( CMessagePlugin& aMessagePlugin, CMsvSession& aSession );
+
+        /**
+        * Destruction
+        */
+        virtual ~CMessageHarvester();
+                
+        /**
+        * Start harvesting message items
+        */
+        void StartHarvestingL();
+
+    private:  //From CActive
+
+	    /**
+	     * From CACtive.
+	     */
+        void DoCancel();
+
+        /**
+	     * From CACtive.
+         */
+        void RunL();
+
+        /**
+	     * From CACtive.
+	     * @param aError Leave code from RunL()
+	     * @return Error code, KErrNone if error was handled successfully.
+         */
+        TInt RunError( TInt aError );
+
+    
+    private:
+
+        /**
+        * Private constructor
+        */    
+        CMessageHarvester( CMessagePlugin& aMessagePlugin, CMsvSession& aSession );
+
+        /**
+        * Get next messaging folder 
+        */
+        void GetNextFolderL();
+        
+        /**
+        * List subfolder from current folder
+        * @param aFolderEntry Folder entry
+        */        
+        void ListSubFoldersL(  const CMsvEntry& aFolderEntry );
+        
+        /**
+        * List subfolder from current folder
+        * @param aFolderId a folder identifier
+        */ 
+        void AddFolderWithSubFoldersL( const TMsvId& aFolderId );
+        
+        /**
+        * Get message folders under the messaging   
+        */ 
+        void GetMessageFoldersL();
+        
+        /**
+        * Get message identifier
+        */ 
+        void GetMessageIdL();
+
+        /**
+        * Handles next request
+        */
+        void HandleNextRequest();      
+
+    private:
+    	enum TState
+    		{
+    		EStateIdle, // Stopped
+    		EStateNextFolder, // Getting the next folder 
+    		EStateNextMessage, // Getting the next message
+    		};
+    	
+    private:
+        // Whether Harvesting is ready   
+        TBool iHarvestCompleted;
+        // Message plugin for observing
+        CMessagePlugin& iMessagePlugin; 
+        // Session Message server session, own
+        CMsvSession& iMsvSession;
+        // Internal state machine state
+        TState iState;
+        // Array of folders to be searched  
+        RArray<TMsvId> iToBeSearchedFolders;
+        // UID of current folder searched
+        TMsvId iCurrentFolder;
+        // Current folder message items 
+        CMsvEntrySelection* iChildren;         
+    };
+
+#endif // CMESSAGEHARVESTER_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/messaging/smsmms/inc/cmessagemonitor.h	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,132 @@
+/*
+* Copyright (c) 2010 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:  
+*
+*/
+
+
+#ifndef CMESSAGEMONITOR_H
+#define CMESSAGEMONITOR_H
+
+//  INCLUDES 
+
+#include <e32base.h>
+#include <msvapi.h>
+#include "cmessageplugin.h"
+#include <common.h>
+
+// FORWARD DECLARATIONS
+
+class CMessageMonitor : public CActive
+  	{
+	public:
+		/**
+		* NewL
+		* @return
+		*/
+		static CMessageMonitor* NewL(  CMessagePlugin& aMessagePlugin, CMsvSession& aSession );
+
+		/**
+		* Destructor
+		*/
+		virtual ~CMessageMonitor();
+				
+		/**
+		 * HandleMsgMovedL handle a moved message
+		 */
+		void HandleMsgMovedL( const TMsvId aNewFolderId, 
+							  const TMsvId aOldFolderId, 
+							  const CMsvEntrySelection& aSelection );
+
+		/**
+		 * HandleMsgCreatedChangedL handles a new or changed message
+		 * @param CMsvEntrySelection aSelection list of messages TMsvIds that have changed
+		 * @param TMsvId aFolderId Folder that contains these changed messages
+		 * @param MMsvSessionObserver::TMsvSessionEvent aEvent type of event, not used currently
+		 */	
+	    void HandleMsgCreatedChangedL( const CMsvEntrySelection& aSelection,
+                                          	        const TMsvId aFolderId,
+                                          	        const MMsvSessionObserver::TMsvSessionEvent aEvent );
+	    
+		/**
+		 * HandleMsgCreatedChangedL handles a deleted message
+		 * @param CMsvEntrySelection aSelection list of messages TMsvIds that have been deleted
+		 */		
+        void HandleMsgDeletedL( const CMsvEntrySelection& aSelection );
+        
+	protected:
+		/** 
+		 * inherited from CActive
+		 */
+		void RunL();
+		void DoCancel();
+		TInt RunError(TInt aError);
+        
+	private:
+
+		/**
+		* From Constructor
+		*/
+		CMessageMonitor(  CMessagePlugin& aMessagePlugin, CMsvSession& aSession );
+		
+		/**
+		* 2nd phase construction
+		*/
+		void ConstructL();
+
+		/**
+		 * OverwriteOrAddToQuereL is a helper for MessageItemL. Adds only unique TMsvId's to the processing queue.
+		 * @param TMsvId aMsvId message to be added to the list
+		 * @param TCPixActionType aAction action type to be added to the list
+		 * @param TMsvId aFolderId id of the folder where message is located
+		 */
+		void OverwriteOrAddToQuereL(TMsvId aMsvId, TCPixActionType aAction, TMsvId aFolderId);
+		
+		/**
+		 * MessageItemL adds a message to the delayed queue, and schedules the RunL
+		 * @param TMsvId aMsvId message to be added to the list
+		 * @param TCPixActionType aAction action type to be added to the list
+		 * @param TMsvId aFolderId id of the folder where message is located
+		 */
+		void MessageItemL(TMsvId aMsvId, TCPixActionType aAction, TMsvId aFolderId);
+
+	private:
+		enum TState 
+		{ 
+			EStateNone = 0, 
+			EStateWaiting 
+		};
+		
+		struct TMessageRecord 
+		{
+			TMsvId iMsvId;
+			TCPixActionType iAction;
+			TMsvId iFolderId;
+		};
+	
+	private:
+		// Queue of documents to be indexed
+		RArray<TMessageRecord> iMessages; 
+		
+		// State machine's state
+		TState iState;
+
+		// Timer which is used to delay indexing messages
+		RTimer iTimer;
+		
+		CMsvSession&		iMsvSession;
+		CMessagePlugin&      iMessagePlugin;
+	};
+
+#endif //  CMESSAGEMONITOR_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/messaging/smsmms/inc/cmessageplugin.h	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,153 @@
+/*
+* Copyright (c) 2010 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:  
+*
+*/
+
+
+#ifndef CMESSAGEPLUGIN_H
+#define CMESSAGEPLUGIN_H
+
+#include <e32base.h>
+#include <msvapi.h>
+#include <cindexingplugin.h>
+#include <common.h>
+
+class CMessageMonitor;
+class CMessageHarvester;
+class CMessageDataHandler;
+class CCPixIndexer;
+
+enum TMsgType
+{
+	EMsgTypeInvalid,
+	EMsgTypeSms,
+	EMsgTypeMms,
+	EMsgTypeDraft,
+	EMsgTypeEmailPop3,
+	EMsgTypeEmailSmtp,
+	EMsgTypeEmailImap4
+};
+
+class CMessagePlugin : public CIndexingPlugin, public MMsvSessionObserver
+{
+public:
+	static CMessagePlugin* NewL();
+	static CMessagePlugin* NewLC();
+	virtual ~CMessagePlugin();
+	
+	/**
+	 * From CIndexingPlugin
+	 */
+	void StartPluginL();
+	void StartHarvestingL(const TDesC& aQualifiedBaseAppClass);
+	
+	/**
+	* callback from MMsvSessionObserver
+	*/
+	virtual void HandleSessionEventL(TMsvSessionEvent aEvent, 
+									 TAny* aArg1, 
+									 TAny* aArg2, 
+									 TAny* aArg3);
+
+	/**
+	* Called by Message monitor or harvester when new item is found.
+	*
+	* @param aMsgId Message item identifier
+	* @param TCPixActionType aActionType action type
+	* @param aFolderId identifier of the folder where message is stored 
+	*/
+    void MessageItemL( TMsvId aMsgId, TCPixActionType aActionType, TMsvId aFolderId );
+    	
+	/**
+	* Indentify the message type from TMsvEntry
+	*
+	* @param TMsvEntry& aEntry a entry item to identify
+	*/
+    TMsgType CalculateMessageType (const TMsvEntry& aEntry );
+    
+    /**
+     * Gets the database observer class
+     */
+    CCPixIndexer* GetIndexer(); //SPB { return iIndexer; }
+    /**
+     * MountL - Mount an IndexDB.
+     * @aMedia drive to mount.
+     * @aForceReharvesting to reharvest or not
+     */
+    void MountL(TDriveNumber aMedia, TBool aForceReharvesting=EFalse);
+
+    /**
+     * UnMount - Dismount a IndexDB for drive aMedia.
+     * @aMedia drive to unmount.
+     * @aUndefineAsWell if ETrue then undefine the volume as well
+     * 
+     */
+    void UnMount(TDriveNumber aMedia, TBool aUndefineAsWell = ETrue);
+    
+    /**
+     * FormBaseAppClass - constructs a baseAppClass for the given drive.
+     * @aMedia drive to form the baseAppClass for.
+     * @aBaseAppClass return descriptor containing the baseAppClass
+     * returns KErrNone on success or a standard error code
+     */
+    static TInt FormBaseAppClass(TDriveNumber aMedia, TDes& aBaseAppClass);
+    
+    /**
+     * DatabasePathL - Forms IndexDb path.
+     * @param aMedia - The drive for which the path should be constructed.
+     * returns pointer to the IndexDb path.
+     */
+    HBufC* DatabasePathLC(TDriveNumber aMedia);
+    
+    /**
+     * IsMediaRemovableL - Check media is removable or not.
+     * @param aDrive - The drive for which it is checked.
+     * returns ETrue if it is removable else EFalse.
+     */
+    TBool IsMediaRemovableL(TDriveNumber& aDrive);
+
+public:
+	/*
+	 * Notifies the indexing manager of completed harvesting, called by CMessageHarvester
+	 */
+	void HarvestingCompleted(TInt aError);
+
+protected:
+	CMessagePlugin();
+	void ConstructL();
+
+private:
+    // Session to Messge server session
+    CMsvSession* iMsvSession;
+    CMessageMonitor* iMessageMonitor;    
+    CMessageHarvester* iMessageHarvester;
+    CMessageDataHandler* iMessageDataHandler;
+
+    // File system session
+    RFs iFs;
+    //Currently used Drive by messaging application
+    TInt     iCurrentDrive;
+    // CPix indexer 
+    CCPixIndexer* iIndexer[EDriveZ+1]; // EDriveZ enum value is 25, so add 1.
+
+#ifdef __PERFORMANCE_DATA
+    TTime iStartTime;
+    TTime iCompleteTime;
+    void UpdatePerformaceDataL();
+    void UpdatePerformaceDataL(TMsvSessionEvent);
+#endif
+};
+
+#endif // CMESSAGEPLUGIN_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/messaging/smsmms/src/cmessagedatahandler.cpp	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,922 @@
+/*
+* Copyright (c) 2010 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:  Harvester message plugin
+ *
+*/
+
+
+//  INCLUDES 
+
+#include <e32base.h>
+
+#include <mtclreg.h>
+#include <smsclnt.h> // SMS Headers
+#include <mmsclient.h> // MMS Headers
+#include <mmsvattachmentmanager.h>
+#include <impcmtm.h> // IMAP Headers
+#include <smtcmtm.h> // SMTP
+#include <popcmtm.h> // POP
+
+#include "harvesterserverlogger.h"
+#include "cmessagedatahandler.h"
+#include "cmessageplugin.h"
+#include <csearchdocument.h>
+#include <common.h>
+
+#include <ccpixindexer.h>
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "cmessagedatahandlerTraces.h"
+#endif
+
+
+/** Number of symbols from MsgBody taken to excerpt */
+const TInt KMsgBodyExcerptSymbols = 90;
+
+// For Ucs2 detection
+const TInt KUtf8BomLength = 3;
+const TUint8 KUtf8Bom[KUtf8BomLength] = {0xEF, 0xBB, 0xBF};
+
+// CSearchDocument ID max length
+const TUint KMaxDocId = 20;
+// Hardcoded limit for the body size to index (and store)
+const TInt KMaxDocumentSize = 1024;
+
+_LIT8(KMimeTypeText, "text/plain" );
+
+_LIT(KMimeTypeField, CPIX_MIMETYPE_FIELD);
+_LIT(KMimeTypeMessaging, MESSAGING_MIMETYPE);
+
+/** Field names */
+_LIT(KToField, TO_FIELD);
+_LIT(KCcField, CC_FIELD);
+_LIT(KBccField, BCC_FIELD);
+_LIT(KFromField, FROM_FIELD);
+_LIT(KFolderField, FOLDER_FIELD);
+_LIT(KBodyField, BODY_FIELD);
+_LIT(KSubjectField, SUBJECT_FIELD);
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// ---------------------------------------------------------------------------
+// CMessageDataHandler::NewL
+// ---------------------------------------------------------------------------
+//
+CMessageDataHandler* CMessageDataHandler::NewL(CMessagePlugin& aMessagePlugin,
+		CMsvSession& aSession)
+	{
+		OstTraceFunctionEntry0( CMESSAGEDATAHANDLER_NEWL_ENTRY );
+		CPIXLOGSTRING( "CMessageDataHandler::NewL() - enter" );
+
+	CMessageDataHandler* self = new (ELeave) CMessageDataHandler(
+			aMessagePlugin, aSession);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+
+		CPIXLOGSTRING( "CMessageDataHandler::NewL() - return" );
+	OstTraceFunctionExit0( CMESSAGEDATAHANDLER_NEWL_EXIT );
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CMessageDataHandler::~CMessageDataHandler
+// ---------------------------------------------------------------------------
+//
+CMessageDataHandler::~CMessageDataHandler()
+	{
+	Cancel();
+	iFs.Close();
+	delete iMmsMtm;
+	delete iSmsMtm;
+	delete iSmtpMtm;
+	delete iPop3Mtm;
+	delete iImap4Mtm;
+	delete iMtmReg;
+	}
+
+// ---------------------------------------------------------------------------
+// CMessageDataHandler::CMessageDataHandler
+// ---------------------------------------------------------------------------
+//
+CMessageDataHandler::CMessageDataHandler(CMessagePlugin& aMessagePlugin, CMsvSession& aSession)
+	: CActive(EPriorityLow), iMessagePlugin(aMessagePlugin), iMsvSession(aSession)
+	{
+	CActiveScheduler::Add(this);
+	}
+
+// ---------------------------------------------------------------------------
+// CMessageDataHandler::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CMessageDataHandler::ConstructL()
+	{
+	// TODO iFs only used in MMS attachment logic, 
+	// from a performance perspective, is it worthwhile connecting here?
+	User::LeaveIfError(iFs.Connect());
+	iMtmReg = CClientMtmRegistry::NewL(iMsvSession);
+	TRAPD(err,iSmsMtm = static_cast<CSmsClientMtm*> (iMtmReg->NewMtmL(KUidMsgTypeSMS)));
+	OstTrace1( TRACE_NORMAL, CMESSAGEDATAHANDLER_CONSTRUCTL, "CMessageDataHandler::ConstructL;iSmsMtm err=%d",err );
+	CPIXLOGSTRING2( "CMessageDataHandler::ConstructL() iSmsMtm err = %d",err);
+	TRAP(err,iMmsMtm = static_cast<CMmsClientMtm*> (iMtmReg->NewMtmL(KUidMsgTypeMultimedia)));
+	OstTrace1( TRACE_NORMAL, DUP1_CMESSAGEDATAHANDLER_CONSTRUCTL, "CMessageDataHandler::ConstructL;iMmsMtm err=%d", err );
+	CPIXLOGSTRING2( "CMessageDataHandler::ConstructL() iMmsMtm err = %d",err);
+	/*
+	TRAP(err,iSmtpMtm = static_cast<CSmtpClientMtm*> (iMtmReg->NewMtmL(KUidMsgTypeSMTP)));
+	CPIXLOGSTRING2( "CMessageDataHandler::ConstructL() iSmtpMtm err = %d",err);
+	TRAP(err, iPop3Mtm = static_cast<CPop3ClientMtm*> (iMtmReg->NewMtmL(KUidMsgTypePOP3)));
+	CPIXLOGSTRING2( "CMessageDataHandler::ConstructL() iPop3Mtm err = %d",err);
+	TRAP(err,iImap4Mtm = static_cast<CImap4ClientMtm*> (iMtmReg->NewMtmL(KUidMsgTypeIMAP4)));
+	CPIXLOGSTRING2( "CMessageDataHandler::ConstructL() iImap4Mtm err = %d",err);
+	*/
+	}
+
+// ---------------------------------------------------------------------------
+// CMessageDataHandler::GatherData
+// ---------------------------------------------------------------------------
+//
+void CMessageDataHandler::GatherDataL(TMsvId& aMessageId,
+		TCPixActionType aActionType, TMsvId& aFolderId)
+	{
+	TMessageItem item(aMessageId, aActionType, aFolderId);
+	iMessageArray.AppendL(item);
+	HandleNextRequest();
+	}
+
+// ---------------------------------------------------------------------------
+// CMessageDataHandler::IsValidMessageTypeL
+// ---------------------------------------------------------------------------
+//	    
+TInt CMessageDataHandler::IsValidMessageType(TMsvId aIdToCheck,
+		TMsgType& aMessageType)
+	{
+		OstTraceFunctionEntry0( CMESSAGEDATAHANDLER_ISVALIDMESSAGETYPE_ENTRY );
+		CPIXLOGSTRING("ENTER CMessageDataHandler::IsValidMessageType");
+	TMsvEntry entry;
+	TMsvId service = 0;
+	TInt err = iMsvSession.GetEntry(aIdToCheck, service, entry);
+		OstTrace1( TRACE_NORMAL, CMESSAGEDATAHANDLER_ISVALIDMESSAGETYPE, "CMessageDataHandler::IsValidMessageType;GetEntry Error=%d", err );
+		CPIXLOGSTRING2("CMessageDataHandler::IsValidMessageType GetEntry: %d", err);
+	if (!err)
+		{
+		aMessageType = iMessagePlugin.CalculateMessageType(entry);
+			OstTrace1( TRACE_NORMAL, DUP1_CMESSAGEDATAHANDLER_ISVALIDMESSAGETYPE, "CMessageDataHandler::IsValidMessageType;Message Type=%d", aMessageType );
+			CPIXLOGSTRING2("CMessageDataHandler::IsValidMessageType type: %d", aMessageType );
+		}
+		CPIXLOGSTRING("END CMessageDataHandler::IsValidMessageType");
+	OstTraceFunctionExit0( CMESSAGEDATAHANDLER_ISVALIDMESSAGETYPE_EXIT );
+	return err;
+	}
+
+// ---------------------------------------------------------------------------
+// CMessageDataHandler::CreateSmsIndexItemLC
+// ---------------------------------------------------------------------------
+//	    
+void CMessageDataHandler::CreateMessageIndexItemL(const TMsvId& aMsvId,
+		TCPixActionType aActionType, const TMsvId& aFolderId)
+	{
+	OstTrace1( TRACE_NORMAL, CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML, "CMessageDataHandler::CreateMessageIndexItemL;aMsvId=%d", aMsvId );
+	CPIXLOGSTRING2("CMessageDataHandler::CreateMessageIndexItemL(): aMsvId = %d ", aMsvId );
+
+	// Index an empty item if removal action
+	if (aActionType == ECPixRemoveAction)
+		{
+		TBuf<20> docid_str;
+		docid_str.AppendNum(aMsvId);
+		if (iMessagePlugin.GetIndexer())
+			{
+			TRAPD(err, iMessagePlugin.GetIndexer()->DeleteL(docid_str));
+			if (err == KErrNone)
+				{
+				OstTrace0( TRACE_NORMAL, DUP1_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML, "CMessageDataHandler::CreateMessageIndexItemL(): Document deleted." );
+				CPIXLOGSTRING("CMessageDataHandler::CreateMessageIndexItemL(): Document deleted.");
+				}
+			else
+				{
+				OstTrace1( TRACE_NORMAL, DUP2_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML, "CMessageDataHandler::CreateMessageIndexItemL;Error in deleting the doc=%d", err );
+				CPIXLOGSTRING2("CMessageDataHandler::CreateMessageIndexItemL(): Error %d in deleting the document.", err);				
+				}
+			}
+		return;
+		}
+
+	// Check message type
+	TMsgType messageType = EMsgTypeInvalid; // initialisation
+	TInt error = IsValidMessageType(aMsvId, messageType);
+
+	// creating CSearchDocument object with unique ID for this application
+	CSearchDocument* index_item = NULL;
+
+	switch (messageType)
+		{
+		case EMsgTypeSms:
+			{
+			TRAPD(err, index_item = CreateSmsDocumentL(aMsvId, aFolderId));
+			if (err == KErrNone)
+				{
+				OstTrace0( TRACE_NORMAL, DUP3_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML, "CMessageDataHandler::CreateMessageIndexItemL(): SMS document created." );
+				CPIXLOGSTRING("CMessageDataHandler::CreateMessageIndexItemL(): SMS document created.");
+				}
+			else
+				{
+				OstTrace1( TRACE_NORMAL, DUP4_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML, "CMessageDataHandler::CreateMessageIndexItemL;Error in creating the sms doc=%d", err );
+				CPIXLOGSTRING2("CMessageDataHandler::CreateMessageIndexItemL(): Error %d in creating SMS document.", err);
+				}
+			break;
+			}
+		case EMsgTypeMms:
+			{
+			TRAPD(err, index_item = CreateMmsDocumentL(aMsvId, aFolderId));
+			if (err == KErrNone)
+				{
+				OstTrace0( TRACE_NORMAL, DUP5_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML, "CMessageDataHandler::CreateMessageIndexItemL(): MMS document created." );
+				CPIXLOGSTRING("CMessageDataHandler::CreateMessageIndexItemL(): MMS document created.");
+				}
+			else
+				{
+				OstTrace1( TRACE_NORMAL, DUP6_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML, "CMessageDataHandler::CreateMessageIndexItemL;Error in creating the mms doc=%d", err );
+				CPIXLOGSTRING2("CMessageDataHandler::CreateMessageIndexItemL(): Error %d in creating MMS document.", err);
+				}
+			break;
+			}
+		case EMsgTypeEmailPop3:
+		case EMsgTypeEmailImap4:
+		case EMsgTypeEmailSmtp:
+			{
+			TRAPD(err, index_item = CreateEmailDocumentL(aMsvId, aFolderId));
+			if (err == KErrNone)
+				{
+				OstTrace0( TRACE_NORMAL, DUP7_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML, "CMessageDataHandler::CreateMessageIndexItemL(): E-mail document created." );
+				CPIXLOGSTRING("CMessageDataHandler::CreateMessageIndexItemL(): E-mail document created.");
+				}
+			else
+				{
+				OstTrace1( TRACE_NORMAL, DUP8_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML, "CMessageDataHandler::CreateMessageIndexItemL;Error in ccreating the email doc=%d", err );
+				CPIXLOGSTRING2("CMessageDataHandler::CreateMessageIndexItemL(): Error %d in creating e-mail document.", err);
+				}
+			break;
+			}
+		case EMsgTypeInvalid:
+		// For EMsgTypeDraft there is no way to tell if it was a SMS, MMS or email,
+		// so don't create index_item.
+		case EMsgTypeDraft:
+		default:
+			// Error occurred
+			break;
+		}
+
+	// Exit if wrong message type
+	if (index_item == NULL)
+		{
+		OstTrace0( TRACE_NORMAL, DUP9_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML, "CMessageDataHandler::CreateMessageIndexItemL(): Document was not created." );
+		CPIXLOGSTRING("CMessageDataHandler::CreateMessageIndexItemL(): Document was not created.");
+		return;
+		}
+	CleanupStack::PushL(index_item);
+		
+	// Folder field
+	TMsvEntry entry;
+	TMsvId service = 0;
+	iMsvSession.GetEntry(aFolderId, service, entry);
+	HBufC *folder_str = entry.iDetails.AllocLC();
+	index_item->AddFieldL(KFolderField, *folder_str, CDocumentField::EStoreYes | CDocumentField::EIndexNo);
+
+	// Mime type field
+	index_item->AddFieldL(KMimeTypeField, KMimeTypeMessaging, CDocumentField::EStoreYes | CDocumentField::EIndexUnTokenized);		
+	
+		// Send for indexing
+	if (iMessagePlugin.GetIndexer())
+		{
+		if (aActionType == ECPixAddAction)
+			{
+			TRAPD(err, iMessagePlugin.GetIndexer()->AddL(*index_item));
+			if (err == KErrNone)
+				{
+				OstTrace0( TRACE_NORMAL, DUP10_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML, "CMessageDataHandler::CreateMessageIndexItemL(): Added." );
+				CPIXLOGSTRING("CMessageDataHandler::CreateMessageIndexItemL(): Added.");
+				}
+			else
+				{
+				OstTrace1( TRACE_NORMAL, DUP11_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML, "CMessageDataHandler::CreateMessageIndexItemL;Error in Adding=%d", err );
+				CPIXLOGSTRING2("CMessageDataHandler::CreateMessageIndexItemL(): Error %d in adding.", err);
+				}
+			}
+		else if (aActionType == ECPixUpdateAction)
+			{
+			TRAPD(err, iMessagePlugin.GetIndexer()->UpdateL(*index_item));
+			if (err == KErrNone)
+				{
+				OstTrace0( TRACE_NORMAL, DUP12_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML, "CMessageDataHandler::CreateMessageIndexItemL(): Updated." );
+				CPIXLOGSTRING("CMessageDataHandler::CreateMessageIndexItemL(): Updated.");
+				}
+			else
+				{
+				OstTrace1( TRACE_NORMAL, DUP13_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML, "CMessageDataHandler::CreateMessageIndexItemL;Error in Updating=%d", err );
+				CPIXLOGSTRING2("CMessageDataHandler::CreateMessageIndexItemL(): Error %d in updating.", err);
+				}
+			}
+		}
+	else
+		{
+		OstTrace0( TRACE_NORMAL, DUP14_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML, "END CMessageDataHandler::CreateMessageIndexItemL(): No indexer present." );
+		CPIXLOGSTRING("END CMessageDataHandler::CreateMessageIndexItemL(): No indexer present.");
+		}
+		
+	CleanupStack::PopAndDestroy(folder_str);
+	CleanupStack::PopAndDestroy(index_item);
+	}
+
+// ---------------------------------------------------------------------------
+// CMessageDataHandler::CreateSmsDocumentL
+// ---------------------------------------------------------------------------
+//
+CSearchDocument* CMessageDataHandler::CreateSmsDocumentL(const TMsvId& aMsvId, const TMsvId& aFolderId)
+	{
+	// Select mtm for this type
+	iSmsMtm->SwitchCurrentEntryL(aMsvId);
+	iSmsMtm->LoadMessageL();
+
+	// creating CSearchDocument object with unique ID for this application
+	TBuf<KMaxDocId> docid_str;
+	docid_str.AppendNum(aMsvId);
+	CSearchDocument* index_item = CSearchDocument::NewLC(docid_str, _L(SMSAPPCLASS));
+
+	// Add from field use the name instead of number if in the contacts db.
+	// (iSmsMtm->SmsHeader().FromAddress() - only returns the number)
+	TMsvEntry entry;
+	TMsvId service = 0;
+	iMsvSession.GetEntry(aMsvId, service, entry);
+	HBufC *fromNameOrNumberBuf = entry.iDetails.AllocLC();
+	index_item->AddFieldL(KFromField, *fromNameOrNumberBuf);
+
+	// Add the recipients as content items
+	TBuf<64> to_field;
+	const CDesCArray
+			& recipientArray =
+					static_cast<const CDesCArray&> (iSmsMtm->AddresseeList().RecipientList());
+	for (TInt i = 0; i < recipientArray.MdcaCount(); i++)
+		{
+		to_field = KToField;
+		if (i>0)
+			to_field.AppendNum(i);
+		index_item->AddFieldL(to_field, recipientArray.MdcaPoint(i));
+		}
+
+	// Add the body text as a content item
+	TInt msgLength = iSmsMtm->Body().DocumentLength();
+	HBufC* bodyText = HBufC::NewLC(msgLength);
+	TPtr body_ptr = bodyText->Des();
+	iSmsMtm->Body().Extract(body_ptr);
+	index_item->AddFieldL(KBodyField, *bodyText);
+	
+	// Add excerpt
+	// Note SMS does not have a subject field.
+	HBufC* excerpt = CreateExcerptLC(*fromNameOrNumberBuf, recipientArray, KNullDesC(), body_ptr, aFolderId);
+	index_item->AddExcerptL(*excerpt);
+	CleanupStack::PopAndDestroy(excerpt);	
+	CleanupStack::PopAndDestroy(bodyText);
+
+	CleanupStack::PopAndDestroy(fromNameOrNumberBuf);
+
+	// Pop the item
+	CleanupStack::Pop(index_item);
+	return index_item;
+	}
+
+// ---------------------------------------------------------------------------
+// CMessageDataHandler::CreateMmsDocumentL
+// ---------------------------------------------------------------------------
+//
+CSearchDocument* CMessageDataHandler::CreateMmsDocumentL(const TMsvId& aMsvId, const TMsvId& aFolderId)
+	{
+	// Select mtm for this type
+ 	iMmsMtm->SwitchCurrentEntryL(aMsvId);
+	iMmsMtm->LoadMessageL();
+
+	// creating CSearchDocument object with unique ID for this application
+	TBuf<KMaxDocId> docid_str;
+	docid_str.AppendNum(aMsvId);
+	CSearchDocument* index_item = CSearchDocument::NewLC(docid_str, _L(MMSAPPCLASS));
+	
+	// Add from field
+	index_item->AddFieldL(KFromField, iMmsMtm->Sender());
+
+	// Add the recipients as content items
+	TBuf<64> to_field;
+	const CDesCArray
+			& recipientArray =
+					static_cast<const CDesCArray&> (iMmsMtm->AddresseeList().RecipientList());
+	for (TInt i = 0; i < recipientArray.MdcaCount(); i++)
+		{
+		to_field = KToField;
+		if (i>0)
+			to_field.AppendNum(i);
+		index_item->AddFieldL(to_field, recipientArray.MdcaPoint(i));
+		}
+
+	// Add subject
+	TPtrC subject(iMmsMtm->SubjectL());
+	index_item->AddFieldL(KSubjectField, subject);
+
+	// Add the body parts as a content items
+    // See if the MMS contains a text file attachment
+    TBool excerptFieldAdded(EFalse);
+    TInt bodycount = 0;
+    CMsvStore* msvStore = iMmsMtm->Entry().ReadStoreL();
+	CleanupStack::PushL( msvStore );
+	MMsvAttachmentManager& attManager = msvStore->AttachmentManagerL();
+	for ( TInt i = 0; i < attManager.AttachmentCount(); i++ )
+	    {
+		CMsvAttachment* attInfo = attManager.GetAttachmentInfoL(i);
+		CleanupStack::PushL( attInfo );
+		
+        if (attInfo->MimeType() == KMimeTypeText())
+            {
+            // Mime type
+            RFile attFile = attManager.GetAttachmentFileL(i);
+            CleanupClosePushL( attFile );
+            TInt charsetMIB = TextFileCharsetL(iFs, attFile);
+            
+            // Get the file size
+            TInt fileSize = 0;
+            User::LeaveIfError(attFile.Size(fileSize));
+            
+            // Read the file
+            HBufC8* textSource = HBufC8::NewLC(fileSize);
+            TPtr8 ptr8 = textSource->Des();
+            attFile.Read(ptr8);
+  
+  			// Convert character set
+            HBufC* text = HBufC::NewLC( fileSize );
+            TPtr buf = text->Des();
+            if ( KMmsIso10646Ucs2 != charsetMIB )
+                {
+                if ( KMmsUsAscii == charsetMIB )
+                    buf.Copy(*textSource);
+                else
+                    ConvertToUcs2FromUtfL(iFs, buf, *textSource, charsetMIB);
+                }
+            else
+                {
+                TPtrC ptr(reinterpret_cast<const TUint16*>(textSource->Des().Ptr()), 
+                                  textSource->Length() / sizeof(TText));
+        
+                // Ignore the first unicode charcter FFFE
+                ptr.Set( ptr.Mid( 1 ) );
+                buf = ptr;
+                }
+
+        
+            // Add the text of the file as a content item
+            // MMS message body is in attachment
+			TBuf<64> body_field;
+			body_field = KBodyField;
+			if (bodycount>0)
+			{
+				// Add additional body fields
+				body_field.AppendNum(bodycount);
+			}
+			else
+			{
+				// Add excerpt for the first body field
+				HBufC* excerpt = CreateExcerptLC(iMmsMtm->Sender(), recipientArray, subject, *text, aFolderId);
+				index_item->AddExcerptL(*excerpt);
+				CleanupStack::PopAndDestroy(excerpt);
+				excerptFieldAdded  = ETrue;
+			}
+
+            // TODO: add only few kilobytes of the body?
+            index_item->AddFieldL(body_field, *text);
+            ++bodycount;
+
+            CleanupStack::PopAndDestroy( 3, &attFile ); // text, textSource, attFile
+            }		
+        else 
+            {
+            // add attachment name when binary file.
+            if ( !excerptFieldAdded )
+                {
+                // attachment name might not be set
+                HBufC* excerpt = CreateExcerptLC(iMmsMtm->Sender(), recipientArray, subject, attInfo->AttachmentName(), aFolderId);
+                index_item->AddExcerptL(*excerpt);
+                CleanupStack::PopAndDestroy(excerpt);
+                excerptFieldAdded  = ETrue;
+                }
+            }
+	    CleanupStack::PopAndDestroy( attInfo );		
+	    }
+
+    // If no excerpt has been added yet, then add information have
+    if ( !excerptFieldAdded )
+        {
+        HBufC* excerpt = CreateExcerptLC(iMmsMtm->Sender(), recipientArray, subject, KNullDesC(), aFolderId);
+        index_item->AddExcerptL(*excerpt);
+        CleanupStack::PopAndDestroy(excerpt);
+        }
+
+    // Cleanup
+    CleanupStack::PopAndDestroy( msvStore );
+
+    // Pop the item
+    CleanupStack::Pop(index_item);
+    return index_item;
+    }
+
+// ---------------------------------------------------------------------------
+// CMessageDataHandler::CreateEmailDocumentL
+// ---------------------------------------------------------------------------
+//
+CSearchDocument* CMessageDataHandler::CreateEmailDocumentL(const TMsvId& aMsvId, const TMsvId& aFolderId)
+	{
+	// creating CSearchDocument object with unique ID for this application
+	TBuf<KMaxDocId> docid_str;
+	docid_str.AppendNum(aMsvId);
+	CSearchDocument* index_item = CSearchDocument::NewLC(docid_str, _L(EMAILAPPCLASS));
+
+	// Open the message entry
+	CMsvEntry* message_entry = CMsvEntry::NewL(iMsvSession, aMsvId, TMsvSelectionOrdering());
+	CleanupStack::PushL(message_entry);
+	
+	// Get body
+	CParaFormatLayer* paraFormatLayer = CParaFormatLayer::NewL();
+	CleanupStack::PushL(paraFormatLayer);
+	CCharFormatLayer* charFormatLayer = CCharFormatLayer::NewL();
+	CleanupStack::PushL(charFormatLayer);
+	CRichText* richtext = CRichText::NewL(paraFormatLayer, charFormatLayer);
+	CleanupStack::PushL(richtext);
+	CImEmailMessage* message_body = CImEmailMessage::NewLC(*message_entry);
+	message_body->GetBodyTextL(aMsvId, CImEmailMessage::EThisMessageOnly, *richtext, *paraFormatLayer, *charFormatLayer);
+	
+	// Read the message header
+	CMsvStore* message_store = message_entry->ReadStoreL();
+	CleanupStack::PushL(message_store);
+	CImHeader* header = CImHeader::NewLC();
+	header->RestoreL(*message_store);
+	
+	// Add from field
+	index_item->AddFieldL(KFromField, header->From());
+
+	// Add the ToRecipients as content items
+	TBuf<64> to_field;
+	for (TInt i = 0; i < header->ToRecipients().MdcaCount(); i++)
+		{
+		to_field = KToField;
+		if (i>0)
+			to_field.AppendNum(i);
+		index_item->AddFieldL(to_field, header->ToRecipients().MdcaPoint(i));
+		}
+
+	// Add the CcRecipients as content items
+	TBuf<64> cc_field;
+	for (TInt i = 0; i < header->CcRecipients().MdcaCount(); i++)
+		{
+		cc_field = KCcField;
+		if (i>0)
+			cc_field.AppendNum(i);
+		index_item->AddFieldL(cc_field, header->CcRecipients().MdcaPoint(i));
+		}
+
+	// Add the BccRecipients as content items
+	TBuf<64> bcc_field;
+	for (TInt i = 0; i < header->BccRecipients().MdcaCount(); i++)
+		{
+		bcc_field = KBccField;
+		if (i>0)
+			bcc_field.AppendNum(i);
+		index_item->AddFieldL(bcc_field, header->BccRecipients().MdcaPoint(i));
+		}
+
+	const TInt richTxtLen = (richtext->DocumentLength() < KMaxDocumentSize) ? richtext->DocumentLength() : KMaxDocumentSize;
+	HBufC* body_text = richtext->Read(0).Left(richTxtLen).AllocLC();
+
+	// Add subject
+	TPtrC subject(header->Subject());
+	index_item->AddFieldL(KSubjectField, subject);
+	
+	// Add message body
+	index_item->AddFieldL(KBodyField, *body_text);
+	
+	// Add excerpt
+    HBufC* excerpt = CreateExcerptLC(header->From(), header->ToRecipients(), subject, *body_text, aFolderId);
+    index_item->AddExcerptL(*excerpt);
+	CleanupStack::PopAndDestroy(excerpt);
+
+	// Cleanup everything last item message entry
+	CleanupStack::PopAndDestroy(8, message_entry);
+
+	// Pop the item
+	CleanupStack::Pop(index_item);
+	return index_item;	
+	}
+
+// ---------------------------------------------------------------------------
+// CMessageDataHandler::CreateExcerptLC
+// ---------------------------------------------------------------------------
+//
+HBufC* CMessageDataHandler::CreateExcerptLC(const TDesC& aFromAddress,
+											const CDesCArray& aRecipientArray,
+											const TDesC& aSubject,
+											const TDesC& aBodyText,
+											const TMsvId& aFolderId)
+	{
+	_LIT(KEllipsis, "...");
+	_LIT(KSpace, " ");
+	TInt excerptLength = KMsgBodyExcerptSymbols + KEllipsis().Length(); 
+
+	TMsvEntry entry;
+	TMsvId service = 0;
+	iMsvSession.GetEntry(aFolderId, service, entry);
+	HBufC *folder_str = entry.iDetails.AllocLC();
+
+	excerptLength += folder_str->Length();
+	excerptLength += KSpace().Length();
+
+	if ((aFromAddress.Length() > 0) && (aFolderId == KMsvGlobalInBoxIndexEntryIdValue))
+		{
+		excerptLength += aFromAddress.Length();
+		excerptLength += KSpace().Length();
+		}
+	if ((aRecipientArray.MdcaCount() > 0) && (aFolderId != KMsvGlobalInBoxIndexEntryIdValue))
+		{
+		excerptLength += aRecipientArray.MdcaPoint(0).Length();
+		excerptLength += KSpace().Length(); 
+		}
+	if (aSubject.Length() > 0)
+		{
+		excerptLength += aSubject.Length();
+		excerptLength += KSpace().Length();
+		}
+
+	HBufC* excerpt = HBufC::NewL(excerptLength);
+	TPtr excerptPtr = excerpt->Des();
+
+	excerptPtr.Copy(*folder_str);
+	excerptPtr.Append(KSpace);
+	
+	if ((aFromAddress.Length() > 0) && (aFolderId == KMsvGlobalInBoxIndexEntryIdValue))
+		{
+		excerptPtr.Append(aFromAddress);
+		excerptPtr.Append(KSpace);
+		}
+	if ((aRecipientArray.MdcaCount() > 0) && (aFolderId != KMsvGlobalInBoxIndexEntryIdValue))
+		{
+		excerptPtr.Append(aRecipientArray.MdcaPoint(0));
+		excerptPtr.Append(KSpace);
+		}
+	if (aSubject.Length() > 0)
+		{
+		excerptPtr.Append(aSubject);
+		excerptPtr.Append(KSpace);
+		}
+
+	excerptPtr.Append(aBodyText.Left(KMsgBodyExcerptSymbols));
+	if (aBodyText.Length() > KMsgBodyExcerptSymbols)
+		excerptPtr.Append(KEllipsis);
+
+	CleanupStack::PopAndDestroy(folder_str);
+	CleanupStack::PushL(excerpt);
+	return excerpt;
+	}
+
+// ---------------------------------------------------------------------------
+// CMessageDataHandler::IsTextUcs2
+// ---------------------------------------------------------------------------
+//
+TBool CMessageDataHandler::IsTextUcs2(const TDesC8& aText)
+    {
+    TBool ret = EFalse;
+    // Check UCS-2 Byte order mark is in the first two bytes of aText
+    if (aText.Length() >= sizeof(KMmsByteOrderMark))
+        {
+        TPtrC ptr(reinterpret_cast<const TUint16*>(aText.Ptr()), 
+                        aText.Length() / sizeof(TText));
+
+        if (KMmsByteOrderMark == ptr[0] ||
+            KMmsReversedByteOrderMark == ptr[0])
+            {
+            ret = ETrue;
+            }
+        }
+    return ret;
+    }   	
+
+// ---------------------------------------------------------------------------
+// CMessageDataHandler::TextContainsUtf8Bom
+// ---------------------------------------------------------------------------
+//
+TBool CMessageDataHandler::TextContainsUtf8Bom(const TDesC8& aText)
+    {    
+    TBool ret = EFalse;
+    // Check to see if there is the UTF8 BOM at the begining
+    TPtrC8 utf8Id(KUtf8Bom, KUtf8BomLength);
+    if (aText.Length() >= KUtf8BomLength &&
+        aText.Left(KUtf8BomLength) == utf8Id)
+        {
+        ret = ETrue;
+        }
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMessageDataHandler::TextFileCharsetL
+// ---------------------------------------------------------------------------
+//
+TUint CMessageDataHandler::TextFileCharsetL(RFs aFs, RFile aFile)
+    {
+    TUint ret = KMmsUsAscii;
+    TBuf8<sizeof(KMmsByteOrderMark)> ucs2Buf;
+
+    TInt size;
+    User::LeaveIfError(aFile.Size(size));
+    if (size >= sizeof(KMmsByteOrderMark))
+        {
+        // Check for the UCS-2 Byte Order Mark (BOM) at the beginning 
+        // beginning of the file
+        User::LeaveIfError(aFile.Read(ucs2Buf));
+        if(IsTextUcs2(ucs2Buf))
+            {
+            ret = KMmsIso10646Ucs2;
+            }
+        }
+
+    if (KMmsIso10646Ucs2 != ret)
+        {
+        // If the text is not UCS-2 it will probably be Utf8 or Ascii
+
+        TInt seekPos = 0;
+        User::LeaveIfError(aFile.Seek(ESeekStart, seekPos));
+        
+        HBufC8* buf = HBufC8::NewLC(size);
+        TPtr8 ptr = buf->Des();
+        User::LeaveIfError(aFile.Read(ptr));
+
+        // Check to see if there is the UTF8 BOM at the begining
+        if (TextContainsUtf8Bom(ptr))
+            {
+            ret = KMmsUtf8;
+            }
+        else
+            {
+            CCnvCharacterSetConverter* converter = 
+                              CCnvCharacterSetConverter::NewLC();
+            CArrayFix<CCnvCharacterSetConverter::SCharacterSet>* availCharSets =
+                CCnvCharacterSetConverter::CreateArrayOfCharacterSetsAvailableLC(aFs);
+
+            CArrayFix<CCnvCharacterSetConverter::SCharacterSet>* utf8CharSet = 
+                new (ELeave) CArrayFixFlat<CCnvCharacterSetConverter::SCharacterSet>(1); 
+            CleanupStack::PushL(utf8CharSet);
+
+            TInt count = availCharSets->Count();
+            for (TInt i = 0; i < count; i++)
+                {
+                CCnvCharacterSetConverter::SCharacterSet& charSet = (*availCharSets)[i];
+                if (KCharacterSetIdentifierUtf8 == charSet.Identifier())
+                    {
+                    utf8CharSet->AppendL(charSet);
+                    break;
+                    }
+                }
+            TInt confidence;
+            TUint charSetId;
+            converter->AutoDetectCharacterSetL(confidence, 
+                                               charSetId, 
+                                               *utf8CharSet,
+                                               *buf);
+            const TInt KMaxConfidence = 100;
+            if (KMaxConfidence == confidence)
+                {
+                ret = KMmsUtf8;
+                }
+            CleanupStack::PopAndDestroy(3, converter);
+
+            }
+
+        CleanupStack::PopAndDestroy(buf);
+        }
+
+    TInt zero = 0;
+    User::LeaveIfError(aFile.Seek(ESeekStart, zero));
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMessageDataHandler::ConvertToUcs2FromUtfL
+// ---------------------------------------------------------------------------
+//
+void CMessageDataHandler::ConvertToUcs2FromUtfL(RFs& aFs,
+                                                 TDes& aUcs2Text,
+                                                 const TDesC8& aUtfText,
+                                                 TUint aMibCharset)
+    {
+    TPtrC8 toConvert(aUtfText);
+    if (KMmsUtf8 == aMibCharset)
+        {
+        if (TextContainsUtf8Bom(toConvert))
+            {
+            toConvert.Set(toConvert.Mid(KUtf8BomLength));
+            }
+        }
+    // prepare to convert character set to unicode
+    CCnvCharacterSetConverter* converter = 
+                          CCnvCharacterSetConverter::NewLC();
+    // change character set ID from MIB to Symbian
+    TUint charsetID = converter->ConvertMibEnumOfCharacterSetToIdentifierL(
+                                     aMibCharset, aFs);
+    CCnvCharacterSetConverter::TAvailability availability =
+            converter->PrepareToConvertToOrFromL(charsetID, aFs);
+
+    if (availability == CCnvCharacterSetConverter::ENotAvailable)
+        {
+        User::Leave(KErrNotSupported);
+        }
+    TInt state = CCnvCharacterSetConverter::KStateDefault;
+
+    User::LeaveIfError(converter->ConvertToUnicode(aUcs2Text, toConvert, state));
+
+    CleanupStack::PopAndDestroy(converter);
+    }
+    
+	
+// -----------------------------------------------------------------------------
+// CMessageDataHandler::DoCancel
+// -----------------------------------------------------------------------------
+//   
+void CMessageDataHandler::DoCancel()
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CMessageDataHandler::RunL
+// -----------------------------------------------------------------------------
+//   
+void CMessageDataHandler::RunL()
+	{
+		OstTrace1( TRACE_NORMAL, CMESSAGEDATAHANDLER_RUNL, "CMessageDataHandler::RunL;status=%d", iStatus.Int() );
+		CPIXLOGSTRING2( "CMessageDataHandler::RunL status %d",iStatus.Int() );
+
+	// Implement round robin for the CActives
+	Deque();
+	CActiveScheduler::Add(this);
+
+	// Handle next message
+	if (iMessageArray.Count() > 0)
+		{
+		// Take first id from array
+		CreateMessageIndexItemL(iMessageArray[0].iMessageId,
+				iMessageArray[0].iActionType, iMessageArray[0].iFolderId);
+		
+		// Remove item that is handled
+		iMessageArray.Remove(0);
+
+		// Handle next
+		HandleNextRequest();
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// CMessageDataHandler::RunError
+// -----------------------------------------------------------------------------
+//   
+TInt CMessageDataHandler::RunError(TInt aError)
+	{
+		OstTrace1( TRACE_NORMAL, CMESSAGEDATAHANDLER_RUNERROR, "CMessageDataHandler::RunError;Error=%d", aError );
+		CPIXLOGSTRING2( "CMessageDataHandler::RunError err %d", aError );
+	if (iMessageArray.Count() > 0)
+		{
+		// Remove item that is handled
+		iMessageArray.Remove(0);
+
+		// Handle next after the error
+		HandleNextRequest();
+		}
+	return KErrNone;
+	}
+
+// ---------------------------------------------------------------------------
+// HandleNextRequest
+// ---------------------------------------------------------------------------
+//
+void CMessageDataHandler::HandleNextRequest()
+	{
+	if (!IsActive())
+		{
+		SetActive();
+		TRequestStatus* status = &iStatus;
+		User::RequestComplete(status, KErrNone);
+		}
+	}
+
+// End of File
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/messaging/smsmms/src/cmessageharvester.cpp	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,288 @@
+/*
+* Copyright (c) 2010 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:  Harvester message plugin
+*
+*/
+
+
+//  INCLUDES 
+
+#include <e32base.h>
+#include <mtclreg.h>
+#include <mmsclient.h>
+#include <smsclnt.h>
+#include <smuthdr.h>
+#include <smsclnt.h>
+#include <smut.h>
+#include <gsmuelem.h>
+#include <msventry.h>
+#include <msvuids.h>
+#include <mmsconst.h>
+#include "cmessageharvester.h"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// ---------------------------------------------------------------------------
+// CMessageHarvester::NewL
+// ---------------------------------------------------------------------------
+//
+CMessageHarvester* CMessageHarvester::NewL(  CMessagePlugin& aMessagePlugin, CMsvSession& aSession )
+	{
+	CMessageHarvester* self = new (ELeave) CMessageHarvester(  aMessagePlugin, aSession );
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CMessageHarvester::~CMessageHarvester
+// ---------------------------------------------------------------------------
+//
+CMessageHarvester::~CMessageHarvester()
+	{   
+	Cancel();  
+    delete iChildren;
+    iToBeSearchedFolders.Close();
+	}
+	  
+// ---------------------------------------------------------------------------
+// CMessageHarvester::CMessageHarvester
+// ---------------------------------------------------------------------------
+//
+CMessageHarvester::CMessageHarvester( CMessagePlugin& aMessagePlugin, CMsvSession& aSession  ) :
+	CActive(CActive::EPriorityIdle),
+	iMessagePlugin( aMessagePlugin ),
+	iMsvSession( aSession ),
+	iState(EStateIdle)
+	{
+	CActiveScheduler::Add( this );
+	}
+
+// ---------------------------------------------------------------------------
+// CMessageHarvester::StartHarvesting
+// ---------------------------------------------------------------------------
+//	
+void CMessageHarvester::StartHarvestingL()
+	{
+	// First, get message folders
+	GetMessageFoldersL();
+	
+	// Then, harvest them
+	iState = EStateNextFolder;
+	HandleNextRequest();
+	}
+
+// ---------------------------------------------------------------------------
+// CMessageHarvester::AddFolderWithSubFoldersL
+// ---------------------------------------------------------------------------
+//		
+void CMessageHarvester::AddFolderWithSubFoldersL( const TMsvId& aFolderId )
+	{
+	// Add a folder to the search list
+	User::LeaveIfError(iToBeSearchedFolders.Append(aFolderId));	
+	CMsvEntry* folderEntry = CMsvEntry::NewL(iMsvSession, aFolderId, TMsvSelectionOrdering(KMsvGroupByStandardFolders, EMsvSortByDetails, EFalse));
+	CleanupStack::PushL(folderEntry);	
+	ListSubFoldersL(*folderEntry);
+	CleanupStack::PopAndDestroy(folderEntry);
+	}
+
+// ---------------------------------------------------------------------------
+// CMessageHarvester::ListSubFoldersL
+// ---------------------------------------------------------------------------
+//	
+void CMessageHarvester::ListSubFoldersL(  const CMsvEntry& aFolderEntry ) 
+	{
+	// Only list "folder" children
+    CMsvEntrySelection* children = aFolderEntry.ChildrenL();
+	CleanupStack::PushL( children );
+
+	for ( TInt i=0; i < children->Count(); i++ )
+		{
+		TMsvId& childId = ( *children )[i];
+		const TMsvEntry& childEntry ( aFolderEntry.ChildDataL( childId ) );
+		if ( ( childEntry.iType == KUidMsvServiceEntry ) || 
+    		 ( childEntry.iType == KUidMsvFolderEntry ) )
+		    {
+		    // Add this folder to search list
+            AddFolderWithSubFoldersL( childId );		
+		    }
+		}
+	CleanupStack::PopAndDestroy();  // children
+	}
+	
+// ---------------------------------------------------------------------------
+// CMessageHarvester::GetMessageFoldersL
+// ---------------------------------------------------------------------------
+//
+void CMessageHarvester::GetMessageFoldersL()
+    {
+    // Get list of folders
+    CMsvEntry* rootEntry;
+    rootEntry = CMsvEntry::NewL( iMsvSession, KMsvRootIndexEntryIdValue,
+    TMsvSelectionOrdering( KMsvGroupByStandardFolders, EMsvSortByDetails, EFalse ) );
+    CleanupStack::PushL( rootEntry );
+	ListSubFoldersL( *rootEntry);
+	CleanupStack::PopAndDestroy( rootEntry );
+    }
+
+			
+// ---------------------------------------------------------------------------
+// CMessageHarvester::GetNextFolderL
+// ---------------------------------------------------------------------------
+//		
+void CMessageHarvester::GetNextFolderL()
+    {
+    if ( iToBeSearchedFolders.Count() > 0 )
+        
+    	{
+    	// Open the new folder
+        CMsvEntry* folder = CMsvEntry::NewL(
+	                            iMsvSession, 
+	                            iToBeSearchedFolders[0],
+	                            TMsvSelectionOrdering( KMsvGroupByStandardFolders, EMsvSortByDetails ));
+        
+        iCurrentFolder = iToBeSearchedFolders[0];
+        
+        // Get the message items from the folder
+        CleanupStack::PushL(folder);        
+        iChildren = folder->ChildrenWithTypeL( KUidMsvMessageEntry );
+        CleanupStack::PopAndDestroy( folder );
+        
+        // Remove current folder from the queue
+        iToBeSearchedFolders.Remove(0);
+        iState = EStateNextMessage;
+        HandleNextRequest();
+        }
+    else
+        {
+        // No more folders in the queue
+        iState = EStateIdle;
+        HandleNextRequest();      
+        }
+    }
+
+			
+// ---------------------------------------------------------------------------
+// CMessageHarvester::GetMessageId
+// ---------------------------------------------------------------------------
+//		    
+void CMessageHarvester::GetMessageIdL()
+    { 
+    if (iChildren && iChildren->Count() > 0)
+        {
+        // Take first item from list of message items, and give it for indexing
+        iMessagePlugin.MessageItemL((*iChildren)[0], ECPixAddAction, iCurrentFolder);
+        
+        // Delete the item from list
+        iChildren->Delete( 0 );   
+        if ( iChildren->Count() > 0 )
+            {
+            // Get the next message
+            iState = EStateNextMessage;
+            HandleNextRequest();      
+            }
+        else 
+            {
+            // No messages in this folder
+            iState = EStateNextFolder;
+            HandleNextRequest();      
+            }
+        }
+    else 
+        {
+        // Current folder dosen't contain any message items so change folder
+        iState = EStateNextFolder;
+        HandleNextRequest();      
+        }
+    }
+      
+// -----------------------------------------------------------------------------
+// CMessageHarvester::DoCancel
+// -----------------------------------------------------------------------------
+//   
+void CMessageHarvester::DoCancel()
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CMessageHarvester::RunL
+// -----------------------------------------------------------------------------
+//   
+void CMessageHarvester::RunL()	
+	{
+	
+	 // Simple Round-Robin scheduling.
+    Deque();
+    CActiveScheduler::Add( this );
+    
+	switch (iState)
+		{
+	       case EStateIdle:
+	            {
+	            // Delete current folder items
+	            delete iChildren; 
+	            iChildren = NULL;
+	            
+	            // Started idling, close the folders
+	            iToBeSearchedFolders.Reset();
+
+	            // Update harvester status
+	            iMessagePlugin.HarvestingCompleted(KErrNone);	            
+	            break; 
+	    	    }    
+		    case EStateNextMessage:
+		        {
+		        // Get the next message
+		        GetMessageIdL();	
+		        break;	        
+		        }
+	        case EStateNextFolder:
+	            {
+	            // Delete current folder items
+	            delete iChildren; 
+	            iChildren = NULL;
+	            
+	            // Start harvesting folders. 
+	            GetNextFolderL();	         
+				break;
+	            }
+		}
+	}
+	         				
+// -----------------------------------------------------------------------------
+// CMessageHarvester::RunError
+// -----------------------------------------------------------------------------
+//   
+TInt CMessageHarvester::RunError( TInt aError )	
+	{
+	iState = EStateIdle;
+    iMessagePlugin.HarvestingCompleted(aError);
+	return KErrNone;
+	}
+	
+// ---------------------------------------------------------------------------
+// SetNextRequest
+// ---------------------------------------------------------------------------
+//
+void CMessageHarvester::HandleNextRequest()
+    {
+    if (!IsActive())
+        {
+        SetActive();
+        TRequestStatus* status = &iStatus;
+        User::RequestComplete( status, KErrNone );
+        }
+    }
+
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/messaging/smsmms/src/cmessagemonitor.cpp	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,282 @@
+/*
+* Copyright (c) 2010 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:  
+*
+*/
+
+
+// INCLUDE FILES
+#include "cmessagemonitor.h"
+#include "harvesterserverlogger.h"
+
+#include <smut.h>
+#include <mmsvattachmentmanager.h>	// MMsvAttachmentManager
+#include <msventry.h>	// CMsvEntry
+#include <msvuids.h>
+#include <mmsconst.h>
+#include <mtclreg.h>
+#include <smsclnt.h>
+#include <SendUiConsts.h>
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "cmessagemonitorTraces.h"
+#endif
+
+
+
+// DEFINES
+#define INDEXING_QUEUE_MAX 100 // Maximum number of messages in the queue
+#define INDEXING_DELAY 5000000 // Nano seconds to delay the monitored messages 
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CMessageMonitor::NewL
+// -----------------------------------------------------------------------------
+//
+CMessageMonitor* CMessageMonitor::NewL(  CMessagePlugin& aMessagePlugin, CMsvSession& aSession )
+	{
+	CMessageMonitor* self = new ( ELeave ) CMessageMonitor( aMessagePlugin, aSession );
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	CleanupStack::Pop( self );
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CMessageMonitor::CMessageMonitor
+// -----------------------------------------------------------------------------
+//
+CMessageMonitor::CMessageMonitor( CMessagePlugin& aMessagePlugin, CMsvSession& aSession )
+	: CActive(CActive::EPriorityStandard),
+	iState(EStateNone),
+	iMsvSession(aSession),
+	iMessagePlugin(aMessagePlugin)
+	{
+	OstTraceFunctionEntry0( CMESSAGEMONITOR_CMESSAGEMONITOR_ENTRY );
+	CPIXLOGSTRING("ENTER CMessageMonitor::CMessageMonitor");
+
+	CActiveScheduler::Add(this);
+
+	CPIXLOGSTRING("END CMessageMonitor::CMessageMonitor");
+	OstTraceFunctionExit0( CMESSAGEMONITOR_CMESSAGEMONITOR_EXIT );
+	}
+
+// -----------------------------------------------------------------------------
+// CMessageMonitor::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CMessageMonitor::ConstructL() 
+	{
+	OstTraceFunctionEntry0( CMESSAGEMONITOR_CONSTRUCTL_ENTRY );
+	CPIXLOGSTRING("ENTER CMessageMonitor::ConstructL");
+
+	// Create timer 
+	User::LeaveIfError(iTimer.CreateLocal());
+	
+	CPIXLOGSTRING("END CMessageMonitor::ConstructL");
+	OstTraceFunctionExit0( CMESSAGEMONITOR_CONSTRUCTL_EXIT );
+	}
+	
+
+
+// -----------------------------------------------------------------------------
+// CMessageMonitor::~CMessageMonitor
+// -----------------------------------------------------------------------------
+//
+CMessageMonitor::~CMessageMonitor() 
+	{
+	CPIXLOGSTRING("ENTER ~CMessageMonitor");
+	Cancel();
+	iMessages.Close();
+	iTimer.Close();
+	CPIXLOGSTRING("END ~CMessageMonitor");
+	}
+
+// -----------------------------------------------------------------------------
+// CMessageMonitor::HandleMsgMovedL
+// -----------------------------------------------------------------------------
+//
+void CMessageMonitor::HandleMsgMovedL( const TMsvId aNewFolderId, 
+									   const TMsvId /* aOldFolderId */, 
+								   	   const CMsvEntrySelection& aSelection )
+	{
+	OstTraceFunctionEntry0( CMESSAGEMONITOR_HANDLEMSGMOVEDL_ENTRY );
+	CPIXLOGSTRING("ENTER CMessageMonitor::HandleMsgMovedL");
+	
+	const TInt count( aSelection.Count() );
+	// cycle through every message in the CMsvEntrySelection
+	for ( TInt i=0; i < count; ++i )
+		{
+		TMsvId msgId = aSelection[i];
+		OstTrace1( TRACE_NORMAL, CMESSAGEMONITOR_HANDLEMSGMOVEDL, "CMessageMonitor::HandleMsgMovedL;msgId=%d", msgId );
+		CPIXLOGSTRING2("msgId: %d", msgId );
+        MessageItemL( msgId, ECPixUpdateAction, aNewFolderId );
+		}
+	CPIXLOGSTRING("END CMessageMonitor::HandleMsgMovedL");
+	OstTraceFunctionExit0( CMESSAGEMONITOR_HANDLEMSGMOVEDL_EXIT );
+	}
+
+
+// -----------------------------------------------------------------------------
+// CMessageMonitor::0
+// -----------------------------------------------------------------------------
+//
+void CMessageMonitor::HandleMsgCreatedChangedL( const CMsvEntrySelection& aSelection,
+                                          	    const TMsvId aFolderId,
+                                          	    const MMsvSessionObserver::TMsvSessionEvent /*aEvent*/ )
+	{
+	OstTraceFunctionEntry0( CMESSAGEMONITOR_HANDLEMSGCREATEDCHANGEDL_ENTRY );
+	CPIXLOGSTRING("ENTER CMessageMonitor::HandleMsgCreatedChangedL");	
+	const TInt count( aSelection.Count() );
+	//MMsvSessionObserver::TMsvSessionEvent theEvent = aEvent;
+    // cycle through every message in the CMsvEntrySelection
+	for ( TInt i=0; i < count; ++i )
+		{
+		// extract the message server entry from the parameters
+		TMsvId msgId = aSelection[i];
+		OstTrace1( TRACE_NORMAL, CMESSAGEMONITOR_HANDLEMSGCREATEDCHANGEDL, "CMessageMonitor::HandleMsgCreatedChangedL;msgId=%d", msgId );
+		CPIXLOGSTRING2("msgId: %d", msgId );							
+        TMsvId service = 0;
+        TMsvEntry entry;
+        const TInt err = iMsvSession.GetEntry( msgId, service, entry );
+        if ( ( !err ) && 
+            ( KUidMsvMessageEntry == entry.iType ) && 
+            ( entry.Visible() && entry.Complete() && !entry.InPreparation() ) &&
+            ( iMessagePlugin.CalculateMessageType( entry ) != EMsgTypeInvalid ) )
+            {
+            OstTrace0( TRACE_NORMAL, DUP1_CMESSAGEMONITOR_HANDLEMSGCREATEDCHANGEDL, "CMessageMonitor::HandleMsgCreatedChangedL Called # MonitorEvent #" );
+            CPIXLOGSTRING("CMessageMonitor::HandleMsgCreatedChangedL Called # MonitorEvent #");
+            MessageItemL( msgId, ECPixUpdateAction, aFolderId );
+            }   
+        OstTrace1( TRACE_NORMAL, DUP2_CMESSAGEMONITOR_HANDLEMSGCREATEDCHANGEDL, "CMessageMonitor::HandleMsgCreatedChangedL;Folder Type=%x", aFolderId );
+        CPIXLOGSTRING2(" Folder TYPE %x", aFolderId );        
+        CPIXLOGSTRING2(" Entry TYPE %x", entry.iType );	           
+        OstTrace1( TRACE_NORMAL, DUP4_CMESSAGEMONITOR_HANDLEMSGCREATEDCHANGEDL, "CMessageMonitor::HandleMsgCreatedChangedL;Entry Visible=%d", entry.Visible() );
+        CPIXLOGSTRING2(" Entry VISIBLE %d", entry.Visible() );	          
+        OstTrace1( TRACE_NORMAL, DUP5_CMESSAGEMONITOR_HANDLEMSGCREATEDCHANGEDL, "CMessageMonitor::HandleMsgCreatedChangedL;Entry Complete=%d", entry.Complete() );
+        CPIXLOGSTRING2(" Entry COMPLETE %d", entry.Complete() );
+        OstTrace1( TRACE_NORMAL, DUP6_CMESSAGEMONITOR_HANDLEMSGCREATEDCHANGEDL, "CMessageMonitor::HandleMsgCreatedChangedL;Entry InPreparation=%d", entry.InPreparation() );
+        CPIXLOGSTRING2(" Entry INPREPARATION %d", entry.InPreparation() );
+        OstTrace1( TRACE_NORMAL, DUP7_CMESSAGEMONITOR_HANDLEMSGCREATEDCHANGEDL, "CMessageMonitor::HandleMsgCreatedChangedL;Message Type=%d", iMessagePlugin.CalculateMessageType( entry ) );
+        CPIXLOGSTRING2(" Message TYPE %d", iMessagePlugin.CalculateMessageType( entry ));
+        }
+	CPIXLOGSTRING("END CMessageMonitor::HandleMsgCreatedChangedL");	        
+	OstTraceFunctionExit0( CMESSAGEMONITOR_HANDLEMSGCREATEDCHANGEDL_EXIT );
+	}
+	
+// -----------------------------------------------------------------------------
+// CMessageMonitor::HandleMsgDeletedL
+// -----------------------------------------------------------------------------
+//
+void CMessageMonitor::HandleMsgDeletedL( const CMsvEntrySelection& aSelection )
+	{
+	OstTraceFunctionEntry0( CMESSAGEMONITOR_HANDLEMSGDELETEDL_ENTRY );
+	CPIXLOGSTRING("ENTER CMessageMonitor::HandleMsgDeletedL");
+	
+	const TInt count( aSelection.Count() );
+	// cycle through every message in the CMsvEntrySelection
+	for( TInt i = 0; i < count; ++i )
+		{
+		TMsvId msgId = aSelection[i];	
+		OstTrace1( TRACE_NORMAL, CMESSAGEMONITOR_HANDLEMSGDELETEDL, "CMessageMonitor::HandleMsgDeletedL;MsgId=%d", msgId );
+		CPIXLOGSTRING2("msgId: %d", msgId );								
+		MessageItemL( msgId, ECPixRemoveAction, NULL);
+		}
+	CPIXLOGSTRING("END CMessageMonitor::HandleMsgDeletedL");	
+	OstTraceFunctionExit0( CMESSAGEMONITOR_HANDLEMSGDELETEDL_EXIT );
+	}	
+
+
+void CMessageMonitor::OverwriteOrAddToQuereL(TMsvId aMsvId, TCPixActionType aAction, TMsvId aFolderId)
+{
+	// Overwrite or add the index to the queue
+	TMessageRecord message;
+	message.iMsvId = aMsvId;
+	message.iAction = aAction;
+	message.iFolderId = aFolderId;
+	for (TInt i=0; i<iMessages.Count(); i++)
+	{
+		if (iMessages[i].iMsvId==aMsvId)
+		{
+			// Older version found
+			iMessages[i] = message;
+			return;
+		}
+	}
+	
+	// older not found, append
+	iMessages.AppendL(message);
+}
+
+void CMessageMonitor::MessageItemL(TMsvId aMsvId, TCPixActionType aAction, TMsvId aFolderId)
+	{	
+		// Overwrite or add the index to the queue
+		OverwriteOrAddToQuereL(aMsvId, aAction, aFolderId);
+			
+		// Check the size against maximum queue size
+		if (iMessages.Count() > INDEXING_QUEUE_MAX)
+		{
+			// Maximum is exceeded, force the write immediately
+			if (iState == EStateWaiting)
+			{
+				iTimer.Cancel(); // RunL will be called with iStatus of KErrCancelled
+			}
+			else if (iState == EStateNone)
+			{
+		        SetActive();
+		        TRequestStatus* status = &iStatus;
+		        User::RequestComplete(status, KErrNone); // RunL will be called with iStatus of KErrNone
+			}
+		}
+		else
+		{
+			// Maximum is not exceeded, keep waiting
+			if (iState == EStateNone)
+			{
+				iState = EStateWaiting;
+				iTimer.After(iStatus, INDEXING_DELAY); // Wait 5 seconds before putting this to index
+				SetActive();
+			}
+		}
+	}
+
+void CMessageMonitor::RunL()
+	{
+		// Index the current queue	
+		while (iMessages.Count()>0)
+		{
+			TMessageRecord message = iMessages[0];
+			iMessages.Remove(0);
+			iMessagePlugin.MessageItemL(message.iMsvId, message.iAction, message.iFolderId);
+		}
+		
+		// Everything is indexed no need to be waiting anymore
+		iState = EStateNone;
+	}
+
+void CMessageMonitor::DoCancel()
+	{
+		iTimer.Cancel();
+		iState = EStateNone;
+	}
+
+TInt CMessageMonitor::RunError(TInt /* aError */)
+	{
+		// TODO handle indexing errors here
+		return KErrNone; // Don't panic
+	}
+
+// End Of File
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/messaging/smsmms/src/cmessageplugin.cpp	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,644 @@
+/*
+* Copyright (c) 2010 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:  
+*
+*/
+
+
+#include <e32base.h> 
+#include <msvids.h>
+#include <msvuids.h>
+#include <mmsconst.h>
+#include <mmsclient.h>
+#include <smsclnt.h>
+#include <txtrich.h>
+#include <smuthdr.h>
+#include <smut.h>
+#include <miutset.h>
+#include <SendUiConsts.h>
+#include <mtclreg.h>
+#include <gsmuelem.h>
+#include <msventry.h>
+#include <ccpixindexer.h>
+
+#include "cmessageplugin.h"
+#include "cmessagemonitor.h"
+#include "cmessageharvester.h"
+#include "cmessagedatahandler.h"
+#include "harvesterserverlogger.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "cmessagepluginTraces.h"
+#endif
+
+
+// maximum length that the fully qualified msg Plugin base app class descriptor can be
+// e.g. "@c:root msg"
+const TInt KMsgPluginBaseAppClassMaxLen = 64;
+
+
+// local declarations and functions
+namespace {
+
+_LIT(KCPixSearchServerPrivateDirectory, "\\Private\\2001f6f7\\");
+_LIT(KPathIndexDbPath, CPIX_INDEVICE_INDEXDB);
+
+_LIT(KPathTrailer, "\\root\\msg\\smsmms");
+_LIT(KMsgBaseAppClassGeneric, ":root msg smsmms");
+_LIT(KAtSign, "@");
+_LIT(KColon, ":");
+
+/**
+* MapFileToDrive - gets the TDriveNumber associated with the aBaseAppClass.
+* @aBaseAppClass e.g. "@c:root file"
+* @aDrive returns the TDriveNumber for the aBaseAppClass
+* returns KErrNone on success or a standard error code
+*/
+TInt MapBaseAppClassToDrive(const TDesC& aBaseAppClass, TDriveNumber& aDrive)
+    {
+    if (KErrNone != aBaseAppClass.Left(1).Compare(KAtSign))
+        {
+        return KErrGeneral;
+        }
+
+    TPtrC drvChar = aBaseAppClass.Left(2).Right(1);
+    TChar d(drvChar[0]);
+    TInt drive;
+    const TInt ret = RFs::CharToDrive(d, drive);
+    if (!ret)
+        {
+        aDrive = TDriveNumber(drive);
+        }
+
+    return ret;
+    }
+
+}// anonymous namespace
+
+
+// ---------------------------------------------------------------------------
+// CMessagePlugin::NewL
+// ---------------------------------------------------------------------------
+//  
+CMessagePlugin* CMessagePlugin::NewL()
+{
+	CMessagePlugin* instance = CMessagePlugin::NewLC();
+    CleanupStack::Pop(instance);
+    return instance;
+}
+
+// ---------------------------------------------------------------------------
+// CMessagePlugin::NewLC
+// ---------------------------------------------------------------------------
+//  
+CMessagePlugin* CMessagePlugin::NewLC()
+{
+	CMessagePlugin* instance = new (ELeave)CMessagePlugin();
+    CleanupStack::PushL(instance);
+    instance->ConstructL();
+    return instance;
+}
+
+// ---------------------------------------------------------------------------
+// CMessagePlugin::CMessagePlugin
+// ---------------------------------------------------------------------------
+//  
+CMessagePlugin::CMessagePlugin()
+{
+	iMessageDataHandler = NULL;
+	iMessageHarvester = NULL;
+	iMessageMonitor = NULL;
+	iMsvSession = NULL;
+}
+
+// ---------------------------------------------------------------------------
+// CMessagePlugin::~CMessagePlugin
+// ---------------------------------------------------------------------------
+//  
+CMessagePlugin::~CMessagePlugin()
+{
+    // remove notification paths before destroying iMonitor
+    for (TInt i=EDriveA; i<=EDriveZ; i++)
+        UnMount(TDriveNumber(i), EFalse);
+	delete iMessageDataHandler;
+	delete iMessageHarvester;	
+	delete iMessageMonitor;	
+	delete iMsvSession;
+	iFs.Close();
+}
+
+// ---------------------------------------------------------------------------
+// CMessagePlugin::ConstructL
+// ---------------------------------------------------------------------------
+//  
+void CMessagePlugin::ConstructL()
+{
+    TInt err = iFs.Connect();
+    OstTrace1( TRACE_NORMAL, CMESSAGEPLUGIN_CONSTRUCTL, "CMessagePlugin::ConstructL;iFs Connect Error=%d", err );
+    CPIXLOGSTRING2("CMessagePlugin::ConstructL, iFs.Connect: %i", err);
+    User::LeaveIfError(err);
+    iCurrentDrive = EDriveC; //Default drive is C drive
+    iMsvSession = CMsvSession::OpenSyncL(*this);
+    iMessageMonitor = CMessageMonitor::NewL( *this, *iMsvSession );    
+    iMessageHarvester = CMessageHarvester::NewL( *this, *iMsvSession );    
+    iMessageDataHandler = CMessageDataHandler::NewL( *this, *iMsvSession );    
+    for (TInt i=EDriveA; i<=EDriveZ; i++)
+        {
+        iIndexer[i] = NULL; //Initialize to NULL
+        }
+}
+
+// ---------------------------------------------------------------------------
+// CMessagePlugin::StartPluginL
+// ---------------------------------------------------------------------------
+//  
+void CMessagePlugin::StartPluginL()
+	{
+	//Get the current Drive for storage
+	iCurrentDrive = iMsvSession->CurrentDriveL();
+	OstTrace1( TRACE_NORMAL, CMESSAGEPLUGIN_STARTPLUGINL, "CMessagePlugin::StartPluginL;Current Drive for Messaging =%d", iCurrentDrive );
+	CPIXLOGSTRING2("currentDrive from messaging app : %d", iCurrentDrive );
+	MountL(TDriveNumber(iCurrentDrive)); //Mount current drive
+	// Define this base application class, use default location
+	}
+
+// ---------------------------------------------------------------------------
+// CMessagePlugin::StartHarvestingL
+// ---------------------------------------------------------------------------
+//  
+void CMessagePlugin::StartHarvestingL(const TDesC& aQualifiedBaseAppClass)
+	{
+	OstTraceFunctionEntry0( CMESSAGEPLUGIN_STARTHARVESTINGL_ENTRY );
+	CPIXLOGSTRING("START CMessagePlugin::StartHarvestingL");
+	// Map base app class to a drive number
+	TDriveNumber drive ( EDriveA );//Initialize to silence compiler warnings.
+	if (KErrNone != MapBaseAppClassToDrive(aQualifiedBaseAppClass, drive))
+	   User::Leave(KErrGeneral);
+
+    // Leave if no indexer for this drive
+	if (!iIndexer[drive])
+	   User::Leave(KErrGeneral);
+	        
+    // Reset the database
+	iIndexer[drive]->ResetL();
+#ifdef __PERFORMANCE_DATA
+    iStartTime.UniversalTime();
+#endif
+    iMessageHarvester->StartHarvestingL();
+	OstTraceFunctionExit0( CMESSAGEPLUGIN_STARTHARVESTINGL_EXIT );
+	}
+
+// ---------------------------------------------------------------------------
+// CMessagePlugin::MountL
+// ---------------------------------------------------------------------------
+//
+void CMessagePlugin::MountL(TDriveNumber aMedia,TBool aForceReharvesting)
+    {
+    OstTraceFunctionEntry0( CMESSAGEPLUGIN_MOUNTL_ENTRY );
+    CPIXLOGSTRING("START CMessagePlugin::MountL");
+    // Check if already exists
+    if (iIndexer[aMedia])
+        return;
+    
+    // Form the baseappclass for this media
+    TBuf<KMsgPluginBaseAppClassMaxLen> baseAppClass;
+    FormBaseAppClass(aMedia, baseAppClass);
+
+    // Define this volume
+    HBufC* path = DatabasePathLC(aMedia);
+    User::LeaveIfError(iSearchSession.DefineVolume(baseAppClass, *path));
+    CleanupStack::PopAndDestroy(path);
+    
+    // construct and open the database
+    TRAPD(err,iIndexer[aMedia] = CCPixIndexer::NewL(iSearchSession));
+    OstTrace1( TRACE_NORMAL, CMESSAGEPLUGIN_MOUNTL, "CMessagePlugin::MountL;Indexer NewL return error=%d", err );
+    CPIXLOGSTRING2("CCPixIndexer::NewL returned : %d", err );
+    TRAP(err,iIndexer[aMedia]->OpenDatabaseL(baseAppClass));
+
+    // Add to harvesting queue
+    iObserver->AddHarvestingQueue(this, baseAppClass,aForceReharvesting);  
+    CPIXLOGSTRING("END CMessagePlugin::MountL");
+    OstTraceFunctionExit0( CMESSAGEPLUGIN_MOUNTL_EXIT );
+    }
+
+// ---------------------------------------------------------------------------
+// CMessagePlugin::UnMount
+// ---------------------------------------------------------------------------
+//
+void CMessagePlugin::UnMount(TDriveNumber aMedia, TBool aUndefineAsWell)
+    {
+    OstTraceFunctionEntry0( CMESSAGEPLUGIN_UNMOUNT_ENTRY );
+    CPIXLOGSTRING("START CMessagePlugin::UnMount");
+    // Check if already exists
+    if (!iIndexer[aMedia])
+        return;
+    
+    // Form the baseappclass for this media
+    TBuf<KMsgPluginBaseAppClassMaxLen> baseAppClass;
+    FormBaseAppClass(aMedia, baseAppClass);             
+        
+    // Remove from harvesting queue
+    iObserver->RemoveHarvestingQueue(this, baseAppClass);   
+    
+    // Delete the index object
+    if (iIndexer[aMedia])
+        {
+        delete iIndexer[aMedia];
+        iIndexer[aMedia] = NULL;
+        }
+    
+    // if the aActionType is EFFMmcDismount, then the
+    // parameter aFilename is the baseAppClass of the Index database
+    // to be dropped.
+    if (aUndefineAsWell)
+        iSearchSession.UnDefineVolume(baseAppClass);
+    OstTraceFunctionExit0( CMESSAGEPLUGIN_UNMOUNT_EXIT );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMessagePlugin::FormBaseAppClass
+// ---------------------------------------------------------------------------
+//  
+TInt CMessagePlugin::FormBaseAppClass(TDriveNumber aMedia, TDes& aBaseAppClass)
+    {
+    TChar chr;
+    const TInt ret = RFs::DriveToChar(aMedia, chr);
+    if (KErrNone == ret)
+        {
+        aBaseAppClass.Copy(KAtSign);
+        aBaseAppClass.Append(chr);
+        aBaseAppClass.LowerCase();
+        aBaseAppClass.Append(KMsgBaseAppClassGeneric);
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMessagePlugin::DatabasePathLC
+// ---------------------------------------------------------------------------
+//
+HBufC* CMessagePlugin::DatabasePathLC(TDriveNumber aMedia)
+    {
+    OstTraceFunctionEntry0( CMESSAGEPLUGIN_DATABASEPATHLC_ENTRY );
+    CPIXLOGSTRING("START CMessagePlugin::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());
+    TPtr indexDbPathPtr = indexDbPath->Des();
+
+#if 1 // Data caging implementation
+    iFs.CreatePrivatePath(aMedia);
+
+    TChar chr;
+    RFs::DriveToChar(aMedia, chr);
+    indexDbPathPtr.Append(chr);
+    indexDbPathPtr.Append(KColon);
+
+    TFileName pathWithoutDrive;
+    iFs.PrivatePath(pathWithoutDrive);
+    indexDbPathPtr.Append(KCPixSearchServerPrivateDirectory);
+#else // here is the way to calculate the path if data caging is not being used.
+    TFileName rootPath;
+    PathInfo::GetRootPath(rootPath, aMedia);
+    indexDbPathPtr.Append(rootPath);
+#endif 
+
+    indexDbPathPtr.Append(KPathIndexDbPath);
+    indexDbPathPtr.Append(KPathTrailer);
+
+    OstTraceFunctionExit0( CMESSAGEPLUGIN_DATABASEPATHLC_EXIT );
+    return indexDbPath;
+    }
+
+// ---------------------------------------------------------------------------
+// CMessagePlugin::GetIndexer
+// ---------------------------------------------------------------------------
+//
+CCPixIndexer* CMessagePlugin::GetIndexer()
+    {
+    return iIndexer[iCurrentDrive];
+    }
+
+// ---------------------------------------------------------------------------
+// CMessagePlugin::IsMediaRemovableL
+// ---------------------------------------------------------------------------
+// 
+TBool CMessagePlugin::IsMediaRemovableL(TDriveNumber& aDrive)
+    {
+    TDriveInfo driveInfo; 
+    User::LeaveIfError(iFs.Drive(driveInfo,aDrive));
+    TBool mediaRemovable(EFalse);
+    driveInfo.iDriveAtt & KDriveAttRemovable ? mediaRemovable = ETrue : mediaRemovable = EFalse;
+    return mediaRemovable;
+    }
+// ---------------------------------------------------------------------------
+// CMessagePlugin::HandleSessionEventL
+// ---------------------------------------------------------------------------
+//  
+void CMessagePlugin::HandleSessionEventL( TMsvSessionEvent aEvent, 
+										  		 TAny* aArg1, 
+										  		 TAny* aArg2, 
+										  		 TAny* aArg3 )
+	{		
+	OstTraceFunctionEntry0( CMESSAGEPLUGIN_HANDLESESSIONEVENTL_ENTRY );
+	CPIXLOGSTRING("ENTER CMessagePlugin::HandleSessionEventL");
+	OstTrace1( TRACE_NORMAL, CMESSAGEPLUGIN_HANDLESESSIONEVENTL, "CMessagePlugin::HandleSessionEventL;aEvent=%d", aEvent );
+	CPIXLOGSTRING2("TMsvSessionEvent aEvent: %d", aEvent );			
+		
+	switch( aEvent )
+		{
+		case EMsvEntriesCreated:
+		case EMsvEntriesChanged:
+			{
+			// Handle changed / created event
+            CMsvEntrySelection* selection = reinterpret_cast<CMsvEntrySelection*>(aArg1);
+            TMsvId folderId = *( reinterpret_cast<TMsvId*>(aArg2));
+#ifdef __PERFORMANCE_DATA
+            iStartTime.UniversalTime();
+		    iMessageMonitor->HandleMsgCreatedChangedL(*selection, folderId, aEvent);
+		    UpdatePerformaceDataL(EMsvEntriesChanged);
+#else
+		    iMessageMonitor->HandleMsgCreatedChangedL(*selection, folderId, aEvent);
+#endif		    
+			break;
+			}		
+		case EMsvEntriesDeleted:
+			{
+			// Handle deletion event
+		    CMsvEntrySelection* selection = reinterpret_cast<CMsvEntrySelection*> ( aArg1 );
+#ifdef __PERFORMANCE_DATA
+            iStartTime.UniversalTime();
+		    iMessageMonitor->HandleMsgDeletedL( *selection );
+		    UpdatePerformaceDataL(EMsvEntriesDeleted);
+#else
+		    iMessageMonitor->HandleMsgDeletedL( *selection );
+#endif
+			break;
+			}
+		case EMsvEntriesMoved:
+			{
+			// track move operations
+			// or sent folder
+			// ... extract the useful parameters
+            if( aArg1 && aArg2 && aArg3 )
+                {
+                CMsvEntrySelection* selection = reinterpret_cast<CMsvEntrySelection*> ( aArg1 );
+                // aArg2 is the TMsvId of the new parent. aArg3 is the TMsvId of 
+                // the old parent entry.
+                TMsvId newFolderId = *(reinterpret_cast<TMsvId*>(aArg2));
+                TMsvId oldFolderId = *(reinterpret_cast<TMsvId*>(aArg3));
+#ifdef __PERFORMANCE_DATA
+                iStartTime.UniversalTime();
+                iMessageMonitor->HandleMsgMovedL(newFolderId, oldFolderId, *selection);
+                UpdatePerformaceDataL(EMsvEntriesMoved);
+#else
+                iMessageMonitor->HandleMsgMovedL(newFolderId, oldFolderId, *selection);
+#endif
+                }
+			break;
+			}			
+		case EMsvMediaChanged:
+		    {
+		    //Unmount old media drive
+		    OstTrace0( TRACE_NORMAL, DUP1_CMESSAGEPLUGIN_HANDLESESSIONEVENTL, "ENTER CMessagePlugin::HandleSessionEventL EMsvMediaChanged" );
+		    CPIXLOGSTRING("ENTER CMessagePlugin::HandleSessionEventL EMsvMediaChanged");
+		    TDriveNumber drive = *(reinterpret_cast<TDriveNumber*>(aArg1));
+		    UnMount(drive);
+		    drive = *(reinterpret_cast<TDriveNumber*>(aArg2));
+		    //Check if Media is removable then force reharvesting else keep indexes same
+		    MountL(drive,IsMediaRemovableL(drive)); //Mount new media drive for harvesting
+		    iCurrentDrive = drive;//Index of current drive
+		    }
+		    break;
+		case EMsvMediaUnavailable:
+		    {
+		    //No need to handle as when drive will be removed EMsvMediaChanged event
+		    //will be received for default media drive can be handled there
+		    //Unmount old media drive
+		    OstTrace0( TRACE_NORMAL, DUP2_CMESSAGEPLUGIN_HANDLESESSIONEVENTL, "ENTER CMessagePlugin::HandleSessionEventL EMsvMediaUnavailable" );
+		    CPIXLOGSTRING("ENTER CMessagePlugin::HandleSessionEventL EMsvMediaUnavailable");
+		    TDriveNumber drive = *(reinterpret_cast<TDriveNumber*>(aArg1));
+		    UnMount(drive);
+		    }
+		    break;
+		case EMsvMediaAvailable:
+			{
+			OstTrace0( TRACE_NORMAL, DUP3_CMESSAGEPLUGIN_HANDLESESSIONEVENTL, "ENTER CMessagePlugin::HandleSessionEventL EMsvMediaAvailable" );
+			CPIXLOGSTRING("ENTER CMessagePlugin::HandleSessionEventL EMsvMediaAvailable");
+			//Removed media drive available again mount media drive and unmount default
+			UnMount(TDriveNumber(iCurrentDrive)); //Unmount current drive
+			TDriveNumber drive = *(reinterpret_cast<TDriveNumber*>(aArg1));
+			MountL(drive,IsMediaRemovableL(drive)); //Mount avilable media drive for harvesting
+			}
+			break;
+		case EMsvServerFailedToStart:			
+		case EMsvCloseSession:
+		case EMsvServerTerminated:
+			{
+			User::Panic(_L("CMessagePlugin PANIC"), KErrServerTerminated);
+			break;				
+			}			
+		case EMsvMtmGroupInstalled:
+		case EMsvMtmGroupDeInstalled:
+		case EMsvGeneralError: // not used after v5
+		case EMsvServerReady:
+		case EMsvCorruptedIndexRebuilt:
+		case EMsvMediaIncorrect:
+		case EMsvCorruptedIndexRebuilding:
+		default:
+			{
+			break;
+			}							
+		}	
+	CPIXLOGSTRING("END CMessagePlugin::HandleSessionEventL");	
+		
+	OstTraceFunctionExit0( CMESSAGEPLUGIN_HANDLESESSIONEVENTL_EXIT );
+	}	
+
+// ---------------------------------------------------------------------------
+// CMessageDataHandler::CalculateMessageType
+// ---------------------------------------------------------------------------
+//	    
+TMsgType CMessagePlugin::CalculateMessageType (const TMsvEntry& aEntry )
+{
+    OstTraceFunctionEntry0( CMESSAGEPLUGIN_CALCULATEMESSAGETYPE_ENTRY );
+    CPIXLOGSTRING("ENTER CMessagePlugin::CalculateMessageType");
+	TMsgType ret = EMsgTypeInvalid;
+	OstTrace1( TRACE_NORMAL, CMESSAGEPLUGIN_CALCULATEMESSAGETYPE, "CMessagePlugin::CalculateMessageType;uid=%x", aEntry.iMtm.iUid );
+	CPIXLOGSTRING2("CMessagePlugin::CalculateMessageType uid: %x", aEntry.iMtm.iUid );
+    if( aEntry.iMtm.iUid  == KUidMsgTypeMultimedia.iUid ) 
+        {
+        OstTrace0( TRACE_NORMAL, DUP1_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE, "CMessagePlugin:CalculateMessageType  ###  Mms Message ###" );
+        CPIXLOGSTRING("CMessagePlugin:CalculateMessageType  ###  Mms Message ###");
+        ret = EMsgTypeMms;
+        }
+    else if( aEntry.iMtm.iUid  == KUidMsgTypeSMTP.iUid )
+		{
+		OstTrace0( TRACE_NORMAL, DUP2_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE, "CMessagePlugin:CalculateMessageType  ### ESmtpEmail ###" );
+		CPIXLOGSTRING("CMessagePlugin:CalculateMessageType  ### ESmtpEmail ###");
+        ret = EMsgTypeEmailSmtp;
+		}
+	else if( aEntry.iMtm.iUid  == KUidMsgTypePOP3.iUid )
+		{
+		OstTrace0( TRACE_NORMAL, DUP3_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE, "CMessagePlugin:CalculateMessageType  ### EPop3Email ###" );
+		CPIXLOGSTRING("CMessagePlugin:CalculateMessageType  ### EPop3Email ###");
+        ret = EMsgTypeEmailPop3;
+		}
+	else if( aEntry.iMtm.iUid  == KUidMsgTypeIMAP4.iUid )
+		{
+		OstTrace0( TRACE_NORMAL, DUP4_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE, "CMessagePlugin:CalculateMessageType  ### EImap4Email ###" );
+		CPIXLOGSTRING("CMessagePlugin:CalculateMessageType  ### EImap4Email ###");
+        ret = EMsgTypeEmailImap4;
+		}
+	// Add J.J	
+#ifndef __SERIES60_30__ // Not supported before S60 3d FP1
+   	else if ( aEntry.iMtm.iUid == KSenduiMtmUniMessageUid.iUid )
+	    {
+	    OstTrace0( TRACE_NORMAL, DUP5_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE, "CMessagePlugin:CalculateMessageType  ### EDraftMessage ###" );
+	    CPIXLOGSTRING("CMessagePlugin:CalculateMessageType  ### EDraftMessage ###");
+        ret = EMsgTypeDraft;
+	    }
+#endif
+    // else if we have a normal text based SMS it is valid    
+ 	else if ( aEntry.iMtm.iUid == KUidMsgTypeSMS.iUid )
+ 		{
+ 		OstTrace0( TRACE_NORMAL, DUP6_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE, "CMessagePlugin:CalculateMessageType  ###  SMS Message ###" );
+ 		CPIXLOGSTRING("CMessagePlugin:CalculateMessageType  ###  SMS Message ###");
+        ret = EMsgTypeSms;
+ 		}
+   	else if ( aEntry.iMtm.iUid == KSenduiMtmSmsUid.iUid )
+		{
+		OstTrace0( TRACE_NORMAL, DUP7_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE, "CMessagePlugin:CalculateMessageType  ### Sms Message ###" );
+		CPIXLOGSTRING("CMessagePlugin:CalculateMessageType  ### Sms Message ###");
+        ret = EMsgTypeSms;
+		}
+    CPIXLOGSTRING("END CMessagePlugin::CalculateMessageType");
+	OstTraceFunctionExit0( CMESSAGEPLUGIN_CALCULATEMESSAGETYPE_EXIT );
+	return ret;
+}
+
+// ---------------------------------------------------------------------------
+// CMessagePlugin::MessageItemL
+// ---------------------------------------------------------------------------
+//  
+void CMessagePlugin::MessageItemL( TMsvId aMsgId, TCPixActionType aActionType, TMsvId aFolderId  )	
+    {
+    //New item found gather data from that.
+     iMessageDataHandler->GatherDataL( aMsgId, aActionType, aFolderId ); 
+    }
+
+// ---------------------------------------------------------------------------
+// CMessagePlugin::HarvestingCompleted
+// ---------------------------------------------------------------------------
+//  
+void CMessagePlugin::HarvestingCompleted(TInt aError)
+{
+	// Notifies the indexing manager of completed harvesting, called by CMessageHarvester
+    Flush( *GetIndexer() );
+    TBuf<KMsgPluginBaseAppClassMaxLen> baseAppClass;
+    FormBaseAppClass(TDriveNumber(iCurrentDrive), baseAppClass);
+#ifdef __PERFORMANCE_DATA
+    TRAP_IGNORE( UpdatePerformaceDataL() );
+#endif
+    iObserver->HarvestingCompleted(this, baseAppClass, aError);
+}
+
+// ---------------------------------------------------------------------------
+// CMessagePlugin::UpdatePerformaceDataL
+// ---------------------------------------------------------------------------
+//
+#ifdef __PERFORMANCE_DATA
+void CMessagePlugin::UpdatePerformaceDataL()
+    {
+    TTime now;
+   
+    
+    iCompleteTime.UniversalTime();
+    TTimeIntervalMicroSeconds timeDiff = iCompleteTime.MicroSecondsFrom(iStartTime);
+    
+    RFs fileSession;
+    RFile perfFile;
+    User::LeaveIfError( fileSession.Connect () );
+    
+    
+    /* Open file if it exists, otherwise create it and write content in it */
+    
+        if(perfFile.Open(fileSession, _L("c:\\data\\MessagePerf.txt"), EFileWrite))
+                   User::LeaveIfError(perfFile.Create (fileSession, _L("c:\\data\\MessagePerf.txt"), EFileWrite));
+    
+    HBufC8 *heap = HBufC8::NewL(100);
+    TPtr8 ptr = heap->Des();
+    now.HomeTime();
+    TBuf<50> timeString;             
+                
+    _LIT(KOwnTimeFormat,"%:0%H%:1%T%:2%S");
+    now.FormatL(timeString,KOwnTimeFormat);
+    ptr.AppendNum(now.DateTime().Day());
+    ptr.Append(_L("/"));
+    ptr.AppendNum(now.DateTime().Month());
+    ptr.Append(_L("/"));
+    ptr.AppendNum(now.DateTime().Year());
+    ptr.Append(_L(":"));
+    ptr.Append(timeString);
+    ptr.Append( _L("Time taken for Harvesting Message is : "));
+    ptr.AppendNum(timeDiff.Int64()/1000) ;
+    ptr.Append(_L(" MilliSeonds \n"));
+    TInt myInt = 0;
+    perfFile.Seek(ESeekEnd,myInt);
+    perfFile.Write (ptr);
+    perfFile.Close ();
+    fileSession.Close ();
+    delete heap;
+    }
+
+// ---------------------------------------------------------------------------
+// CMessagePlugin::UpdatePerformaceDataL
+// ---------------------------------------------------------------------------
+//
+void CMessagePlugin::UpdatePerformaceDataL(TMsvSessionEvent action) {
+    
+        iCompleteTime.UniversalTime();
+        TTimeIntervalMicroSeconds timeDiff = iCompleteTime.MicroSecondsFrom(iStartTime);
+        
+        RFs fileSession;
+        RFile perfFile;
+        User::LeaveIfError( fileSession.Connect () );
+        
+        
+        /* Open file if it exists, otherwise create it and write content in it */
+        
+            if(perfFile.Open(fileSession, _L("c:\\data\\MessagePerf.txt"), EFileWrite))
+                       User::LeaveIfError(perfFile.Create (fileSession, _L("c:\\data\\MessagePerf.txt"), EFileWrite));
+        
+        HBufC8 *heap = HBufC8::NewL(100);
+        TPtr8 ptr = heap->Des();
+
+        switch (action) {
+            case EMsvEntriesDeleted: ptr.Append( _L("del "));break;
+            case EMsvEntriesChanged: ptr.Append( _L("upd "));break;
+            case EMsvEntriesMoved: ptr.Append( _L("mov "));break;
+        }
+        ptr.AppendNum(timeDiff.Int64()/1000) ;
+        ptr.Append(_L("\n"));
+        TInt myInt = 0;
+        perfFile.Seek(ESeekEnd,myInt);
+        perfFile.Write (ptr);
+        perfFile.Close ();
+        fileSession.Close ();
+        delete heap;
+    }
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/messaging/smsmms/src/tproxy.cpp	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2010 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:  Message plugin
+*
+*/
+
+
+
+#include <e32std.h>
+#include <implementationproxy.h>
+#include <cindexingplugin.h>
+#include "cmessageplugin.h"
+
+
+// Map the interface UIDs to implementation factory functions
+const TImplementationProxy KImplementationTable[] = 
+	{
+	{{0x2001F701},( TProxyNewLPtr) CMessagePlugin::NewL}		
+	};
+
+// Exported proxy for instantiation method resolution
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
+	{
+	aTableCount = sizeof( KImplementationTable ) / sizeof( TImplementationProxy );
+	return KImplementationTable;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/messaging/smsmms/traces/OstTraceDefinitions.h	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 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: 
+*
+*/
+#ifndef __OSTTRACEDEFINITIONS_H__
+#define __OSTTRACEDEFINITIONS_H__
+// OST_TRACE_COMPILER_IN_USE flag has been added by Trace Compiler
+// REMOVE BEFORE CHECK-IN TO VERSION CONTROL
+//#define OST_TRACE_COMPILER_IN_USE
+#include <opensystemtrace.h>
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/messaging/smsmms/traces/cmessagedatahandlerTraces.h	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,39 @@
+// Created by TraceCompiler 2.1.2
+// DO NOT EDIT, CHANGES WILL BE LOST
+
+#ifndef __CMESSAGEDATAHANDLERTRACES_H__
+#define __CMESSAGEDATAHANDLERTRACES_H__
+
+#define KOstTraceComponentID 0x2001f701
+
+#define CMESSAGEDATAHANDLER_NEWL_ENTRY 0x8a0001
+#define CMESSAGEDATAHANDLER_NEWL_EXIT 0x8a0002
+#define CMESSAGEDATAHANDLER_ISVALIDMESSAGETYPE_ENTRY 0x8a0003
+#define CMESSAGEDATAHANDLER_ISVALIDMESSAGETYPE_EXIT 0x8a0004
+#define CMESSAGEDATAHANDLER_CONSTRUCTL 0x860001
+#define DUP1_CMESSAGEDATAHANDLER_CONSTRUCTL 0x860002
+#define CMESSAGEDATAHANDLER_ISVALIDMESSAGETYPE 0x860003
+#define DUP1_CMESSAGEDATAHANDLER_ISVALIDMESSAGETYPE 0x860004
+#define CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML 0x860005
+#define DUP1_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML 0x860006
+#define DUP2_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML 0x860007
+#define DUP3_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML 0x860008
+#define DUP4_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML 0x860009
+#define DUP5_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML 0x86000a
+#define DUP6_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML 0x86000b
+#define DUP7_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML 0x86000c
+#define DUP8_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML 0x86000d
+#define DUP9_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML 0x86000e
+#define DUP10_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML 0x86000f
+#define DUP11_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML 0x860010
+#define DUP12_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML 0x860011
+#define DUP13_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML 0x860012
+#define DUP14_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML 0x860013
+#define CMESSAGEDATAHANDLER_RUNL 0x860014
+#define CMESSAGEDATAHANDLER_RUNERROR 0x860015
+
+
+#endif
+
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/messaging/smsmms/traces/cmessagemonitorTraces.h	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,33 @@
+// Created by TraceCompiler 2.1.2
+// DO NOT EDIT, CHANGES WILL BE LOST
+
+#ifndef __CMESSAGEMONITORTRACES_H__
+#define __CMESSAGEMONITORTRACES_H__
+
+#define KOstTraceComponentID 0x2001f701
+
+#define CMESSAGEMONITOR_CMESSAGEMONITOR_ENTRY 0x8a0005
+#define CMESSAGEMONITOR_CMESSAGEMONITOR_EXIT 0x8a0006
+#define CMESSAGEMONITOR_CONSTRUCTL_ENTRY 0x8a0007
+#define CMESSAGEMONITOR_CONSTRUCTL_EXIT 0x8a0008
+#define CMESSAGEMONITOR_HANDLEMSGMOVEDL_ENTRY 0x8a0009
+#define CMESSAGEMONITOR_HANDLEMSGMOVEDL_EXIT 0x8a000a
+#define CMESSAGEMONITOR_HANDLEMSGCREATEDCHANGEDL_ENTRY 0x8a000b
+#define CMESSAGEMONITOR_HANDLEMSGCREATEDCHANGEDL_EXIT 0x8a000c
+#define CMESSAGEMONITOR_HANDLEMSGDELETEDL_ENTRY 0x8a000d
+#define CMESSAGEMONITOR_HANDLEMSGDELETEDL_EXIT 0x8a000e
+#define CMESSAGEMONITOR_HANDLEMSGMOVEDL 0x860016
+#define CMESSAGEMONITOR_HANDLEMSGCREATEDCHANGEDL 0x860017
+#define DUP1_CMESSAGEMONITOR_HANDLEMSGCREATEDCHANGEDL 0x860018
+#define DUP2_CMESSAGEMONITOR_HANDLEMSGCREATEDCHANGEDL 0x860019
+#define DUP4_CMESSAGEMONITOR_HANDLEMSGCREATEDCHANGEDL 0x86001a
+#define DUP5_CMESSAGEMONITOR_HANDLEMSGCREATEDCHANGEDL 0x86001b
+#define DUP6_CMESSAGEMONITOR_HANDLEMSGCREATEDCHANGEDL 0x86001c
+#define DUP7_CMESSAGEMONITOR_HANDLEMSGCREATEDCHANGEDL 0x86001d
+#define CMESSAGEMONITOR_HANDLEMSGDELETEDL 0x86001e
+
+
+#endif
+
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/messaging/smsmms/traces/cmessagepluginTraces.h	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,41 @@
+// Created by TraceCompiler 2.1.2
+// DO NOT EDIT, CHANGES WILL BE LOST
+
+#ifndef __CMESSAGEPLUGINTRACES_H__
+#define __CMESSAGEPLUGINTRACES_H__
+
+#define KOstTraceComponentID 0x2001f701
+
+#define CMESSAGEPLUGIN_STARTHARVESTINGL_ENTRY 0x8a000f
+#define CMESSAGEPLUGIN_STARTHARVESTINGL_EXIT 0x8a0010
+#define CMESSAGEPLUGIN_MOUNTL_ENTRY 0x8a0011
+#define CMESSAGEPLUGIN_MOUNTL_EXIT 0x8a0012
+#define CMESSAGEPLUGIN_UNMOUNT_ENTRY 0x8a0013
+#define CMESSAGEPLUGIN_UNMOUNT_EXIT 0x8a0014
+#define CMESSAGEPLUGIN_DATABASEPATHLC_ENTRY 0x8a0015
+#define CMESSAGEPLUGIN_DATABASEPATHLC_EXIT 0x8a0016
+#define CMESSAGEPLUGIN_HANDLESESSIONEVENTL_ENTRY 0x8a0017
+#define CMESSAGEPLUGIN_HANDLESESSIONEVENTL_EXIT 0x8a0018
+#define CMESSAGEPLUGIN_CALCULATEMESSAGETYPE_ENTRY 0x8a0019
+#define CMESSAGEPLUGIN_CALCULATEMESSAGETYPE_EXIT 0x8a001a
+#define CMESSAGEPLUGIN_CONSTRUCTL 0x86001f
+#define CMESSAGEPLUGIN_STARTPLUGINL 0x860020
+#define CMESSAGEPLUGIN_MOUNTL 0x860021
+#define CMESSAGEPLUGIN_HANDLESESSIONEVENTL 0x860022
+#define DUP1_CMESSAGEPLUGIN_HANDLESESSIONEVENTL 0x860023
+#define DUP2_CMESSAGEPLUGIN_HANDLESESSIONEVENTL 0x860024
+#define DUP3_CMESSAGEPLUGIN_HANDLESESSIONEVENTL 0x860025
+#define CMESSAGEPLUGIN_CALCULATEMESSAGETYPE 0x860026
+#define DUP1_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE 0x860027
+#define DUP2_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE 0x860028
+#define DUP3_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE 0x860029
+#define DUP4_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE 0x86002a
+#define DUP5_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE 0x86002b
+#define DUP6_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE 0x86002c
+#define DUP7_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE 0x86002d
+
+
+#endif
+
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/messaging/smsmms/traces/fixed_id.definitions	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,74 @@
+#Fixed group and trace id definitions. If this file is removed, the identifiers are rebuilt.
+[GROUP]TRACE_FLOW=0x8a
+[GROUP]TRACE_NORMAL=0x86
+[TRACE]TRACE_FLOW[0x8A]_CMESSAGEDATAHANDLER_ISVALIDMESSAGETYPE_ENTRY=0x3
+[TRACE]TRACE_FLOW[0x8A]_CMESSAGEDATAHANDLER_ISVALIDMESSAGETYPE_EXIT=0x4
+[TRACE]TRACE_FLOW[0x8A]_CMESSAGEDATAHANDLER_NEWL_ENTRY=0x1
+[TRACE]TRACE_FLOW[0x8A]_CMESSAGEDATAHANDLER_NEWL_EXIT=0x2
+[TRACE]TRACE_FLOW[0x8A]_CMESSAGEMONITOR_CMESSAGEMONITOR_ENTRY=0x5
+[TRACE]TRACE_FLOW[0x8A]_CMESSAGEMONITOR_CMESSAGEMONITOR_EXIT=0x6
+[TRACE]TRACE_FLOW[0x8A]_CMESSAGEMONITOR_CONSTRUCTL_ENTRY=0x7
+[TRACE]TRACE_FLOW[0x8A]_CMESSAGEMONITOR_CONSTRUCTL_EXIT=0x8
+[TRACE]TRACE_FLOW[0x8A]_CMESSAGEMONITOR_HANDLEMSGCREATEDCHANGEDL_ENTRY=0xb
+[TRACE]TRACE_FLOW[0x8A]_CMESSAGEMONITOR_HANDLEMSGCREATEDCHANGEDL_EXIT=0xc
+[TRACE]TRACE_FLOW[0x8A]_CMESSAGEMONITOR_HANDLEMSGDELETEDL_ENTRY=0xd
+[TRACE]TRACE_FLOW[0x8A]_CMESSAGEMONITOR_HANDLEMSGDELETEDL_EXIT=0xe
+[TRACE]TRACE_FLOW[0x8A]_CMESSAGEMONITOR_HANDLEMSGMOVEDL_ENTRY=0x9
+[TRACE]TRACE_FLOW[0x8A]_CMESSAGEMONITOR_HANDLEMSGMOVEDL_EXIT=0xa
+[TRACE]TRACE_FLOW[0x8A]_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE_ENTRY=0x19
+[TRACE]TRACE_FLOW[0x8A]_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE_EXIT=0x1a
+[TRACE]TRACE_FLOW[0x8A]_CMESSAGEPLUGIN_DATABASEPATHLC_ENTRY=0x15
+[TRACE]TRACE_FLOW[0x8A]_CMESSAGEPLUGIN_DATABASEPATHLC_EXIT=0x16
+[TRACE]TRACE_FLOW[0x8A]_CMESSAGEPLUGIN_HANDLESESSIONEVENTL_ENTRY=0x17
+[TRACE]TRACE_FLOW[0x8A]_CMESSAGEPLUGIN_HANDLESESSIONEVENTL_EXIT=0x18
+[TRACE]TRACE_FLOW[0x8A]_CMESSAGEPLUGIN_MOUNTL_ENTRY=0x11
+[TRACE]TRACE_FLOW[0x8A]_CMESSAGEPLUGIN_MOUNTL_EXIT=0x12
+[TRACE]TRACE_FLOW[0x8A]_CMESSAGEPLUGIN_STARTHARVESTINGL_ENTRY=0xf
+[TRACE]TRACE_FLOW[0x8A]_CMESSAGEPLUGIN_STARTHARVESTINGL_EXIT=0x10
+[TRACE]TRACE_FLOW[0x8A]_CMESSAGEPLUGIN_UNMOUNT_ENTRY=0x13
+[TRACE]TRACE_FLOW[0x8A]_CMESSAGEPLUGIN_UNMOUNT_EXIT=0x14
+[TRACE]TRACE_NORMAL[0x86]_CMESSAGEDATAHANDLER_CONSTRUCTL=0x1
+[TRACE]TRACE_NORMAL[0x86]_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML=0x5
+[TRACE]TRACE_NORMAL[0x86]_CMESSAGEDATAHANDLER_ISVALIDMESSAGETYPE=0x3
+[TRACE]TRACE_NORMAL[0x86]_CMESSAGEDATAHANDLER_RUNERROR=0x15
+[TRACE]TRACE_NORMAL[0x86]_CMESSAGEDATAHANDLER_RUNL=0x14
+[TRACE]TRACE_NORMAL[0x86]_CMESSAGEMONITOR_HANDLEMSGCREATEDCHANGEDL=0x17
+[TRACE]TRACE_NORMAL[0x86]_CMESSAGEMONITOR_HANDLEMSGDELETEDL=0x1e
+[TRACE]TRACE_NORMAL[0x86]_CMESSAGEMONITOR_HANDLEMSGMOVEDL=0x16
+[TRACE]TRACE_NORMAL[0x86]_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE=0x26
+[TRACE]TRACE_NORMAL[0x86]_CMESSAGEPLUGIN_CONSTRUCTL=0x1f
+[TRACE]TRACE_NORMAL[0x86]_CMESSAGEPLUGIN_HANDLESESSIONEVENTL=0x22
+[TRACE]TRACE_NORMAL[0x86]_CMESSAGEPLUGIN_MOUNTL=0x21
+[TRACE]TRACE_NORMAL[0x86]_CMESSAGEPLUGIN_STARTPLUGINL=0x20
+[TRACE]TRACE_NORMAL[0x86]_DUP10_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML=0xf
+[TRACE]TRACE_NORMAL[0x86]_DUP11_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML=0x10
+[TRACE]TRACE_NORMAL[0x86]_DUP12_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML=0x11
+[TRACE]TRACE_NORMAL[0x86]_DUP13_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML=0x12
+[TRACE]TRACE_NORMAL[0x86]_DUP14_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML=0x13
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CMESSAGEDATAHANDLER_CONSTRUCTL=0x2
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML=0x6
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CMESSAGEDATAHANDLER_ISVALIDMESSAGETYPE=0x4
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CMESSAGEMONITOR_HANDLEMSGCREATEDCHANGEDL=0x18
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE=0x27
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CMESSAGEPLUGIN_HANDLESESSIONEVENTL=0x23
+[TRACE]TRACE_NORMAL[0x86]_DUP2_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML=0x7
+[TRACE]TRACE_NORMAL[0x86]_DUP2_CMESSAGEMONITOR_HANDLEMSGCREATEDCHANGEDL=0x19
+[TRACE]TRACE_NORMAL[0x86]_DUP2_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE=0x28
+[TRACE]TRACE_NORMAL[0x86]_DUP2_CMESSAGEPLUGIN_HANDLESESSIONEVENTL=0x24
+[TRACE]TRACE_NORMAL[0x86]_DUP3_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML=0x8
+[TRACE]TRACE_NORMAL[0x86]_DUP3_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE=0x29
+[TRACE]TRACE_NORMAL[0x86]_DUP3_CMESSAGEPLUGIN_HANDLESESSIONEVENTL=0x25
+[TRACE]TRACE_NORMAL[0x86]_DUP4_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML=0x9
+[TRACE]TRACE_NORMAL[0x86]_DUP4_CMESSAGEMONITOR_HANDLEMSGCREATEDCHANGEDL=0x1a
+[TRACE]TRACE_NORMAL[0x86]_DUP4_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE=0x2a
+[TRACE]TRACE_NORMAL[0x86]_DUP5_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML=0xa
+[TRACE]TRACE_NORMAL[0x86]_DUP5_CMESSAGEMONITOR_HANDLEMSGCREATEDCHANGEDL=0x1b
+[TRACE]TRACE_NORMAL[0x86]_DUP5_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE=0x2b
+[TRACE]TRACE_NORMAL[0x86]_DUP6_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML=0xb
+[TRACE]TRACE_NORMAL[0x86]_DUP6_CMESSAGEMONITOR_HANDLEMSGCREATEDCHANGEDL=0x1c
+[TRACE]TRACE_NORMAL[0x86]_DUP6_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE=0x2c
+[TRACE]TRACE_NORMAL[0x86]_DUP7_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML=0xc
+[TRACE]TRACE_NORMAL[0x86]_DUP7_CMESSAGEMONITOR_HANDLEMSGCREATEDCHANGEDL=0x1d
+[TRACE]TRACE_NORMAL[0x86]_DUP7_CMESSAGEPLUGIN_CALCULATEMESSAGETYPE=0x2d
+[TRACE]TRACE_NORMAL[0x86]_DUP8_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML=0xd
+[TRACE]TRACE_NORMAL[0x86]_DUP9_CMESSAGEDATAHANDLER_CREATEMESSAGEINDEXITEML=0xe
--- a/harvesterplugins/messaging/src/cmessagedatahandler.cpp	Mon Apr 19 14:40:05 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,892 +0,0 @@
-/*
-* Copyright (c) 2010 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:  Harvester message plugin
- *
-*/
-
-
-//  INCLUDES 
-
-#include <e32base.h>
-
-#include <mtclreg.h>
-#include <smsclnt.h> // SMS Headers
-#include <mmsclient.h> // MMS Headers
-#include <mmsvattachmentmanager.h>
-#include <impcmtm.h> // IMAP Headers
-#include <smtcmtm.h> // SMTP
-#include <popcmtm.h> // POP
-
-#include "harvesterserverlogger.h"
-#include "cmessagedatahandler.h"
-#include "cmessageplugin.h"
-#include <csearchdocument.h>
-#include <common.h>
-
-#include <ccpixindexer.h>
-
-/** Number of symbols from MsgBody taken to excerpt */
-const TInt KMsgBodyExcerptSymbols = 90;
-
-// For Ucs2 detection
-const TInt KUtf8BomLength = 3;
-const TUint8 KUtf8Bom[KUtf8BomLength] = {0xEF, 0xBB, 0xBF};
-
-// CSearchDocument ID max length
-const TUint KMaxDocId = 20;
-// Hardcoded limit for the body size to index (and store)
-const TInt KMaxDocumentSize = 1024;
-
-_LIT8(KMimeTypeText, "text/plain" );
-
-_LIT(KMimeTypeField, CPIX_MIMETYPE_FIELD);
-_LIT(KMimeTypeMessaging, MESSAGING_MIMETYPE);
-
-/** Field names */
-_LIT(KToField, TO_FIELD);
-_LIT(KCcField, CC_FIELD);
-_LIT(KBccField, BCC_FIELD);
-_LIT(KFromField, FROM_FIELD);
-_LIT(KFolderField, FOLDER_FIELD);
-_LIT(KBodyField, BODY_FIELD);
-_LIT(KSubjectField, SUBJECT_FIELD);
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// ---------------------------------------------------------------------------
-// CMessageDataHandler::NewL
-// ---------------------------------------------------------------------------
-//
-CMessageDataHandler* CMessageDataHandler::NewL(CMessagePlugin& aMessagePlugin,
-		CMsvSession& aSession)
-	{
-		CPIXLOGSTRING( "CMessageDataHandler::NewL() - enter" );
-
-	CMessageDataHandler* self = new (ELeave) CMessageDataHandler(
-			aMessagePlugin, aSession);
-	CleanupStack::PushL(self);
-	self->ConstructL();
-	CleanupStack::Pop(self);
-
-		CPIXLOGSTRING( "CMessageDataHandler::NewL() - return" );
-	return self;
-	}
-
-// ---------------------------------------------------------------------------
-// CMessageDataHandler::~CMessageDataHandler
-// ---------------------------------------------------------------------------
-//
-CMessageDataHandler::~CMessageDataHandler()
-	{
-	Cancel();
-	iFs.Close();
-	delete iMmsMtm;
-	delete iSmsMtm;
-	delete iSmtpMtm;
-	delete iPop3Mtm;
-	delete iImap4Mtm;
-	delete iMtmReg;
-	}
-
-// ---------------------------------------------------------------------------
-// CMessageDataHandler::CMessageDataHandler
-// ---------------------------------------------------------------------------
-//
-CMessageDataHandler::CMessageDataHandler(CMessagePlugin& aMessagePlugin, CMsvSession& aSession)
-	: CActive(EPriorityLow), iMessagePlugin(aMessagePlugin), iMsvSession(aSession)
-	{
-	CActiveScheduler::Add(this);
-	}
-
-// ---------------------------------------------------------------------------
-// CMessageDataHandler::ConstructL
-// ---------------------------------------------------------------------------
-//
-void CMessageDataHandler::ConstructL()
-	{
-	// TODO iFs only used in MMS attachment logic, 
-	// from a performance perspective, is it worthwhile connecting here?
-	User::LeaveIfError(iFs.Connect());
-	iMtmReg = CClientMtmRegistry::NewL(iMsvSession);
-	TRAPD(err,iSmsMtm = static_cast<CSmsClientMtm*> (iMtmReg->NewMtmL(KUidMsgTypeSMS)));
-	CPIXLOGSTRING2( "CMessageDataHandler::ConstructL() iSmsMtm err = %d",err);
-	TRAP(err,iMmsMtm = static_cast<CMmsClientMtm*> (iMtmReg->NewMtmL(KUidMsgTypeMultimedia)));
-	CPIXLOGSTRING2( "CMessageDataHandler::ConstructL() iMmsMtm err = %d",err);
-	/*
-	TRAP(err,iSmtpMtm = static_cast<CSmtpClientMtm*> (iMtmReg->NewMtmL(KUidMsgTypeSMTP)));
-	CPIXLOGSTRING2( "CMessageDataHandler::ConstructL() iSmtpMtm err = %d",err);
-	TRAP(err, iPop3Mtm = static_cast<CPop3ClientMtm*> (iMtmReg->NewMtmL(KUidMsgTypePOP3)));
-	CPIXLOGSTRING2( "CMessageDataHandler::ConstructL() iPop3Mtm err = %d",err);
-	TRAP(err,iImap4Mtm = static_cast<CImap4ClientMtm*> (iMtmReg->NewMtmL(KUidMsgTypeIMAP4)));
-	CPIXLOGSTRING2( "CMessageDataHandler::ConstructL() iImap4Mtm err = %d",err);
-	*/
-	}
-
-// ---------------------------------------------------------------------------
-// CMessageDataHandler::GatherData
-// ---------------------------------------------------------------------------
-//
-void CMessageDataHandler::GatherDataL(TMsvId& aMessageId,
-		TCPixActionType aActionType, TMsvId& aFolderId)
-	{
-	TMessageItem item(aMessageId, aActionType, aFolderId);
-	iMessageArray.AppendL(item);
-	HandleNextRequest();
-	}
-
-// ---------------------------------------------------------------------------
-// CMessageDataHandler::IsValidMessageTypeL
-// ---------------------------------------------------------------------------
-//	    
-TInt CMessageDataHandler::IsValidMessageType(TMsvId aIdToCheck,
-		TMsgType& aMessageType)
-	{
-		CPIXLOGSTRING("ENTER CMessageDataHandler::IsValidMessageType");
-	TMsvEntry entry;
-	TMsvId service = 0;
-	TInt err = iMsvSession.GetEntry(aIdToCheck, service, entry);
-		CPIXLOGSTRING2("CMessageDataHandler::IsValidMessageType GetEntry: %d", err);
-	if (!err)
-		{
-		aMessageType = iMessagePlugin.CalculateMessageType(entry);
-			CPIXLOGSTRING2("CMessageDataHandler::IsValidMessageType type: %d", aMessageType );
-		}
-		CPIXLOGSTRING("END CMessageDataHandler::IsValidMessageType");
-	return err;
-	}
-
-// ---------------------------------------------------------------------------
-// CMessageDataHandler::CreateSmsIndexItemLC
-// ---------------------------------------------------------------------------
-//	    
-void CMessageDataHandler::CreateMessageIndexItemL(const TMsvId& aMsvId,
-		TCPixActionType aActionType, const TMsvId& aFolderId)
-	{
-	CPIXLOGSTRING2("CMessageDataHandler::CreateMessageIndexItemL(): aMsvId = %d ", aMsvId );
-
-	// Index an empty item if removal action
-	if (aActionType == ECPixRemoveAction)
-		{
-		TBuf<20> docid_str;
-		docid_str.AppendNum(aMsvId);
-		if (iMessagePlugin.GetIndexer())
-			{
-			TRAPD(err, iMessagePlugin.GetIndexer()->DeleteL(docid_str));
-			if (err == KErrNone)
-				{
-				CPIXLOGSTRING("CMessageDataHandler::CreateMessageIndexItemL(): Document deleted.");
-				}
-			else
-				{
-				CPIXLOGSTRING2("CMessageDataHandler::CreateMessageIndexItemL(): Error %d in deleting the document.", err);				
-				}
-			}
-		return;
-		}
-
-	// Check message type
-	TMsgType messageType = EMsgTypeInvalid; // initialisation
-	TInt error = IsValidMessageType(aMsvId, messageType);
-
-	// creating CSearchDocument object with unique ID for this application
-	CSearchDocument* index_item = NULL;
-
-	switch (messageType)
-		{
-		case EMsgTypeSms:
-			{
-			TRAPD(err, index_item = CreateSmsDocumentL(aMsvId, aFolderId));
-			if (err == KErrNone)
-				{
-				CPIXLOGSTRING("CMessageDataHandler::CreateMessageIndexItemL(): SMS document created.");
-				}
-			else
-				{
-				CPIXLOGSTRING2("CMessageDataHandler::CreateMessageIndexItemL(): Error %d in creating SMS document.", err);
-				}
-			break;
-			}
-		case EMsgTypeMms:
-			{
-			TRAPD(err, index_item = CreateMmsDocumentL(aMsvId, aFolderId));
-			if (err == KErrNone)
-				{
-				CPIXLOGSTRING("CMessageDataHandler::CreateMessageIndexItemL(): MMS document created.");
-				}
-			else
-				{
-				CPIXLOGSTRING2("CMessageDataHandler::CreateMessageIndexItemL(): Error %d in creating MMS document.", err);
-				}
-			break;
-			}
-		case EMsgTypeEmailPop3:
-		case EMsgTypeEmailImap4:
-		case EMsgTypeEmailSmtp:
-			{
-			TRAPD(err, index_item = CreateEmailDocumentL(aMsvId, aFolderId));
-			if (err == KErrNone)
-				{
-				CPIXLOGSTRING("CMessageDataHandler::CreateMessageIndexItemL(): E-mail document created.");
-				}
-			else
-				{
-				CPIXLOGSTRING2("CMessageDataHandler::CreateMessageIndexItemL(): Error %d in creating e-mail document.", err);
-				}
-			break;
-			}
-		case EMsgTypeInvalid:
-		// For EMsgTypeDraft there is no way to tell if it was a SMS, MMS or email,
-		// so don't create index_item.
-		case EMsgTypeDraft:
-		default:
-			// Error occurred
-			break;
-		}
-
-	// Exit if wrong message type
-	if (index_item == NULL)
-		{
-		CPIXLOGSTRING("CMessageDataHandler::CreateMessageIndexItemL(): Document was not created.");
-		return;
-		}
-	CleanupStack::PushL(index_item);
-		
-	// Folder field
-	TMsvEntry entry;
-	TMsvId service = 0;
-	iMsvSession.GetEntry(aFolderId, service, entry);
-	HBufC *folder_str = entry.iDetails.AllocLC();
-	index_item->AddFieldL(KFolderField, *folder_str, CDocumentField::EStoreYes | CDocumentField::EIndexNo);
-
-	// Mime type field
-	index_item->AddFieldL(KMimeTypeField, KMimeTypeMessaging, CDocumentField::EStoreYes | CDocumentField::EIndexUnTokenized);		
-	
-		// Send for indexing
-	if (iMessagePlugin.GetIndexer())
-		{
-		if (aActionType == ECPixAddAction)
-			{
-			TRAPD(err, iMessagePlugin.GetIndexer()->AddL(*index_item));
-			if (err == KErrNone)
-				{
-				CPIXLOGSTRING("CMessageDataHandler::CreateMessageIndexItemL(): Added.");
-				}
-			else
-				{
-				CPIXLOGSTRING2("CMessageDataHandler::CreateMessageIndexItemL(): Error %d in adding.", err);
-				}
-			}
-		else if (aActionType == ECPixUpdateAction)
-			{
-			TRAPD(err, iMessagePlugin.GetIndexer()->UpdateL(*index_item));
-			if (err == KErrNone)
-				{
-				CPIXLOGSTRING("CMessageDataHandler::CreateMessageIndexItemL(): Updated.");
-				}
-			else
-				{
-				CPIXLOGSTRING2("CMessageDataHandler::CreateMessageIndexItemL(): Error %d in updating.", err);
-				}
-			}
-		}
-	else
-		{
-		CPIXLOGSTRING("END CMessageDataHandler::CreateMessageIndexItemL(): No indexer present.");
-		}
-		
-	CleanupStack::PopAndDestroy(folder_str);
-	CleanupStack::PopAndDestroy(index_item);
-	}
-
-// ---------------------------------------------------------------------------
-// CMessageDataHandler::CreateSmsDocumentL
-// ---------------------------------------------------------------------------
-//
-CSearchDocument* CMessageDataHandler::CreateSmsDocumentL(const TMsvId& aMsvId, const TMsvId& aFolderId)
-	{
-	// Select mtm for this type
-	iSmsMtm->SwitchCurrentEntryL(aMsvId);
-	iSmsMtm->LoadMessageL();
-
-	// creating CSearchDocument object with unique ID for this application
-	TBuf<KMaxDocId> docid_str;
-	docid_str.AppendNum(aMsvId);
-	CSearchDocument* index_item = CSearchDocument::NewLC(docid_str, _L(SMSAPPCLASS));
-
-	// Add from field use the name instead of number if in the contacts db.
-	// (iSmsMtm->SmsHeader().FromAddress() - only returns the number)
-	TMsvEntry entry;
-	TMsvId service = 0;
-	iMsvSession.GetEntry(aMsvId, service, entry);
-	HBufC *fromNameOrNumberBuf = entry.iDetails.AllocLC();
-	index_item->AddFieldL(KFromField, *fromNameOrNumberBuf);
-
-	// Add the recipients as content items
-	TBuf<64> to_field;
-	const CDesCArray
-			& recipientArray =
-					static_cast<const CDesCArray&> (iSmsMtm->AddresseeList().RecipientList());
-	for (TInt i = 0; i < recipientArray.MdcaCount(); i++)
-		{
-		to_field = KToField;
-		if (i>0)
-			to_field.AppendNum(i);
-		index_item->AddFieldL(to_field, recipientArray.MdcaPoint(i));
-		}
-
-	// Add the body text as a content item
-	TInt msgLength = iSmsMtm->Body().DocumentLength();
-	HBufC* bodyText = HBufC::NewLC(msgLength);
-	TPtr body_ptr = bodyText->Des();
-	iSmsMtm->Body().Extract(body_ptr);
-	index_item->AddFieldL(KBodyField, *bodyText);
-	
-	// Add excerpt
-	// Note SMS does not have a subject field.
-	HBufC* excerpt = CreateExcerptLC(*fromNameOrNumberBuf, recipientArray, KNullDesC(), body_ptr, aFolderId);
-	index_item->AddExcerptL(*excerpt);
-	CleanupStack::PopAndDestroy(excerpt);	
-	CleanupStack::PopAndDestroy(bodyText);
-
-	CleanupStack::PopAndDestroy(fromNameOrNumberBuf);
-
-	// Pop the item
-	CleanupStack::Pop(index_item);
-	return index_item;
-	}
-
-// ---------------------------------------------------------------------------
-// CMessageDataHandler::CreateMmsDocumentL
-// ---------------------------------------------------------------------------
-//
-CSearchDocument* CMessageDataHandler::CreateMmsDocumentL(const TMsvId& aMsvId, const TMsvId& aFolderId)
-	{
-	// Select mtm for this type
- 	iMmsMtm->SwitchCurrentEntryL(aMsvId);
-	iMmsMtm->LoadMessageL();
-
-	// creating CSearchDocument object with unique ID for this application
-	TBuf<KMaxDocId> docid_str;
-	docid_str.AppendNum(aMsvId);
-	CSearchDocument* index_item = CSearchDocument::NewLC(docid_str, _L(MMSAPPCLASS));
-	
-	// Add from field
-	index_item->AddFieldL(KFromField, iMmsMtm->Sender());
-
-	// Add the recipients as content items
-	TBuf<64> to_field;
-	const CDesCArray
-			& recipientArray =
-					static_cast<const CDesCArray&> (iMmsMtm->AddresseeList().RecipientList());
-	for (TInt i = 0; i < recipientArray.MdcaCount(); i++)
-		{
-		to_field = KToField;
-		if (i>0)
-			to_field.AppendNum(i);
-		index_item->AddFieldL(to_field, recipientArray.MdcaPoint(i));
-		}
-
-	// Add subject
-	TPtrC subject(iMmsMtm->SubjectL());
-	index_item->AddFieldL(KSubjectField, subject);
-
-	// Add the body parts as a content items
-    // See if the MMS contains a text file attachment
-    TBool excerptFieldAdded(EFalse);
-    TInt bodycount = 0;
-    CMsvStore* msvStore = iMmsMtm->Entry().ReadStoreL();
-	CleanupStack::PushL( msvStore );
-	MMsvAttachmentManager& attManager = msvStore->AttachmentManagerL();
-	for ( TInt i = 0; i < attManager.AttachmentCount(); i++ )
-	    {
-		CMsvAttachment* attInfo = attManager.GetAttachmentInfoL(i);
-		CleanupStack::PushL( attInfo );
-		
-        if (attInfo->MimeType() == KMimeTypeText())
-            {
-            // Mime type
-            RFile attFile = attManager.GetAttachmentFileL(i);
-            CleanupClosePushL( attFile );
-            TInt charsetMIB = TextFileCharsetL(iFs, attFile);
-            
-            // Get the file size
-            TInt fileSize = 0;
-            User::LeaveIfError(attFile.Size(fileSize));
-            
-            // Read the file
-            HBufC8* textSource = HBufC8::NewLC(fileSize);
-            TPtr8 ptr8 = textSource->Des();
-            attFile.Read(ptr8);
-  
-  			// Convert character set
-            HBufC* text = HBufC::NewLC( fileSize );
-            TPtr buf = text->Des();
-            if ( KMmsIso10646Ucs2 != charsetMIB )
-                {
-                if ( KMmsUsAscii == charsetMIB )
-                    buf.Copy(*textSource);
-                else
-                    ConvertToUcs2FromUtfL(iFs, buf, *textSource, charsetMIB);
-                }
-            else
-                {
-                TPtrC ptr(reinterpret_cast<const TUint16*>(textSource->Des().Ptr()), 
-                                  textSource->Length() / sizeof(TText));
-        
-                // Ignore the first unicode charcter FFFE
-                ptr.Set( ptr.Mid( 1 ) );
-                buf = ptr;
-                }
-
-        
-            // Add the text of the file as a content item
-            // MMS message body is in attachment
-			TBuf<64> body_field;
-			body_field = KBodyField;
-			if (bodycount>0)
-			{
-				// Add additional body fields
-				body_field.AppendNum(bodycount);
-			}
-			else
-			{
-				// Add excerpt for the first body field
-				HBufC* excerpt = CreateExcerptLC(iMmsMtm->Sender(), recipientArray, subject, *text, aFolderId);
-				index_item->AddExcerptL(*excerpt);
-				CleanupStack::PopAndDestroy(excerpt);
-				excerptFieldAdded  = ETrue;
-			}
-
-            // TODO: add only few kilobytes of the body?
-            index_item->AddFieldL(body_field, *text);
-            ++bodycount;
-
-            CleanupStack::PopAndDestroy( 3, &attFile ); // text, textSource, attFile
-            }		
-        else 
-            {
-            // add attachment name when binary file.
-            if ( !excerptFieldAdded )
-                {
-                // attachment name might not be set
-                HBufC* excerpt = CreateExcerptLC(iMmsMtm->Sender(), recipientArray, subject, attInfo->AttachmentName(), aFolderId);
-                index_item->AddExcerptL(*excerpt);
-                CleanupStack::PopAndDestroy(excerpt);
-                excerptFieldAdded  = ETrue;
-                }
-            }
-	    CleanupStack::PopAndDestroy( attInfo );		
-	    }
-
-    // If no excerpt has been added yet, then add information have
-    if ( !excerptFieldAdded )
-        {
-        HBufC* excerpt = CreateExcerptLC(iMmsMtm->Sender(), recipientArray, subject, KNullDesC(), aFolderId);
-        index_item->AddExcerptL(*excerpt);
-        CleanupStack::PopAndDestroy(excerpt);
-        }
-
-    // Cleanup
-    CleanupStack::PopAndDestroy( msvStore );
-
-    // Pop the item
-    CleanupStack::Pop(index_item);
-    return index_item;
-    }
-
-// ---------------------------------------------------------------------------
-// CMessageDataHandler::CreateEmailDocumentL
-// ---------------------------------------------------------------------------
-//
-CSearchDocument* CMessageDataHandler::CreateEmailDocumentL(const TMsvId& aMsvId, const TMsvId& aFolderId)
-	{
-	// creating CSearchDocument object with unique ID for this application
-	TBuf<KMaxDocId> docid_str;
-	docid_str.AppendNum(aMsvId);
-	CSearchDocument* index_item = CSearchDocument::NewLC(docid_str, _L(EMAILAPPCLASS));
-
-	// Open the message entry
-	CMsvEntry* message_entry = CMsvEntry::NewL(iMsvSession, aMsvId, TMsvSelectionOrdering());
-	CleanupStack::PushL(message_entry);
-	
-	// Get body
-	CParaFormatLayer* paraFormatLayer = CParaFormatLayer::NewL();
-	CleanupStack::PushL(paraFormatLayer);
-	CCharFormatLayer* charFormatLayer = CCharFormatLayer::NewL();
-	CleanupStack::PushL(charFormatLayer);
-	CRichText* richtext = CRichText::NewL(paraFormatLayer, charFormatLayer);
-	CleanupStack::PushL(richtext);
-	CImEmailMessage* message_body = CImEmailMessage::NewLC(*message_entry);
-	message_body->GetBodyTextL(aMsvId, CImEmailMessage::EThisMessageOnly, *richtext, *paraFormatLayer, *charFormatLayer);
-	
-	// Read the message header
-	CMsvStore* message_store = message_entry->ReadStoreL();
-	CleanupStack::PushL(message_store);
-	CImHeader* header = CImHeader::NewLC();
-	header->RestoreL(*message_store);
-	
-	// Add from field
-	index_item->AddFieldL(KFromField, header->From());
-
-	// Add the ToRecipients as content items
-	TBuf<64> to_field;
-	for (TInt i = 0; i < header->ToRecipients().MdcaCount(); i++)
-		{
-		to_field = KToField;
-		if (i>0)
-			to_field.AppendNum(i);
-		index_item->AddFieldL(to_field, header->ToRecipients().MdcaPoint(i));
-		}
-
-	// Add the CcRecipients as content items
-	TBuf<64> cc_field;
-	for (TInt i = 0; i < header->CcRecipients().MdcaCount(); i++)
-		{
-		cc_field = KCcField;
-		if (i>0)
-			cc_field.AppendNum(i);
-		index_item->AddFieldL(cc_field, header->CcRecipients().MdcaPoint(i));
-		}
-
-	// Add the BccRecipients as content items
-	TBuf<64> bcc_field;
-	for (TInt i = 0; i < header->BccRecipients().MdcaCount(); i++)
-		{
-		bcc_field = KBccField;
-		if (i>0)
-			bcc_field.AppendNum(i);
-		index_item->AddFieldL(bcc_field, header->BccRecipients().MdcaPoint(i));
-		}
-
-	const TInt richTxtLen = (richtext->DocumentLength() < KMaxDocumentSize) ? richtext->DocumentLength() : KMaxDocumentSize;
-	HBufC* body_text = richtext->Read(0).Left(richTxtLen).AllocLC();
-
-	// Add subject
-	TPtrC subject(header->Subject());
-	index_item->AddFieldL(KSubjectField, subject);
-	
-	// Add message body
-	index_item->AddFieldL(KBodyField, *body_text);
-	
-	// Add excerpt
-    HBufC* excerpt = CreateExcerptLC(header->From(), header->ToRecipients(), subject, *body_text, aFolderId);
-    index_item->AddExcerptL(*excerpt);
-	CleanupStack::PopAndDestroy(excerpt);
-
-	// Cleanup everything last item message entry
-	CleanupStack::PopAndDestroy(8, message_entry);
-
-	// Pop the item
-	CleanupStack::Pop(index_item);
-	return index_item;	
-	}
-
-// ---------------------------------------------------------------------------
-// CMessageDataHandler::CreateExcerptLC
-// ---------------------------------------------------------------------------
-//
-HBufC* CMessageDataHandler::CreateExcerptLC(const TDesC& aFromAddress,
-											const CDesCArray& aRecipientArray,
-											const TDesC& aSubject,
-											const TDesC& aBodyText,
-											const TMsvId& aFolderId)
-	{
-	_LIT(KEllipsis, "...");
-	_LIT(KSpace, " ");
-	TInt excerptLength = KMsgBodyExcerptSymbols + KEllipsis().Length(); 
-
-	TMsvEntry entry;
-	TMsvId service = 0;
-	iMsvSession.GetEntry(aFolderId, service, entry);
-	HBufC *folder_str = entry.iDetails.AllocLC();
-
-	excerptLength += folder_str->Length();
-	excerptLength += KSpace().Length();
-
-	if ((aFromAddress.Length() > 0) && (aFolderId == KMsvGlobalInBoxIndexEntryIdValue))
-		{
-		excerptLength += aFromAddress.Length();
-		excerptLength += KSpace().Length();
-		}
-	if ((aRecipientArray.MdcaCount() > 0) && (aFolderId != KMsvGlobalInBoxIndexEntryIdValue))
-		{
-		excerptLength += aRecipientArray.MdcaPoint(0).Length();
-		excerptLength += KSpace().Length(); 
-		}
-	if (aSubject.Length() > 0)
-		{
-		excerptLength += aSubject.Length();
-		excerptLength += KSpace().Length();
-		}
-
-	HBufC* excerpt = HBufC::NewL(excerptLength);
-	TPtr excerptPtr = excerpt->Des();
-
-	excerptPtr.Copy(*folder_str);
-	excerptPtr.Append(KSpace);
-	
-	if ((aFromAddress.Length() > 0) && (aFolderId == KMsvGlobalInBoxIndexEntryIdValue))
-		{
-		excerptPtr.Append(aFromAddress);
-		excerptPtr.Append(KSpace);
-		}
-	if ((aRecipientArray.MdcaCount() > 0) && (aFolderId != KMsvGlobalInBoxIndexEntryIdValue))
-		{
-		excerptPtr.Append(aRecipientArray.MdcaPoint(0));
-		excerptPtr.Append(KSpace);
-		}
-	if (aSubject.Length() > 0)
-		{
-		excerptPtr.Append(aSubject);
-		excerptPtr.Append(KSpace);
-		}
-
-	excerptPtr.Append(aBodyText.Left(KMsgBodyExcerptSymbols));
-	if (aBodyText.Length() > KMsgBodyExcerptSymbols)
-		excerptPtr.Append(KEllipsis);
-
-	CleanupStack::PopAndDestroy(folder_str);
-	CleanupStack::PushL(excerpt);
-	return excerpt;
-	}
-
-// ---------------------------------------------------------------------------
-// CMessageDataHandler::IsTextUcs2
-// ---------------------------------------------------------------------------
-//
-TBool CMessageDataHandler::IsTextUcs2(const TDesC8& aText)
-    {
-    TBool ret = EFalse;
-    // Check UCS-2 Byte order mark is in the first two bytes of aText
-    if (aText.Length() >= sizeof(KMmsByteOrderMark))
-        {
-        TPtrC ptr(reinterpret_cast<const TUint16*>(aText.Ptr()), 
-                        aText.Length() / sizeof(TText));
-
-        if (KMmsByteOrderMark == ptr[0] ||
-            KMmsReversedByteOrderMark == ptr[0])
-            {
-            ret = ETrue;
-            }
-        }
-    return ret;
-    }   	
-
-// ---------------------------------------------------------------------------
-// CMessageDataHandler::TextContainsUtf8Bom
-// ---------------------------------------------------------------------------
-//
-TBool CMessageDataHandler::TextContainsUtf8Bom(const TDesC8& aText)
-    {    
-    TBool ret = EFalse;
-    // Check to see if there is the UTF8 BOM at the begining
-    TPtrC8 utf8Id(KUtf8Bom, KUtf8BomLength);
-    if (aText.Length() >= KUtf8BomLength &&
-        aText.Left(KUtf8BomLength) == utf8Id)
-        {
-        ret = ETrue;
-        }
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMessageDataHandler::TextFileCharsetL
-// ---------------------------------------------------------------------------
-//
-TUint CMessageDataHandler::TextFileCharsetL(RFs aFs, RFile aFile)
-    {
-    TUint ret = KMmsUsAscii;
-    TBuf8<sizeof(KMmsByteOrderMark)> ucs2Buf;
-
-    TInt size;
-    User::LeaveIfError(aFile.Size(size));
-    if (size >= sizeof(KMmsByteOrderMark))
-        {
-        // Check for the UCS-2 Byte Order Mark (BOM) at the beginning 
-        // beginning of the file
-        User::LeaveIfError(aFile.Read(ucs2Buf));
-        if(IsTextUcs2(ucs2Buf))
-            {
-            ret = KMmsIso10646Ucs2;
-            }
-        }
-
-    if (KMmsIso10646Ucs2 != ret)
-        {
-        // If the text is not UCS-2 it will probably be Utf8 or Ascii
-
-        TInt seekPos = 0;
-        User::LeaveIfError(aFile.Seek(ESeekStart, seekPos));
-        
-        HBufC8* buf = HBufC8::NewLC(size);
-        TPtr8 ptr = buf->Des();
-        User::LeaveIfError(aFile.Read(ptr));
-
-        // Check to see if there is the UTF8 BOM at the begining
-        if (TextContainsUtf8Bom(ptr))
-            {
-            ret = KMmsUtf8;
-            }
-        else
-            {
-            CCnvCharacterSetConverter* converter = 
-                              CCnvCharacterSetConverter::NewLC();
-            CArrayFix<CCnvCharacterSetConverter::SCharacterSet>* availCharSets =
-                CCnvCharacterSetConverter::CreateArrayOfCharacterSetsAvailableLC(aFs);
-
-            CArrayFix<CCnvCharacterSetConverter::SCharacterSet>* utf8CharSet = 
-                new (ELeave) CArrayFixFlat<CCnvCharacterSetConverter::SCharacterSet>(1); 
-            CleanupStack::PushL(utf8CharSet);
-
-            TInt count = availCharSets->Count();
-            for (TInt i = 0; i < count; i++)
-                {
-                CCnvCharacterSetConverter::SCharacterSet& charSet = (*availCharSets)[i];
-                if (KCharacterSetIdentifierUtf8 == charSet.Identifier())
-                    {
-                    utf8CharSet->AppendL(charSet);
-                    break;
-                    }
-                }
-            TInt confidence;
-            TUint charSetId;
-            converter->AutoDetectCharacterSetL(confidence, 
-                                               charSetId, 
-                                               *utf8CharSet,
-                                               *buf);
-            const TInt KMaxConfidence = 100;
-            if (KMaxConfidence == confidence)
-                {
-                ret = KMmsUtf8;
-                }
-            CleanupStack::PopAndDestroy(3, converter);
-
-            }
-
-        CleanupStack::PopAndDestroy(buf);
-        }
-
-    TInt zero = 0;
-    User::LeaveIfError(aFile.Seek(ESeekStart, zero));
-
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMessageDataHandler::ConvertToUcs2FromUtfL
-// ---------------------------------------------------------------------------
-//
-void CMessageDataHandler::ConvertToUcs2FromUtfL(RFs& aFs,
-                                                 TDes& aUcs2Text,
-                                                 const TDesC8& aUtfText,
-                                                 TUint aMibCharset)
-    {
-    TPtrC8 toConvert(aUtfText);
-    if (KMmsUtf8 == aMibCharset)
-        {
-        if (TextContainsUtf8Bom(toConvert))
-            {
-            toConvert.Set(toConvert.Mid(KUtf8BomLength));
-            }
-        }
-    // prepare to convert character set to unicode
-    CCnvCharacterSetConverter* converter = 
-                          CCnvCharacterSetConverter::NewLC();
-    // change character set ID from MIB to Symbian
-    TUint charsetID = converter->ConvertMibEnumOfCharacterSetToIdentifierL(
-                                     aMibCharset, aFs);
-    CCnvCharacterSetConverter::TAvailability availability =
-            converter->PrepareToConvertToOrFromL(charsetID, aFs);
-
-    if (availability == CCnvCharacterSetConverter::ENotAvailable)
-        {
-        User::Leave(KErrNotSupported);
-        }
-    TInt state = CCnvCharacterSetConverter::KStateDefault;
-
-    User::LeaveIfError(converter->ConvertToUnicode(aUcs2Text, toConvert, state));
-
-    CleanupStack::PopAndDestroy(converter);
-    }
-    
-	
-// -----------------------------------------------------------------------------
-// CMessageDataHandler::DoCancel
-// -----------------------------------------------------------------------------
-//   
-void CMessageDataHandler::DoCancel()
-	{
-	}
-
-// -----------------------------------------------------------------------------
-// CMessageDataHandler::RunL
-// -----------------------------------------------------------------------------
-//   
-void CMessageDataHandler::RunL()
-	{
-		CPIXLOGSTRING2( "CMessageDataHandler::RunL status %d",iStatus.Int() );
-
-	// Implement round robin for the CActives
-	Deque();
-	CActiveScheduler::Add(this);
-
-	// Handle next message
-	if (iMessageArray.Count() > 0)
-		{
-		// Take first id from array
-		CreateMessageIndexItemL(iMessageArray[0].iMessageId,
-				iMessageArray[0].iActionType, iMessageArray[0].iFolderId);
-		
-		// Remove item that is handled
-		iMessageArray.Remove(0);
-
-		// Handle next
-		HandleNextRequest();
-		}
-	}
-
-// -----------------------------------------------------------------------------
-// CMessageDataHandler::RunError
-// -----------------------------------------------------------------------------
-//   
-TInt CMessageDataHandler::RunError(TInt aError)
-	{
-		CPIXLOGSTRING2( "CMessageDataHandler::RunError err %d", aError );
-	if (iMessageArray.Count() > 0)
-		{
-		// Remove item that is handled
-		iMessageArray.Remove(0);
-
-		// Handle next after the error
-		HandleNextRequest();
-		}
-	return KErrNone;
-	}
-
-// ---------------------------------------------------------------------------
-// HandleNextRequest
-// ---------------------------------------------------------------------------
-//
-void CMessageDataHandler::HandleNextRequest()
-	{
-	if (!IsActive())
-		{
-		SetActive();
-		TRequestStatus* status = &iStatus;
-		User::RequestComplete(status, KErrNone);
-		}
-	}
-
-// End of File
-
--- a/harvesterplugins/messaging/src/cmessageharvester.cpp	Mon Apr 19 14:40:05 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,288 +0,0 @@
-/*
-* Copyright (c) 2010 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:  Harvester message plugin
-*
-*/
-
-
-//  INCLUDES 
-
-#include <e32base.h>
-#include <mtclreg.h>
-#include <mmsclient.h>
-#include <smsclnt.h>
-#include <smuthdr.h>
-#include <smsclnt.h>
-#include <smut.h>
-#include <gsmuelem.h>
-#include <msventry.h>
-#include <msvuids.h>
-#include <mmsconst.h>
-#include "cmessageharvester.h"
-
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// ---------------------------------------------------------------------------
-// CMessageHarvester::NewL
-// ---------------------------------------------------------------------------
-//
-CMessageHarvester* CMessageHarvester::NewL(  CMessagePlugin& aMessagePlugin, CMsvSession& aSession )
-	{
-	CMessageHarvester* self = new (ELeave) CMessageHarvester(  aMessagePlugin, aSession );
-	return self;
-	}
-
-// ---------------------------------------------------------------------------
-// CMessageHarvester::~CMessageHarvester
-// ---------------------------------------------------------------------------
-//
-CMessageHarvester::~CMessageHarvester()
-	{   
-	Cancel();  
-    delete iChildren;
-    iToBeSearchedFolders.Close();
-	}
-	  
-// ---------------------------------------------------------------------------
-// CMessageHarvester::CMessageHarvester
-// ---------------------------------------------------------------------------
-//
-CMessageHarvester::CMessageHarvester( CMessagePlugin& aMessagePlugin, CMsvSession& aSession  ) :
-	CActive(CActive::EPriorityIdle),
-	iMessagePlugin( aMessagePlugin ),
-	iMsvSession( aSession ),
-	iState(EStateIdle)
-	{
-	CActiveScheduler::Add( this );
-	}
-
-// ---------------------------------------------------------------------------
-// CMessageHarvester::StartHarvesting
-// ---------------------------------------------------------------------------
-//	
-void CMessageHarvester::StartHarvestingL()
-	{
-	// First, get message folders
-	GetMessageFoldersL();
-	
-	// Then, harvest them
-	iState = EStateNextFolder;
-	HandleNextRequest();
-	}
-
-// ---------------------------------------------------------------------------
-// CMessageHarvester::AddFolderWithSubFoldersL
-// ---------------------------------------------------------------------------
-//		
-void CMessageHarvester::AddFolderWithSubFoldersL( const TMsvId& aFolderId )
-	{
-	// Add a folder to the search list
-	User::LeaveIfError(iToBeSearchedFolders.Append(aFolderId));	
-	CMsvEntry* folderEntry = CMsvEntry::NewL(iMsvSession, aFolderId, TMsvSelectionOrdering(KMsvGroupByStandardFolders, EMsvSortByDetails, EFalse));
-	CleanupStack::PushL(folderEntry);	
-	ListSubFoldersL(*folderEntry);
-	CleanupStack::PopAndDestroy(folderEntry);
-	}
-
-// ---------------------------------------------------------------------------
-// CMessageHarvester::ListSubFoldersL
-// ---------------------------------------------------------------------------
-//	
-void CMessageHarvester::ListSubFoldersL(  const CMsvEntry& aFolderEntry ) 
-	{
-	// Only list "folder" children
-    CMsvEntrySelection* children = aFolderEntry.ChildrenL();
-	CleanupStack::PushL( children );
-
-	for ( TInt i=0; i < children->Count(); i++ )
-		{
-		TMsvId& childId = ( *children )[i];
-		const TMsvEntry& childEntry ( aFolderEntry.ChildDataL( childId ) );
-		if ( ( childEntry.iType == KUidMsvServiceEntry ) || 
-    		 ( childEntry.iType == KUidMsvFolderEntry ) )
-		    {
-		    // Add this folder to search list
-            AddFolderWithSubFoldersL( childId );		
-		    }
-		}
-	CleanupStack::PopAndDestroy();  // children
-	}
-	
-// ---------------------------------------------------------------------------
-// CMessageHarvester::GetMessageFoldersL
-// ---------------------------------------------------------------------------
-//
-void CMessageHarvester::GetMessageFoldersL()
-    {
-    // Get list of folders
-    CMsvEntry* rootEntry;
-    rootEntry = CMsvEntry::NewL( iMsvSession, KMsvRootIndexEntryIdValue,
-    TMsvSelectionOrdering( KMsvGroupByStandardFolders, EMsvSortByDetails, EFalse ) );
-    CleanupStack::PushL( rootEntry );
-	ListSubFoldersL( *rootEntry);
-	CleanupStack::PopAndDestroy( rootEntry );
-    }
-
-			
-// ---------------------------------------------------------------------------
-// CMessageHarvester::GetNextFolderL
-// ---------------------------------------------------------------------------
-//		
-void CMessageHarvester::GetNextFolderL()
-    {
-    if ( iToBeSearchedFolders.Count() > 0 )
-        
-    	{
-    	// Open the new folder
-        CMsvEntry* folder = CMsvEntry::NewL(
-	                            iMsvSession, 
-	                            iToBeSearchedFolders[0],
-	                            TMsvSelectionOrdering( KMsvGroupByStandardFolders, EMsvSortByDetails ));
-        
-        iCurrentFolder = iToBeSearchedFolders[0];
-        
-        // Get the message items from the folder
-        CleanupStack::PushL(folder);        
-        iChildren = folder->ChildrenWithTypeL( KUidMsvMessageEntry );
-        CleanupStack::PopAndDestroy( folder );
-        
-        // Remove current folder from the queue
-        iToBeSearchedFolders.Remove(0);
-        iState = EStateNextMessage;
-        HandleNextRequest();
-        }
-    else
-        {
-        // No more folders in the queue
-        iState = EStateIdle;
-        HandleNextRequest();      
-        }
-    }
-
-			
-// ---------------------------------------------------------------------------
-// CMessageHarvester::GetMessageId
-// ---------------------------------------------------------------------------
-//		    
-void CMessageHarvester::GetMessageIdL()
-    { 
-    if (iChildren && iChildren->Count() > 0)
-        {
-        // Take first item from list of message items, and give it for indexing
-        iMessagePlugin.MessageItemL((*iChildren)[0], ECPixAddAction, iCurrentFolder);
-        
-        // Delete the item from list
-        iChildren->Delete( 0 );   
-        if ( iChildren->Count() > 0 )
-            {
-            // Get the next message
-            iState = EStateNextMessage;
-            HandleNextRequest();      
-            }
-        else 
-            {
-            // No messages in this folder
-            iState = EStateNextFolder;
-            HandleNextRequest();      
-            }
-        }
-    else 
-        {
-        // Current folder dosen't contain any message items so change folder
-        iState = EStateNextFolder;
-        HandleNextRequest();      
-        }
-    }
-      
-// -----------------------------------------------------------------------------
-// CMessageHarvester::DoCancel
-// -----------------------------------------------------------------------------
-//   
-void CMessageHarvester::DoCancel()
-	{
-	}
-
-// -----------------------------------------------------------------------------
-// CMessageHarvester::RunL
-// -----------------------------------------------------------------------------
-//   
-void CMessageHarvester::RunL()	
-	{
-	
-	 // Simple Round-Robin scheduling.
-    Deque();
-    CActiveScheduler::Add( this );
-    
-	switch (iState)
-		{
-	       case EStateIdle:
-	            {
-	            // Delete current folder items
-	            delete iChildren; 
-	            iChildren = NULL;
-	            
-	            // Started idling, close the folders
-	            iToBeSearchedFolders.Reset();
-
-	            // Update harvester status
-	            iMessagePlugin.HarvestingCompleted(KErrNone);	            
-	            break; 
-	    	    }    
-		    case EStateNextMessage:
-		        {
-		        // Get the next message
-		        GetMessageIdL();	
-		        break;	        
-		        }
-	        case EStateNextFolder:
-	            {
-	            // Delete current folder items
-	            delete iChildren; 
-	            iChildren = NULL;
-	            
-	            // Start harvesting folders. 
-	            GetNextFolderL();	         
-				break;
-	            }
-		}
-	}
-	         				
-// -----------------------------------------------------------------------------
-// CMessageHarvester::RunError
-// -----------------------------------------------------------------------------
-//   
-TInt CMessageHarvester::RunError( TInt aError )	
-	{
-	iState = EStateIdle;
-    iMessagePlugin.HarvestingCompleted(aError);
-	return KErrNone;
-	}
-	
-// ---------------------------------------------------------------------------
-// SetNextRequest
-// ---------------------------------------------------------------------------
-//
-void CMessageHarvester::HandleNextRequest()
-    {
-    if (!IsActive())
-        {
-        SetActive();
-        TRequestStatus* status = &iStatus;
-        User::RequestComplete( status, KErrNone );
-        }
-    }
-
-
-// End of File
--- a/harvesterplugins/messaging/src/cmessagemonitor.cpp	Mon Apr 19 14:40:05 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,258 +0,0 @@
-/*
-* Copyright (c) 2010 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:  
-*
-*/
-
-
-// INCLUDE FILES
-#include "cmessagemonitor.h"
-#include "harvesterserverlogger.h"
-
-#include <smut.h>
-#include <mmsvattachmentmanager.h>	// MMsvAttachmentManager
-#include <msventry.h>	// CMsvEntry
-#include <msvuids.h>
-#include <mmsconst.h>
-#include <mtclreg.h>
-#include <smsclnt.h>
-#include <senduiconsts.h>
-
-
-// DEFINES
-#define INDEXING_QUEUE_MAX 100 // Maximum number of messages in the queue
-#define INDEXING_DELAY 5000000 // Nano seconds to delay the monitored messages 
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CMessageMonitor::NewL
-// -----------------------------------------------------------------------------
-//
-CMessageMonitor* CMessageMonitor::NewL(  CMessagePlugin& aMessagePlugin, CMsvSession& aSession )
-	{
-	CMessageMonitor* self = new ( ELeave ) CMessageMonitor( aMessagePlugin, aSession );
-	CleanupStack::PushL( self );
-	self->ConstructL();
-	CleanupStack::Pop( self );
-	return self;
-	}
-
-// -----------------------------------------------------------------------------
-// CMessageMonitor::CMessageMonitor
-// -----------------------------------------------------------------------------
-//
-CMessageMonitor::CMessageMonitor( CMessagePlugin& aMessagePlugin, CMsvSession& aSession )
-	: CActive(CActive::EPriorityStandard),
-	iState(EStateNone),
-	iMsvSession(aSession),
-	iMessagePlugin(aMessagePlugin)
-	{
-	CPIXLOGSTRING("ENTER CMessageMonitor::CMessageMonitor");
-
-	CActiveScheduler::Add(this);
-
-	CPIXLOGSTRING("END CMessageMonitor::CMessageMonitor");
-	}
-
-// -----------------------------------------------------------------------------
-// CMessageMonitor::ConstructL
-// -----------------------------------------------------------------------------
-//
-void CMessageMonitor::ConstructL() 
-	{
-	CPIXLOGSTRING("ENTER CMessageMonitor::ConstructL");
-
-	// Create timer 
-	User::LeaveIfError(iTimer.CreateLocal());
-	
-	CPIXLOGSTRING("END CMessageMonitor::ConstructL");
-	}
-	
-
-
-// -----------------------------------------------------------------------------
-// CMessageMonitor::~CMessageMonitor
-// -----------------------------------------------------------------------------
-//
-CMessageMonitor::~CMessageMonitor() 
-	{
-	CPIXLOGSTRING("ENTER ~CMessageMonitor");
-	Cancel();
-	iMessages.Close();
-	iTimer.Close();
-	CPIXLOGSTRING("END ~CMessageMonitor");
-	}
-
-// -----------------------------------------------------------------------------
-// CMessageMonitor::HandleMsgMovedL
-// -----------------------------------------------------------------------------
-//
-void CMessageMonitor::HandleMsgMovedL( const TMsvId aNewFolderId, 
-									   const TMsvId /* aOldFolderId */, 
-								   	   const CMsvEntrySelection& aSelection )
-	{
-	CPIXLOGSTRING("ENTER CMessageMonitor::HandleMsgMovedL");
-	
-	const TInt count( aSelection.Count() );
-	// cycle through every message in the CMsvEntrySelection
-	for ( TInt i=0; i < count; ++i )
-		{
-		TMsvId msgId = aSelection[i];
-		CPIXLOGSTRING2("msgId: %d", msgId );
-        MessageItemL( msgId, ECPixUpdateAction, aNewFolderId );
-		}
-	CPIXLOGSTRING("END CMessageMonitor::HandleMsgMovedL");
-	}
-
-
-// -----------------------------------------------------------------------------
-// CMessageMonitor::0
-// -----------------------------------------------------------------------------
-//
-void CMessageMonitor::HandleMsgCreatedChangedL( const CMsvEntrySelection& aSelection,
-                                          	    const TMsvId aFolderId,
-                                          	    const MMsvSessionObserver::TMsvSessionEvent /*aEvent*/ )
-	{
-	CPIXLOGSTRING("ENTER CMessageMonitor::HandleMsgCreatedChangedL");	
-	const TInt count( aSelection.Count() );
-	//MMsvSessionObserver::TMsvSessionEvent theEvent = aEvent;
-    // cycle through every message in the CMsvEntrySelection
-	for ( TInt i=0; i < count; ++i )
-		{
-		// extract the message server entry from the parameters
-		TMsvId msgId = aSelection[i];
-		CPIXLOGSTRING2("msgId: %d", msgId );							
-        TMsvId service = 0;
-        TMsvEntry entry;
-        const TInt err = iMsvSession.GetEntry( msgId, service, entry );
-        if ( ( !err ) && 
-            ( KUidMsvMessageEntry == entry.iType ) && 
-            ( entry.Visible() && entry.Complete() && !entry.InPreparation() ) &&
-            ( iMessagePlugin.CalculateMessageType( entry ) != EMsgTypeInvalid ) )
-            {
-            CPIXLOGSTRING("CMessageMonitor::HandleMsgCreatedChangedL Called # MonitorEvent #");
-            MessageItemL( msgId, ECPixUpdateAction, aFolderId );
-            }   
-        CPIXLOGSTRING2(" Folder TYPE %x", aFolderId );	     
-        CPIXLOGSTRING2(" Entry TYPE %x", entry.iType );	           
-        CPIXLOGSTRING2(" Entry VISIBLE %d", entry.Visible() );	          
-        CPIXLOGSTRING2(" Entry COMPLETE %d", entry.Complete() );
-        CPIXLOGSTRING2(" Entry INPREPARATION %d", entry.InPreparation() );
-        CPIXLOGSTRING2(" Message TYPE %d", iMessagePlugin.CalculateMessageType( entry ));
-        }
-	CPIXLOGSTRING("END CMessageMonitor::HandleMsgCreatedChangedL");	        
-	}
-	
-// -----------------------------------------------------------------------------
-// CMessageMonitor::HandleMsgDeletedL
-// -----------------------------------------------------------------------------
-//
-void CMessageMonitor::HandleMsgDeletedL( const CMsvEntrySelection& aSelection )
-	{
-	CPIXLOGSTRING("ENTER CMessageMonitor::HandleMsgDeletedL");
-	
-	const TInt count( aSelection.Count() );
-	// cycle through every message in the CMsvEntrySelection
-	for( TInt i = 0; i < count; ++i )
-		{
-		TMsvId msgId = aSelection[i];	
-		CPIXLOGSTRING2("msgId: %d", msgId );								
-		MessageItemL( msgId, ECPixRemoveAction, NULL);
-		}
-	CPIXLOGSTRING("END CMessageMonitor::HandleMsgDeletedL");	
-	}	
-
-
-void CMessageMonitor::OverwriteOrAddToQuereL(TMsvId aMsvId, TCPixActionType aAction, TMsvId aFolderId)
-{
-	// Overwrite or add the index to the queue
-	TMessageRecord message;
-	message.iMsvId = aMsvId;
-	message.iAction = aAction;
-	message.iFolderId = aFolderId;
-	for (TInt i=0; i<iMessages.Count(); i++)
-	{
-		if (iMessages[i].iMsvId==aMsvId)
-		{
-			// Older version found
-			iMessages[i] = message;
-			return;
-		}
-	}
-	
-	// older not found, append
-	iMessages.AppendL(message);
-}
-
-void CMessageMonitor::MessageItemL(TMsvId aMsvId, TCPixActionType aAction, TMsvId aFolderId)
-	{	
-		// Overwrite or add the index to the queue
-		OverwriteOrAddToQuereL(aMsvId, aAction, aFolderId);
-			
-		// Check the size against maximum queue size
-		if (iMessages.Count() > INDEXING_QUEUE_MAX)
-		{
-			// Maximum is exceeded, force the write immediately
-			if (iState == EStateWaiting)
-			{
-				iTimer.Cancel(); // RunL will be called with iStatus of KErrCancelled
-			}
-			else if (iState == EStateNone)
-			{
-		        SetActive();
-		        TRequestStatus* status = &iStatus;
-		        User::RequestComplete(status, KErrNone); // RunL will be called with iStatus of KErrNone
-			}
-		}
-		else
-		{
-			// Maximum is not exceeded, keep waiting
-			if (iState == EStateNone)
-			{
-				iState = EStateWaiting;
-				iTimer.After(iStatus, INDEXING_DELAY); // Wait 5 seconds before putting this to index
-				SetActive();
-			}
-		}
-	}
-
-void CMessageMonitor::RunL()
-	{
-		// Index the current queue	
-		while (iMessages.Count()>0)
-		{
-			TMessageRecord message = iMessages[0];
-			iMessages.Remove(0);
-			iMessagePlugin.MessageItemL(message.iMsvId, message.iAction, message.iFolderId);
-		}
-		
-		// Everything is indexed no need to be waiting anymore
-		iState = EStateNone;
-	}
-
-void CMessageMonitor::DoCancel()
-	{
-		iTimer.Cancel();
-		iState = EStateNone;
-	}
-
-TInt CMessageMonitor::RunError(TInt /* aError */)
-	{
-		// TODO handle indexing errors here
-		return KErrNone; // Don't panic
-	}
-
-// End Of File
-
--- a/harvesterplugins/messaging/src/cmessageplugin.cpp	Mon Apr 19 14:40:05 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,612 +0,0 @@
-/*
-* Copyright (c) 2010 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:  
-*
-*/
-
-
-#include <e32base.h> 
-#include <msvids.h>
-#include <msvuids.h>
-#include <mmsconst.h>
-#include <mmsclient.h>
-#include <smsclnt.h>
-#include <txtrich.h>
-#include <smuthdr.h>
-#include <smut.h>
-#include <miutset.h>
-#include <senduiconsts.h>
-#include <mtclreg.h>
-#include <gsmuelem.h>
-#include <msventry.h>
-#include <ccpixindexer.h>
-
-#include "cmessageplugin.h"
-#include "cmessagemonitor.h"
-#include "cmessageharvester.h"
-#include "cmessagedatahandler.h"
-#include "harvesterserverlogger.h"
-
-// maximum length that the fully qualified msg Plugin base app class descriptor can be
-// e.g. "@c:root msg"
-const TInt KMsgPluginBaseAppClassMaxLen = 64;
-
-
-// local declarations and functions
-namespace {
-
-_LIT(KCPixSearchServerPrivateDirectory, "\\Private\\2001f6f7\\");
-_LIT(KPathIndexDbPath, CPIX_INDEVICE_INDEXDB);
-
-_LIT(KPathTrailer, "\\root\\msg");
-_LIT(KMsgBaseAppClassGeneric, ":root msg");
-_LIT(KAtSign, "@");
-_LIT(KColon, ":");
-
-/**
-* MapFileToDrive - gets the TDriveNumber associated with the aBaseAppClass.
-* @aBaseAppClass e.g. "@c:root file"
-* @aDrive returns the TDriveNumber for the aBaseAppClass
-* returns KErrNone on success or a standard error code
-*/
-TInt MapBaseAppClassToDrive(const TDesC& aBaseAppClass, TDriveNumber& aDrive)
-    {
-    if (KErrNone != aBaseAppClass.Left(1).Compare(KAtSign))
-        {
-        return KErrGeneral;
-        }
-
-    TPtrC drvChar = aBaseAppClass.Left(2).Right(1);
-    TChar d(drvChar[0]);
-    TInt drive;
-    const TInt ret = RFs::CharToDrive(d, drive);
-    if (!ret)
-        {
-        aDrive = TDriveNumber(drive);
-        }
-
-    return ret;
-    }
-
-}// anonymous namespace
-
-
-// ---------------------------------------------------------------------------
-// CMessagePlugin::NewL
-// ---------------------------------------------------------------------------
-//  
-CMessagePlugin* CMessagePlugin::NewL()
-{
-	CMessagePlugin* instance = CMessagePlugin::NewLC();
-    CleanupStack::Pop(instance);
-    return instance;
-}
-
-// ---------------------------------------------------------------------------
-// CMessagePlugin::NewLC
-// ---------------------------------------------------------------------------
-//  
-CMessagePlugin* CMessagePlugin::NewLC()
-{
-	CMessagePlugin* instance = new (ELeave)CMessagePlugin();
-    CleanupStack::PushL(instance);
-    instance->ConstructL();
-    return instance;
-}
-
-// ---------------------------------------------------------------------------
-// CMessagePlugin::CMessagePlugin
-// ---------------------------------------------------------------------------
-//  
-CMessagePlugin::CMessagePlugin()
-{
-	iMessageDataHandler = NULL;
-	iMessageHarvester = NULL;
-	iMessageMonitor = NULL;
-	iMsvSession = NULL;
-}
-
-// ---------------------------------------------------------------------------
-// CMessagePlugin::~CMessagePlugin
-// ---------------------------------------------------------------------------
-//  
-CMessagePlugin::~CMessagePlugin()
-{
-    // remove notification paths before destroying iMonitor
-    for (TInt i=EDriveA; i<=EDriveZ; i++)
-        UnMount(TDriveNumber(i), EFalse);
-	delete iMessageDataHandler;
-	delete iMessageHarvester;	
-	delete iMessageMonitor;	
-	delete iMsvSession;
-	iFs.Close();
-}
-
-// ---------------------------------------------------------------------------
-// CMessagePlugin::ConstructL
-// ---------------------------------------------------------------------------
-//  
-void CMessagePlugin::ConstructL()
-{
-    TInt err = iFs.Connect();
-    CPIXLOGSTRING2("CMessagePlugin::ConstructL, iFs.Connect: %i", err);
-    User::LeaveIfError(err);
-    iCurrentDrive = EDriveC; //Default drive is C drive
-    iMsvSession = CMsvSession::OpenSyncL(*this);
-    iMessageMonitor = CMessageMonitor::NewL( *this, *iMsvSession );    
-    iMessageHarvester = CMessageHarvester::NewL( *this, *iMsvSession );    
-    iMessageDataHandler = CMessageDataHandler::NewL( *this, *iMsvSession );    
-    for (TInt i=EDriveA; i<=EDriveZ; i++)
-        {
-        iIndexer[i] = NULL; //Initialize to NULL
-        }
-}
-
-// ---------------------------------------------------------------------------
-// CMessagePlugin::StartPluginL
-// ---------------------------------------------------------------------------
-//  
-void CMessagePlugin::StartPluginL()
-	{
-	//Get the current Drive for storage
-	iCurrentDrive = iMsvSession->CurrentDriveL();
-	CPIXLOGSTRING2("currentDrive from messaging app : %d", iCurrentDrive );
-	MountL(TDriveNumber(iCurrentDrive)); //Mount current drive
-	// Define this base application class, use default location
-	}
-
-// ---------------------------------------------------------------------------
-// CMessagePlugin::StartHarvestingL
-// ---------------------------------------------------------------------------
-//  
-void CMessagePlugin::StartHarvestingL(const TDesC& aQualifiedBaseAppClass)
-	{
-	CPIXLOGSTRING("START CMessagePlugin::StartHarvestingL");
-	// Map base app class to a drive number
-	TDriveNumber drive ( EDriveA );//Initialize to silence compiler warnings.
-	if (KErrNone != MapBaseAppClassToDrive(aQualifiedBaseAppClass, drive))
-	   User::Leave(KErrGeneral);
-
-    // Leave if no indexer for this drive
-	if (!iIndexer[drive])
-	   User::Leave(KErrGeneral);
-	        
-    // Reset the database
-	iIndexer[drive]->ResetL();
-#ifdef __PERFORMANCE_DATA
-    iStartTime.UniversalTime();
-#endif
-    iMessageHarvester->StartHarvestingL();
-	}
-
-// ---------------------------------------------------------------------------
-// CMessagePlugin::MountL
-// ---------------------------------------------------------------------------
-//
-void CMessagePlugin::MountL(TDriveNumber aMedia,TBool aForceReharvesting)
-    {
-    CPIXLOGSTRING("START CMessagePlugin::MountL");
-    // Check if already exists
-    if (iIndexer[aMedia])
-        return;
-    
-    // Form the baseappclass for this media
-    TBuf<KMsgPluginBaseAppClassMaxLen> baseAppClass;
-    FormBaseAppClass(aMedia, baseAppClass);
-
-    // Define this volume
-    HBufC* path = DatabasePathLC(aMedia);
-    User::LeaveIfError(iSearchSession.DefineVolume(baseAppClass, *path));
-    CleanupStack::PopAndDestroy(path);
-    
-    // construct and open the database
-    TRAPD(err,iIndexer[aMedia] = CCPixIndexer::NewL(iSearchSession));
-    CPIXLOGSTRING2("CCPixIndexer::NewL returned : %d", err );
-    TRAP(err,iIndexer[aMedia]->OpenDatabaseL(baseAppClass));
-
-    // Add to harvesting queue
-    iObserver->AddHarvestingQueue(this, baseAppClass,aForceReharvesting);  
-    CPIXLOGSTRING("END CMessagePlugin::MountL");
-    }
-
-// ---------------------------------------------------------------------------
-// CMessagePlugin::UnMount
-// ---------------------------------------------------------------------------
-//
-void CMessagePlugin::UnMount(TDriveNumber aMedia, TBool aUndefineAsWell)
-    {
-    CPIXLOGSTRING("START CMessagePlugin::UnMount");
-    // Check if already exists
-    if (!iIndexer[aMedia])
-        return;
-    
-    // Form the baseappclass for this media
-    TBuf<KMsgPluginBaseAppClassMaxLen> baseAppClass;
-    FormBaseAppClass(aMedia, baseAppClass);             
-        
-    // Remove from harvesting queue
-    iObserver->RemoveHarvestingQueue(this, baseAppClass);   
-    
-    // Delete the index object
-    if (iIndexer[aMedia])
-        {
-        delete iIndexer[aMedia];
-        iIndexer[aMedia] = NULL;
-        }
-    
-    // if the aActionType is EFFMmcDismount, then the
-    // parameter aFilename is the baseAppClass of the Index database
-    // to be dropped.
-    if (aUndefineAsWell)
-        iSearchSession.UnDefineVolume(baseAppClass);
-    }
-
-
-// ---------------------------------------------------------------------------
-// CMessagePlugin::FormBaseAppClass
-// ---------------------------------------------------------------------------
-//  
-TInt CMessagePlugin::FormBaseAppClass(TDriveNumber aMedia, TDes& aBaseAppClass)
-    {
-    TChar chr;
-    const TInt ret = RFs::DriveToChar(aMedia, chr);
-    if (KErrNone == ret)
-        {
-        aBaseAppClass.Copy(KAtSign);
-        aBaseAppClass.Append(chr);
-        aBaseAppClass.LowerCase();
-        aBaseAppClass.Append(KMsgBaseAppClassGeneric);
-        }
-
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMessagePlugin::DatabasePathLC
-// ---------------------------------------------------------------------------
-//
-HBufC* CMessagePlugin::DatabasePathLC(TDriveNumber aMedia)
-    {
-    CPIXLOGSTRING("START CMessagePlugin::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());
-    TPtr indexDbPathPtr = indexDbPath->Des();
-
-#if 1 // Data caging implementation
-    iFs.CreatePrivatePath(aMedia);
-
-    TChar chr;
-    RFs::DriveToChar(aMedia, chr);
-    indexDbPathPtr.Append(chr);
-    indexDbPathPtr.Append(KColon);
-
-    TFileName pathWithoutDrive;
-    iFs.PrivatePath(pathWithoutDrive);
-    indexDbPathPtr.Append(KCPixSearchServerPrivateDirectory);
-#else // here is the way to calculate the path if data caging is not being used.
-    TFileName rootPath;
-    PathInfo::GetRootPath(rootPath, aMedia);
-    indexDbPathPtr.Append(rootPath);
-#endif 
-
-    indexDbPathPtr.Append(KPathIndexDbPath);
-    indexDbPathPtr.Append(KPathTrailer);
-
-    return indexDbPath;
-    }
-
-// ---------------------------------------------------------------------------
-// CMessagePlugin::GetIndexer
-// ---------------------------------------------------------------------------
-//
-CCPixIndexer* CMessagePlugin::GetIndexer()
-    {
-    return iIndexer[iCurrentDrive];
-    }
-
-// ---------------------------------------------------------------------------
-// CMessagePlugin::IsMediaRemovableL
-// ---------------------------------------------------------------------------
-// 
-TBool CMessagePlugin::IsMediaRemovableL(TDriveNumber& aDrive)
-    {
-    TDriveInfo driveInfo; 
-    User::LeaveIfError(iFs.Drive(driveInfo,aDrive));
-    TBool mediaRemovable(EFalse);
-    driveInfo.iDriveAtt & KDriveAttRemovable ? mediaRemovable = ETrue : mediaRemovable = EFalse;
-    return mediaRemovable;
-    }
-// ---------------------------------------------------------------------------
-// CMessagePlugin::HandleSessionEventL
-// ---------------------------------------------------------------------------
-//  
-void CMessagePlugin::HandleSessionEventL( TMsvSessionEvent aEvent, 
-										  		 TAny* aArg1, 
-										  		 TAny* aArg2, 
-										  		 TAny* aArg3 )
-	{		
-	CPIXLOGSTRING("ENTER CMessagePlugin::HandleSessionEventL");
-	CPIXLOGSTRING2("TMsvSessionEvent aEvent: %d", aEvent );			
-		
-	switch( aEvent )
-		{
-		case EMsvEntriesCreated:
-		case EMsvEntriesChanged:
-			{
-			// Handle changed / created event
-            CMsvEntrySelection* selection = reinterpret_cast<CMsvEntrySelection*>(aArg1);
-            TMsvId folderId = *( reinterpret_cast<TMsvId*>(aArg2));
-#ifdef __PERFORMANCE_DATA
-            iStartTime.UniversalTime();
-		    iMessageMonitor->HandleMsgCreatedChangedL(*selection, folderId, aEvent);
-		    UpdatePerformaceDataL(EMsvEntriesChanged);
-#else
-		    iMessageMonitor->HandleMsgCreatedChangedL(*selection, folderId, aEvent);
-#endif		    
-			break;
-			}		
-		case EMsvEntriesDeleted:
-			{
-			// Handle deletion event
-		    CMsvEntrySelection* selection = reinterpret_cast<CMsvEntrySelection*> ( aArg1 );
-#ifdef __PERFORMANCE_DATA
-            iStartTime.UniversalTime();
-		    iMessageMonitor->HandleMsgDeletedL( *selection );
-		    UpdatePerformaceDataL(EMsvEntriesDeleted);
-#else
-		    iMessageMonitor->HandleMsgDeletedL( *selection );
-#endif
-			break;
-			}
-		case EMsvEntriesMoved:
-			{
-			// track move operations
-			// or sent folder
-			// ... extract the useful parameters
-            if( aArg1 && aArg2 && aArg3 )
-                {
-                CMsvEntrySelection* selection = reinterpret_cast<CMsvEntrySelection*> ( aArg1 );
-                // aArg2 is the TMsvId of the new parent. aArg3 is the TMsvId of 
-                // the old parent entry.
-                TMsvId newFolderId = *(reinterpret_cast<TMsvId*>(aArg2));
-                TMsvId oldFolderId = *(reinterpret_cast<TMsvId*>(aArg3));
-#ifdef __PERFORMANCE_DATA
-                iStartTime.UniversalTime();
-                iMessageMonitor->HandleMsgMovedL(newFolderId, oldFolderId, *selection);
-                UpdatePerformaceDataL(EMsvEntriesMoved);
-#else
-                iMessageMonitor->HandleMsgMovedL(newFolderId, oldFolderId, *selection);
-#endif
-                }
-			break;
-			}			
-		case EMsvMediaChanged:
-		    {
-		    //Unmount old media drive
-		    CPIXLOGSTRING("ENTER CMessagePlugin::HandleSessionEventL EMsvMediaChanged");
-		    TDriveNumber drive = *(reinterpret_cast<TDriveNumber*>(aArg1));
-		    UnMount(drive);
-		    drive = *(reinterpret_cast<TDriveNumber*>(aArg2));
-		    //Check if Media is removable then force reharvesting else keep indexes same
-		    MountL(drive,IsMediaRemovableL(drive)); //Mount new media drive for harvesting
-		    iCurrentDrive = drive;//Index of current drive
-		    }
-		    break;
-		case EMsvMediaUnavailable:
-		    {
-		    //No need to handle as when drive will be removed EMsvMediaChanged event
-		    //will be received for default media drive can be handled there
-		    //Unmount old media drive
-		    CPIXLOGSTRING("ENTER CMessagePlugin::HandleSessionEventL EMsvMediaUnavailable");
-		    TDriveNumber drive = *(reinterpret_cast<TDriveNumber*>(aArg1));
-		    UnMount(drive);
-		    }
-		    break;
-		case EMsvMediaAvailable:
-			{
-			CPIXLOGSTRING("ENTER CMessagePlugin::HandleSessionEventL EMsvMediaAvailable");
-			//Removed media drive available again mount media drive and unmount default
-			UnMount(TDriveNumber(iCurrentDrive)); //Unmount current drive
-			TDriveNumber drive = *(reinterpret_cast<TDriveNumber*>(aArg1));
-			MountL(drive,IsMediaRemovableL(drive)); //Mount avilable media drive for harvesting
-			}
-			break;
-		case EMsvServerFailedToStart:			
-		case EMsvCloseSession:
-		case EMsvServerTerminated:
-			{
-			User::Panic(_L("CMessagePlugin PANIC"), KErrServerTerminated);
-			break;				
-			}			
-		case EMsvMtmGroupInstalled:
-		case EMsvMtmGroupDeInstalled:
-		case EMsvGeneralError: // not used after v5
-		case EMsvServerReady:
-		case EMsvCorruptedIndexRebuilt:
-		case EMsvMediaIncorrect:
-		case EMsvCorruptedIndexRebuilding:
-		default:
-			{
-			break;
-			}							
-		}	
-	CPIXLOGSTRING("END CMessagePlugin::HandleSessionEventL");	
-		
-	}	
-
-// ---------------------------------------------------------------------------
-// CMessageDataHandler::CalculateMessageType
-// ---------------------------------------------------------------------------
-//	    
-TMsgType CMessagePlugin::CalculateMessageType (const TMsvEntry& aEntry )
-{
-    CPIXLOGSTRING("ENTER CMessagePlugin::CalculateMessageType");
-	TMsgType ret = EMsgTypeInvalid;
-	CPIXLOGSTRING2("CMessagePlugin::CalculateMessageType uid: %x", aEntry.iMtm.iUid );
-    if( aEntry.iMtm.iUid  == KUidMsgTypeMultimedia.iUid ) 
-        {
-        CPIXLOGSTRING("CMessagePlugin:CalculateMessageType  ###  Mms Message ###");
-        ret = EMsgTypeMms;
-        }
-    else if( aEntry.iMtm.iUid  == KUidMsgTypeSMTP.iUid )
-		{
-		CPIXLOGSTRING("CMessagePlugin:CalculateMessageType  ### ESmtpEmail ###");
-        ret = EMsgTypeEmailSmtp;
-		}
-	else if( aEntry.iMtm.iUid  == KUidMsgTypePOP3.iUid )
-		{
-		CPIXLOGSTRING("CMessagePlugin:CalculateMessageType  ### EPop3Email ###");
-        ret = EMsgTypeEmailPop3;
-		}
-	else if( aEntry.iMtm.iUid  == KUidMsgTypeIMAP4.iUid )
-		{
-		CPIXLOGSTRING("CMessagePlugin:CalculateMessageType  ### EImap4Email ###");
-        ret = EMsgTypeEmailImap4;
-		}
-	// Add J.J	
-#ifndef __SERIES60_30__ // Not supported before S60 3d FP1
-   	else if ( aEntry.iMtm.iUid == KSenduiMtmUniMessageUid.iUid )
-	    {
-	    CPIXLOGSTRING("CMessagePlugin:CalculateMessageType  ### EDraftMessage ###");
-        ret = EMsgTypeDraft;
-	    }
-#endif
-    // else if we have a normal text based SMS it is valid    
- 	else if ( aEntry.iMtm.iUid == KUidMsgTypeSMS.iUid )
- 		{
- 		CPIXLOGSTRING("CMessagePlugin:CalculateMessageType  ###  SMS Message ###");
-        ret = EMsgTypeSms;
- 		}
-   	else if ( aEntry.iMtm.iUid == KSenduiMtmSmsUid.iUid )
-		{
-		CPIXLOGSTRING("CMessagePlugin:CalculateMessageType  ### Sms Message ###");
-        ret = EMsgTypeSms;
-		}
-    CPIXLOGSTRING("END CMessagePlugin::CalculateMessageType");
-	return ret;
-}
-
-// ---------------------------------------------------------------------------
-// CMessagePlugin::MessageItemL
-// ---------------------------------------------------------------------------
-//  
-void CMessagePlugin::MessageItemL( TMsvId aMsgId, TCPixActionType aActionType, TMsvId aFolderId  )	
-    {
-    //New item found gather data from that.
-     iMessageDataHandler->GatherDataL( aMsgId, aActionType, aFolderId ); 
-    }
-
-// ---------------------------------------------------------------------------
-// CMessagePlugin::HarvestingCompleted
-// ---------------------------------------------------------------------------
-//  
-void CMessagePlugin::HarvestingCompleted(TInt aError)
-{
-	// Notifies the indexing manager of completed harvesting, called by CMessageHarvester
-    Flush( *GetIndexer() );
-    TBuf<KMsgPluginBaseAppClassMaxLen> baseAppClass;
-    FormBaseAppClass(TDriveNumber(iCurrentDrive), baseAppClass);
-#ifdef __PERFORMANCE_DATA
-    TRAP_IGNORE( UpdatePerformaceDataL() );
-#endif
-    iObserver->HarvestingCompleted(this, baseAppClass, aError);
-}
-
-// ---------------------------------------------------------------------------
-// CMessagePlugin::UpdatePerformaceDataL
-// ---------------------------------------------------------------------------
-//
-#ifdef __PERFORMANCE_DATA
-void CMessagePlugin::UpdatePerformaceDataL()
-    {
-    TTime now;
-   
-    
-    iCompleteTime.UniversalTime();
-    TTimeIntervalMicroSeconds timeDiff = iCompleteTime.MicroSecondsFrom(iStartTime);
-    
-    RFs fileSession;
-    RFile perfFile;
-    User::LeaveIfError( fileSession.Connect () );
-    
-    
-    /* Open file if it exists, otherwise create it and write content in it */
-    
-        if(perfFile.Open(fileSession, _L("c:\\data\\MessagePerf.txt"), EFileWrite))
-                   User::LeaveIfError(perfFile.Create (fileSession, _L("c:\\data\\MessagePerf.txt"), EFileWrite));
-    
-    HBufC8 *heap = HBufC8::NewL(100);
-    TPtr8 ptr = heap->Des();
-    now.HomeTime();
-    TBuf<50> timeString;             
-                
-    _LIT(KOwnTimeFormat,"%:0%H%:1%T%:2%S");
-    now.FormatL(timeString,KOwnTimeFormat);
-    ptr.AppendNum(now.DateTime().Day());
-    ptr.Append(_L("/"));
-    ptr.AppendNum(now.DateTime().Month());
-    ptr.Append(_L("/"));
-    ptr.AppendNum(now.DateTime().Year());
-    ptr.Append(_L(":"));
-    ptr.Append(timeString);
-    ptr.Append( _L("Time taken for Harvesting Message is : "));
-    ptr.AppendNum(timeDiff.Int64()/1000) ;
-    ptr.Append(_L(" MilliSeonds \n"));
-    TInt myInt = 0;
-    perfFile.Seek(ESeekEnd,myInt);
-    perfFile.Write (ptr);
-    perfFile.Close ();
-    fileSession.Close ();
-    delete heap;
-    }
-
-// ---------------------------------------------------------------------------
-// CMessagePlugin::UpdatePerformaceDataL
-// ---------------------------------------------------------------------------
-//
-void CMessagePlugin::UpdatePerformaceDataL(TMsvSessionEvent action) {
-    
-        iCompleteTime.UniversalTime();
-        TTimeIntervalMicroSeconds timeDiff = iCompleteTime.MicroSecondsFrom(iStartTime);
-        
-        RFs fileSession;
-        RFile perfFile;
-        User::LeaveIfError( fileSession.Connect () );
-        
-        
-        /* Open file if it exists, otherwise create it and write content in it */
-        
-            if(perfFile.Open(fileSession, _L("c:\\data\\MessagePerf.txt"), EFileWrite))
-                       User::LeaveIfError(perfFile.Create (fileSession, _L("c:\\data\\MessagePerf.txt"), EFileWrite));
-        
-        HBufC8 *heap = HBufC8::NewL(100);
-        TPtr8 ptr = heap->Des();
-
-        switch (action) {
-            case EMsvEntriesDeleted: ptr.Append( _L("del "));break;
-            case EMsvEntriesChanged: ptr.Append( _L("upd "));break;
-            case EMsvEntriesMoved: ptr.Append( _L("mov "));break;
-        }
-        ptr.AppendNum(timeDiff.Int64()/1000) ;
-        ptr.Append(_L("\n"));
-        TInt myInt = 0;
-        perfFile.Seek(ESeekEnd,myInt);
-        perfFile.Write (ptr);
-        perfFile.Close ();
-        fileSession.Close ();
-        delete heap;
-    }
-
-#endif
--- a/harvesterplugins/messaging/src/tproxy.cpp	Mon Apr 19 14:40:05 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,38 +0,0 @@
-/*
-* Copyright (c) 2010 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:  Message plugin
-*
-*/
-
-
-
-#include <e32std.h>
-#include <implementationproxy.h>
-#include <cindexingplugin.h>
-#include "cmessageplugin.h"
-
-
-// Map the interface UIDs to implementation factory functions
-const TImplementationProxy KImplementationTable[] = 
-	{
-	{{0x2001F701},( TProxyNewLPtr) CMessagePlugin::NewL}		
-	};
-
-// Exported proxy for instantiation method resolution
-EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
-	{
-	aTableCount = sizeof( KImplementationTable ) / sizeof( TImplementationProxy );
-	return KImplementationTable;
-	}
-
--- a/harvesterplugins/notes/data/2001a9d8.rss	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/notes/data/2001a9d8.rss	Mon May 03 12:32:15 2010 +0300
@@ -36,7 +36,7 @@
                                         {
                                         implementation_uid = 0x2001A9D8;
                                         version_no = 1;
-                                        display_name = "Notes harvester plugin";
+                                        display_name = "Notes";
                                         default_data = "Notes";
                                         opaque_data = "";
                                         }
--- a/harvesterplugins/notes/group/notesplugin.mmp	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/notes/group/notesplugin.mmp	Mon May 03 12:32:15 2010 +0300
@@ -30,7 +30,7 @@
 SOURCE        notesplugin.cpp
 SOURCE        tproxy.cpp
 
-USERINCLUDE   ../inc
+USERINCLUDE   ../inc ../traces
 
 APP_LAYER_SYSTEMINCLUDE
 SYSTEMINCLUDE /epoc32/include/ecom
--- a/harvesterplugins/notes/src/notesplugin.cpp	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/notes/src/notesplugin.cpp	Mon May 03 12:32:15 2010 +0300
@@ -28,6 +28,11 @@
 #include <calentryview.h>
 #include <e32std.h>
 #include <centralrepository.h>
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "notespluginTraces.h"
+#endif
+
 
 _LIT(KMimeTypeNotes , NOTES_MIMETYPE);
 _LIT(KMimeTypeField , CPIX_MIMETYPE_FIELD);
@@ -125,6 +130,7 @@
 //  
 void CNotesPlugin::StartPluginL()
 	{
+    OstTraceFunctionEntry0( CNOTESPLUGIN_STARTPLUGINL_ENTRY );
     CPIXLOGSTRING("CNotesPlugin::StartPluginL: Enter");
 	// Define this base application class, use default location
 	User::LeaveIfError(iSearchSession.DefineVolume( _L(NOTES_QBASEAPPCLASS), KNullDesC ));
@@ -152,6 +158,7 @@
 	iSession->StartChangeNotification( *this, *filter );
 	delete filter;
 	CPIXLOGSTRING("CNotesPlugin::StartPluginL: Exit");
+	OstTraceFunctionExit0( CNOTESPLUGIN_STARTPLUGINL_EXIT );
 	}	
 
 // ---------------------------------------------------------------------------
@@ -160,6 +167,7 @@
 //  
 void CNotesPlugin::StartHarvestingL(const TDesC& /*aQualifiedBaseAppClass*/)
     {
+    OstTraceFunctionEntry0( CNOTESPLUGIN_STARTHARVESTINGL_ENTRY );
     CPIXLOGSTRING("CNotesPlugin::StartHarvestingL: Enter");
     iIndexer->ResetL();
     //Have taken start time and end time reference from calender plugin
@@ -171,12 +179,14 @@
     //Create an instance for list of Notes items in the system
     iNotesInstanceView->FindInstanceL( iNotesInstanceArray , CalCommon::EIncludeNotes , CalCommon::TCalTimeRange( startTimeCal, endTimeCal ));    
     iNoteCount = iNotesInstanceArray.Count();
+    OstTrace1( TRACE_NORMAL, CNOTESPLUGIN_STARTHARVESTINGL, "CNotesPlugin::StartHarvestingL;Notes Count=%d", iNoteCount );
     CPIXLOGSTRING2("CNotesPlugin::StartHarvestingL(): Notes count =%d.", iNoteCount);
 #ifdef __PERFORMANCE_DATA
     iStartTime.UniversalTime();
 #endif
     iAsynchronizer->Start( 0, this, KHarvestingDelay );
     CPIXLOGSTRING("CNotesPlugin::StartHarvestingL: Exit");
+    OstTraceFunctionExit0( CNOTESPLUGIN_STARTHARVESTINGL_EXIT );
     }
 
 // -----------------------------------------------------------------------------
@@ -185,10 +195,12 @@
 //
 void CNotesPlugin::DelayedCallbackL( TInt /*aCode*/ )
     {
+    OstTraceFunctionEntry0( CNOTESPLUGIN_DELAYEDCALLBACKL_ENTRY );
     // Harvest items on each call
     CPIXLOGSTRING("CNotesPlugin::DelayedCallbackL: Enter");
     if( iNoteCount )
         {
+        OstTrace1( TRACE_NORMAL, CNOTESPLUGIN_DELAYEDCALLBACKL, "CNotesPlugin::DelayedCallbackL;Remaining Notes Count=%d", iNoteCount );
         CPIXLOGSTRING2("CNotesPlugin::DelayedCallbackL(): remaining Note count=%d.", iNoteCount);
         // Retrieve the calendar entry for the calinstance and update the CPix database.
         CCalEntry& noteentry =  iNotesInstanceArray[iNoteCount - 1]->Entry();        
@@ -199,6 +211,7 @@
         }
 	else
 		{
+        OstTrace0( TRACE_NORMAL, DUP1_CNOTESPLUGIN_DELAYEDCALLBACKL, "CNotesPlugin::DelayedCallbackL: Completed Harvesting" );
         CPIXLOGSTRING("CNotesPlugin::DelayedCallbackL: Completed Harvesting");
 		// Harvesting was successfully completed		
 		Flush(*iIndexer);
@@ -207,6 +220,7 @@
 #endif
 		iObserver->HarvestingCompleted(this, iIndexer->GetBaseAppClass(), KErrNone);		
 		}
+	OstTraceFunctionExit0( CNOTESPLUGIN_DELAYEDCALLBACKL_EXIT );
 	}
 
 // ---------------------------------------------------------------------------
@@ -226,14 +240,17 @@
 //  
 void CNotesPlugin::CalChangeNotification( RArray< TCalChangeEntry >& aChangeItems )
 	{
+    OstTraceFunctionEntry0( CNOTESPLUGIN_CALCHANGENOTIFICATION_ENTRY );
     CPIXLOGSTRING("CNotesPlugin::CalChangeNotification: Enter");
 	const TInt count(aChangeItems.Count());
+	OstTrace1( TRACE_NORMAL, CNOTESPLUGIN_CALCHANGENOTIFICATION, "CNotesPlugin::CalChangeNotification;Changed Item Count=%d", count );
 	CPIXLOGSTRING2("CNotesPlugin::CalChangeNotification(): changed item count =%d.", count);
 	for( TInt i = 0; i < count; ++i )
 		{
         TRAP_IGNORE(HandleNoteChangedEntryL( aChangeItems[ i ] ));
 		}
 	CPIXLOGSTRING("CNotesPlugin::CalChangeNotification: Exit");
+	OstTraceFunctionExit0( CNOTESPLUGIN_CALCHANGENOTIFICATION_EXIT );
 	}
 
 // ---------------------------------------------------------------------------
@@ -246,6 +263,7 @@
 		{		
 		case EChangeAdd:
 			{
+			OstTrace1( TRACE_NORMAL, CNOTESPLUGIN_HANDLENOTECHANGEDENTRYL, "CNotesPlugin::HandleNoteChangedEntryL;Monitored add id=%d", changedEntry.iEntryId );
 			CPIXLOGSTRING2("CNotesPlugin::HandleNoteChangedEntryL(): Monitored add id=%d.", changedEntry.iEntryId);
 			CreateNoteEntryL( changedEntry.iEntryId, ECPixAddAction );
 			break;
@@ -253,6 +271,7 @@
 
 		case EChangeDelete:
 			{	
+			OstTrace1( TRACE_NORMAL, DUP1_CNOTESPLUGIN_HANDLENOTECHANGEDENTRYL, "CNotesPlugin::HandleNoteChangedEntryL;Monitored delete id=%d", changedEntry.iEntryId );
 			CPIXLOGSTRING2("CNotesPlugin::HandleNoteChangedEntryL(): Monitored delete id=%d.", changedEntry.iEntryId);
 			CreateNoteEntryL( changedEntry.iEntryId, ECPixRemoveAction );
 			break;
@@ -260,6 +279,7 @@
 
 		case EChangeModify:
 			{
+			OstTrace1( TRACE_NORMAL, DUP2_CNOTESPLUGIN_HANDLENOTECHANGEDENTRYL, "CNotesPlugin::HandleNoteChangedEntryL;Monitored update id=%d", changedEntry.iEntryId );
 			CPIXLOGSTRING2("CNotesPlugin::HandleNoteChangedEntryL(): Monitored update id=%d.", changedEntry.iEntryId);
 			CreateNoteEntryL( changedEntry.iEntryId, ECPixUpdateAction );
 			break;
@@ -267,6 +287,7 @@
 
 		case EChangeUndefined:
 			{
+			OstTrace0( TRACE_NORMAL, DUP3_CNOTESPLUGIN_HANDLENOTECHANGEDENTRYL, "CNotesPlugin::HandleNoteChangedEntryL(): EChangeUndefined." );
 			CPIXLOGSTRING("CNotesPlugin::HandleNoteChangedEntryL(): EChangeUndefined.");
 			// This event could be related to synchronization.
 			// Mark harvesting as cancelled.
@@ -295,6 +316,7 @@
 	if (!iIndexer)
     	return;
 
+	OstTrace1( TRACE_NORMAL, CNOTESPLUGIN_CREATENOTEENTRYL, "CNotesPlugin::CreateNoteEntryL;uid=%d", aLocalUid );
 	CPIXLOGSTRING2("CNotesPlugin::CreateNoteEntryL():  Uid = %d.", aLocalUid);
 	
 	
@@ -311,10 +333,12 @@
 	    
 	    if( CCalEntry::ENote != entry->EntryTypeL() )
 	        {
+            OstTrace0( TRACE_NORMAL, DUP1_CNOTESPLUGIN_CREATENOTEENTRYL, "CNotesPlugin::CreateNoteEntryL(): return as not a Note entry." );
             CPIXLOGSTRING("CNotesPlugin::CreateNoteEntryL(): return as not a Note entry.");
 	        CleanupStack::PopAndDestroy(entry);
 	        return;
 	        }
+	    OstTrace0( TRACE_NORMAL, DUP2_CNOTESPLUGIN_CREATENOTEENTRYL, "CNotesPlugin::CreateNoteEntryL(): Creating document." );
 	    CPIXLOGSTRING("CNotesPlugin::CreateNoteEntryL(): Creating document.");
 		CSearchDocument* index_item = CSearchDocument::NewLC(docid_str, _L(NOTESAPPCLASS));
 		// Add Description fields		
@@ -344,10 +368,12 @@
 			TRAPD( err, iIndexer->AddL(*index_item) );
 			if ( err == KErrNone )
 				{
+				OstTrace0( TRACE_NORMAL, DUP3_CNOTESPLUGIN_CREATENOTEENTRYL, "CNotesPlugin::CreateNoteEntryL(): Added." );
 				CPIXLOGSTRING("CNotesPlugin::CreateNoteEntryL(): Added.");
 				}
 			else
 				{
+				OstTrace1( TRACE_NORMAL, DUP4_CNOTESPLUGIN_CREATENOTEENTRYL, "CNotesPlugin::CreateNoteEntryL;Error while adding=%d", err );
 				CPIXLOGSTRING2("CNotesPlugin::CreateNoteEntryL(): Error %d in adding.", err);
 				}
 #endif
@@ -360,10 +386,12 @@
 			TRAPD( err, iIndexer->UpdateL(*index_item) );
 			if ( err == KErrNone )
 				{
+				OstTrace0( TRACE_NORMAL, DUP5_CNOTESPLUGIN_CREATENOTEENTRYL, "CNotesPlugin::CreateNoteEntryL(): Updated." );
 				CPIXLOGSTRING("CNotesPlugin::CreateNoteEntryL(): Updated.");
 				}
 			else
 				{
+				OstTrace1( TRACE_NORMAL, DUP6_CNOTESPLUGIN_CREATENOTEENTRYL, "CNotesPlugin::CreateNoteEntryL;Error while updating=%d", err );
 				CPIXLOGSTRING2("CNotesPlugin::CreateNoteEntryL(): Error %d in updating.", err);
 				}
 #endif
@@ -379,10 +407,12 @@
 		TRAPD( err, iIndexer->DeleteL(docid_str) );
 		if (err == KErrNone)
 			{
+			OstTrace0( TRACE_NORMAL, DUP7_CNOTESPLUGIN_CREATENOTEENTRYL, "CNotesPlugin::CreateNoteEntryL(): Deleted." );
 			CPIXLOGSTRING("CNotesPlugin::CreateNoteEntryL(): Deleted.");
 			}
 		else
 			{
+			OstTrace1( TRACE_NORMAL, DUP8_CNOTESPLUGIN_CREATENOTEENTRYL, "CNotesPlugin::CreateNoteEntryL;Error while deleting=%d", err );
 			CPIXLOGSTRING2("CNotesPlugin::CreateNoteEntryL(): Error %d in deleting.", err);				
 			}
 #endif
@@ -395,6 +425,7 @@
 //  
 void CNotesPlugin::InitTimeValuesL( TTime& aStartTime, TTime& aEndTime )
     {
+    OstTraceFunctionEntry0( CNOTESPLUGIN_INITTIMEVALUESL_ENTRY );
     CPIXLOGSTRING("CNotesPlugin::InitTimeValuesL: Enter");
     //Open the cpix common repository
     CRepository* cpixrepo = CRepository::NewL( KCPIXrepoUidMenu );    
@@ -423,6 +454,7 @@
     TDateTime enddate(year,(TMonth)(month-1),day , 0 , 0 , 0 , 0);
     aEndTime = enddate;
     CPIXLOGSTRING2("CNotesPlugin::InitTimeValuesL: Exit with Error = %d", error);     
+    OstTraceFunctionExit0( CNOTESPLUGIN_INITTIMEVALUESL_EXIT );
     }
 
 #ifdef __PERFORMANCE_DATA
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/notes/traces/OstTraceDefinitions.h	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 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: 
+*
+*/
+#ifndef __OSTTRACEDEFINITIONS_H__
+#define __OSTTRACEDEFINITIONS_H__
+// OST_TRACE_COMPILER_IN_USE flag has been added by Trace Compiler
+// REMOVE BEFORE CHECK-IN TO VERSION CONTROL
+//#define OST_TRACE_COMPILER_IN_USE
+#include <opensystemtrace.h>
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/notes/traces/fixed_id.definitions	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,30 @@
+#Fixed group and trace id definitions. If this file is removed, the identifiers are rebuilt.
+[GROUP]TRACE_FLOW=0x8a
+[GROUP]TRACE_NORMAL=0x86
+[TRACE]TRACE_FLOW[0x8A]_CNOTESPLUGIN_CALCHANGENOTIFICATION_ENTRY=0x7
+[TRACE]TRACE_FLOW[0x8A]_CNOTESPLUGIN_CALCHANGENOTIFICATION_EXIT=0x8
+[TRACE]TRACE_FLOW[0x8A]_CNOTESPLUGIN_DELAYEDCALLBACKL_ENTRY=0x5
+[TRACE]TRACE_FLOW[0x8A]_CNOTESPLUGIN_DELAYEDCALLBACKL_EXIT=0x6
+[TRACE]TRACE_FLOW[0x8A]_CNOTESPLUGIN_INITTIMEVALUESL_ENTRY=0x9
+[TRACE]TRACE_FLOW[0x8A]_CNOTESPLUGIN_INITTIMEVALUESL_EXIT=0xa
+[TRACE]TRACE_FLOW[0x8A]_CNOTESPLUGIN_STARTHARVESTINGL_ENTRY=0x3
+[TRACE]TRACE_FLOW[0x8A]_CNOTESPLUGIN_STARTHARVESTINGL_EXIT=0x4
+[TRACE]TRACE_FLOW[0x8A]_CNOTESPLUGIN_STARTPLUGINL_ENTRY=0x1
+[TRACE]TRACE_FLOW[0x8A]_CNOTESPLUGIN_STARTPLUGINL_EXIT=0x2
+[TRACE]TRACE_NORMAL[0x86]_CNOTESPLUGIN_CALCHANGENOTIFICATION=0x4
+[TRACE]TRACE_NORMAL[0x86]_CNOTESPLUGIN_CREATENOTEENTRYL=0x9
+[TRACE]TRACE_NORMAL[0x86]_CNOTESPLUGIN_DELAYEDCALLBACKL=0x2
+[TRACE]TRACE_NORMAL[0x86]_CNOTESPLUGIN_HANDLENOTECHANGEDENTRYL=0x5
+[TRACE]TRACE_NORMAL[0x86]_CNOTESPLUGIN_STARTHARVESTINGL=0x1
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CNOTESPLUGIN_CREATENOTEENTRYL=0xa
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CNOTESPLUGIN_DELAYEDCALLBACKL=0x3
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CNOTESPLUGIN_HANDLENOTECHANGEDENTRYL=0x6
+[TRACE]TRACE_NORMAL[0x86]_DUP2_CNOTESPLUGIN_CREATENOTEENTRYL=0xb
+[TRACE]TRACE_NORMAL[0x86]_DUP2_CNOTESPLUGIN_HANDLENOTECHANGEDENTRYL=0x7
+[TRACE]TRACE_NORMAL[0x86]_DUP3_CNOTESPLUGIN_CREATENOTEENTRYL=0xc
+[TRACE]TRACE_NORMAL[0x86]_DUP3_CNOTESPLUGIN_HANDLENOTECHANGEDENTRYL=0x8
+[TRACE]TRACE_NORMAL[0x86]_DUP4_CNOTESPLUGIN_CREATENOTEENTRYL=0xd
+[TRACE]TRACE_NORMAL[0x86]_DUP5_CNOTESPLUGIN_CREATENOTEENTRYL=0xe
+[TRACE]TRACE_NORMAL[0x86]_DUP6_CNOTESPLUGIN_CREATENOTEENTRYL=0xf
+[TRACE]TRACE_NORMAL[0x86]_DUP7_CNOTESPLUGIN_CREATENOTEENTRYL=0x10
+[TRACE]TRACE_NORMAL[0x86]_DUP8_CNOTESPLUGIN_CREATENOTEENTRYL=0x11
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/notes/traces/notespluginTraces.h	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,41 @@
+// Created by TraceCompiler 2.1.2
+// DO NOT EDIT, CHANGES WILL BE LOST
+
+#ifndef __NOTESPLUGINTRACES_H__
+#define __NOTESPLUGINTRACES_H__
+
+#define KOstTraceComponentID 0x2001a9d8
+
+#define CNOTESPLUGIN_STARTPLUGINL_ENTRY 0x8a0001
+#define CNOTESPLUGIN_STARTPLUGINL_EXIT 0x8a0002
+#define CNOTESPLUGIN_STARTHARVESTINGL_ENTRY 0x8a0003
+#define CNOTESPLUGIN_STARTHARVESTINGL_EXIT 0x8a0004
+#define CNOTESPLUGIN_DELAYEDCALLBACKL_ENTRY 0x8a0005
+#define CNOTESPLUGIN_DELAYEDCALLBACKL_EXIT 0x8a0006
+#define CNOTESPLUGIN_CALCHANGENOTIFICATION_ENTRY 0x8a0007
+#define CNOTESPLUGIN_CALCHANGENOTIFICATION_EXIT 0x8a0008
+#define CNOTESPLUGIN_INITTIMEVALUESL_ENTRY 0x8a0009
+#define CNOTESPLUGIN_INITTIMEVALUESL_EXIT 0x8a000a
+#define CNOTESPLUGIN_STARTHARVESTINGL 0x860001
+#define CNOTESPLUGIN_DELAYEDCALLBACKL 0x860002
+#define DUP1_CNOTESPLUGIN_DELAYEDCALLBACKL 0x860003
+#define CNOTESPLUGIN_CALCHANGENOTIFICATION 0x860004
+#define CNOTESPLUGIN_HANDLENOTECHANGEDENTRYL 0x860005
+#define DUP1_CNOTESPLUGIN_HANDLENOTECHANGEDENTRYL 0x860006
+#define DUP2_CNOTESPLUGIN_HANDLENOTECHANGEDENTRYL 0x860007
+#define DUP3_CNOTESPLUGIN_HANDLENOTECHANGEDENTRYL 0x860008
+#define CNOTESPLUGIN_CREATENOTEENTRYL 0x860009
+#define DUP1_CNOTESPLUGIN_CREATENOTEENTRYL 0x86000a
+#define DUP2_CNOTESPLUGIN_CREATENOTEENTRYL 0x86000b
+#define DUP3_CNOTESPLUGIN_CREATENOTEENTRYL 0x86000c
+#define DUP4_CNOTESPLUGIN_CREATENOTEENTRYL 0x86000d
+#define DUP5_CNOTESPLUGIN_CREATENOTEENTRYL 0x86000e
+#define DUP6_CNOTESPLUGIN_CREATENOTEENTRYL 0x86000f
+#define DUP7_CNOTESPLUGIN_CREATENOTEENTRYL 0x860010
+#define DUP8_CNOTESPLUGIN_CREATENOTEENTRYL 0x860011
+
+
+#endif
+
+// End of file
+
--- a/harvesterplugins/tsrc/harvesterplugintester/conf/harvesterplugintester.cfg	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/tsrc/harvesterplugintester/conf/harvesterplugintester.cfg	Mon May 03 12:32:15 2010 +0300
@@ -10,13 +10,6 @@
 [Endtest] 
 
 [Test]
-title TestFolderRename
-create HarvesterPluginTester foobar
-foobar TestFolderRename
-delete foobar
-[Endtest] 
-
-[Test]
 title TestFormBaseAppClass
 create HarvesterPluginTester foobar
 foobar TestFormBaseAppClass -2 a -1
@@ -37,21 +30,35 @@
 [Test]
 title TestCreateIndexItemL_Add
 create HarvesterPluginTester foobar
-foobar TestCreateIndexItemL_Add add testfile1.txt Sai
+foobar TestCreateIndexItemL_Add add testfile.txt Hello
 delete foobar
 [Endtest]
 
 [Test]
 title TestCreateIndexItemL_Update
 create HarvesterPluginTester foobar
-foobar TestCreateIndexItemL_Update update testfile1.txt Sai sai Keyword
+foobar TestCreateIndexItemL_Update update testfile.txt Hello hello
 delete foobar
 [Endtest]
 
 [Test]
 title TestCreateIndexItemL_Delete
 create HarvesterPluginTester foobar
-foobar TestCreateIndexItemL_Delete delete testfile1.txt Sai
+foobar TestCreateIndexItemL_Delete delete testfile.txt Hello
+delete foobar
+[Endtest]
+
+[Test]
+title TestFolderCreate
+create HarvesterPluginTester foobar
+foobar TestFolderCreate
+delete foobar
+[Endtest]
+
+[Test]
+title TestFolderRename
+create HarvesterPluginTester foobar
+foobar TestFolderRename
 delete foobar
 [Endtest]
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvesterplugins/tsrc/harvesterplugintester/conf/testfile.txt	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,1 @@
+Hello
\ No newline at end of file
--- a/harvesterplugins/tsrc/harvesterplugintester/group/bld.inf	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/tsrc/harvesterplugintester/group/bld.inf	Mon May 03 12:32:15 2010 +0300
@@ -30,6 +30,7 @@
 ../conf/notesalphanumerictest.txt  /epoc32/winscw/c/TestFramework/notesalphanumerictest.txt
 ../conf/noteslongtest.txt          /epoc32/winscw/c/TestFramework/noteslongtest.txt
 ../conf/testattachment.txt         /epoc32/winscw/c/TestFramework/testattachment.txt
+../conf/testfile.txt				/epoc32/winscw/c/data/testfile.txt
 ../conf/eagle_landed.mp3           /epoc32/winscw/c/data/eagle_landed.mp3
 ../conf/niagara.wmv           	  /epoc32/winscw/c/data/niagara.wmv
 
@@ -40,6 +41,7 @@
 ../conf/notesalphanumerictest.txt z:/ids/notesalphanumerictest.txt
 ../conf/noteslongtest.txt         z:/ids/noteslongtest.txt
 ../conf/testattachment.txt        z:/ids/testattachment.txt
+../conf/testfile.txt        	  z:/ids/testfile.txt
 ../conf/eagle_landed.mp3          z:/ids/eagle_landed.mp3
 ../conf/niagara.wmv           	  z:/ids/niagara.wmv
 PRJ_EXPORTS
--- a/harvesterplugins/tsrc/harvesterplugintester/group/harvesterplugintester.mmp	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/tsrc/harvesterplugintester/group/harvesterplugintester.mmp	Mon May 03 12:32:15 2010 +0300
@@ -88,9 +88,9 @@
 //---------------End of additions for testing FilePlugin-------------------
 
 //------------------Added for testing Messaging plugin-------------------
-USERINCLUDE ./../../../messaging/inc
+USERINCLUDE ./../../../messaging/smsmms/inc
 
-SOURCEPATH ./../../../messaging/src
+SOURCEPATH ./../../../messaging/smsmms/src
 SOURCE        cmessageplugin.cpp cmessagedatahandler.cpp cmessageharvester.cpp cmessagemonitor.cpp
 
 SOURCEPATH ../src
@@ -205,4 +205,15 @@
 SOURCE        cpixmediaimagedoc.cpp
 SOURCE        imageplugin.cpp
 //------------------End for image plugin -----------------------------
+
+USERINCLUDE ../../../applications/traces 
+USERINCLUDE ../../../bookmarks/traces 
+USERINCLUDE ../../../calendar/traces 
+USERINCLUDE ../../../contacts/traces 
+USERINCLUDE ../../../file/traces 
+USERINCLUDE ../../../media/audio/traces 
+USERINCLUDE ../../../media/image/traces 
+USERINCLUDE ../../../media/video/traces 
+USERINCLUDE ../../../messaging/smsmms/traces 
+USERINCLUDE ../../../notes/traces
 // End of File
--- a/harvesterplugins/tsrc/harvesterplugintester/inc/harvesterplugintester.h	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/tsrc/harvesterplugintester/inc/harvesterplugintester.h	Mon May 03 12:32:15 2010 +0300
@@ -152,14 +152,16 @@
         */
         virtual TInt TestStartHarvesterL( CStifItemParser& aItem );
 		
-        virtual TInt TestFolderRenamingL( CStifItemParser& aItem );
-		
         virtual TInt TestFormBaseAppClass( CStifItemParser& aItem );
 		
 		virtual TInt TestDatabasePathL( CStifItemParser& aItem );
 		
-		virtual TInt TestCreateIndexItemL( CStifItemParser& aItem );
-		
+		virtual TInt TestCreateIndexItemL( CStifItemParser& aItem );		
+
+        virtual TInt TestFolderCreateL( CStifItemParser& aItem );        
+
+        virtual TInt TestFolderRenameL( CStifItemParser& aItem );
+        
         /**
          * Message harvester test method.
          * @since ?Series60_version
--- a/harvesterplugins/tsrc/harvesterplugintester/src/capsmod_exe/group/capsmod_exe.mmp	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/tsrc/harvesterplugintester/src/capsmod_exe/group/capsmod_exe.mmp	Mon May 03 12:32:15 2010 +0300
@@ -32,7 +32,7 @@
 
 #ifdef SBSV2
 	#if defined(__S60_)
-	    OSEXT_LAYER_SYSTEMINCLUDE
+	    OS_LAYER_SYSTEMINCLUDE
 	#else // __S60_ not defined
 	    SYSTEMINCLUDE   /epoc32/include 
 	    SYSTEMINCLUDE   /epoc32/include/internal
--- a/harvesterplugins/tsrc/harvesterplugintester/src/ccalanderobserver.cpp	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/tsrc/harvesterplugintester/src/ccalanderobserver.cpp	Mon May 03 12:32:15 2010 +0300
@@ -147,7 +147,7 @@
         if ( entry->EntryTypeL() == CCalEntry::ENote )
             {
             iCalEntryView->DeleteL(*entry);
-            break;
+            continue;
             }
         }
     CleanupStack::PopAndDestroy(&entryarray);
--- a/harvesterplugins/tsrc/harvesterplugintester/src/harvesterplugintesterblocks.cpp	Mon Apr 19 14:40:05 2010 +0300
+++ b/harvesterplugins/tsrc/harvesterplugintester/src/harvesterplugintesterblocks.cpp	Mon May 03 12:32:15 2010 +0300
@@ -42,11 +42,13 @@
 #include <harvesterclient.h>
 #include "mdsitementity.h"
 #include "cpixmdedbmanager.h"
+#include "cfolderrenamedharvester.h"
 //#include "CBlacklistMgr.h"
 #include "videoplugin.h"
 #include "imageplugin.h"
 
-_LIT(KAppBasePath,"@c:root file");
+_LIT(KAppBasePath,"@c:root file content");
+_LIT(KAppBaseFolderFilePath,"@c:root file folder");
 const TInt KMsgPluginBaseAppClassMaxLen = 64;
 
 // For Notes --Start
@@ -87,13 +89,14 @@
         // Copy this line for every implemented function.
         // First string is the function name used in TestScripter script file.
         // Second is the actual implementation member function. 
-        ENTRY( "TestStartHarvester", CHarvesterPluginTester::TestStartHarvesterL ),
-        ENTRY( "TestFolderRename", CHarvesterPluginTester::TestFolderRenamingL ),
+        ENTRY( "TestStartHarvester", CHarvesterPluginTester::TestStartHarvesterL ),        
         ENTRY( "TestFormBaseAppClass", CHarvesterPluginTester::TestFormBaseAppClass ),
         ENTRY( "TestDatabasePath", CHarvesterPluginTester::TestDatabasePathL ),
         ENTRY( "TestCreateIndexItemL_Add", CHarvesterPluginTester::TestCreateIndexItemL ),
         ENTRY( "TestCreateIndexItemL_Update", CHarvesterPluginTester::TestCreateIndexItemL ),
         ENTRY( "TestCreateIndexItemL_Delete", CHarvesterPluginTester::TestCreateIndexItemL ),
+        ENTRY( "TestFolderCreate", CHarvesterPluginTester::TestFolderCreateL ),
+        ENTRY( "TestFolderRename", CHarvesterPluginTester::TestFolderRenameL ),
         ENTRY( "TestMessaging", CHarvesterPluginTester::TestMessageHarvesterL ),
         ENTRY( "TestMessageHarvesting", CHarvesterPluginTester::TestMessageHarvesterWithMessageL ),
         ENTRY( "TestMessageDriveChange", CHarvesterPluginTester::TestMessageHarvesterChangeDriveL ),
@@ -172,35 +175,12 @@
     return KErrNone;
     }
 
-//Same as before, except we rename a directory before calling wait->Start()
-TInt CHarvesterPluginTester::TestFolderRenamingL( CStifItemParser& /*aItem*/ )
-    {
-    CFilePlugin* filePlugin = CFilePlugin::NewL();
-    CHarvesterObserver* iPluginTester = CHarvesterObserver::NewL( filePlugin );
-    filePlugin->StartPluginL(); //Calls Add
-    filePlugin->StartHarvestingL( KAppBasePath );
-    
-    _LIT( KDirectoryToRenameFrom, "C:\\data\\FileToTestRename" );
-    _LIT( KDirectoryToRenameTo, "C:\\data\\FileToTestRenamed" );
-    RFs fs;
-    fs.Connect();
-    TInt error = fs.Rename( KDirectoryToRenameFrom, KDirectoryToRenameTo );
-    iPluginTester->iWaitForHarvester->Start();//Wait here till Harvesting is complete.
-    //rename it back to what it was.
-    error = fs.Rename( KDirectoryToRenameTo, KDirectoryToRenameFrom );
-
-    delete filePlugin;
-    delete iPluginTester;
-    doLog( iLog, error, _L("Error: TestFolderRename.") );
-    
-    return error;
-    }
-
 TInt CHarvesterPluginTester::TestFormBaseAppClass( CStifItemParser& aItem )
     {
     // Print to UI
     _LIT( KFilePluginBaseAppClass, "FormBaseAppClass" );
     _LIT( KExample, "In TestFormBaseAppClass" );
+    
     TestModuleIf().Printf( 0, KFilePluginBaseAppClass, KExample );
     
     TInt driveNumber;
@@ -213,12 +193,13 @@
 
     TInt error = KErrNone;
     TInt errorNumber = 0;
-    _LIT( KBaseAppClassFormatString, "@%c:root file");
+    _LIT( KFileBaseAppClassFolder, "root file folder");
+    _LIT( KBaseAppClassFormatString, "@%c:root file folder");
     _LIT( KTestFormBaseAppClassNoError, "TestFormBaseAppClass: No Error" );
     
     if( aItem.GetNextInt ( driveNumber ) == KErrNone  && error == KErrNone )
         {
-        filePlugin->FormBaseAppClass(  static_cast<TDriveNumber>( driveNumber ), formedBaseAppClass  );
+        filePlugin->FormBaseAppClass(  static_cast<TDriveNumber>( driveNumber ),KFileBaseAppClassFolder, formedBaseAppClass );
         if( aItem.GetNextChar ( driveChar ) == KErrNone )
             {
             expectedBaseAppClass.Format( KBaseAppClassFormatString, driveChar );
@@ -248,11 +229,11 @@
     TInt errorNumber;
     TChar driveChar;
     _LIT( KTestDatabasePathNoError, "TestDatabasePathL: No Error" );
-    
-    _LIT( KDbFormatString, "%c:\\Private\\2001f6f7\\indexing\\indexdb\\root\\file" );
+    _LIT(KPathFileContent, "\\root\\file\\content");
+    _LIT( KDbFormatString, "%c:\\Private\\2001f6f7\\indexing\\indexdb\\root\\file\\content" );
     if( aItem.GetNextInt ( driveNumber ) == KErrNone  && error == KErrNone )
         {
-        buffer = filePlugin->DatabasePathLC( static_cast<TDriveNumber>( driveNumber ) );
+        buffer = filePlugin->DatabasePathLC( static_cast<TDriveNumber>( driveNumber ), KPathFileContent );
         returnedDbPath.Copy( *buffer );
         if( aItem.GetNextChar ( driveChar ) == KErrNone )
             {
@@ -306,7 +287,7 @@
     CFilePlugin* filePlugin = CFilePlugin::NewL();
     CHarvesterObserver* observer = CHarvesterObserver::NewL( filePlugin );
     filePlugin->StartPluginL();
-    _LIT( KFileNameFormat, "C:\\TestFramework\\" );
+    _LIT( KFileNameFormat, "C:\\Data\\" );
     _LIT( KActionAdd, "add" );
     _LIT( KActionDelete, "delete" );
     _LIT( KActionUpdate, "update" );
@@ -321,13 +302,14 @@
             if( aItem.GetNextString ( fileName ) == KErrNone  && error == KErrNone )
                 {
                 filePathName.Append( fileName );
-                filePlugin->CreateFileIndexItemL( filePathName, ECPixAddAction );
+                filePlugin->CreateContentIndexItemL( filePathName, ECPixAddAction );
+                User::After( (TTimeIntervalMicroSeconds32)35000000 );
                 TPtrC searchString;
                 while( aItem.GetNextString ( searchString ) == KErrNone  && error == KErrNone )
                     {
-                    error = doSearch( searchString, _L(FILE_QBASEAPPCLASS), ESearchTypeResultsExpected );
+                    error = doSearch( searchString, KAppBasePath, ESearchTypeResultsExpected );
                     }
-                filePlugin->CreateFileIndexItemL( filePathName, ECPixRemoveAction );
+                filePlugin->CreateContentIndexItemL( filePathName, ECPixRemoveAction );
                 }
             }
         if( createIndexAction.Compare( KActionDelete ) == 0 )
@@ -335,11 +317,11 @@
             if( aItem.GetNextString ( fileName ) == KErrNone  && error == KErrNone )
                 {
                 filePathName.Append( fileName );
-                filePlugin->CreateFileIndexItemL( filePathName, ECPixRemoveAction );
+                filePlugin->CreateContentIndexItemL( filePathName, ECPixRemoveAction );
                 TPtrC searchString;
                 while( aItem.GetNextString ( searchString ) == KErrNone  && error == KErrNone )
                     {
-                    error = doSearch( searchString, _L(FILE_QBASEAPPCLASS), ESearchTypeNoResultsExpected );
+                    error = doSearch( searchString, KAppBasePath, ESearchTypeNoResultsExpected );
                     }
                 }
             }
@@ -348,11 +330,12 @@
             if( aItem.GetNextString ( fileName ) == KErrNone  && error == KErrNone )
                 {
                 filePathName.Append( fileName );
-                filePlugin->CreateFileIndexItemL( filePathName, ECPixUpdateAction );
+                filePlugin->CreateContentIndexItemL( filePathName, ECPixUpdateAction );
+                User::After( (TTimeIntervalMicroSeconds32)35000000 );
                 TPtrC searchString;
                 while( aItem.GetNextString ( searchString ) == KErrNone  && error == KErrNone )
                     {
-                    error = doSearch( searchString, _L(FILE_QBASEAPPCLASS), ESearchTypeResultsExpected );
+                    error = doSearch( searchString, KAppBasePath, ESearchTypeResultsExpected );
                     }
                 }
             }
@@ -362,7 +345,89 @@
     doLog( iLog, error, KCreateIndexItemNoError );
     return error;
     }
-	
+
+TInt CHarvesterPluginTester::TestFolderCreateL( CStifItemParser& /*aItem*/ )
+    {
+    TInt error = KErrNone;
+    CFilePlugin* filePlugin = CFilePlugin::NewL();
+    CHarvesterObserver* iPluginTester = CHarvesterObserver::NewL( filePlugin );
+    filePlugin->StartPluginL();
+    filePlugin->StartHarvestingL( KAppBasePath );
+    
+    _LIT( KDirectoryToCreate, "C:\\data\\TestFolder\\" );    
+    RFs fs;
+    fs.Connect();
+    TBool folderExists = BaflUtils::FolderExists(fs, KDirectoryToCreate);
+    if(!folderExists)
+        {
+        error = fs.MkDir(KDirectoryToCreate);
+        }    
+    iPluginTester->iWaitForHarvester->Start();//Wait here till Harvesting is complete.
+    
+    if(error == KErrNone)
+        {
+        error = doSearch( _L("TestFolder"), KAppBaseFolderFilePath, ESearchTypeResultsExpected );
+        fs.RmDir(KDirectoryToCreate);
+        }
+    fs.Close();
+    delete filePlugin;
+    delete iPluginTester;
+    doLog( iLog, error, _L("Error: TestFolderCreateL") );
+    
+    return error;
+    }
+
+TInt CHarvesterPluginTester::TestFolderRenameL( CStifItemParser& /*aItem*/ )
+    {
+    TInt error = KErrNone;
+    RFs fs;
+    fs.Connect();
+    
+    CFilePlugin* filePlugin = CFilePlugin::NewL();
+    CFolderRenamedHarvester* iFolderRenameHarvester = CFolderRenamedHarvester::NewL( *filePlugin, fs);
+    CHarvesterObserver* iPluginTester = CHarvesterObserver::NewL( filePlugin );
+    filePlugin->StartPluginL();
+    filePlugin->StartHarvestingL( KAppBasePath );    
+    
+    _LIT( KDirectoryToCreate, "C:\\data\\TestRenameFolder\\" );
+    _LIT( KDirectoryRenamed, "C:\\data\\TestFolderRenamed\\" );
+    
+    TFileName oldFolderName(KDirectoryToCreate);
+    TFileName newFolderName(KDirectoryRenamed);    
+    
+    if(!BaflUtils::FolderExists(fs, KDirectoryToCreate))
+        {
+        User::LeaveIfError(fs.MkDir(KDirectoryToCreate));        
+        }
+    if(BaflUtils::FolderExists(fs, KDirectoryRenamed))
+        {
+        User::LeaveIfError(fs.RmDir(KDirectoryRenamed));
+        }
+    iPluginTester->iWaitForHarvester->Start();//Wait here till Harvesting is complete.
+    
+    error = doSearch( _L("TestRenameFolder"), KAppBaseFolderFilePath, ESearchTypeResultsExpected );        
+  
+    if(error == KErrNone)
+        {
+           fs.Rename(KDirectoryToCreate, KDirectoryRenamed);
+           iFolderRenameHarvester->StartL( oldFolderName, newFolderName );           
+        }    
+    
+    User::After( (TTimeIntervalMicroSeconds32)35000000 );
+    
+    //Search for the renamed directory
+    error = doSearch( _L("TestFolderRenamed"), KAppBaseFolderFilePath, ESearchTypeNoResultsExpected );    
+    
+    fs.RmDir(KDirectoryRenamed);    
+    
+    delete filePlugin;
+    delete iFolderRenameHarvester;
+    delete iPluginTester;
+    fs.Close();
+    doLog( iLog, error, _L("Error: TestFolderRenameL") );
+    
+    return error;
+    }
 /**
 * Message harvester test method.
 * @since ?Series60_version
@@ -709,29 +774,28 @@
 TInt CHarvesterPluginTester::TestDeleteNoteL( CStifItemParser& aItem )
     {	
     TInt error = KErrNone;
-    _LIT( KSearchError, "Search Failed" );
-    
+    _LIT( KSearchError, "Search Failed" );   
     CNotesPlugin* plugin = CNotesPlugin::NewL();
     CHarvesterObserver* iPluginTester = CHarvesterObserver::NewL( plugin );
     plugin->StartPluginL();   
     
     CCalendarObserver* session = CCalendarObserver::NewL();
     plugin->StartHarvestingL( _L(NOTES_QBASEAPPCLASS) );
+    iPluginTester->iWaitForHarvester->Start();
     // Add a Note entry
     TPtrC searchstring;
     error = aItem.GetNextString( searchstring );
     HBufC8* buf8 = HBufC8::NewL(2*searchstring.Length());
     buf8->Des().Copy(searchstring);
     session->AddNoteL( buf8->Des());
-    delete buf8;
-    iPluginTester->iWaitForHarvester->Start();
+    User::After( (TTimeIntervalMicroSeconds32)35000000 );
+    delete buf8;    
     error = doSearch( _L("TestNote"), _L( NOTES_QBASEAPPCLASS ), ESearchTypeResultsExpected );
     doLog( iLog, error, KSearchError );    
     if( error == KErrNone)
         {
         session->DeleteNoteEntryL();
-        plugin->StartHarvestingL( _L(NOTES_QBASEAPPCLASS) );
-        iPluginTester->iWaitForHarvester->Start();
+        User::After( (TTimeIntervalMicroSeconds32)35000000 );
         //Delete the Note entry added previously and search for result    
         error = doSearch( _L("TestNote"), _L( NOTES_QBASEAPPCLASS ), ESearchTypeResultsExpected );             
         //If the entery is succesfully deleted, make error to KErrNone.To show testcase success
--- a/searchui/Searchapplication/Searchapplication.pro	Mon Apr 19 14:40:05 2010 +0300
+++ b/searchui/Searchapplication/Searchapplication.pro	Mon May 03 12:32:15 2010 +0300
@@ -19,8 +19,6 @@
 TARGET = Searchapplication 
 
 win32 {
-    INCLUDEPATH += \
-                  $$PWD/../../homescreensrv/homescreensrv_plat/appruntimemodel_api
     LIBS += -L$$PWD/../../bin/debug
     
     CONFIG(debug, debug|release) {
@@ -31,7 +29,7 @@
     DESTDIR = $$PWD/../../bin/$$SUBDIRPART
 }
 
-LIBS +=  -lappruntimemodel
+LIBS +=  -lsearchruntimeprovider
 
 QT += xml 
 
@@ -47,7 +45,8 @@
 
 INCLUDEPATH += . \
                ./inc \
-               ../inc
+               ../inc \
+              ../runtimeproviders/searchruntimeprovider/inc 
 
 symbian {
     TARGET.UID2 = 0x100039CE
@@ -56,14 +55,11 @@
     TARGET.EPOCSTACKSIZE = 0x14000 // 80kB
     TARGET.EPOCHEAPSIZE = 0x20000 0x1000000 // 128kB - 16MB
     rom:DEFINES += ROM
-    ICON = resources/search_app_icon.svg
-    icon.sources = resources/search_app_icon.svg
-    icon.path = /searchresources  
-    DEPLOYMENT += icon addFiles
+    SKINICON = qtg_large_search
 }
 
 win32 {
-include(Searchapplication_installs_win32.pri)
+include(searchapplication_installs_win32.pri)
 }
 
-include(Searchapplication.pri)
+include(searchapplication.pri)
--- a/searchui/Searchapplication/inc/Search.h	Mon Apr 19 14:40:05 2010 +0300
+++ b/searchui/Searchapplication/inc/Search.h	Mon May 03 12:32:15 2010 +0300
@@ -18,11 +18,11 @@
 #ifndef SEARCHAPPLICATION_H
 #define SEARCHAPPLICATION_H
 
-#include "Search_global.h"
+#include "search_global.h"
 
-#include <QObject>
+#include <qobject.h>
 
-class HsRuntime;
+class QStateMachine;
 
 /**
  * @ingroup group_searchsearchlication
@@ -53,8 +53,8 @@
      */
     virtual ~Search();
 
-private:
-
+private:   
+    
     Q_DISABLE_COPY(Search)
 
 signals:
@@ -104,7 +104,7 @@
     /**
      * Runtime.
      */
-    HsRuntime* mRuntime;
+    QStateMachine* mRuntime;
     };
 
 #endif//SEARCHAPPLICATION_H
--- a/searchui/Searchapplication/src/Search.cpp	Mon Apr 19 14:40:05 2010 +0300
+++ b/searchui/Searchapplication/src/Search.cpp	Mon May 03 12:32:15 2010 +0300
@@ -15,9 +15,10 @@
  *
  */
 
-#include "Search.h"
-#include "hsruntime.h"
-#include "hsruntimefactory.h"
+#include "search.h"
+#include <qstatemachine.h>
+#include <searchruntimeprovider.h>
+#include <searchruntime.h>
 
 // ---------------------------------------------------------------------------
 // Search::Search
@@ -28,23 +29,16 @@
     {
     SEARCH_FUNC_ENTRY("SEARCH::Search::Search");
 
-    HsRuntimeFactory factory("searchresources/plugins/runtimeproviders",
-            "searchresources/plugins/runtimeproviders");
-
-    HsRuntimeToken token;
-    token.mLibrary = "searchruntimeprovider.dll";
-    token.mUri = "search.nokia.com/runtime/defaultruntime";
-
-    mRuntime = factory.createRuntime(token);
+    SearchRuntimeProvider *interface = new SearchRuntimeProvider();
+    mRuntime = interface->createPlugin();
     if (mRuntime)
         {
         mRuntime->setParent(this);
         connect(mRuntime, SIGNAL(started()), SLOT(handleRuntimeStarted()));
         connect(mRuntime, SIGNAL(stopped()), SLOT(handleRuntimeStopped()));
         connect(mRuntime, SIGNAL(faulted()), SLOT(handleRuntimeFaulted()));
-        }
-
-    SEARCH_FUNC_EXIT("SEARCH::Search::Search");
+        } 
+		SEARCH_FUNC_EXIT("SEARCH::Search::Search");
     }
 
 // ---------------------------------------------------------------------------
@@ -93,8 +87,10 @@
 void Search::stop()
     {
     SEARCH_FUNC_ENTRY("SEARCH::Search::stop");
-
-    mRuntime->stop();
+    if (mRuntime)
+        {
+        mRuntime->stop();
+        }
 
     SEARCH_FUNC_EXIT("SEARCH::Search::stop");
     }
--- a/searchui/Searchapplication/src/main.cpp	Mon Apr 19 14:40:05 2010 +0300
+++ b/searchui/Searchapplication/src/main.cpp	Mon May 03 12:32:15 2010 +0300
@@ -15,8 +15,8 @@
  *
  */
 
-#include "Search.h"
-#include "Search_global.h"
+#include "search.h"
+#include "search_global.h"
 
 #include <QtGui>
 #include <hbapplication.h>
@@ -43,6 +43,22 @@
     commonTranslator.load("common_" + lang, path);
     app.installTranslator(&commonTranslator);
 
+    QTranslator musicTranslator;
+    musicTranslator.load("musicplayer_" + lang, path);
+    app.installTranslator(&musicTranslator);
+
+    QTranslator contactsTranslator;
+    contactsTranslator.load("contacts_" + lang, path);
+    app.installTranslator(&contactsTranslator);
+
+    QTranslator calenderTranslator;
+    calenderTranslator.load("calendar_" + lang, path);
+    app.installTranslator(&calenderTranslator);
+
+    QTranslator notesTranslator;
+    notesTranslator.load("notes_" + lang, path);
+    app.installTranslator(&notesTranslator);
+
     Search search;
 #ifdef ROM
     QDir::setCurrent("Z:/");
--- a/searchui/bwins/searchindevicehandleru.def	Mon Apr 19 14:40:05 2010 +0300
+++ b/searchui/bwins/searchindevicehandleru.def	Mon May 03 12:32:15 2010 +0300
@@ -16,12 +16,11 @@
 	?trUtf8@InDeviceHandler@@SA?AVQString@@PBD0@Z @ 15 NONAME ; class QString InDeviceHandler::trUtf8(char const *, char const *)
 	?getDocumentAsync@InDeviceHandler@@AAEXHPAVQCPixDocument@@@Z @ 16 NONAME ; void InDeviceHandler::getDocumentAsync(int, class QCPixDocument *)
 	?tr@InDeviceHandler@@SA?AVQString@@PBD0@Z @ 17 NONAME ; class QString InDeviceHandler::tr(char const *, char const *)
-	?search@InDeviceHandler@@QAEXVQString@@@Z @ 18 NONAME ; void InDeviceHandler::search(class QString)
-	?trUtf8@InDeviceHandler@@SA?AVQString@@PBD0H@Z @ 19 NONAME ; class QString InDeviceHandler::trUtf8(char const *, char const *, int)
-	?getStaticMetaObject@InDeviceHandler@@SAABUQMetaObject@@XZ @ 20 NONAME ; struct QMetaObject const & InDeviceHandler::getStaticMetaObject(void)
-	?getSearchResultCount@InDeviceHandler@@QAEHXZ @ 21 NONAME ; int InDeviceHandler::getSearchResultCount(void)
-	?searchAsync@InDeviceHandler@@QAEXVQString@@0@Z @ 22 NONAME ; void InDeviceHandler::searchAsync(class QString, class QString)
-	?staticMetaObject@InDeviceHandler@@2UQMetaObject@@B @ 23 NONAME ; struct QMetaObject const InDeviceHandler::staticMetaObject
-	?getSearchResult@InDeviceHandler@@AAEXHH@Z @ 24 NONAME ; void InDeviceHandler::getSearchResult(int, int)
-	?handleDocument@InDeviceHandler@@IAEXHPAVQCPixDocument@@@Z @ 25 NONAME ; void InDeviceHandler::handleDocument(int, class QCPixDocument *)
+	?trUtf8@InDeviceHandler@@SA?AVQString@@PBD0H@Z @ 18 NONAME ; class QString InDeviceHandler::trUtf8(char const *, char const *, int)
+	?getStaticMetaObject@InDeviceHandler@@SAABUQMetaObject@@XZ @ 19 NONAME ; struct QMetaObject const & InDeviceHandler::getStaticMetaObject(void)
+	?getSearchResultCount@InDeviceHandler@@QAEHXZ @ 20 NONAME ; int InDeviceHandler::getSearchResultCount(void)
+	?searchAsync@InDeviceHandler@@QAEXVQString@@0@Z @ 21 NONAME ; void InDeviceHandler::searchAsync(class QString, class QString)
+	?staticMetaObject@InDeviceHandler@@2UQMetaObject@@B @ 22 NONAME ; struct QMetaObject const InDeviceHandler::staticMetaObject
+	?getSearchResult@InDeviceHandler@@AAEXHH@Z @ 23 NONAME ; void InDeviceHandler::getSearchResult(int, int)
+	?handleDocument@InDeviceHandler@@IAEXHPAVQCPixDocument@@@Z @ 24 NONAME ; void InDeviceHandler::handleDocument(int, class QCPixDocument *)
 
--- a/searchui/eabi/searchindevicehandleru.def	Mon Apr 19 14:40:05 2010 +0300
+++ b/searchui/eabi/searchindevicehandleru.def	Mon May 03 12:32:15 2010 +0300
@@ -15,13 +15,12 @@
 	_ZN15InDeviceHandler20getSearchResultCountEv @ 14 NONAME
 	_ZN15InDeviceHandler23getDocumentAsyncAtIndexEi @ 15 NONAME
 	_ZN15InDeviceHandler23handleAsyncSearchResultEii @ 16 NONAME
-	_ZN15InDeviceHandler6searchE7QString @ 17 NONAME
-	_ZN15InDeviceHandlerC1Ev @ 18 NONAME
-	_ZN15InDeviceHandlerC2Ev @ 19 NONAME
-	_ZN15InDeviceHandlerD0Ev @ 20 NONAME
-	_ZN15InDeviceHandlerD1Ev @ 21 NONAME
-	_ZN15InDeviceHandlerD2Ev @ 22 NONAME
-	_ZNK15InDeviceHandler10metaObjectEv @ 23 NONAME
-	_ZTI15InDeviceHandler @ 24 NONAME
-	_ZTV15InDeviceHandler @ 25 NONAME
+	_ZN15InDeviceHandlerC1Ev @ 17 NONAME
+	_ZN15InDeviceHandlerC2Ev @ 18 NONAME
+	_ZN15InDeviceHandlerD0Ev @ 19 NONAME
+	_ZN15InDeviceHandlerD1Ev @ 20 NONAME
+	_ZN15InDeviceHandlerD2Ev @ 21 NONAME
+	_ZNK15InDeviceHandler10metaObjectEv @ 22 NONAME
+	_ZTI15InDeviceHandler @ 23 NONAME
+	_ZTV15InDeviceHandler @ 24 NONAME
 
--- a/searchui/indevicehandler/inc/indevicehandler.h	Mon Apr 19 14:40:05 2010 +0300
+++ b/searchui/indevicehandler/inc/indevicehandler.h	Mon May 03 12:32:15 2010 +0300
@@ -20,7 +20,7 @@
 #include <QtCore>
 #include <qcoreapplication.h>
 #include <qdebug.h>
-#include "Search_global.h"
+#include "search_global.h"
 
 #ifdef BUILD_INDEVICEHANDLER
 #define SEARCH_INDEVICEHANDLER Q_DECL_EXPORT
@@ -113,12 +113,7 @@
      */
     void getDocumentAsyncAtIndex(int aIndex);
 
-    /**
-     * initate the search synchronously.
-     * @since S60 ?S60_version.
-     * @param aSearchString search keyword 
-     */
-    void search(QString aSearchString);
+  
 
     /**
      * initate the search asynchronously.
--- a/searchui/indevicehandler/src/indevicehandler.cpp	Mon Apr 19 14:40:05 2010 +0300
+++ b/searchui/indevicehandler/src/indevicehandler.cpp	Mon May 03 12:32:15 2010 +0300
@@ -27,6 +27,19 @@
     {
     }
 // ---------------------------------------------------------------------------
+// InDeviceHandler::~InDeviceHandler()
+// ---------------------------------------------------------------------------
+//
+InDeviceHandler::~InDeviceHandler()
+    {
+    if (mSearchInterface)
+        {
+        delete mSearchInterface;
+
+        }
+    }
+
+// ---------------------------------------------------------------------------
 // InDeviceHandler::getSearchResult(int aError, int estimatedResultCount)
 // aError: error code
 // estimatedResultCount: number of hits
@@ -71,45 +84,8 @@
         }
     return doc;
     }
-// ---------------------------------------------------------------------------
-// InDeviceHandler:: search(QString aSearchString)
-// aSearchString: string to be searched sync
-// ---------------------------------------------------------------------------
-//
-void InDeviceHandler::search(QString aSearchString)
-    {
-    qDebug() << "InDeviceHandler::search Enter";
-    if (aSearchString.length())
-        {
-        int error = 0;
-        mSearchResultCount = 0;
-        if (mSearchInterface)
-            {
-            try
-                {
-                mSearchResultCount = mSearchInterface->search(aSearchString);
-                }
-            catch (...)
-                {
-                error = -1;
-                }
-            }
-        emit handleSearchResult(error, mSearchResultCount);
-        }
-    qDebug() << "InDeviceHandler::search Exit";
-    }
-// ---------------------------------------------------------------------------
-// InDeviceHandler::~InDeviceHandler()
-// ---------------------------------------------------------------------------
-//
-InDeviceHandler::~InDeviceHandler()
-    {
-    if (mSearchInterface)
-        {
-        delete mSearchInterface;
 
-        }
-    }
+
 // ---------------------------------------------------------------------------
 // InDeviceHandler::getSearchResultCount()
 // gets the number of hits
@@ -141,7 +117,7 @@
 
     }
 // ---------------------------------------------------------------------------
-// InDeviceHandler::searchAsync(QString aSearchAsyncString, QString/* aDefaultSearchField*/)
+// InDeviceHandler::searchAsync
 // aSearchAsyncString: string to be searched
 // async
 // ---------------------------------------------------------------------------
@@ -186,7 +162,7 @@
         }
     }
 // ---------------------------------------------------------------------------
-// InDeviceHandler::setCategory(QString astring)
+// InDeviceHandler::setCategory
 // astring: setting categories to be searched
 // ---------------------------------------------------------------------------
 //
@@ -203,6 +179,14 @@
         database.append(astring);
         mSearchInterface = QCPixSearcher::newInstance(database,
                 DEFAULT_SEARCH_FIELD);
+        }
+    else
+        {
+        mSearchInterface = QCPixSearcher::newInstance("root",
+        DEFAULT_SEARCH_FIELD);
+        }
+    if (mSearchInterface)
+        {
         try
             {
             mSearchInterface->connect(mSearchInterface,
@@ -226,6 +210,7 @@
             }
         }
     }
+
 // ---------------------------------------------------------------------------
 // InDeviceHandler::isPrepared()
 // verify the mSearchInterface is prepared or not
--- a/searchui/indevicehandler/tsrc/t_indevicehandler/inc/t_indevicehandler.h	Mon Apr 19 14:40:05 2010 +0300
+++ b/searchui/indevicehandler/tsrc/t_indevicehandler/inc/t_indevicehandler.h	Mon May 03 12:32:15 2010 +0300
@@ -34,14 +34,11 @@
     void initTestCase();
     void cleanupTestCase();
     void testCreateAndDestructIndeviceHandler();
-    void testhandleSearchResult();
     void testhandleAsyncSearchResult();
     void testhandleDocument();
     void testgetSearchResult();
     void testgetDocumentAsync();
-    void testgetDocumentAtIndex();
     void testgetDocumentAsyncAtIndex();
-    void testsearch();
     void testsearchAsync();
     void testcancelLastSearch();
     void testgetSearchResultCount();
--- a/searchui/indevicehandler/tsrc/t_indevicehandler/src/t_indevicehandler.cpp	Mon Apr 19 14:40:05 2010 +0300
+++ b/searchui/indevicehandler/tsrc/t_indevicehandler/src/t_indevicehandler.cpp	Mon May 03 12:32:15 2010 +0300
@@ -42,19 +42,7 @@
 
     delete indevicehandler;
     }
-void SearchInDeviceHandlerTest::testhandleSearchResult()
-    {
-    InDeviceHandler* indevicehandler = new InDeviceHandler();
-    indevicehandler->setCategory("file");
-    QSignalSpy spy(indevicehandler, SIGNAL(handleSearchResult(int, int)));
-    indevicehandler->search("txt");
-    QCOMPARE(spy.count(), 1);
-    delete indevicehandler;
 
-    //wait for signal to be emitted.
-    //QTest::qWait(200);
-
-    }
 void SearchInDeviceHandlerTest::testhandleAsyncSearchResult()
     {
     InDeviceHandler* indevicehandler = new InDeviceHandler();
@@ -72,7 +60,7 @@
     InDeviceHandler* indevicehandler = new InDeviceHandler();
     indevicehandler->setCategory("file");
 
-    indevicehandler->searchAsync("txt");
+    indevicehandler->searchAsync("a");
     QTest::qWait(200);
 
     QSignalSpy spy(indevicehandler,
@@ -91,23 +79,14 @@
     {
     testhandleDocument();
     }
-void SearchInDeviceHandlerTest::testgetDocumentAtIndex()
-    {
-    InDeviceHandler* indevicehandler = new InDeviceHandler();
-    indevicehandler->setCategory("file");
-    indevicehandler->search("txt");
-    QCPixDocument* iDoc = NULL;
-    iDoc = indevicehandler->getDocumentAtIndex(0);
-    QVERIFY(iDoc);
-    delete iDoc;
-    delete indevicehandler;
-    }
+
 void SearchInDeviceHandlerTest::testgetDocumentAsyncAtIndex()
     {
     InDeviceHandler* indevicehandler = new InDeviceHandler();
     indevicehandler->setCategory("file");
 
-    indevicehandler->search("txt");
+    indevicehandler->searchAsync("txt");
+    QTest::qWait(200);
     QSignalSpy spy(indevicehandler,
             SIGNAL(handleDocument(int, QCPixDocument*)));
     indevicehandler->getDocumentAsyncAtIndex(0);
@@ -115,17 +94,7 @@
     QCOMPARE(spy.count(), 1);
     delete indevicehandler;
     }
-void SearchInDeviceHandlerTest::testsearch()
-    {
-    InDeviceHandler* indevicehandler = new InDeviceHandler();
-    indevicehandler->setCategory("file");
-    QSignalSpy spy(indevicehandler, SIGNAL(handleSearchResult(int,int)));
-    indevicehandler->search(NULL);
-    QCOMPARE(spy.count(), 0);
-    indevicehandler->search("txt");
-    QCOMPARE(spy.count(), 1);
-    delete indevicehandler;
-    }
+
 void SearchInDeviceHandlerTest::testsearchAsync()
     {
     InDeviceHandler* indevicehandler = new InDeviceHandler();
@@ -143,7 +112,7 @@
     {
     InDeviceHandler* indevicehandler = new InDeviceHandler();
     indevicehandler->setCategory("file");
-    indevicehandler->search("txt");
+    indevicehandler->searchAsync("txt");
     indevicehandler->cancelLastSearch();
     delete indevicehandler;
     }
@@ -152,7 +121,8 @@
     InDeviceHandler* indevicehandler = new InDeviceHandler();
     QCOMPARE(indevicehandler->getSearchResultCount(),0);
     indevicehandler->setCategory("file");
-    indevicehandler->search("txt");
+    indevicehandler->searchAsync("txt");
+    QTest::qWait(200);
     QVERIFY(indevicehandler->getSearchResultCount());
     delete indevicehandler;
 
@@ -162,8 +132,8 @@
     InDeviceHandler* indevicehandler = new InDeviceHandler();
     indevicehandler->setCategory("file");
     QVERIFY(indevicehandler->mSearchInterface);
-    indevicehandler->setCategory(NULL);
-    QVERIFY(indevicehandler->mSearchInterface == NULL);
+    indevicehandler->setCategory("");
+    QVERIFY(indevicehandler->mSearchInterface);
     delete indevicehandler;
     }
 void SearchInDeviceHandlerTest::testisPrepared()
@@ -171,11 +141,15 @@
     InDeviceHandler* indevicehandler = new InDeviceHandler();
     indevicehandler->setCategory("file");
     QVERIFY(indevicehandler->isPrepared());
-    indevicehandler->setCategory(NULL);
-    QVERIFY(indevicehandler->isPrepared() == false);
+    indevicehandler->setCategory("");
+    QVERIFY(indevicehandler->isPrepared());
     delete indevicehandler;
 
     }
+#ifdef Q_OS_SYMBIAN
+
+//QTEST_MAIN corrected since crashes if TRAP not in correct place.
+//Will be corrected in later (estimate 4.6.0) Qt release for Symbian.
 int main(int argc, char *argv[])
     {
     QApplication app(argc, argv);
@@ -186,3 +160,7 @@
             error = QTest::qExec(&tc, argc, argv););
     return error;
     }
+#else //Q_OS_SYMBIAN
+QTEST_MAIN(SearchInDeviceHandlerTest)
+#endif //Q_OS_SYMBIAN    
+    
--- a/searchui/rom/search.iby	Mon Apr 19 14:40:05 2010 +0300
+++ b/searchui/rom/search.iby	Mon May 03 12:32:15 2010 +0300
@@ -35,17 +35,12 @@
 
 
 //runtime provider dll
-data=/epoc32/data/z/searchresources/plugins/runtimeproviders/searchruntimeprovider.manifest  searchresources/plugins/runtimeproviders/searchruntimeprovider.manifest
-data=/epoc32/data/z/searchresources/plugins/runtimeproviders/searchruntimeprovider.qtplugin  searchresources/plugins/runtimeproviders/searchruntimeprovider.qtplugin
 file=/epoc32/release/armv5/urel/searchruntimeprovider.dll SHARED_LIB_DIR/searchruntimeprovider.dll
 
 
 
 
 //state provider dll
-
-data=/epoc32/data/z/searchresources/plugins/stateproviders/searchstateprovider.manifest  searchresources/plugins/stateproviders/searchstateprovider.manifest
-data=/epoc32/data/z/searchresources/plugins/stateproviders/searchstateprovider.qtplugin  searchresources/plugins/stateproviders/searchstateprovider.qtplugin
 file=/epoc32/release/armv5/urel/searchstateprovider.dll SHARED_LIB_DIR/searchstateprovider.dll
 
 #endif //FF_SEARCH_SW
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/searchui/runtimeproviders/bwins/searchruntimeprovideru.def	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,12 @@
+EXPORTS
+	?createPlugin@SearchRuntimeProvider@@QBEPAVSearchRuntime@@XZ @ 1 NONAME ; class SearchRuntime * SearchRuntimeProvider::createPlugin(void) const
+	?trUtf8@SearchRuntimeProvider@@SA?AVQString@@PBD0H@Z @ 2 NONAME ; class QString SearchRuntimeProvider::trUtf8(char const *, char const *, int)
+	?qt_metacall@SearchRuntimeProvider@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 3 NONAME ; int SearchRuntimeProvider::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?tr@SearchRuntimeProvider@@SA?AVQString@@PBD0H@Z @ 4 NONAME ; class QString SearchRuntimeProvider::tr(char const *, char const *, int)
+	?tr@SearchRuntimeProvider@@SA?AVQString@@PBD0@Z @ 5 NONAME ; class QString SearchRuntimeProvider::tr(char const *, char const *)
+	?qt_metacast@SearchRuntimeProvider@@UAEPAXPBD@Z @ 6 NONAME ; void * SearchRuntimeProvider::qt_metacast(char const *)
+	?getStaticMetaObject@SearchRuntimeProvider@@SAABUQMetaObject@@XZ @ 7 NONAME ; struct QMetaObject const & SearchRuntimeProvider::getStaticMetaObject(void)
+	?metaObject@SearchRuntimeProvider@@UBEPBUQMetaObject@@XZ @ 8 NONAME ; struct QMetaObject const * SearchRuntimeProvider::metaObject(void) const
+	?staticMetaObject@SearchRuntimeProvider@@2UQMetaObject@@B @ 9 NONAME ; struct QMetaObject const SearchRuntimeProvider::staticMetaObject
+	?trUtf8@SearchRuntimeProvider@@SA?AVQString@@PBD0@Z @ 10 NONAME ; class QString SearchRuntimeProvider::trUtf8(char const *, char const *)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/searchui/runtimeproviders/eabi/searchruntimeprovideru.def	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,10 @@
+EXPORTS
+	_ZN21SearchRuntimeProvider11qt_metacallEN11QMetaObject4CallEiPPv @ 1 NONAME
+	_ZN21SearchRuntimeProvider11qt_metacastEPKc @ 2 NONAME
+	_ZN21SearchRuntimeProvider16staticMetaObjectE @ 3 NONAME DATA 16
+	_ZN21SearchRuntimeProvider19getStaticMetaObjectEv @ 4 NONAME
+	_ZNK21SearchRuntimeProvider10metaObjectEv @ 5 NONAME
+	_ZNK21SearchRuntimeProvider12createPluginEv @ 6 NONAME
+	_ZTI21SearchRuntimeProvider @ 7 NONAME
+	_ZTV21SearchRuntimeProvider @ 8 NONAME
+
--- a/searchui/runtimeproviders/searchruntimeprovider/inc/searchruntime.h	Mon Apr 19 14:40:05 2010 +0300
+++ b/searchui/runtimeproviders/searchruntimeprovider/inc/searchruntime.h	Mon May 03 12:32:15 2010 +0300
@@ -18,9 +18,9 @@
 #ifndef SEARCH_RUNTIMES_DEFAULTRUNTIME_H
 #define SEARCH_RUNTIMES_DEFAULTRUNTIME_H
 
-#include "Search_global.h"
-#include "hsruntime.h"
+#include "search_global.h"
 #include <qhash.h>
+#include <qstatemachine.h>
 
 SEARCH_CLASS(SearchRuntimeProviderTest)
 
@@ -40,7 +40,7 @@
  * @lib ?library
  * @since S60 ?S60_version
  */
-class SearchRuntime : public HsRuntime
+class SearchRuntime : public QStateMachine
     {
 Q_OBJECT
 
@@ -64,19 +64,7 @@
      * Copy constructor
      */
     Q_DISABLE_COPY(SearchRuntime)
-
-public slots:
-
-    /**
-     * @copydoc HsRuntime::start()
-     */
-    void start();
-
-    /**
-     * @copydoc HsRuntime::stop()
-     */
-    void stop();
-
+    
 private slots:
 
     /**
@@ -112,24 +100,12 @@
      */
     void createStates();
 
-private:
-
-    /**
-     * Address of state machine instance.
-     * Ownership tranfered to application. Don't remove it.
-     */
-    QStateMachine *mStateMachine;
+private:  
 
     /**
      * Window to visualize scene
      */
-    HbMainWindow *mWindow;
-
-    /**
-     * Contains address of runtime service.
-     * Ownership transfered to application. Don't remove it.
-     */
-    QHash<QString, QObject*> mServices;
+    HbMainWindow *mWindow;   
 
 SEARCH_FRIEND_CLASS    (SearchRuntimeProviderTest)
 
--- a/searchui/runtimeproviders/searchruntimeprovider/inc/searchruntimeprovider.h	Mon Apr 19 14:40:05 2010 +0300
+++ b/searchui/runtimeproviders/searchruntimeprovider/inc/searchruntimeprovider.h	Mon May 03 12:32:15 2010 +0300
@@ -18,8 +18,16 @@
 #ifndef SEARCH_RUNTIMEPROVIDERS_DEFAULTRUNTIMEPROVIDER_H
 #define SEARCH_RUNTIMEPROVIDERS_DEFAULTRUNTIMEPROVIDER_H
 
-#include "hsiruntimeprovider.h"
-#include "hsistateprovider.h"
+#include <qobject.h>
+
+#ifdef BUILD_SEARCHRUNTIMEPROVIDER
+#define SEARCH_RUNTIMEPROVIDER Q_DECL_EXPORT
+#else
+#define SEARCH_RUNTIMEPROVIDER Q_DECL_IMPORT
+#endif
+
+
+class SearchRuntime;
 
 /**
  * @ingroup group_Searchruntimeprovider
@@ -30,46 +38,12 @@
  *
  * @since S60 ?S60_version.
  */
-class SearchRuntimeProvider : public QObject, public IHsRuntimeProvider
+class SEARCH_RUNTIMEPROVIDER  SearchRuntimeProvider : public QObject
     {
 Q_OBJECT
 
-Q_INTERFACES(IHsRuntimeProvider)
-
 public:
-
-    /**
-     * Default constructor.
-     *
-     * @since S60 ?S60_version.
-     */
-    SearchRuntimeProvider();
-
-public:
-
-    /**
-     * Returns contained runtimes as a list of tokens.
-     *
-     * @return Contained runtimes as a list of tokens.
-     * @since S60 ?S60_version.
-     */
-    QList<HsRuntimeToken> runtimes();
-
-    /**
-     * Creates a runtime based on the given token.
-     *
-     * @param aToken Identifies the runtime to be created.
-     * @since S60 ?S60_version.
-     */
-    HsRuntime* createRuntime(const HsRuntimeToken& aToken);
-
-private:
-
-    /**
-     * Token that describes the default runtime.
-     */
-    HsRuntimeToken mRuntimeToken;
-
-    };
+    SearchRuntime* createPlugin() const;    
+};
 
 #endif //SEARCH_RUNTIMEPROVIDERS_DEFAULTRUNTIMEPROVIDER_H
--- a/searchui/runtimeproviders/searchruntimeprovider/searchruntimeprovider.pro	Mon Apr 19 14:40:05 2010 +0300
+++ b/searchui/runtimeproviders/searchruntimeprovider/searchruntimeprovider.pro	Mon May 03 12:32:15 2010 +0300
@@ -16,6 +16,7 @@
 
 TEMPLATE = lib
 
+DEFINES += BUILD_SEARCHRUNTIMEPROVIDER
 
 symbian {
     CONFIG(debug, debug|release) {
@@ -31,41 +32,40 @@
     } else {
       SUBDIRPART = release
     }
-    DESTDIR = $$PWD/../../../bin/$$SUBDIRPART/searchresources/plugins/runtimeproviders
-    INCLUDEPATH += \
-              $$PWD/../../../homescreensrv/homescreensrv_plat/appruntimemodel_api \
-              $$PWD/../../../homescreensrv/homescreensrv_plat/statemodel_api
+    DESTDIR = $$PWD/../../../bin/$$SUBDIRPART/searchresources/plugins/runtimeproviders    
     LIBS += -L$$PWD/../../../bin/debug
 }
 
-LIBS +=  -lappruntimemodel
-LIBS +=  -lstatemodel
+LIBS +=  -lsearchstateprovider
+    
 
-    
-CONFIG += plugin debug_and_release
 
 CONFIG += hb
 
+
 QT += xml sql
 
-DEFINES += SEARCHRUNTIMEPROVIDER_LIB
+
 
 coverage:DEFINES += COVERAGE_MEASUREMENT
 
 DEPENDPATH +=   ./inc \
-                ./src
-
+                ./src 
+                
 INCLUDEPATH += ./inc \
-               ../../inc \
+               ../../inc  \
+                ../../stateproviders/searchstateprovider/inc 
+               
 
 symbian {
     TARGET.UID3 = 0x2002C37D
     TARGET.EPOCALLOWDLLDATA=1
-    TARGET.CAPABILITY = ALL -TCB
+    TARGET.CAPABILITY = ALL -TCB -DRM
     appkey:DEFINES += S60APP_KEY
     INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE
-
-    include(searchruntimeprovider_installs_symbian.pri)
+    #include(searchruntimeprovider_installs_symbian.pri)
+   # BLD_INF_RULES.prj_exports += "./inc/searchruntimeprovider.h |../../inc/" \
+    #                             "./inc/searchruntime.h |../../inc/"
 }
 
 win32 {
--- a/searchui/runtimeproviders/searchruntimeprovider/searchruntimeprovider_installs_symbian.pri	Mon Apr 19 14:40:05 2010 +0300
+++ b/searchui/runtimeproviders/searchruntimeprovider/searchruntimeprovider_installs_symbian.pri	Mon May 03 12:32:15 2010 +0300
@@ -14,7 +14,7 @@
 # Description: 
 #
 
-export.sources = resource/*.manifest
+export.sources = resource/*.xml
 export.path = /searchresources/plugins/runtimeproviders
 
 pluginstub.sources = searchruntimeprovider.dll
--- a/searchui/runtimeproviders/searchruntimeprovider/src/searchruntime.cpp	Mon Apr 19 14:40:05 2010 +0300
+++ b/searchui/runtimeproviders/searchruntimeprovider/src/searchruntime.cpp	Mon May 03 12:32:15 2010 +0300
@@ -16,8 +16,8 @@
  */
 
 #include "searchruntime.h"
-#include "Search_global.h"
-#include "hsstatefactory.h"
+#include "search_global.h"
+#include "searchstateprovider.h"
 
 #include <qstatemachine.h>
 #include <qstate.h>
@@ -26,10 +26,7 @@
 
 #include <hbmainwindow.h>
 
-// plugin factory const
-const char factoryManifestDir[] = "searchresources/plugins/stateproviders";
-const char factoryPluginDir[] = "searchresources/plugins/stateproviders";
-const char stateLibrary[] = "searchstateprovider.dll";
+
 
 // states
 const char wizardProgressiveStateUri[] =
@@ -42,9 +39,8 @@
 // ---------------------------------------------------------------------------
 //
 SearchRuntime::SearchRuntime(QObject* aParent) :
-    HsRuntime(aParent), mStateMachine(0), mWindow(0)
+QStateMachine(aParent),mWindow(0)
     {
-    mStateMachine = new QStateMachine(this);
     createGuiServiceParts();
     createStates();
     }
@@ -56,25 +52,7 @@
 SearchRuntime::~SearchRuntime()
     {
     delete mWindow;
-    delete mStateMachine;
-    }
-
-// ---------------------------------------------------------------------------
-// SearchRuntime::start()
-// ---------------------------------------------------------------------------
-//
-void SearchRuntime::start()
-    {
-    mStateMachine->start();
-    }
-
-// ---------------------------------------------------------------------------
-// SearchRuntime::stop()
-// ---------------------------------------------------------------------------
-//
-void SearchRuntime::stop()
-    {
-    mStateMachine->stop();
+  //  delete mStateMachine;
     }
 
 // ---------------------------------------------------------------------------
@@ -83,7 +61,7 @@
 //
 void SearchRuntime::handleStateMachineStarted()
     {
-    emit started();
+   // emit started();
     }
 
 // ---------------------------------------------------------------------------
@@ -111,15 +89,15 @@
 //
 void SearchRuntime::createStates()
     {
-    HsStateFactory factory(factoryManifestDir, factoryPluginDir);
-    HsStateToken token;
 
+    SearchStateProvider stateProvider;
+    
     QFinalState* finalState = new QFinalState();
-    mStateMachine->addState(finalState);
+    this->addState(finalState);
 
     // parallel state activates all children states
     QState* parallel = new QState(QState::ParallelStates);
-    mStateMachine->addState(parallel);
+    this->addState(parallel);
     parallel->addTransition(this, SIGNAL(stopStateMachine()), finalState);
 
     // root GUI state
@@ -127,18 +105,16 @@
 
     QState* searchRootState = new QState(guiRootState);
 
-    // create state based on token
-    token.mLibrary = stateLibrary;
-    token.mUri = wizardProgressiveStateUri;
-    QState* wizardProgressiveState = factory.createState(token);
+
+    QState* wizardProgressiveState = stateProvider.createState(wizardProgressiveStateUri);
     // set state specific data
     wizardProgressiveState->setParent(searchRootState);
-    wizardProgressiveState->setObjectName(token.mUri);
-    token.mUri = wizardSettingStateUri;
+    wizardProgressiveState->setObjectName(wizardProgressiveStateUri);
+
 
-    QState* wizardSettingState = factory.createState(token);
+    QState* wizardSettingState = stateProvider.createState(wizardSettingStateUri);
     wizardSettingState->setParent(searchRootState);
-    wizardSettingState->setObjectName(token.mUri);
+    wizardSettingState->setObjectName(wizardSettingStateUri);
 
     wizardProgressiveState->addTransition(wizardProgressiveState,
             SIGNAL(settingsState()), wizardSettingState);
@@ -159,13 +135,13 @@
     // set initial state for statemachine
     searchRootState->setInitialState(wizardProgressiveState);
     guiRootState->setInitialState(searchRootState);
-    mStateMachine->setInitialState(parallel);
+    this->setInitialState(parallel);
 
-    connect(mStateMachine, SIGNAL(started()),
+    connect(this, SIGNAL(started()),
             SLOT(handleStateMachineStarted()));
-    connect(mStateMachine, SIGNAL(stopped()),
+    connect(this, SIGNAL(stopped()),
             SLOT(handleStateMachineStopped()));
-    connect(mStateMachine, SIGNAL(finished()),
+    connect(this, SIGNAL(finished()),
             SLOT(handleStateMachineStopped()));
 
     }
--- a/searchui/runtimeproviders/searchruntimeprovider/src/searchruntimeprovider.cpp	Mon Apr 19 14:40:05 2010 +0300
+++ b/searchui/runtimeproviders/searchruntimeprovider/src/searchruntimeprovider.cpp	Mon May 03 12:32:15 2010 +0300
@@ -18,38 +18,11 @@
 #include "searchruntimeprovider.h"
 #include "searchruntime.h"
 
-// constants
-const char providerFileName[] = "searchruntimeprovider.dll";
-const char providerFileUri[] = "search.nokia.com/runtime/defaultruntime";
-
 // ---------------------------------------------------------------------------
-// SearchRuntimeProvider::SearchRuntimeProvider()
-// ---------------------------------------------------------------------------
-//
-SearchRuntimeProvider::SearchRuntimeProvider()
-    {
-    mRuntimeToken.mLibrary = providerFileName;
-    mRuntimeToken.mUri = providerFileUri;
-    }
-
-// ---------------------------------------------------------------------------
-// SearchRuntimeProvider::runtimes()
+// SearchRuntimeProvider::createPlugin()
 // ---------------------------------------------------------------------------
 //
-QList<HsRuntimeToken> SearchRuntimeProvider::runtimes()
-    {
-    return QList<HsRuntimeToken> () << mRuntimeToken;
-    }
-
-// ---------------------------------------------------------------------------
-// SearchRuntimeProvider::createRuntime()
-// ---------------------------------------------------------------------------
-//
-HsRuntime* SearchRuntimeProvider::createRuntime(const HsRuntimeToken& aToken)
-    {
-    return (aToken.mUri == providerFileUri ? new SearchRuntime() : 0);
-    }
-
-#ifndef COVERAGE_MEASUREMENT
-Q_EXPORT_PLUGIN2(Searchruntimeprovider, SearchRuntimeProvider)
-#endif //COVERAGE_MEASUREMENT
+SearchRuntime *SearchRuntimeProvider::createPlugin() const
+{
+    return new SearchRuntime(); 
+}
--- a/searchui/searchui.pro	Mon Apr 19 14:40:05 2010 +0300
+++ b/searchui/searchui.pro	Mon May 03 12:32:15 2010 +0300
@@ -15,10 +15,11 @@
 #
 TEMPLATE = subdirs
 
-SUBDIRS  += indevicehandler \        
-	   Searchapplication \ 			          
-           runtimeproviders \                              
-           stateproviders
+SUBDIRS  += indevicehandler \ 
+	   stateproviders  \     
+	   runtimeproviders \
+	   searchapplication               
+           
 
 CONFIG += ordered
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/searchui/stateproviders/bwins/searchstateprovideru.def	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,15 @@
+EXPORTS
+	??1SearchStateProvider@@UAE@XZ @ 1 NONAME ; SearchStateProvider::~SearchStateProvider(void)
+	??_ESearchStateProvider@@UAE@I@Z @ 2 NONAME ; SearchStateProvider::~SearchStateProvider(unsigned int)
+	??0SearchStateProvider@@QAE@PAVQObject@@@Z @ 3 NONAME ; SearchStateProvider::SearchStateProvider(class QObject *)
+	?tr@SearchStateProvider@@SA?AVQString@@PBD0@Z @ 4 NONAME ; class QString SearchStateProvider::tr(char const *, char const *)
+	?metaObject@SearchStateProvider@@UBEPBUQMetaObject@@XZ @ 5 NONAME ; struct QMetaObject const * SearchStateProvider::metaObject(void) const
+	?getStaticMetaObject@SearchStateProvider@@SAABUQMetaObject@@XZ @ 6 NONAME ; struct QMetaObject const & SearchStateProvider::getStaticMetaObject(void)
+	?staticMetaObject@SearchStateProvider@@2UQMetaObject@@B @ 7 NONAME ; struct QMetaObject const SearchStateProvider::staticMetaObject
+	?createState@SearchStateProvider@@QAEPAVQState@@ABVQString@@@Z @ 8 NONAME ; class QState * SearchStateProvider::createState(class QString const &)
+	?qt_metacall@SearchStateProvider@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 9 NONAME ; int SearchStateProvider::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?trUtf8@SearchStateProvider@@SA?AVQString@@PBD0H@Z @ 10 NONAME ; class QString SearchStateProvider::trUtf8(char const *, char const *, int)
+	?trUtf8@SearchStateProvider@@SA?AVQString@@PBD0@Z @ 11 NONAME ; class QString SearchStateProvider::trUtf8(char const *, char const *)
+	?tr@SearchStateProvider@@SA?AVQString@@PBD0H@Z @ 12 NONAME ; class QString SearchStateProvider::tr(char const *, char const *, int)
+	?qt_metacast@SearchStateProvider@@UAEPAXPBD@Z @ 13 NONAME ; void * SearchStateProvider::qt_metacast(char const *)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/searchui/stateproviders/eabi/searchstateprovideru.def	Mon May 03 12:32:15 2010 +0300
@@ -0,0 +1,12 @@
+EXPORTS
+	_ZN19SearchStateProvider11createStateERK7QString @ 1 NONAME
+	_ZN19SearchStateProvider11qt_metacallEN11QMetaObject4CallEiPPv @ 2 NONAME
+	_ZN19SearchStateProvider11qt_metacastEPKc @ 3 NONAME
+	_ZN19SearchStateProvider16staticMetaObjectE @ 4 NONAME DATA 16
+	_ZN19SearchStateProvider19getStaticMetaObjectEv @ 5 NONAME
+	_ZN19SearchStateProviderC1EP7QObject @ 6 NONAME
+	_ZN19SearchStateProviderC2EP7QObject @ 7 NONAME
+	_ZNK19SearchStateProvider10metaObjectEv @ 8 NONAME
+	_ZTI19SearchStateProvider @ 9 NONAME
+	_ZTV19SearchStateProvider @ 10 NONAME
+
--- a/searchui/stateproviders/searchstateprovider/inc/searchinitstate.h	Mon Apr 19 14:40:05 2010 +0300
+++ b/searchui/stateproviders/searchstateprovider/inc/searchinitstate.h	Mon May 03 12:32:15 2010 +0300
@@ -19,7 +19,7 @@
 #define SEARCH_STATES_INITSTATE_H
 
 #include <qstate.h>
-#include "Search_global.h"
+#include "search_global.h"
 
 SEARCH_CLASS( SearchStateProviderTest)
 class SearchInitState : public QState
--- a/searchui/stateproviders/searchstateprovider/inc/searchprogressivestate.h	Mon Apr 19 14:40:05 2010 +0300
+++ b/searchui/stateproviders/searchstateprovider/inc/searchprogressivestate.h	Mon May 03 12:32:15 2010 +0300
@@ -25,7 +25,42 @@
 #include <qpixmap.h>
 #include <hbicon.h>
 #include <displaymode.h>
-#include "Search_global.h"
+#include <xqappmgr.h>
+#include <xqaiwrequest.h>
+#include "search_global.h"
+
+//Uncomment to enable performance measurements.
+//#define OST_TRACE_COMPILER_IN_USE
+
+#ifdef OST_TRACE_COMPILER_IN_USE
+
+#define PERF_CAT_API_TIME_RESTART  m_categorySearchApiTime.restart();
+#define PERF_CAT_UI_TIME_RESTART  m_categorySearchUiTime.restart();
+#define PERF_CAT_TOTAL_TIME_RESTART  m_totalSearchUiTime.restart();
+#define PERF_CAT_API_ENDLOG qDebug() << "Search on category (API): " << mTemplist.at( mDatabasecount-1 ) << "took "<< m_categorySearchApiTime.elapsed() << " msec";
+#define PERF_CAT_UI_ENDLOG qDebug() << "Search on category (UI): " << mTemplist.at( mDatabasecount-1 ) << "took "<< m_categorySearchUiTime.elapsed() << " msec";
+#define PERF_TOTAL_UI_ENDLOG qDebug() << "Search on total (UI): took "<< m_totalSearchUiTime.elapsed() << " msec";
+#define PERF_CAT_HITS_ENDLOG qDebug() << "Hits on category: " << mTemplist.at( mDatabasecount-1 ) << ": "<< aResultCount;
+#define PERF_CAT_GETDOC_TIME_RESTART m_categoryGetDocumentApiTime.restart();
+#define PERF_CAT_GETDOC_TIME_ACCUMULATE m_getDocumentCatergoryTimeAccumulator += m_categoryGetDocumentApiTime.elapsed();
+#define PERF_CAT_GETDOC_ACCUMULATOR_RESET m_getDocumentCatergoryTimeAccumulator = 0;
+#define PERF_CAT_GETDOC_ACCUMULATOR_ENDLOG qDebug() << "Get Doc on category (API): " << mTemplist.at( mDatabasecount-1 ) << "took " << m_getDocumentCatergoryTimeAccumulator << "msec";
+
+#else
+
+#define PERF_CAT_API_TIME_RESTART  
+#define PERF_CAT_UI_TIME_RESTART  
+#define PERF_CAT_TOTAL_TIME_RESTART
+#define PERF_CAT_API_ENDLOG
+#define PERF_CAT_UI_ENDLOG
+#define PERF_TOTAL_UI_ENDLOG
+#define PERF_CAT_HITS_ENDLOG
+#define PERF_CAT_GETDOC_TIME_RESTART
+#define PERF_CAT_GETDOC_TIME_ACCUMULATE 
+#define PERF_CAT_GETDOC_ACCUMULATOR_RESET
+#define PERF_CAT_GETDOC_ACCUMULATOR_ENDLOG
+
+#endif //OST_TRACE_COMPILER_IN_USE
 
 class HbMainWindow;
 class HbView;
@@ -33,10 +68,7 @@
 class HbDocumentLoader;
 class QStandardItemModel;
 class HbSearchPanel;
-class QSortFilterProxyModel;
-
 class CFbsBitmap;
-
 class InDeviceHandler;
 class QCPixDocument;
 
@@ -104,15 +136,21 @@
      * @since S60 ?S60_version.
      */
     CFbsBitmap *copyBitmapLC(CFbsBitmap *input);
-public slots:
+
+    /**
+     * Constructing cpix handlers  .
+     * @since S60 ?S60_version.
+     */
+    void constructHandlers();
 
     /**
-     * slot connects to CSearchHandler to get the status of search result synchronously 
+     * setting the categories .
      * @since S60 ?S60_version.
-     * @param aError error code.
-     * @param aResultCount number of results
      */
-    void onSearchComplete(int aError, int aResultCount);
+    void setSelectedCategories();
+public slots:
+
+   
 
     /**
      * slot connects to CSearchHandler to get the status of search result asynchronously 
@@ -165,7 +203,8 @@
     void _customizeGoButton(bool avalue);
 
     /**
-     * slot connects to search state  for internet search
+     * slot implemented to avoid repeated search for the same category 
+     * selection when user search for mutiple times
      * @since S60 ?S60_version.
      */
     void settingsaction(bool avalue);
@@ -175,7 +214,38 @@
      * @since S60 ?S60_version.
      */
     void cancelSearch();
+    /**
+     * slot connects to model  for rows insert completion
+     * @since S60 ?S60_version.
+     */
+    void getrowsInserted();
 
+    /**
+     * slot connects to model  for rows delete completion
+     * @since S60 ?S60_version.
+     */
+    void getrowsRemoved();
+    /**
+        * slot added for Application manager
+        * @since S60 ?S60_version.
+        */
+
+    void handleOk(const QVariant& var);
+    
+    /**
+      * slot added for Application manager
+      * @since S60 ?S60_version.
+      */
+
+    void handleError(int ret, const QString& var);
+    
+    /**
+      * Slot implemented for particular category search 
+      * @since S60 ?S60_version.
+      */
+
+    
+    QString filterDoc(const QCPixDocument* aDoc,const QString& filter);
 private:
 
     /**
@@ -252,12 +322,7 @@
      * Own.
      */
     HbSearchPanel* mSearchPanel;
-    /**
-     * proxymodel for list view
-     * Own.
-     */
-    QSortFilterProxyModel *proxyModel;
-
+  
     /**
      * model for list view
      * Own.
@@ -268,6 +333,8 @@
      * qt interface for CPix engine
      * Own.
      */
+    QList<InDeviceHandler*> mSearchHandlerList;
+
     InDeviceHandler* mSearchHandler;
 
     /**
@@ -326,6 +393,19 @@
     bool loadSettings;
     QList<HbIcon> mIconArray;
     HbIcon mIcon;
+	
+private:
+    XQApplicationManager* mAiwMgr;
+    XQAiwRequest* mRequest;
+	
+#ifdef OST_TRACE_COMPILER_IN_USE
+    QTime m_totalSearchUiTime;
+    QTime m_categorySearchUiTime;
+    QTime m_categorySearchApiTime;
+    QTime m_categoryGetDocumentApiTime;
+    //use long to safeguard overflow from long running operations.
+    long m_getDocumentCatergoryTimeAccumulator; 
+#endif
 
 SEARCH_FRIEND_CLASS    (SearchStateProviderTest)
 
--- a/searchui/stateproviders/searchstateprovider/inc/searchsettingsstate.h	Mon Apr 19 14:40:05 2010 +0300
+++ b/searchui/stateproviders/searchstateprovider/inc/searchsettingsstate.h	Mon May 03 12:32:15 2010 +0300
@@ -20,7 +20,7 @@
 
 #include <qstate.h>
 #include <qabstractitemmodel.h>
-#include "Search_global.h"
+#include "search_global.h"
 
 SEARCH_CLASS( SearchStateProviderTest)
 
@@ -31,7 +31,6 @@
 class HbView;
 class HbDocumentLoader;
 class HbAction;
-class HbGridView;
 class QGraphicsLinearLayout;
 class SettingsWidget;
 
@@ -86,20 +85,18 @@
 
 private:
 
+   
     /**
-     * Returns the main window handle.
-     * @since S60 ?S60_version.
-     * @return The pointer to the main window.
-     */
-    //  HbMainWindow* mainWindow();
-
-    /**
-     * Connects signals and slots for active wizard.
+     * checking whether internet search is selected 
      * @since S60 ?S60_version.
      */
 
     void isInternetOn();
 public slots:
+   /**
+    * Called when it receive the selected category information from the settingwidget class
+    * @since S60 ?S60_version.
+    */
 
     void getItemCategory(int, bool);
 
@@ -109,11 +106,6 @@
      */
     void handleBackEvent(bool);
 
-    /**
-     * Function to customize the progressive state.
-     * @since S60 ?S60_version.
-     */
-    //  void customizeGoButton();
 signals:
 
     /**
--- a/searchui/stateproviders/searchstateprovider/inc/searchstateprovider.h	Mon Apr 19 14:40:05 2010 +0300
+++ b/searchui/stateproviders/searchstateprovider/inc/searchstateprovider.h	Mon May 03 12:32:15 2010 +0300
@@ -18,11 +18,15 @@
 #ifndef SEARCH_STATEPROVIDERS_STATEPROVIDER_H
 #define SEARCH_STATEPROVIDERS_STATEPROVIDER_H
 
-#include "Search_global.h"
+#include "search_global.h"
+
+SEARCH_CLASS( SearchStateProviderTest)
 
-#include "hsistateprovider.h"
-
-class SearchStateProviderTest;
+#ifdef BUILD_SEARCHSTATEPROVIDER
+#define SEARCH_STATEPROVIDER Q_DECL_EXPORT
+#else
+#define SEARCH_STATEPROVIDER Q_DECL_IMPORT
+#endif
 
 class QState;
 
@@ -36,11 +40,10 @@
  * @lib Searchstateprovider
  * @since S60 ?S60_version.
  */
-class SearchStateProvider : public QObject, public IHsStateProvider
+class SEARCH_STATEPROVIDER SearchStateProvider : public QObject
     {
 
 Q_OBJECT
-Q_INTERFACES(IHsStateProvider)
 
 public:
 
@@ -49,24 +52,10 @@
      *
      * @since S60 ?S60_version.
      */
-    SearchStateProvider();
-
-    /**
-     * Destructor.
-     *
-     * @since S60 ?S60_version.
-     */
-    virtual ~SearchStateProvider();
+    SearchStateProvider(QObject *parent=NULL);    
+    
 
-public:
-
-    /**
-     * Returns contained states as a list of tokens.
-     *
-     * @return Contained states as a list of tokens.
-     * @since S60 ?S60_version.
-     */
-    QList<HsStateToken> states();
+public:   
 
     /**
      * Creates a state based on the given token.
@@ -74,20 +63,11 @@
      * @param aToken Identifies the state to be created.
      * @since S60 ?S60_version.
      */
-    QState* createState(const HsStateToken& aToken);
-
-private:
+    QState* createState(const QString& uri);
 
-    /**
-     * Token that describes the wizard menu state.
-     */
-    HsStateToken mInitStateToken;
+private:   
 
-    HsStateToken mWizardMenuStateToken;
-
-    HsStateToken mWizardActivatedStateToken;
-
-    friend class SearchStateProviderTest;
+    SEARCH_FRIEND_CLASS    ( SearchStateProviderTest)
     };
 
 #endif //SEARCH_STATEPROVIDERS_STATEPROVIDER_H
--- a/searchui/stateproviders/searchstateprovider/inc/settingswidget.h	Mon Apr 19 14:40:05 2010 +0300
+++ b/searchui/stateproviders/searchstateprovider/inc/settingswidget.h	Mon May 03 12:32:15 2010 +0300
@@ -20,14 +20,19 @@
 #include <hbwidget.h>
 #include <qlist.h>
 #include <hbgridview.h>
-#include <Search_global.h>
+#include <search_global.h>
 class HbCheckBox;
 class HbDialog;
 class QSignalMapper;
+class HbDocumentLoader;
+class HbDataFormModel;
+class HbDataForm;
+class HbRadioButtonList;
+class HbDataFormModelItem;
 
 SEARCH_CLASS(SearchStateProviderTest)
 
-class SettingsWidget : public HbWidget
+class SettingsWidget : public QObject
     {
 Q_OBJECT
 public:
@@ -52,11 +57,11 @@
     /**
      * unchecking subcategories under the main category once main category unchecked
      */
-    void unCheckSubCategories(int aUnCheckSubCategory);
+    void unCheckSubCategories();
     /**
      * checking subcategories under the main category once main category checked
      */
-    void checkSubCategories(int acheckSubCategory);
+    void checkSubCategories();
     /**
      * storing settings to application ini file
      * 
@@ -66,7 +71,15 @@
      * Load setting from application ini file
      * 
      */
-    void loadSettingsFrominiFile();
+    void loadDeviceSettings();
+    
+    /**
+     * Load default settings for search categories to ini file
+     * 
+     */
+
+    void loadBaseSettings();
+
     /**
      * make "OK" button visible 
      * 
@@ -76,7 +89,28 @@
      * enable default settings in the application ini file
      * 
      */
-    void enableDefaultSettings();
+    void storeDefaultSettings();
+    
+    /**
+     * setting up gui for the settings widget
+     */
+
+    void createGui();
+    
+    /**
+     * Filter out categories from the sql database provided by the engine
+     * for only those categories that have been successfully harvested
+     */
+
+    void preparecategories();
+    
+    
+    /**
+      * initilize the settings wizard while entering to the setting state
+      */
+
+    void initialize();
+  
 public slots:
     /**
      * will be called when settings OK is clicked
@@ -91,10 +125,10 @@
      */
     void itemChecked(int);
     /**
-     * will be called when change oin internet or device selectin
-     * 
-     */
-    void changeDeviceInternetCheck();
+      * slot called while clicking items added to  the combobox
+      */
+
+    void q_currentIndexChanged(int);
 signals:
     /**
      * Emitted when setting closed
@@ -138,8 +172,20 @@
     /**
      * list of hardcoded device categories
      */
-    QStringList deviceCategoryList;
+    QMap<QString, bool> mCategoryDbMapping;
 
+    QStringList mDeviceListDisplay;
+    /**
+      * list of hardcoded device categories:cretaed to
+      * set up default category values to the ini file
+      */
+
+    QStringList mDeviceCategoryRefList;
+    /**
+      * intermediate variable to store selected category values
+      */
+
+    QList<bool> mDeviceMapping;
     /**
      * list of hardcoded service providers
      */
@@ -147,6 +193,42 @@
     /**
      * for unit testing
      */
+    QStringList mCategoryList;
+    /**
+      * DocumentLoader variable for the setting widget
+      */
+
+    HbDocumentLoader* mDocumentLoader;
+    
+    /**
+     * Dataform for the settingwidget
+     */
+
+    HbDataForm* dataform;
+
+    /**
+      * Dataform model
+      */
+    HbDataFormModel* mModel;
+    /**
+      * variable for customizing each item the in the dataform
+      */
+
+    QList<HbDataFormModelItem*> mModelItemList;
+
+    QList<QAction*> mActions;
+
+    int mSelectedScope;
+
+    int mSelectedProvider;
+    /**
+      * Radio buttion list for internet search categories
+      */
+
+    HbRadioButtonList* mradiolist;
+
+    bool mInstialize;
+    bool mchangestate;
 SEARCH_FRIEND_CLASS    (SearchStateProviderTest)
     };
 #endif
--- a/searchui/stateproviders/searchstateprovider/resources/resources.qrc	Mon Apr 19 14:40:05 2010 +0300
+++ b/searchui/stateproviders/searchstateprovider/resources/resources.qrc	Mon May 03 12:32:15 2010 +0300
@@ -1,14 +1,6 @@
 <RCC>
     <qresource prefix="/xml">
         <file alias="searchstateprovider.docml">searchstateprovider.docml</file>
-    </qresource>
-    <qresource prefix="/decorators">
-        <file alias="video.png">video.png</file>
-        <file alias="calender.png">calender.png</file>
-        <file alias="camera.png">camera.png</file>
-        <file alias="email.png">email.png</file>
-        <file alias="message.png">message.png</file>
-        <file alias="phonebook.png">phonebook.png</file>
-        <file alias="sound.png">sound.png</file>
+        <file alias="delimeterscreen.docml">delimeterscreen.docml</file>
     </qresource>
 </RCC>
--- a/searchui/stateproviders/searchstateprovider/searchstateprovider.pro	Mon Apr 19 14:40:05 2010 +0300
+++ b/searchui/stateproviders/searchstateprovider/searchstateprovider.pro	Mon May 03 12:32:15 2010 +0300
@@ -16,6 +16,7 @@
 
 TEMPLATE = lib
 
+DEFINES += BUILD_SEARCHSTATEPROVIDER
 
 symbian {
     CONFIG(debug, debug|release) {
@@ -32,9 +33,6 @@
       SUBDIRPART = release
     }
     DESTDIR = $$PWD/../../../bin/$$SUBDIRPART/searchresources/plugins/stateproviders
-    INCLUDEPATH += \              
-              $$PWD/../../../homescreensrv/homescreensrv_plat/ftuwizardmodel_api/inc \
-              $$PWD/../../../homescreensrv/homescreensrv_plat/statemodel_api
     LIBS += -L$$PWD/../../../bin/debug
 }
 
@@ -50,13 +48,12 @@
 LIBS += -lbitgdi
 
 
-CONFIG += plugin debug_and_release
-
 coverage:DEFINES += COVERAGE_MEASUREMENT
 
 CONFIG += hb
 
-QT += xml
+QT += sql xml
+
 
 nft:DEFINES += NFT
 
@@ -75,10 +72,10 @@
     TARGET.EPOCALLOWDLLDATA=1
     TARGET.CAPABILITY = ALL -TCB -DRM
     INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE 
-    include(searchstateprovider_installs_symbian.pri)
+    #include(searchstateprovider_installs_symbian.pri)
+   # BLD_INF_RULES.prj_exports += "./inc/searchstateprovider.h |../../inc/"
 
 }
-
+win32:include(searchstateprovider_installs_win32.pri)
 symbian:unix:include(searchstateprovider_installs_unix.pri)
 include(searchstateprovider.pri)
-
--- a/searchui/stateproviders/searchstateprovider/src/searchinitstate.cpp	Mon Apr 19 14:40:05 2010 +0300
+++ b/searchui/stateproviders/searchstateprovider/src/searchinitstate.cpp	Mon May 03 12:32:15 2010 +0300
@@ -41,13 +41,12 @@
     }
 
 // ---------------------------------------------------------------------------
-// SearchInitState::~construct()
+// SearchInitState::construct()
 // ---------------------------------------------------------------------------
 //
 void SearchInitState::construct()
     {
-    // Read configuration parameters?
-    // lazyInit()?
+    
     }
 
 // ---------------------------------------------------------------------------
--- a/searchui/stateproviders/searchstateprovider/src/searchprogressivestate.cpp	Mon Apr 19 14:40:05 2010 +0300
+++ b/searchui/stateproviders/searchstateprovider/src/searchprogressivestate.cpp	Mon May 03 12:32:15 2010 +0300
@@ -17,8 +17,8 @@
 
 #include "searchprogressivestate.h"
 #include "indevicehandler.h"
-#include "qcpixdocument.h"
-#include "qcpixdocumentfield.h"
+#include <qcpixdocument.h>
+#include <qcpixdocumentfield.h>
 #include <hbmainwindow.h>
 #include <hbview.h>
 #include <hblabel.h>
@@ -30,7 +30,6 @@
 #include <hbsearchpanel.h>
 #include <hbaction.h>
 #include <qstandarditemmodel.h>
-#include <xqservicerequest.h>
 #include <hbframebackground.h>
 #include <hbabstractviewitem.h>
 #include <hbframebackground.h>
@@ -51,21 +50,22 @@
 const char *TUT_SEARCHPANEL_WIDGET = "searchPanel";
 const char *TUT_LIST_VIEW = "listView";
 const QSize defaultIconSize(30, 30);
-
+const int totalcategories = 10;
 // ---------------------------------------------------------------------------
 // SearchProgressiveState::SearchProgressiveState
 // ---------------------------------------------------------------------------
 //
 SearchProgressiveState::SearchProgressiveState(QState *parent) :
     QState(parent), mMainWindow(NULL), mView(NULL), mListView(NULL),
-            mDocumentLoader(NULL), mModel(NULL), mSearchHandler(NULL)
+            mDocumentLoader(NULL), mModel(NULL), mSearchHandler(NULL),
+            mAiwMgr(0), mRequest(0)
     {
 
     mMainWindow = hbInstance->allMainWindows().at(0);
     mModel = new QStandardItemModel(this);
 
-    proxyModel = new QSortFilterProxyModel(this);
-    proxyModel->setSourceModel(mModel);
+   
+    mAiwMgr = new XQApplicationManager;
 
     mDocumentLoader = new HbDocumentLoader();
     bool ok = false;
@@ -100,10 +100,15 @@
 
             }
         mListView->setModel(mModel, prototype);
+
+        HbAbstractItemView::ItemAnimations noCreationAndRemovalAnimations =
+                HbAbstractItemView::All;
+        noCreationAndRemovalAnimations ^= HbAbstractItemView::Appear;
+        noCreationAndRemovalAnimations ^= HbAbstractItemView::Disappear;
+
+        mListView->setEnabledAnimations(noCreationAndRemovalAnimations);
         }
-    //bool bl = mListView->itemRecycling();
-    // mListView->setItemRecycling(false);
-    //mListView->setModel(proxyModel);
+    
 
     mSearchPanel = qobject_cast<HbSearchPanel *> (
             mDocumentLoader->findWidget(TUT_SEARCHPANEL_WIDGET));
@@ -112,8 +117,9 @@
         mSearchPanel->setSearchOptionsEnabled(true);
         }
 
-    mSearchHandler = new InDeviceHandler();
-    if (mView)
+    constructHandlers();
+
+    if (mView && mMainWindow)
         {
         mMainWindow->addView(mView);
         mMainWindow->setCurrentView(mView);
@@ -143,6 +149,14 @@
         mIconArray.append(getAppIconFromAppId(appUid[i]));
         }
 
+#ifdef OST_TRACE_COMPILER_IN_USE 
+    //start() the timers to avoid worrying abt having to start()/restart() later
+    m_categorySearchApiTime.start();
+    m_categorySearchUiTime.start();
+    m_totalSearchUiTime.start();
+    m_categoryGetDocumentApiTime.start();
+    m_getDocumentCatergoryTimeAccumulator = 0;
+#endif
     }
 // ---------------------------------------------------------------------------
 // SearchProgressiveState::~SearchProgressiveState
@@ -150,11 +164,11 @@
 //
 SearchProgressiveState::~SearchProgressiveState()
     {
-    if (proxyModel)
+    if (mAiwMgr)
         {
-        delete proxyModel;
+        delete mAiwMgr;
         }
-
+   
     if (mModel)
         {
         delete mModel;
@@ -163,14 +177,82 @@
         {
         delete mDocumentLoader;
         }
-    if (mSearchHandler)
+
+    for (int i = 0; i < mSearchHandlerList.count(); i++)
         {
-        delete mSearchHandler;
+        delete mSearchHandlerList.at(i);
         }
 
     }
 
 // ---------------------------------------------------------------------------
+// SearchProgressiveState::constructHandlers
+// ---------------------------------------------------------------------------
+//
+void SearchProgressiveState::constructHandlers()
+    {
+    InDeviceHandler* handler = NULL;
+    for (int i = 0; i < totalcategories; i++)
+        {
+        handler = new InDeviceHandler();
+        switch (i)
+            {
+            case 0:
+                {
+                handler->setCategory("");
+                break;
+                }
+            case 1:
+                {
+                handler->setCategory("contact");
+                break;
+                }
+            case 2:
+                {
+                handler->setCategory("media");
+                break;
+                }
+            case 3:
+                {
+                handler->setCategory("msg");
+                break;
+                }
+            case 4:
+                {
+                handler->setCategory("email");
+                break;
+                }
+            case 5:
+                {
+                handler->setCategory("calendar");
+                break;
+                }
+            case 6:
+                {
+                handler->setCategory("notes");
+                break;
+                }
+            case 7:
+                {
+                handler->setCategory("applications");
+                break;
+                }
+            case 8:
+                {
+                handler->setCategory("file");
+                break;
+                }
+            case 9:
+                {
+                handler->setCategory("bookmark");
+                break;
+                }
+            }
+        mSearchHandlerList.append(handler);
+        }
+    }
+
+// ---------------------------------------------------------------------------
 // SearchProgressiveState::onEntry
 // ---------------------------------------------------------------------------
 //
@@ -182,19 +264,20 @@
     activateSignals();
 
     // If this is not the current view, we're getting back from plugin view  
-
-    if (mMainWindow->currentView() != mView)
+    if (mMainWindow)
         {
-        mMainWindow->setCurrentView(mView, true);
+        if (mMainWindow->currentView() != mView)
+            {
+            mMainWindow->setCurrentView(mView, true);
+            }
+        mMainWindow->show();
         }
-    mMainWindow->show();
-
     if (loadSettings)
         {
         emit settingsState();
         loadSettings = false;
         }
-
+    setSelectedCategories();
     }
 // ---------------------------------------------------------------------------
 // SearchProgressiveState::onExit
@@ -212,14 +295,14 @@
 //
 void SearchProgressiveState::activateSignals()
     {
-    if (mSearchHandler)
+    for (int i = 0; i < mSearchHandlerList.count(); i++)
         {
-        connect(mSearchHandler, SIGNAL(handleSearchResult(int,int)), this,
-                SLOT(onSearchComplete(int,int)));
-        connect(mSearchHandler, SIGNAL(handleAsyncSearchResult(int,int)),
-                this, SLOT(onAsyncSearchComplete(int,int)));
-        connect(mSearchHandler, SIGNAL(handleDocument(int,QCPixDocument*)),
-                this, SLOT(onGetDocumentComplete(int,QCPixDocument*)));
+        connect(mSearchHandlerList.at(i),
+                SIGNAL(handleAsyncSearchResult(int,int)), this,
+                SLOT(onAsyncSearchComplete(int,int)));
+        connect(mSearchHandlerList.at(i),
+                SIGNAL(handleDocument(int,QCPixDocument*)), this,
+                SLOT(onGetDocumentComplete(int,QCPixDocument*)));
         }
     if (mListView)
         {
@@ -233,9 +316,17 @@
 
         connect(mSearchPanel, SIGNAL(searchOptionsClicked()), this,
                 SLOT(setSettings()));
-        
+
         connect(mSearchPanel, SIGNAL(exitClicked()), this,
-                        SLOT(cancelSearch()));
+                SLOT(cancelSearch()));
+        }
+    if (mModel)
+        {
+        connect(mModel, SIGNAL(rowsInserted(QModelIndex,int,int)), this,
+                SLOT(getrowsInserted()));
+
+        connect(mModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), this,
+                SLOT(getrowsRemoved()));
         }
     }
 // ---------------------------------------------------------------------------
@@ -244,13 +335,12 @@
 //
 void SearchProgressiveState::deActivateSignals()
     {
-    if (mSearchHandler)
+    for (int i = 0; i < mSearchHandlerList.count(); i++)
         {
-        disconnect(mSearchHandler, SIGNAL(handleSearchResult(int,int)), this,
-                SLOT(onSearchComplete(int,int)));
-        disconnect(mSearchHandler, SIGNAL(handleAsyncSearchResult(int,int)),
-                this, SLOT(onAsyncSearchComplete(int,int)));
-        disconnect(mSearchHandler,
+        disconnect(mSearchHandlerList.at(i),
+                SIGNAL(handleAsyncSearchResult(int,int)), this,
+                SLOT(onAsyncSearchComplete(int,int)));
+        disconnect(mSearchHandlerList.at(i),
                 SIGNAL(handleDocument(int,QCPixDocument*)), this,
                 SLOT(onGetDocumentComplete(int,QCPixDocument*)));
         }
@@ -266,25 +356,17 @@
 
         disconnect(mSearchPanel, SIGNAL(searchOptionsClicked()), this,
                 SLOT(setSettings()));
-        }
-    }
 
-// ---------------------------------------------------------------------------
-// SearchProgressiveState::onSearchComplete
-// ---------------------------------------------------------------------------
-//
-void SearchProgressiveState::onSearchComplete(int aError, int aResultCount)
-    {
-    if (aError != 0)
+        disconnect(mSearchPanel, SIGNAL(exitClicked()), this,
+                SLOT(cancelSearch()));
+        }
+    if (mModel)
         {
-        //Error found
-        return;
-        }
-    if (aResultCount > 0)
-        {
-        mResultcount = aResultCount;
-        mResultparser = 0;
-        mSearchHandler->getDocumentAsyncAtIndex(mResultparser);
+        disconnect(mModel, SIGNAL(rowsInserted(QModelIndex,int,int)), this,
+                SLOT(getrowsInserted()));
+
+        disconnect(mModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), this,
+                SLOT(getrowsRemoved()));
         }
     }
 // ---------------------------------------------------------------------------
@@ -294,6 +376,8 @@
 void SearchProgressiveState::onAsyncSearchComplete(int aError,
         int aResultCount)
     {
+    PERF_CAT_API_ENDLOG
+    PERF_CAT_HITS_ENDLOG
 
     if (aError != 0)
         {
@@ -309,7 +393,8 @@
         {
         mResultcount = aResultCount;
         mResultparser = 0;
-
+        PERF_CAT_GETDOC_TIME_RESTART
+        PERF_CAT_GETDOC_ACCUMULATOR_RESET
         mSearchHandler->getDocumentAsyncAtIndex(mResultparser);
         }
     }
@@ -320,12 +405,11 @@
 void SearchProgressiveState::onGetDocumentComplete(int aError,
         QCPixDocument* aDoc)
     {
+    PERF_CAT_GETDOC_TIME_ACCUMULATE
     if (aDoc == NULL || aError != 0)
         return;
     QStringList liststr;
     QString secondrow = aDoc->excerpt();
-    QString baseclass = aDoc->baseAppClass();
-    QString Uid = aDoc->docId();
     QString firstrow;
 
     //-------------- html tag creation-------------------
@@ -334,149 +418,141 @@
     int insertpt = secondrow.indexOf(mOriginalString, 0, Qt::CaseInsensitive);
     if (insertpt >= 0)
         {
-        int preTagLen = htmlTagPre.length();
-
         secondrow.insert(insertpt, htmlTagPre);
 
-        secondrow.insert(insertpt + mOriginalString.length() + preTagLen,
-                htmlTagPost);
-        //--------------------Html Tag Creation completed------------
+        secondrow.insert(insertpt + mOriginalString.length()
+                + htmlTagPre.length(), htmlTagPost);
         }
-
+    //--------------------Html Tag Creation completed------------
     QStandardItem* listitem = new QStandardItem();
 
     if (aDoc->baseAppClass().contains("contact"))
         {
-        int index = aDoc->fieldCount();
-        for (int i = 0; i < index; i++)
+        QString givename;
+        QString familyname;
+        bool bgivenname = false;
+        bool bfamilyname = false;
+        for (int i = 0; i < aDoc->fieldCount(); i++)
             {
-            if (aDoc->field(i).name().contains("GivenName"))
+            if (!bgivenname && aDoc->field(i).name().contains("GivenName"))
+                {
+                givename.append(aDoc->field(i).value());
+                bgivenname = true;
+                }
+            if (!bfamilyname && aDoc->field(i).name().contains("FamilyName"))
                 {
-                firstrow = aDoc->field(i).value();
+                familyname.append(aDoc->field(i).value());
+                bfamilyname = true;
+                }
+            if (bgivenname && bfamilyname)
                 break;
-                }
+            }
+        if (givename.length())
+            {
+            firstrow.append(givename);
+            }
+        if (familyname.length())
+            {
+            if (firstrow.length())
+                firstrow.append(" ");
+            firstrow.append(familyname);
             }
         if (firstrow.length() == 0)
-            firstrow = baseclass;
+            {
+            firstrow = hbTrId("txt_phob_list_unknown");
+            }
         liststr << firstrow << secondrow;
         listitem->setData(mIconArray.at(0), Qt::DecorationRole);
-
         }
     else if (aDoc->baseAppClass().contains("audio"))
         {
-        int index = aDoc->fieldCount();
-        for (int i = 0; i < index; i++)
+        firstrow.append(filterDoc(aDoc, "Title"));
+        if (firstrow.length() == 0)
             {
-            if (aDoc->field(i).name().contains("Name"))
-                {
-                firstrow = aDoc->field(i).value();
-                break;
-                }
+            firstrow = hbTrId("txt_mus_dblist_val_unknown4");
             }
-        if (firstrow.length() == 0)
-            firstrow = baseclass;
         liststr << firstrow << secondrow;
         listitem->setData(mIconArray.at(1), Qt::DecorationRole);
         }
     else if (aDoc->baseAppClass().contains("video"))
         {
-        int index = aDoc->fieldCount();
-        for (int i = 0; i < index; i++)
+        firstrow.append(filterDoc(aDoc, "Title"));
+        if (firstrow.length() == 0)
             {
-            if (aDoc->field(i).name().contains("Name"))
-                {
-                firstrow = aDoc->field(i).value();
-                break;
-                }
+            firstrow.append(filterDoc(aDoc, "Name"));
             }
-        if (firstrow.length() == 0)
-            firstrow = baseclass;
         liststr << firstrow << secondrow;
         listitem->setData(mIconArray.at(2), Qt::DecorationRole);
-
         }
     else if (aDoc->baseAppClass().contains("image"))
         {
-        int index = aDoc->fieldCount();
-        for (int i = 0; i < index; i++)
-            {
-            if (aDoc->field(i).name().contains("Name"))
-                {
-                firstrow = aDoc->field(i).value();
-                break;
-                }
-            }
-        if (firstrow.length() == 0)
-            firstrow = baseclass;
+        firstrow.append(filterDoc(aDoc, "Name"));
         liststr << firstrow << secondrow;
         listitem->setData(mIconArray.at(3), Qt::DecorationRole);
         }
     else if (aDoc->baseAppClass().contains("msg"))
         {
-        int index = aDoc->fieldCount();
-        for (int i = 0; i < index; i++)
+        QString subject;
+        QString body;
+        bool bsubject = false;
+        bool bbody = false;
+        for (int i = 0; i < aDoc->fieldCount(); i++)
             {
-            if (aDoc->field(i).name().contains("Subject"))
+            if (!bsubject && aDoc->field(i).name().contains("Subject"))
+                {
+                subject.append(aDoc->field(i).value());
+                bsubject = true;
+                }
+            if (!bbody && aDoc->field(i).name().contains("Body"))
                 {
-                firstrow = aDoc->field(i).value();
+                body.append(aDoc->field(i).value());
+                bbody = true;
+                }
+            if (bsubject && bbody)
                 break;
-                }
+            }
+        if (subject.length())
+            {
+            firstrow.append(subject);
+            }
+        else
+            {
+            firstrow.append(body);
             }
         if (firstrow.length() == 0)
-            firstrow = baseclass;
+            {
+            firstrow = " ";// space if subject and body are missing
+            }
         liststr << firstrow << secondrow;
         listitem->setData(mIconArray.at(4), Qt::DecorationRole);
-
         }
     else if (aDoc->baseAppClass().contains("email"))
         {
-        int index = aDoc->fieldCount();
-        for (int i = 0; i < index; i++)
-            {
-            if (aDoc->field(i).name().contains("GivenName"))
-                {
-                firstrow = aDoc->field(i).value();
-                break;
-                }
-            }
-        if (firstrow.length() == 0)
-            firstrow = baseclass;
+        firstrow.append(filterDoc(aDoc, "Subject"));
         liststr << firstrow << secondrow;
         }
     else if (aDoc->baseAppClass().contains("calendar"))
         {
-        int index = aDoc->fieldCount();
-        for (int i = 0; i < index; i++)
+        firstrow.append(filterDoc(aDoc, "Description"));
+        if (firstrow.length() == 0)
             {
-            if (aDoc->field(i).name().contains("Description"))
-                {
-                firstrow = aDoc->field(i).value();
-                break;
-                }
+            firstrow = hbTrId("txt_calendar_preview_unnamed");
             }
-        if (firstrow.length() == 0)
-            firstrow = baseclass;
+
         liststr << firstrow << secondrow;
         listitem->setData(mIconArray.at(6), Qt::DecorationRole);
         }
     else if (aDoc->baseAppClass().contains("notes"))
         {
-        int index = aDoc->fieldCount();
-        for (int i = 0; i < index; i++)
+        firstrow.append(filterDoc(aDoc, "Memo"));
+        if (firstrow.length() == 0)
             {
-            if (aDoc->field(i).name().contains("Memo"))
-                {
-                firstrow = aDoc->field(i).value();
-                break;
-                }
+            firstrow = hbTrId("txt_notes_dblist_unnamed");
             }
-        if (firstrow.length() == 0)
-            firstrow = baseclass;
         liststr << firstrow << secondrow;
         }
     else if (aDoc->baseAppClass().contains("applications"))
         {
-
         liststr << secondrow;
         bool ok;
         listitem->setData(getAppIconFromAppId(TUid::Uid(aDoc->docId().toInt(
@@ -484,32 +560,18 @@
         }
     else if (aDoc->baseAppClass().contains("bookmark"))
         {
-        int index = aDoc->fieldCount();
-        for (int i = 0; i < index; i++)
+        firstrow.append(filterDoc(aDoc, "Name"));
+        if (firstrow.length() == 0)
             {
-            if (aDoc->field(i).name().contains("Name"))
-                {
-                firstrow = aDoc->field(i).value();
-                break;
-                }
+            firstrow = "UnKnown";
             }
-        if (firstrow.length() == 0)
-            firstrow = baseclass;
         liststr << firstrow << secondrow;
         }
     else if (aDoc->baseAppClass().contains("file"))
         {
-        int index = aDoc->fieldCount();
-        for (int i = 0; i < index; i++)
-            {
-            if (aDoc->field(i).name().contains("FullName"))
-                {
-                firstrow = aDoc->field(i).value();
-                break;
-                }
-            }
+        firstrow.append(filterDoc(aDoc, "BaseName"));
         if (firstrow.length() == 0)
-            firstrow = baseclass;
+            firstrow = aDoc->baseAppClass();
         liststr << firstrow << secondrow;
         listitem->setData(mIconArray.at(9), Qt::DecorationRole);
         }
@@ -519,27 +581,56 @@
     listitem->setData(aDoc->baseAppClass(), Qt::UserRole + 1);
 
     mModel->appendRow(listitem);
+
+    delete aDoc;
+    }
+// ---------------------------------------------------------------------------
+// SearchProgressiveState::getSettingCategory
+// ---------------------------------------------------------------------------
+//
+void SearchProgressiveState::getSettingCategory(int item, bool avalue)
+    {
+    mSelectedCategory.insert(item, avalue);
+    }
+// ---------------------------------------------------------------------------
+// SearchProgressiveState::getrowsInserted
+// ---------------------------------------------------------------------------
+//
+void SearchProgressiveState::getrowsInserted()
+    {
     mResultparser++;
     if (mResultparser < mResultcount)
         {
-
+        PERF_CAT_GETDOC_TIME_RESTART
         mSearchHandler->getDocumentAsyncAtIndex(mResultparser);
         }
     else
         {
-
+        PERF_CAT_GETDOC_ACCUMULATOR_ENDLOG
         searchOnCategory(mSearchString);
         }
     }
 // ---------------------------------------------------------------------------
-// SearchProgressiveState::_selectedcategory
+// SearchProgressiveState::getrowsRemoved
 // ---------------------------------------------------------------------------
 //
-void SearchProgressiveState::getSettingCategory(int item, bool avalue)
+void SearchProgressiveState::getrowsRemoved()
     {
-
-    mSelectedCategory.insert(item, avalue);
-
+    if (mModel->rowCount() != 0)
+        {
+        mModel->removeRow(0);
+        }
+    else
+        {
+        mListView->reset();
+        if (mOriginalString.length())
+            {
+            mDatabasecount = 0;
+            mSearchString = mOriginalString;
+            mSearchString.append('*');
+            searchOnCategory(mSearchString);
+            }
+        }
     }
 // ---------------------------------------------------------------------------
 // SearchProgressiveState::openResultitem
@@ -549,35 +640,94 @@
     {
     QStandardItem* item = mModel->itemFromIndex(index);
     QString baseclass = item->data(Qt::UserRole + 1).toString();
+
+    QVariant retValue;
     bool t;
-    int uid = (item->data(Qt::UserRole)).toInt(&t);
-
-    if (index.row() == mLinkindex)
+    if (baseclass.contains("contact"))
         {
-        // emit linkItemClicked();
-        }
-    else
-        {
-        XQServiceRequest *mSndEdit;
-        QVariant retValue;
+
+        mRequest = mAiwMgr->create("com.nokia.services.phonebookservices",
+                "Fetch", "open(int)", false);
+        connect(mRequest, SIGNAL(requestOk(const QVariant&)), this,
+                SLOT(handleOk(const QVariant&)));
+        // Connect error handling signal or apply lastError function instead.
+        connect(mRequest, SIGNAL(requestError(int,const QString&)), this,
+                SLOT(handleError(int,const QString&)));
 
-        if (baseclass.contains("contact"))
+        if (!mRequest)
+            {
+            qDebug() << "AIW-ERROR: NULL request";
+            return;
+            }
+
+        int uid = (item->data(Qt::UserRole)).toInt(&t);
+        QList<QVariant> args;
+        args << uid;
+        mRequest->setArguments(args);
+        // Make the request
+        if (!mRequest->send())
             {
-            mSndEdit = new XQServiceRequest(
-                    "com.nokia.services.phonebookservices.Fetch",
-                    "open(int)", false);
-            *mSndEdit << uid;
-            retValue = mSndEdit->send();
+            qDebug() << "AIW-ERROR: Send failed" << mRequest->lastError();
             }
-        else if (baseclass.contains("msg"))
+        delete mRequest;
+
+        }
+    else if (baseclass.contains("msg"))
+        {
+        int uid = (item->data(Qt::UserRole)).toInt(&t);
+
+        mRequest = mAiwMgr->create("com.nokia.services.hbserviceprovider",
+                "conversationview", "view(qint64)", false);
+        connect(mRequest, SIGNAL(requestOk(const QVariant&)), this,
+                SLOT(handleOk(const QVariant&)));
+        // Connect error handling signal or apply lastError function instead.
+        connect(mRequest, SIGNAL(requestError(int,const QString&)), this,
+                SLOT(handleError(int,const QString&)));
+
+        if (!mRequest)
             {
-            mSndEdit = new XQServiceRequest(
-                    "com.nokia.services.hbserviceprovider.conversationview",
-                    "openConversationView(qint64,int)", false);
-            *mSndEdit << uid << 0;
-            retValue = mSndEdit->send();
+            qDebug() << "AIW-ERROR: NULL request";
+            return;
             }
+
+        QList<QVariant> args;
+        args << uid;
+        retValue = mRequest->send();
+        delete mRequest;
         }
+    else if (baseclass.contains("video"))
+        {
+        QString uid = item->data(Qt::UserRole).toString();
+        mRequest = mAiwMgr->create("com.nokia.videos", "IVideoView",
+                "playMedia(QString)", false);
+        connect(mRequest, SIGNAL(requestOk(const QVariant&)), this,
+                SLOT(handleOk(const QVariant&)));
+        // Connect error handling signal or apply lastError function instead.
+        connect(mRequest, SIGNAL(requestError(int,const QString&)), this,
+                SLOT(handleError(int,const QString&)));
+
+        QList<QVariant> args;
+        args << uid;
+        retValue = mRequest->send();
+        delete mRequest;
+        }
+
+    }
+// ---------------------------------------------------------------------------
+// SearchProgressiveState::handleOk
+// ---------------------------------------------------------------------------
+//
+void SearchProgressiveState::handleOk(const QVariant& /*var*/)
+    {
+
+    }
+// ---------------------------------------------------------------------------
+// SearchProgressiveState::handleError
+// ---------------------------------------------------------------------------
+//
+void SearchProgressiveState::handleError(int /*ret*/, const QString& /*var*/)
+    {
+
     }
 // ---------------------------------------------------------------------------
 // SearchProgressiveState::createSuggestionLink
@@ -585,22 +735,15 @@
 //
 void SearchProgressiveState::createSuggestionLink(bool aFlag)
     {
-    QStandardItem* listitem = new QStandardItem();
-    /*   QString displaystr;
-     QString searchStr(mSearchString);*/
+    QStandardItem* listitem = new QStandardItem();    
     QString htmlKeyword = QString("<u>%1</u>").arg(mOriginalString);
-    /*  QString htmlServiceProvider = QString("in Google");*/
-
     if (!aFlag)
         {
         QString linkString = QString(hbTrId(
                 "txt_search_list_search_for_1_on_2").arg(htmlKeyword));
         mLinkindex = mModel->rowCount();
         listitem->setData(linkString, Qt::DisplayRole);
-        /*   HbFrameBackground* background = new HbFrameBackground(
-         "qtg_fr_button_function_latched", HbFrameDrawer::NinePieces);
-         listitem->setData(*background, Qt::BackgroundRole);
-         */
+ 
         mModel->appendRow(listitem);
         }
 
@@ -622,37 +765,84 @@
 
     }
 // ---------------------------------------------------------------------------
-// SearchProgressiveState::noResultsFound
+// SearchProgressiveState::clear
 // ---------------------------------------------------------------------------
 //
 void SearchProgressiveState::clear()
     {
     if (mModel)
         {
-        mModel->clear();
+        mModel->removeRows(0, mModel->rowCount());      
         }
     }
 // ---------------------------------------------------------------------------
-// SearchProgressiveState::noResultsFound
+// SearchProgressiveState::searchOnCategory
 // ---------------------------------------------------------------------------
 //
 void SearchProgressiveState::searchOnCategory(const QString aKeyword)
     {
+#ifdef OST_TRACE_COMPILER_IN_USE
+    if( mDatabasecount != 0 ){//Search just started.
+        PERF_CAT_UI_ENDLOG
+    }
+    PERF_CAT_UI_TIME_RESTART
+#endif
     mResultparser = 0;
     mResultcount = 0;
     if (mDatabasecount < mTemplist.count())
         {
         QString str = mTemplist.at(mDatabasecount);
-        mSearchHandler->setCategory(mTemplist.at(mDatabasecount));
+        if (str.contains("selectall"))
+            {
+            // mSearchHandler = mSearchHandlerList.at(0);
+            }
+        else if (str.contains("contact"))
+            {
+            mSearchHandler = mSearchHandlerList.at(1);
+            }
+        else if (str.contains("media"))
+            {
+            mSearchHandler = mSearchHandlerList.at(2);
+            }
+        else if (str.contains("msg"))
+            {
+            mSearchHandler = mSearchHandlerList.at(3);
+            }
+        else if (str.contains("email"))
+            {
+            mSearchHandler = mSearchHandlerList.at(4);
+            }
+        else if (str.contains("calendar"))
+            {
+            mSearchHandler = mSearchHandlerList.at(5);
+            }
+        else if (str.contains("notes"))
+            {
+            mSearchHandler = mSearchHandlerList.at(6);
+            }
+        else if (str.contains("applications"))
+            {
+            mSearchHandler = mSearchHandlerList.at(7);
+            }
+        else if (str.contains("file"))
+            {
+            mSearchHandler = mSearchHandlerList.at(8);
+            }
+        else if (str.contains("bookmark"))
+            {
+            mSearchHandler = mSearchHandlerList.at(9);
+            }
+        // mSearchHandler->setCategory(mTemplist.at(mDatabasecount));
         mDatabasecount++;
         if (mSearchHandler->isPrepared())
             {
-
+            PERF_CAT_API_TIME_RESTART
             mSearchHandler->searchAsync(aKeyword, "_aggregate");
             }
         }
     else if (mDatabasecount >= mTemplist.count())
         {
+        PERF_TOTAL_UI_ENDLOG
         if (mListView->indexCount() == 0 && aKeyword.length() != 0)
             {
             noResultsFound(mOriginalString);
@@ -668,67 +858,23 @@
 //
 void SearchProgressiveState::startNewSearch(const QString &aKeyword)
     {
+    PERF_CAT_TOTAL_TIME_RESTART
 
-    if (mSearchHandler)
+    mOriginalString = aKeyword.trimmed();
+    for (int i = 0; i < mSearchHandlerList.count(); i++)
         {
-        mSearchHandler->cancelLastSearch();
+        mSearchHandlerList.at(i)->cancelLastSearch();
+        }
+    if (mModel->rowCount() != 0)
+        {
         clear();
-        }    
-    mOriginalString = aKeyword.trimmed();
-    if (mOriginalString.length())
+        }
+    else if (mOriginalString.length())
         {
         mDatabasecount = 0;
-        mTemplist.clear();
+        mLinkindex = 0;
         mSearchString = mOriginalString;
         mSearchString.append('*');
-        QMapIterator<int, bool> i(mSelectedCategory);
-        while (i.hasNext())
-            {
-            i.next();
-            if (i.value())
-                {
-                switch (i.key())
-                    {
-                    case 0:
-                        {
-                        break;
-                        }
-                    case 1: //Contacts
-                        {
-                        mTemplist.append("contact");
-                        break;
-                        }
-                    case 2://Media
-                        {
-                        mTemplist.append("media");
-                        break;
-                        }
-                    case 3://Messages& emails
-                        {
-                        mTemplist.append("msg");
-                        //mTemplist.append("email");
-                        break;
-                        }
-                    case 4://Calender& notes
-                        {
-                        mTemplist.append("calendar");
-                        //mTemplist.append("notes");
-                        break;
-                        }
-                    case 5://Applications
-                        {
-                        mTemplist.append("applications");
-                        break;
-                        }
-                    case 6://All other files
-                        {
-                        mTemplist.append("file");
-                        mTemplist.append("bookmark");
-                        break;
-                        }
-                    }
-                }
-            }
         searchOnCategory(mSearchString);
         }
     }
@@ -786,14 +932,75 @@
         }
     }
 // ---------------------------------------------------------------------------
+// SearchProgressiveState::setSelectedCategories
+// ---------------------------------------------------------------------------
+//
+void SearchProgressiveState::setSelectedCategories()
+    {
+    mTemplist.clear();
+    QMapIterator<int, bool> i(mSelectedCategory);
+    while (i.hasNext())
+        {
+        i.next();
+        if (i.value())
+            {
+            switch (i.key())
+                {
+                case 0:
+                    {
+                    //mTemplist.append("selectall");
+                    break;
+                    }
+                case 1: //Contacts
+                    {
+                    mTemplist.append("contact");
+                    break;
+                    }
+                case 2://Media
+                    {
+                    mTemplist.append("media");
+                    break;
+                    }
+                case 3://Messages& emails
+                    {
+                    mTemplist.append("msg");
+                    //mTemplist.append("email");
+                    break;
+                    }
+                case 4://Calender& notes
+                    {
+                    mTemplist.append("calendar");
+                    mTemplist.append("notes");
+                    break;
+                    }
+                case 5://Applications
+                    {
+                    mTemplist.append("applications");
+                    break;
+                    }
+                case 6://Bookmarks
+                    {
+                    mTemplist.append("bookmark");
+                    break;
+                    }
+                case 7://All other files
+                    {
+                    mTemplist.append("file");
+                    break;
+                    }
+                }
+            }
+        }
+    }
+// ---------------------------------------------------------------------------
 // SearchProgressiveState::cancelSearch
 // ---------------------------------------------------------------------------
 //
 void SearchProgressiveState::cancelSearch()
     {
-    if(mSearchHandler)
+    for (int i = 0; i < mSearchHandlerList.count(); i++)
         {
-        mSearchHandler->cancelLastSearch();
+        mSearchHandlerList.at(i)->cancelLastSearch();
         }
     }
 // ---------------------------------------------------------------------------
@@ -820,15 +1027,18 @@
         );
         if (err == KErrNone)
             {
-            aknIcon = CAknIcon::NewL();
-            aknIcon->SetBitmap(bitmap);
-            aknIcon->SetMask(mask);
+            TRAPD( err1,
+                        {aknIcon = CAknIcon::NewL();
+                        aknIcon->SetBitmap(bitmap);
+                        aknIcon->SetMask(mask);});
+            if (err1 == KErrNone)
+                {
+
+                }
             }
         }
     if (aknIcon)
-        {
-        CleanupStack::PushL(aknIcon);
-
+        {       
         //need to disable compression to properly convert the bitmap
         AknIconUtils::DisableCompression(aknIcon->Bitmap());
 
@@ -844,20 +1054,27 @@
         else
             {
             CFbsBitmap *temp(NULL);
-            temp = copyBitmapLC(aknIcon->Bitmap());
-            pixmap = fromSymbianCFbsBitmap(temp);
-            CleanupStack::PopAndDestroy();
+            TRAPD( err,
+                        {temp = copyBitmapLC(aknIcon->Bitmap());
+                        pixmap = fromSymbianCFbsBitmap(temp);
+                        CleanupStack::PopAndDestroy();});
+            if (err == KErrNone)
+                {
+                TRAPD( err1,
+                            {temp = copyBitmapLC(aknIcon->Mask());
+                            QPixmap mask = fromSymbianCFbsBitmap(temp);
+                            CleanupStack::PopAndDestroy();
+                            pixmap.setAlphaChannel(mask);});
+                if (err1 == KErrNone)
+                    {
 
-            temp = copyBitmapLC(aknIcon->Mask());
-            QPixmap mask = fromSymbianCFbsBitmap(temp);
-            CleanupStack::PopAndDestroy();
+                    }
+                }
 
-            pixmap.setAlphaChannel(mask);
             }
 
         pixmap = pixmap.scaled(defaultIconSize,
                 Qt::KeepAspectRatioByExpanding);
-        CleanupStack::PopAndDestroy(aknIcon);
         icon = HbIcon(QIcon(pixmap));
         }
     return icon;
@@ -940,3 +1157,19 @@
     CleanupStack::PopAndDestroy(bitmapDevice);
     return bmp;
     }
+// ---------------------------------------------------------------------------
+// SearchProgressiveState::filterDoc
+// ---------------------------------------------------------------------------
+//
+QString SearchProgressiveState::filterDoc(const QCPixDocument* aDoc,
+        const QString& filter)
+    {
+    for (int i = 0; i < aDoc->fieldCount(); i++)
+        {
+        if (aDoc->field(i).name().contains(filter))
+            {
+            return aDoc->field(i).value();
+            }
+        }
+    return NULL;
+    }
--- a/searchui/stateproviders/searchstateprovider/src/searchsettingsstate.cpp	Mon Apr 19 14:40:05 2010 +0300
+++ b/searchui/stateproviders/searchstateprovider/src/searchsettingsstate.cpp	Mon May 03 12:32:15 2010 +0300
@@ -31,8 +31,6 @@
 #include <qdir.h>
 #include"settingswidget.h"
 
-const char *WIZARD_VIEW = "tocView";
-
 // ---------------------------------------------------------------------------
 // SearchSettingsState::SearchSettingsState
 // ---------------------------------------------------------------------------
@@ -43,32 +41,31 @@
     minitialCount = true;
     mWidget = new SettingsWidget();
 
-    connect(mWidget, SIGNAL(settingsEvent(bool)), this, SLOT(handleBackEvent(bool)));
+    connect(mWidget, SIGNAL(settingsEvent(bool)), this,
+            SLOT(handleBackEvent(bool)));
 
     connect(mWidget, SIGNAL(selectedItemCategory(int, bool)), this,
             SLOT(getItemCategory(int, bool)));
 
     }
 // ---------------------------------------------------------------------------
-// SearchSettingsState::_selectedcategory
-// ---------------------------------------------------------------------------
-//
-void SearchSettingsState::getItemCategory(int str, bool avalue)
-    {
-    emit publishSelectedCategory(str, avalue);
-    }
-
-// ---------------------------------------------------------------------------
 // SearchSettingsState::~SearchSettingsState
 // ---------------------------------------------------------------------------
 //
 SearchSettingsState::~SearchSettingsState()
     {
     delete mDocumentLoader;
-    //  delete mWidget;
+    delete mWidget;
 
     }
-
+// ---------------------------------------------------------------------------
+// SearchSettingsState::getItemCategory
+// ---------------------------------------------------------------------------
+//
+void SearchSettingsState::getItemCategory(int str, bool avalue)
+    {
+    emit publishSelectedCategory(str, avalue);
+    }
 // ---------------------------------------------------------------------------
 // SearchSettingsState::onEntry
 // ---------------------------------------------------------------------------
@@ -79,7 +76,8 @@
     QState::onEntry(event);
     if (minitialCount)
         {
-        mWidget->loadSettingsFrominiFile();
+        mWidget->loadBaseSettings();
+        mWidget->loadDeviceSettings();
         isInternetOn();
         minitialCount = false;
         emit backEventTriggered();
@@ -90,7 +88,6 @@
         mWidget->launchSettingWidget();
         }
     }
-
 // ---------------------------------------------------------------------------
 // SearchSettingsState::onExit
 // ---------------------------------------------------------------------------
@@ -100,15 +97,18 @@
     QState::onExit(event);
 
     }
-
+// ---------------------------------------------------------------------------
+// SearchSettingsState::handleBackEvent
+// ---------------------------------------------------------------------------
+//
 void SearchSettingsState::handleBackEvent(bool aStatus)
     {
     emit backEventTriggered();
     if (mWidget)
         {
         isInternetOn();
-       emit clickstatus(aStatus);
-        }   
+        emit clickstatus(aStatus);
+        }
     }
 // ---------------------------------------------------------------------------
 // SearchSettingsState::isInternetOn
@@ -125,4 +125,3 @@
         emit customizeGoButton(false);
         }
     }
-
--- a/searchui/stateproviders/searchstateprovider/src/searchstateprovider.cpp	Mon Apr 19 14:40:05 2010 +0300
+++ b/searchui/stateproviders/searchstateprovider/src/searchstateprovider.cpp	Mon May 03 12:32:15 2010 +0300
@@ -17,17 +17,16 @@
 
 #include "searchstateprovider.h"
 #include "searchprogressivestate.h"
-
 #include "searchinitstate.h"
 #include "searchsettingsstate.h"
 
 #include <qstate.h>
 #include <qdebug.h>
 
-// constants
-const char providerFileName[] = "searchstateprovider.dll";
+
+// states
 const char initStateFileUri[] = "search.nokia.com/state/initstate";
-// states
+
 const char wizardProgressiveStateUri[] =
         "search.nokia.com/state/wizardprogressivestate";
 const char wizardSettingStateUri[] =
@@ -37,66 +36,30 @@
 // searchStateProvider::searchStateProvider()
 // ---------------------------------------------------------------------------
 //
-SearchStateProvider::SearchStateProvider()
-    {
-    mInitStateToken.mLibrary = providerFileName;
-    mInitStateToken.mUri = initStateFileUri;
-
-    mWizardMenuStateToken.mLibrary = providerFileName;
-    mWizardMenuStateToken.mUri = wizardProgressiveStateUri;
-
-    mWizardActivatedStateToken.mLibrary = providerFileName;
-    mWizardActivatedStateToken.mUri = wizardSettingStateUri;
-    }
-
-// ---------------------------------------------------------------------------
-// SearchStateProvider::~SearchStateProvider()
-// ---------------------------------------------------------------------------
-//
-SearchStateProvider::~SearchStateProvider()
+SearchStateProvider::SearchStateProvider(QObject *parent) :
+    QObject(parent)
     {
     }
-
-// ---------------------------------------------------------------------------
-// SearchStateProvider::states()
-// ---------------------------------------------------------------------------
-//
-QList<HsStateToken> SearchStateProvider::states()
-    {
-    return QList<HsStateToken> () << mInitStateToken << mWizardMenuStateToken
-            << mWizardActivatedStateToken;
-    }
-
 // ---------------------------------------------------------------------------
 // SearchStateProvider::createState(const StateToken& aToken)
 // ---------------------------------------------------------------------------
 //
-QState* SearchStateProvider::createState(const HsStateToken& aToken)
+QState* SearchStateProvider::createState(const QString& uri)
     {
 
-    if (aToken.mUri == mWizardMenuStateToken.mUri)
+    if (uri == wizardProgressiveStateUri)
         {
         return new SearchProgressiveState();
         }
-    else if (aToken.mUri == mWizardActivatedStateToken.mUri)
+    else if (uri == wizardSettingStateUri)
         {
         return new SearchSettingsState();
         }
-    else if (aToken.mUri == mInitStateToken.mUri)
+    else if (uri == initStateFileUri)
         {
         return new SearchInitState();
         }
 
-    qDebug() << "SEARCH: No state found for mUri: " << aToken.mUri;
+    qDebug() << "SEARCH: No state found for mUri: " << uri;
     return NULL;
-
     }
-
-#ifdef COVERAGE_MEASUREMENT
-#pragma CTC SKIP
-#endif //COVERAGE_MEASUREMENT
-Q_EXPORT_PLUGIN2(SearchStateProvider, SearchStateProvider)
-#ifdef COVERAGE_MEASUREMENT
-#pragma CTC ENDSKIP
-#endif //COVERAGE_MEASUREMENT
-
--- a/searchui/stateproviders/searchstateprovider/src/settingswidget.cpp	Mon Apr 19 14:40:05 2010 +0300
+++ b/searchui/stateproviders/searchstateprovider/src/settingswidget.cpp	Mon May 03 12:32:15 2010 +0300
@@ -24,118 +24,308 @@
 #include <hbtooltip.h>
 #include <qsettings.h>
 #include <hbinputdialog.h>
-#include<hbscrollarea.h>
+#include <hbscrollarea.h>
 #include <qgraphicswidget.h>
 #include <hbglobal.h>
+#include <hbdataform.h>
+#include <hbdataformmodel.h>
+#include <hbdocumentloader.h>
+#include <hbcombobox.h>
+#include <hbdataformviewitem.h>
+#include <hbradiobuttonlist.h>
+#include <qdir.h>
+#include <qsql.h>
+#include <qsqldatabase.h>
+#include <qsqlquery.h>
+#include <cpixcontentinfocommon.h>
+const char *DELIMETER_DOCML = ":/xml/delimeterscreen.docml";
+const char *DIALOG = "dialog";
+const char *DATAFORM = "dataForm";
 
 //----------------------------------------------------------------------------------------------------------------------------
 //SettingsWidget::SettingsWidget()
 //
 //----------------------------------------------------------------------------------------------------------------------------
 SettingsWidget::SettingsWidget() :
-    HbWidget()
+    signalMapper(NULL), popup(NULL), mDocumentLoader(NULL), dataform(NULL),
+            mModel(NULL),mSelectedScope(0),mSelectedProvider(0)
+    {
+    for (int i = 0; i < 8; i++)
+        {
+        mDeviceMapping.append(false);
+        }
+
+    mDeviceCategoryRefList = (QStringList() << "first" << "second" << "third"
+            << "fourth" << "fifth" << "sixth" << "seventh" << "eigth");
+
+    mchangestate = true;
+    mInstialize = true;
+    isInternetSelected = false;
+    storeDefaultSettings();
+    }
+//----------------------------------------------------------------------------------------------------------------------------
+//SettingsWidget::intialize()
+//
+//----------------------------------------------------------------------------------------------------------------------------
+void SettingsWidget::initialize()
     {
-    deviceCategoryList = (QStringList() << hbTrId("txt_search_list_device")
-            << hbTrId("txt_search_list_contatcs") << hbTrId(
-            "txt_search_list_media") << hbTrId("txt_search_list_messagemail")
-            << hbTrId("txt_search_list_calendarnotes") << hbTrId(
-            "txt_search_list_applications") << hbTrId(
-            "txt_search_list_all_other_files"));
-    internetCategoryList = (QStringList() << hbTrId(
-            "txt_search_list_internet") << "Google" << "Bing");
+    bool ok = false;
+    if (!mDocumentLoader)
+        {
+        mDocumentLoader = new HbDocumentLoader();        
+        mDocumentLoader->load(DELIMETER_DOCML, &ok);
+        }
+    QGraphicsWidget *widget = NULL;
+    if (!popup)
+        {
+        widget = mDocumentLoader->findWidget(DIALOG);
+        Q_ASSERT_X(ok && (widget != 0), "DIALOG", "invalid view");
 
-    QGraphicsLinearLayout *linearLayout = new QGraphicsLinearLayout(
-            Qt::Vertical);
+        popup = qobject_cast<HbDialog*> (widget);
+        }
+    if (!dataform)
+        {
+        widget = mDocumentLoader->findWidget(DATAFORM);
+        Q_ASSERT_X(ok && (widget != 0), "DATAFORM", "invalid view");
+        dataform = qobject_cast<HbDataForm*> (widget);
+        }
+    if (!mModel)
+        {
+        mModel = new HbDataFormModel();
+        }
+    if (!signalMapper)
+        {
+        signalMapper = new QSignalMapper(this);
+        }
 
-    setLayout(linearLayout);
-
-    popup = new HbDialog();
+    createGui();
+    }
+//----------------------------------------------------------------------------------------------------------------------------
+//SettingsWidget::createGui()
+//
+//----------------------------------------------------------------------------------------------------------------------------
+void SettingsWidget::createGui()
+    {
     popup->setDismissPolicy(HbDialog::NoDismiss);
-
     popup->setTimeout(HbDialog::NoTimeout);
 
     HbAction * action = new HbAction(hbTrId("txt_common_button_ok"), popup);
     connect(action, SIGNAL(triggered()), this, SLOT(checkBoxOkEvent()));
-    popup->setPrimaryAction(action);
+    mActions.append(action);
 
     action = new HbAction(hbTrId("txt_common_button_cancel"), popup);
     connect(action, SIGNAL(triggered()), this, SLOT(checkBoxCancelEvent()));
-    popup->setSecondaryAction(action);
+    mActions.append(action);
+
+    popup->addActions(mActions);
+
+    dataform->setModel(mModel);
+
+    HbLabel *label = new HbLabel(hbTrId("txt_search_title_search_scope"));
+    popup->setHeadingWidget(label);
+
+    preparecategories();
+
+    loadBaseSettings();
 
-    //device category creation
+    HbDataFormModelItem* themeComboGeneral = mModel->appendDataFormItem(
+            HbDataFormModelItem::ComboBoxItem, hbTrId(
+                    "txt_search_qtl_dialog_pri_heading_delimiter"));
+
+    themeComboGeneral->setContentWidgetData(QString("items"), mCategoryList);
+
+    themeComboGeneral->setContentWidgetData(QString("currentIndex"),
+            mSelectedScope);
 
-    HbCheckBox *checkboxitem = NULL;
+    QModelIndex index = mModel->indexFromItem(themeComboGeneral);
+
+    HbDataFormViewItem *formItem = dataform->dataFormViewItem(index);
+
+    HbComboBox *comboBox =
+            static_cast<HbComboBox*> (formItem->dataItemContentWidget());
+
+    q_currentIndexChanged(mSelectedScope);
 
-    signalMapper = new QSignalMapper(this);
+    connect(comboBox, SIGNAL(currentIndexChanged(int)), this,
+            SLOT(q_currentIndexChanged(int)));
 
-    for (int i = 0; i < deviceCategoryList.count(); i++)
+    }
+//----------------------------------------------------------------------------------------------------------------------------
+//SettingsWidget::q_currentIndexChanged()
+//
+//----------------------------------------------------------------------------------------------------------------------------
+void SettingsWidget::q_currentIndexChanged(int avalue)
+    {
+    for (int i = 0; i < mModelItemList.count(); i++)
+        {
+        mModel->removeItem(mModelItemList.at(i));
+        }
+    mModelItemList.clear();
+   // int ret = mModel->rowCount();
+    if (!avalue) //device category creation
         {
-        checkboxitem = new HbCheckBox(deviceCategoryList.at(i));
+        isInternetSelected = false;
+        HbCheckBox *checkboxitem = NULL;
+        mDeviceCheckBoxList.clear();
+        for (int i = 0; i < mDeviceListDisplay.count(); i++)
+            {
+
+            HbDataFormModelItem* mModelItem = mModel->appendDataFormItem(
+                    HbDataFormModelItem::CheckBoxItem);
+            mModelItemList.append(mModelItem);
+            QModelIndex index = mModel->indexFromItem(mModelItem);
+
+            HbDataFormViewItem *formItem = dataform->dataFormViewItem(index);
+
+            checkboxitem
+                    = static_cast<HbCheckBox*> (formItem->dataItemContentWidget());
+
+            checkboxitem->setText(mDeviceListDisplay.at(i));
 
-        mDeviceCheckBoxList.append(checkboxitem);
+            mDeviceCheckBoxList.append(checkboxitem);
+
+            signalMapper->setMapping(mDeviceCheckBoxList.at(i), i);
+
+            connect(mDeviceCheckBoxList.at(i), SIGNAL(stateChanged(int)),
+                    signalMapper, SLOT(map()));
 
-        signalMapper->setMapping(mDeviceCheckBoxList.at(i), i);
+            connect(signalMapper, SIGNAL(mapped(int)), this,
+                    SLOT(itemChecked(int)));
+            }
+        loadDeviceSettings();
+        }
+    else
+        {
+        isInternetSelected = true;
+        mDeviceCheckBoxList.clear();
+        HbDataFormModelItem* mModelItem = mModel->appendDataFormItem(
+                HbDataFormModelItem::RadioButtonListItem);
+        mModelItemList.append(mModelItem);
+        mModelItem->setContentWidgetData("items", internetCategoryList);
+
+        QModelIndex index = mModel->indexFromItem(mModelItem);
+
+        HbDataFormViewItem *formItem = dataform->dataFormViewItem(index);
+
+        mradiolist
+                = static_cast<HbRadioButtonList*> (formItem->dataItemContentWidget());
+
+        mradiolist->setPreviewMode(HbRadioButtonList::NoPreview);
+
+        mradiolist->setSelected(mSelectedProvider);
+        connect(mradiolist, SIGNAL(itemSelected(int)), this,
+                SLOT(q_itemSelected(int)));
 
-        connect(mDeviceCheckBoxList.at(i), SIGNAL(stateChanged(int)),
-                signalMapper, SLOT(map()));
+        for (int i = 0; i < mActions.count(); i++)
+            popup->removeAction(mActions.at(i));
+        popup->addActions(mActions);
+        popup->removeAction(mActions.at(0));
+        }
+    }
+//----------------------------------------------------------------------------------------------------------------------------
+//SettingsWidget::preparecategories()
+//
+//----------------------------------------------------------------------------------------------------------------------------
+void SettingsWidget::preparecategories()
+    {
+    // read form database
+
 
-        if (i == 0)
+    QString mConnectionName("cpixcontentinfo.sq");
+    QString mDatabaseName("c:\\Private\\2001f6fb\\cpixcontentinfo.sq");
+
+    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", mConnectionName);
+    db.setDatabaseName(mDatabaseName);
+
+    QSqlQuery query(QSqlDatabase::database(mConnectionName));
+    QString statement = "SELECT NAME FROM table1";
+
+    query.prepare(statement);
+    query.exec();
+    while (query.next())
+        {
+        QString category_name = query.value(0).toString();
+        int value = query.value(2).toInt();
+        if (value)
             {
-            //arrange device search &internet search
-            linearLayout->addItem(mDeviceCheckBoxList.at(i));
+            mCategoryDbMapping.insert(category_name, false);
             }
         else
             {
-            //arrange other subcategoriess
-            mDeviceCheckBoxList.at(i)->setContentsMargins(20, 0, 0, 0);
-            linearLayout->addItem(mDeviceCheckBoxList.at(i));
+            mCategoryDbMapping.insert(category_name, true);
             }
+        qDebug() <<"string db= "<<category_name;
         }
-    int j = 0;
-    for (int i = deviceCategoryList.count(); i < internetCategoryList.count()
-            + deviceCategoryList.count(); i++)
-        {
-
-        checkboxitem = new HbCheckBox(internetCategoryList.at(j));
-
-        mInternetCheckBoxList.append(checkboxitem);
-
-        signalMapper->setMapping(mInternetCheckBoxList.at(j), i);
+    db.close();         
+    
+  /*  mCategoryDbMapping.insert("Contacts", true); 
+    mCategoryDbMapping.insert("Audios", true); 
+    mCategoryDbMapping.insert("Images", true); 
+    mCategoryDbMapping.insert("Videos", true); 
+    mCategoryDbMapping.insert("Messages", true); 
+    mCategoryDbMapping.insert("email", true); 
+    mCategoryDbMapping.insert("Calendar", true); 
+    mCategoryDbMapping.insert("Notes", true); 
+    mCategoryDbMapping.insert("Applications", true); 
+    mCategoryDbMapping.insert("Bookmarks", true); 
+    mCategoryDbMapping.insert("Files", true); */
+    
+   // mCategoryDbMapping.insert("email", true); // to remove once email starts working
+    
+    mDeviceListDisplay.append("Select all");
+    mDeviceMapping.insert(0, true);
 
-        connect(mInternetCheckBoxList.at(j), SIGNAL(stateChanged(int)),
-                signalMapper, SLOT(map()));
+    if (mCategoryDbMapping.value("Contacts"))
+        {
+        mDeviceMapping.insert(1, true);
+        mDeviceListDisplay.append(hbTrId("txt_search_list_contatcs"));
+        }
 
-        if (i == deviceCategoryList.count())
-            {
-            //arrange device search &internet search
-            linearLayout->addItem(mInternetCheckBoxList.at(j));
-            }
-        else
-            {
-            //arrange other subcategoriess
-            mInternetCheckBoxList.at(j)->setContentsMargins(20, 0, 0, 0);
-            linearLayout->addItem(mInternetCheckBoxList.at(j));
-
-            }
-        j++;
+    if (mCategoryDbMapping.value("Audios")
+            || mCategoryDbMapping.value("Images") || mCategoryDbMapping.value(
+            "Videos"))
+        {
+        mDeviceListDisplay.append(hbTrId("txt_search_list_media"));
+        mDeviceMapping.insert(2, true);
         }
 
-    connect(signalMapper, SIGNAL(mapped(int)), this, SLOT(itemChecked(int)));
-
-    //Heading label
+    if (mCategoryDbMapping.value("Messages") || mCategoryDbMapping.value(
+            "email"))
+        {
+        mDeviceListDisplay.append(hbTrId("txt_search_list_messagemail"));
+        mDeviceMapping.insert(3, true);
+        }
 
-    HbLabel *label = new HbLabel(hbTrId(
-            "txt_search_qtl_dialog_pri_heading_delimiter"));
-    popup->setHeadingWidget(label);
+    if (mCategoryDbMapping.value("Calendar") || mCategoryDbMapping.value(
+            "Notes"))
+        {
+        mDeviceListDisplay.append(hbTrId("txt_search_list_calendarnotes"));
+        mDeviceMapping.insert(4, true);
+        }
 
-    HbScrollArea* scrollArea = new HbScrollArea(popup);
-    scrollArea->setScrollDirections(Qt::Vertical);
-    scrollArea->setFlag(QGraphicsItem::ItemClipsChildrenToShape, true);
-    scrollArea->setContentWidget(this);
-    popup->setContentWidget(scrollArea);
+    if (mCategoryDbMapping.value("Applications"))
+        {
+        mDeviceListDisplay.append(hbTrId("txt_search_list_applications"));
+        mDeviceMapping.insert(5, true);
+        }
+
+    if (mCategoryDbMapping.value("Bookmarks"))
+        {
+        mDeviceListDisplay.append(hbTrId("txt_search_list_bookmarks"));
+        mDeviceMapping.insert(6, true);
+        }
 
-    // loadSettingsFrominiFile();
+    if (mCategoryDbMapping.value("Files"))
+        {
+        mDeviceListDisplay.append(hbTrId("txt_search_list_all_other_files"));
+        mDeviceMapping.insert(7, true);
+        }
+    internetCategoryList = (QStringList() << "Google" << "Bing");
+
+    mCategoryList = (QStringList() << hbTrId("txt_search_list_device")
+            << hbTrId("txt_search_list_internet"));
     }
+
 //----------------------------------------------------------------------------------------------------------------------------
 //SettingsWidget::~SettingsWidget()
 //
@@ -144,6 +334,15 @@
     {
     delete signalMapper;
     //delete popup;
+    //delete dataform;
+    delete mModel;
+    //delete mradiolist;
+    mDeviceCheckBoxList.clear();
+    mInternetCheckBoxList.clear();
+    mModelItemList.clear();
+    mActions.clear();
+    delete mDocumentLoader;
+    //delete popup;
     }
 //----------------------------------------------------------------------------------------------------------------------------
 //SettingsWidget::launchSettingWidget()
@@ -151,7 +350,12 @@
 //----------------------------------------------------------------------------------------------------------------------------
 void SettingsWidget::launchSettingWidget()
     {
-    loadSettingsFrominiFile();
+    if (mInstialize)
+        {
+        initialize();
+        mInstialize = false;
+        }
+    q_currentIndexChanged(mSelectedScope);
     setActionVisibility();
     popup->show();
     }
@@ -169,20 +373,12 @@
             noItemSelected = false;
             }
         }
-    for (int i = 0; i < mInternetCheckBoxList.count(); i++)
+    for (int i = 0; i < mActions.count(); i++)
+        popup->removeAction(mActions.at(i));
+    popup->addActions(mActions);
+    if (noItemSelected)
         {
-        if (mInternetCheckBoxList.at(i)->checkState() == Qt::Checked)
-            {
-            noItemSelected = false;
-            }
-        }
-    if (!noItemSelected)
-        {
-        popup->primaryAction()->setVisible(true);
-        }
-    else
-        {
-        popup->primaryAction()->setVisible(false);
+        popup->removeAction(mActions.at(0));
         }
     }
 //----------------------------------------------------------------------------------------------------------------------------
@@ -191,106 +387,55 @@
 //----------------------------------------------------------------------------------------------------------------------------
 void SettingsWidget::itemChecked(int selectedIndex)
     {
-    int totalcount = deviceCategoryList.count()
-            + internetCategoryList.count();
-
-    if (selectedIndex == 0) // validating the parent category "devices"
+    if (mDeviceCheckBoxList.count() != 0)
         {
-        if ((mDeviceCheckBoxList.at(selectedIndex)->checkState()
-                == Qt::Checked))
-            {
-            isInternetSelected = false;
-            checkSubCategories(0);
-            unCheckSubCategories(0);
-            }
-        else
+        if (selectedIndex == 0 && mchangestate) // validating the select all
             {
-            unCheckSubCategories(1);
-            }
-        setActionVisibility();
-        return;
-        }
-    else if (selectedIndex == deviceCategoryList.count())// validating the parent category "internet"
-        {
-        if (mInternetCheckBoxList.at(selectedIndex
-                - deviceCategoryList.count())->checkState() == Qt::Checked)
-            {
-            isInternetSelected = true;
-            checkSubCategories(1);
-            unCheckSubCategories(1);
+            if ((mDeviceCheckBoxList.at(selectedIndex)->checkState()
+                    == Qt::Checked))
+                {
+                checkSubCategories();
+                }
+            else
+                {
+                unCheckSubCategories();
+                }
             }
         else
             {
-            unCheckSubCategories(0);
-            }
-        setActionVisibility();
-        return;
-        }
-    if (selectedIndex < deviceCategoryList.count())// validating the sub categories under  "devices"
-        {
-        if (mDeviceCheckBoxList.at(selectedIndex)->checkState()
-                == Qt::Checked)
-            {
-            isInternetSelected = false;
-            unCheckSubCategories(0);
-
+            if ((mDeviceCheckBoxList.at(selectedIndex)->checkState()
+                    == Qt::Unchecked))
+                {
+                mchangestate = false;
+                mDeviceCheckBoxList.at(0)->setCheckState(Qt::Unchecked);
+                setActionVisibility();
+                return;
+                }
             }
         }
-    else // validating the sub categories under  "internet"
-        {
-        int curentindex = (selectedIndex + internetCategoryList.count())
-                - (deviceCategoryList.count() + internetCategoryList.count());
-
-        if (mInternetCheckBoxList.at(curentindex)->checkState()
-                == Qt::Checked)
-            {
-            isInternetSelected = true;
-            unCheckSubCategories(1);
-            //return;
-            }
-        }
+    mchangestate = true;
     setActionVisibility();
     }
 //----------------------------------------------------------------------------------------------------------------------------
-//SettingsWidget::check(int checkSubCategory)
+//SettingsWidget::checkSubCategories
 //
 //----------------------------------------------------------------------------------------------------------------------------
-void SettingsWidget::checkSubCategories(int checkSubCategory)
+void SettingsWidget::checkSubCategories()
     {
-    if (checkSubCategory == 0)
+    for (int i = 0; i < mDeviceCheckBoxList.count(); i++)
         {
-        for (int i = 0; i < mDeviceCheckBoxList.count(); i++)
-            {
-            mDeviceCheckBoxList.at(i)->setCheckState(Qt::Checked);
-            }
-        }
-    else
-        {
-        for (int i = 0; i < mInternetCheckBoxList.count(); i++)
-            {
-            mInternetCheckBoxList.at(i)->setCheckState(Qt::Checked);
-            }
+        mDeviceCheckBoxList.at(i)->setCheckState(Qt::Checked);
         }
     }
 //----------------------------------------------------------------------------------------------------------------------------
-//SettingsWidget::unCheckSubCategories(int unCheckSubCategory)
+//SettingsWidget::unCheckSubCategories
 //
 //----------------------------------------------------------------------------------------------------------------------------
-void SettingsWidget::unCheckSubCategories(int unCheckSubCategory)
+void SettingsWidget::unCheckSubCategories()
     {
-    if (unCheckSubCategory == 0)
+    for (int i = 0; i < mDeviceCheckBoxList.count(); i++)
         {
-        for (int i = 0; i < mInternetCheckBoxList.count(); i++)
-            {
-            mInternetCheckBoxList.at(i)->setCheckState(Qt::Unchecked);
-            }
-        }
-    else
-        {
-        for (int i = 0; i < mDeviceCheckBoxList.count(); i++)
-            {
-            mDeviceCheckBoxList.at(i)->setCheckState(Qt::Unchecked);
-            }
+        mDeviceCheckBoxList.at(i)->setCheckState(Qt::Unchecked);
         }
     }
 //----------------------------------------------------------------------------------------------------------------------------
@@ -299,7 +444,7 @@
 //----------------------------------------------------------------------------------------------------------------------------
 void SettingsWidget::checkBoxCancelEvent()
     {
-    loadSettingsFrominiFile();//bug fix for cancel event selection should not reflect "go" button
+    //   loadDeviceSettings();//bug fix for cancel event selection should not reflect "go" button
     emit settingsEvent(false);
     }
 //----------------------------------------------------------------------------------------------------------------------------
@@ -319,82 +464,112 @@
 
 void SettingsWidget::storeSettingsToiniFile()
     {
-    QSettings appSettings("Search.ini", QSettings::IniFormat);
-
-    appSettings.setValue("DeviceCount", mDeviceCheckBoxList.count());
-    for (int i = 0; i < mDeviceCheckBoxList.count(); i++)
+    QSettings appSettings("search.ini", QSettings::IniFormat);
+    appSettings.setValue("selectedcategory", mSelectedScope);
+    appSettings.setValue("devicecount", mDeviceCategoryRefList.count());
+    if (!isInternetSelected)
         {
-        if (mDeviceCheckBoxList.at(i)->checkState() == Qt::Checked)
+        int j = 0;
+        for (int i = 0; i < mDeviceCategoryRefList.count(); i++)
             {
-            appSettings.setValue(mDeviceCheckBoxList.at(i)->text(), 1);
-            emit selectedItemCategory(i, true);
-            }
-        else
-            {
-            appSettings.setValue(mDeviceCheckBoxList.at(i)->text(), 0);
-            emit selectedItemCategory(i, false);
+            if (mDeviceMapping.at(i))
+                {
+                if (mDeviceCheckBoxList.at(j)->checkState() == Qt::Checked)
+                    {
+                    appSettings.setValue(mDeviceCategoryRefList.at(i), 1);
+                    emit selectedItemCategory(i, true);
+                    }
+                else
+                    {
+                    appSettings.setValue(mDeviceCategoryRefList.at(i), 0);
+                    emit selectedItemCategory(i, false);
+                    }
+                j++;
+                }
+            else
+                {
+                appSettings.setValue(mDeviceCategoryRefList.at(i), 0);
+                emit selectedItemCategory(i, false);
+                }
+
             }
         }
-    // int totalcount = i;
-    appSettings.setValue("InternetCount", mInternetCheckBoxList.count());
-    for (int i = 0; i < mInternetCheckBoxList.count(); i++)
+    appSettings.setValue("internetcount", internetCategoryList.count());
+    appSettings.setValue("selectedprovider", mSelectedProvider);
+    }
+//----------------------------------------------------------------------------------------------------------------------------
+//void SettingsWidget::loadBaseSettings()
+//
+//----------------------------------------------------------------------------------------------------------------------------
+void SettingsWidget::loadBaseSettings()
+    {
+    QSettings appSettings("search.ini", QSettings::IniFormat);
+    int value;
+    if (!(appSettings.contains("selectedcategory")))
         {
-        if (mInternetCheckBoxList.at(i)->checkState() == Qt::Checked)
-            {
-            appSettings.setValue(mInternetCheckBoxList.at(i)->text(), 1);
-            //  emit selectedcategory(totalcount,true);
-            }
-        else
-            {
-            appSettings.setValue(mInternetCheckBoxList.at(i)->text(), 0);
-            //emit selectedcategory(totalcount,false);
-            }
-        //    totalcount++;
+        value = 0;
+        }
+    else
+        {
+        value = appSettings.value("selectedcategory").toInt();
         }
+    mSelectedScope = value;
+    if (mSelectedScope)
+        {
+        isInternetSelected = true;
+        }
+    else
+        {
+        isInternetSelected = false;
+        }
+    mSelectedProvider = appSettings.value("selectedprovider").toInt();
     }
 
 //----------------------------------------------------------------------------------------------------------------------------
-//void SettingsWidget::loadSettingsFrominiFile()
+//void SettingsWidget::loadDeviceSettings()
 //
 //----------------------------------------------------------------------------------------------------------------------------
-
-void SettingsWidget::loadSettingsFrominiFile()
+void SettingsWidget::loadDeviceSettings()
     {
-    enableDefaultSettings();
-    isInternetSelected = false;
-    QSettings appSettings("Search.ini", QSettings::IniFormat);
-    int ret = 0;
-    for (int i = 0; i < mDeviceCheckBoxList.count(); i++)
+    QSettings appSettings("search.ini", QSettings::IniFormat);
+    int value;
+    if (!isInternetSelected)
         {
-        ret = appSettings.value(mDeviceCheckBoxList.at(i)->text()).toInt();
-        if (ret)
+        int j = 0;
+        for (int i = 0; i < mDeviceCategoryRefList.count(); i++)
             {
-            mDeviceCheckBoxList.at(i)->setCheckState(Qt::Checked);
-            emit selectedItemCategory(i, true);
-            }
-        else
-            {
-            mDeviceCheckBoxList.at(i)->setCheckState(Qt::Unchecked);
-            emit selectedItemCategory(i, false);
+            if (!(appSettings.contains(mDeviceCategoryRefList.at(i))))
+                {
+                value = 1;
+                }
+            else
+                {
+                value
+                        = appSettings.value(mDeviceCategoryRefList.at(i)).toInt();
+                }
+            if (mDeviceMapping.count() && mDeviceCheckBoxList.count()
+                    && mDeviceMapping.at(i))
+                {
+                if (value)
+                    {
+                    mDeviceCheckBoxList.at(j)->setCheckState(Qt::Checked);
+                    }
+                else
+                    {
+                    mDeviceCheckBoxList.at(j)->setCheckState(Qt::Unchecked);
+                    }
+                j++;
+                }
+            if (value) // get the setting before ui preparation
+                {
+                emit selectedItemCategory(i, true);
+                }
+            else
+                {
+                emit selectedItemCategory(i, false);
+                }
             }
         }
-    for (int i = 0; i < mInternetCheckBoxList.count(); i++)
-        {
-
-        ret = appSettings.value(mInternetCheckBoxList.at(i)->text()).toInt();
-        if (ret)
-            {
-            isInternetSelected = true;
-            mInternetCheckBoxList.at(i)->setCheckState(Qt::Checked);
-            // emit selectedcategory(mInternetCheckBoxList.at(i)->text(),true);
-            }
-        else
-            {
-            mInternetCheckBoxList.at(i)->setCheckState(Qt::Unchecked);
-            // emit selectedcategory(mInternetCheckBoxList.at(i)->text(),false);
-            }
-        }
-
     }
 //----------------------------------------------------------------------------------------------------------------------------
 //SettingsWidget::isInternetSearchOptionSelected()
@@ -402,50 +577,26 @@
 //----------------------------------------------------------------------------------------------------------------------------
 bool SettingsWidget::isInternetSearchOptionSelected()
     {
+    loadBaseSettings();
     return isInternetSelected;
     }
+
 //----------------------------------------------------------------------------------------------------------------------------
-//void SettingsWidget::changeDeviceInternetCheck()
+//void SettingsWidget::storeDefaultSettings()
 //
 //----------------------------------------------------------------------------------------------------------------------------
-void SettingsWidget::changeDeviceInternetCheck()
+void SettingsWidget::storeDefaultSettings()
     {
-    if (isInternetSearchOptionSelected() == true)
+    QSettings appSettings("search.ini", QSettings::IniFormat);
+    if (!appSettings.contains("selectedcategory")) // change the settings for the first time only
         {
-        mDeviceCheckBoxList.at(0)->setCheckState(Qt::Checked);
-
+        mSelectedScope = 0;
+        mSelectedProvider = 0;
+        appSettings.setValue("selectedcategory", mSelectedScope);
+        appSettings.setValue("devicecount", mDeviceCategoryRefList.count());
+        for (int i = 0; i < mDeviceCategoryRefList.count(); i++)
+            appSettings.setValue(mDeviceCategoryRefList.at(i), 1);
+        appSettings.setValue("internetcount", internetCategoryList.count());
+        appSettings.setValue("selectedprovider", mSelectedProvider);
         }
-    else
-
-        {
-
-        mInternetCheckBoxList.at(0)->setCheckState(Qt::Checked);
-
-        }
-
-    emit settingsChanged();
     }
-//----------------------------------------------------------------------------------------------------------------------------
-//void SettingsWidget::enableDefaultSettings()
-//
-//----------------------------------------------------------------------------------------------------------------------------
-void SettingsWidget::enableDefaultSettings()
-    {
-    QSettings appSettings("Search.ini", QSettings::IniFormat);
-    if (!appSettings.contains("DeviceCount")) // change the settings for the first time only
-        {
-        appSettings.setValue("DeviceCount", mDeviceCheckBoxList.count());
-        for (int i = 0; i < mDeviceCheckBoxList.count(); i++)
-            {
-            //   mDeviceCheckBoxList.at(i)->setCheckState(Qt::Checked);
-            appSettings.setValue(mDeviceCheckBoxList.at(i)->text(), 1);
-            }
-        for (int i = 0; i < mInternetCheckBoxList.count(); i++)
-            {
-            //mInternetCheckBoxList.at(i)->setCheckState(Qt::Unchecked);
-            appSettings.setValue(mInternetCheckBoxList.at(i)->text(), 0);
-            }
-        //  storeSettingsToiniFile();
-        }
-
-    }
--- a/searchui/stateproviders/searchstateprovider/tsrc/t_searchstateprovider/inc/t_searchstateprovider.h	Mon Apr 19 14:40:05 2010 +0300
+++ b/searchui/stateproviders/searchstateprovider/tsrc/t_searchstateprovider/inc/t_searchstateprovider.h	Mon May 03 12:32:15 2010 +0300
@@ -45,15 +45,12 @@
     void testCreateProgressiveState();
     void testCreateSettingsState();
     void testCreateinitState();
-    void testCreateInvalidState();
-
-    /**
+     /**
      * t_searchprogressivestate.cpp
      */
 
     void testProgressiveStateConstruction();
     void testProgressiveStateOnEntryAndExitSignalled();
-    void testonSearchComplete();
     void testonAsyncSearchComplete();
     void testonGetDocumentComplete();
     void testgetSettingCategory();
@@ -63,10 +60,15 @@
     void testclear();
     void testsearchOnCategory();
     void teststartNewSearch();
-    void testsetHistory();
     void testsetSettings();
-    void testaboutToCloseView();
     void test_CustomizeGoButton();
+    void testgetAppIconFromAppId();
+    void testsettingsaction();
+    void testcancelsearch();
+    void testhandleokanderror();
+    void testTDisplayMode2Format();
+    void testsetSelectedCategories();
+    void testfilterdoc();
 
     /**
      * t_searchsettingsstate.cpp
@@ -87,20 +89,25 @@
      */
 
     void testsettingswizardConstruction();
-    void testenableDefaultSettings();
+    void teststoreDefaultSettings();
     void teststoreSettingsToiniFile();
-    void testloadSettingsFrominiFile();
-
+    void testloadDeviceSettings();
+    void testloadBaseSettings();
     void testlaunchSettingWidget();
     void testisInternetSearchOptionSelected();
     void testunCheckSubCategories();
     void testcheckSubCategories();
-    void testsetActionVisibility();
-
+  
     void testcheckBoxOkEvent();
     void testcheckBoxCancelEvent();
     void testitemChecked();
-    void testchangeDeviceInternetCheck();
+    void testcreateGui();
+    void testpreparecategories();
+    void testq_currentIndexChanged();
+  
+    void selectedItemCategory();
+    
+    
 
     /* void testOnWizardAddedSignalledNoWizardInCS();
      void testProgressUpdated();
@@ -117,7 +124,7 @@
      * @return True if state was created successfully, false otherwise.
      * @since S60 ?S60_version.
      */
-    bool verifyStateCreation(const QString& library, const QString& uri);
+    bool verifyStateCreation(const QString& uri);
 
     /**
      * Helper method testing existence of state
--- a/searchui/stateproviders/searchstateprovider/tsrc/t_searchstateprovider/src/t_searchprogressivestate.cpp	Mon Apr 19 14:40:05 2010 +0300
+++ b/searchui/stateproviders/searchstateprovider/tsrc/t_searchstateprovider/src/t_searchprogressivestate.cpp	Mon May 03 12:32:15 2010 +0300
@@ -19,13 +19,24 @@
 #include <qsignalspy.h>
 #include "indevicehandler.h"
 #include <qstandarditemmodel.h>
+#include <fbs.h>
+#include <AknsUtils.h>
+#include <bitdev.h> 
+#include <bitstd.h>
+#include <qbitmap.h>
+#include <fbs.h>
+#include <AknInternalIconUtils.h>
+#include <AknIconUtils.h> 
+#include <apgcli.h>
+#include <hbsearchpanel.h>
+
 // ---------------------------------------------------------------------------
 // ---------------------------------------------------------------------------
 //
 
 void SearchStateProviderTest::testProgressiveStateConstruction()
     {
-  // HbMainWindow* wind = mainWindow();
+    // HbMainWindow* wind = mainWindow();
 
     SearchProgressiveState* progressiveState = new SearchProgressiveState();
 
@@ -35,12 +46,11 @@
     QVERIFY(progressiveState->mDocumentLoader);
     QVERIFY(progressiveState->mSearchPanel);
     QVERIFY(progressiveState->mModel);
-    QVERIFY(progressiveState->mSearchHandler);
+    //QVERIFY(progressiveState->mSearchHandler);
 
     delete progressiveState;
 
-    
-  //  delete wind;
+    //  delete wind;
     }
 // ---------------------------------------------------------------------------
 // ---------------------------------------------------------------------------
@@ -48,7 +58,7 @@
 
 void SearchStateProviderTest::testProgressiveStateOnEntryAndExitSignalled()
     {
-//    HbMainWindow* wind = mainWindow();
+    //    HbMainWindow* wind = mainWindow();
 
     SearchProgressiveState* progressiveState = new SearchProgressiveState();
 
@@ -58,119 +68,93 @@
     progressiveState->onExit(event);
 
     delete progressiveState;
-    
-  //  delete wind;
+
+    //  delete wind;
     }
 // ---------------------------------------------------------------------------
 // ---------------------------------------------------------------------------
 //
 
-void SearchStateProviderTest::testonSearchComplete()
+
+void SearchStateProviderTest::testonAsyncSearchComplete()
     {
-//    HbMainWindow* wind = mainWindow();
+    //  HbMainWindow* wind = mainWindow();
     SearchProgressiveState* progressiveState = new SearchProgressiveState();
     QEvent *event = new QEvent(QEvent::None);
     progressiveState->onEntry(event);
-    progressiveState->onSearchComplete(-1, 0);
-    QCOMPARE(progressiveState->mResultcount,0);
-    progressiveState->onSearchComplete(0, -1);
-    QCOMPARE(progressiveState->mResultcount,0);
-    progressiveState->onSearchComplete(0, 10);
-    QCOMPARE(progressiveState->mResultcount,10);
-    delete progressiveState;
-  //  delete wind;
-    }
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-
-void SearchStateProviderTest::testonAsyncSearchComplete()
-    {
-  //  HbMainWindow* wind = mainWindow();
-    SearchProgressiveState* progressiveState = new SearchProgressiveState();
-    QEvent *event = new QEvent(QEvent::None);
-    progressiveState->onEntry(event);
-
+    progressiveState->mSearchHandler
+            = progressiveState->mSearchHandlerList.at(1);
     progressiveState->onAsyncSearchComplete(-1, 10);
     QCOMPARE(progressiveState->mResultcount,0);
 
     progressiveState->onAsyncSearchComplete(0, -1);
     QCOMPARE(progressiveState->mResultcount,0);
-
-    progressiveState->onAsyncSearchComplete(0, 10);
-    QCOMPARE(progressiveState->mResultcount,10);
+    progressiveState->mSearchHandler->searchAsync("a", "_aggregate");
+    QTest::qWait(100);
+    //QCOMPARE(progressiveState->mResultcount,10);
 
     delete progressiveState;
-  //  delete wind;
+    //  delete wind;
     }
 // ---------------------------------------------------------------------------
 // ---------------------------------------------------------------------------
 //
 void SearchStateProviderTest::testonGetDocumentComplete()
     {
-//    HbMainWindow* wind = mainWindow();
+    //    HbMainWindow* wind = mainWindow();
     SearchProgressiveState* progressiveState = new SearchProgressiveState();
     QEvent *event = new QEvent(QEvent::None);
+
+    progressiveState->mSelectedCategory.insert(1, true);
     progressiveState->onEntry(event);
-
+    // progressiveState->mSearchHandler = progressiveState->mSearchHandlerList.at(1);
     progressiveState->onGetDocumentComplete(0, NULL);
     QCOMPARE(progressiveState->mModel->rowCount(),0);
 
     progressiveState->onGetDocumentComplete(-1, NULL);
     QCOMPARE(progressiveState->mModel->rowCount(),0);
-
+    progressiveState->startNewSearch("a");
+    QTest::qWait(2000);
+    int i =progressiveState->mModel->rowCount();
+    QVERIFY(progressiveState->mModel->rowCount());
     delete progressiveState;
-  //  delete wind;
+    //  delete wind;
     }
 // ---------------------------------------------------------------------------
 // ---------------------------------------------------------------------------
 //
 void SearchStateProviderTest::testgetSettingCategory()
     {
-//    HbMainWindow* wind = mainWindow();
+    //    HbMainWindow* wind = mainWindow();
     SearchProgressiveState* progressiveState = new SearchProgressiveState();
     QEvent *event = new QEvent(QEvent::None);
     progressiveState->onEntry(event);
+
     progressiveState->getSettingCategory(3, true);
     QCOMPARE(progressiveState->mSelectedCategory.count(),1);
     delete progressiveState;
- //   delete wind;
+    //   delete wind;
     }
 // ---------------------------------------------------------------------------
 // ---------------------------------------------------------------------------
 //
 void SearchStateProviderTest::testopenResultitem()
     {
-//    HbMainWindow* wind = mainWindow();
-     SearchProgressiveState* progressiveState = new SearchProgressiveState();
+    //    HbMainWindow* wind = mainWindow();
+    SearchProgressiveState* progressiveState = new SearchProgressiveState();
     QEvent *event = new QEvent(QEvent::None);
-    progressiveState->onEntry(event);
+
     progressiveState->mSelectedCategory.insert(1, true);
+    progressiveState->onEntry(event);
     progressiveState->startNewSearch("a");
-    QTest::qWait(200);
+    QTest::qWait(100);
+    progressiveState->cancelSearch();
     //code for getting the model index from model
-    QModelIndex index = progressiveState->mModel->index(1, 0, QModelIndex());
+    QModelIndex index = progressiveState->mModel->index(0, 0);
     progressiveState->openResultitem(index);
     delete progressiveState;
- /*//   delete wind;
-
-       {
-        SearchProgressiveState* progressiveState =
-                new SearchProgressiveState();
-        QEvent *event = new QEvent(QEvent::None);
-        progressiveState->onEntry(event);
-        progressiveState->mSelectedCategory.insert(3, true);
-        progressiveState->startNewSearch("a");
-        QTest::qWait(200);
-        //code for getting the model index from model
-        QModelIndex index = progressiveState->mModel->index(1, 0,
-                QModelIndex());
-        progressiveState->openResultitem(index);
-
-        //to do
-        delete progressiveState;
-        }
-*/    }
+    //   delete wind;    
+    }
 // ---------------------------------------------------------------------------
 // ---------------------------------------------------------------------------
 //
@@ -181,12 +165,9 @@
     progressiveState->onEntry(event);
 
     progressiveState->createSuggestionLink(true);
-    //    QModelIndex index = progressiveState->mModel->index(0, 0, QModelIndex());
-    //  progressiveState->openResultitem(index);
-
-    //progressiveState->createSuggestionLink(false);
-    //QCOMPARE(progressiveState->mModel->rowCount(),0);
-
+    QCOMPARE(progressiveState->mModel->rowCount(), 0);
+    progressiveState->createSuggestionLink(false);
+    QCOMPARE(progressiveState->mModel->rowCount(), 1);
     delete progressiveState;
     }
 // ---------------------------------------------------------------------------
@@ -236,24 +217,12 @@
     {
     SearchProgressiveState* progressiveState = new SearchProgressiveState();
     QEvent *event = new QEvent(QEvent::None);
+    progressiveState->mSelectedCategory.insert(1, true);
     progressiveState->onEntry(event);
-    progressiveState->mSelectedCategory.insert(6, true);
-    progressiveState->startNewSearch("sample");
+    progressiveState->startNewSearch("a");
     delete progressiveState;
     }
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-void SearchStateProviderTest::testsetHistory()
-    {
-    SearchProgressiveState* progressiveState = new SearchProgressiveState();
-    QEvent *event = new QEvent(QEvent::None);
-    progressiveState->onEntry(event);
-    QSignalSpy spy(progressiveState, SIGNAL(historyState()));
-  //  progressiveState->setHistory();
-    QCOMPARE(spy.count(), 1);
-    delete progressiveState;
-    }
+
 // ---------------------------------------------------------------------------
 // ---------------------------------------------------------------------------
 //
@@ -267,28 +236,129 @@
     QCOMPARE(spy.count(), 1);
     delete progressiveState;
     }
+
+void SearchStateProviderTest::test_CustomizeGoButton()
+    {
+    SearchProgressiveState* progressiveState = new SearchProgressiveState();
+    QEvent *event = new QEvent(QEvent::None);
+    progressiveState->onEntry(event);
+    progressiveState->_customizeGoButton(true);
+    QVERIFY(!(progressiveState->mSearchPanel->isProgressive()));
+    progressiveState->_customizeGoButton(false);
+    QVERIFY(progressiveState->mSearchPanel->isProgressive());
+    delete progressiveState;
+    }
+
+void SearchStateProviderTest::testgetAppIconFromAppId()
+    {
+
+    SearchProgressiveState* progressiveState = new SearchProgressiveState();
+    QEvent *event = new QEvent(QEvent::None);
+    progressiveState->onEntry(event);
+    for (int i = 0; i < progressiveState->mIconArray.count(); i++)
+        {
+        QVERIFY(!(progressiveState->mIconArray.at(i).isNull()));
+        }
+    progressiveState->mIconArray.clear();
+    delete progressiveState;
+    }
+
 // ---------------------------------------------------------------------------
 // ---------------------------------------------------------------------------
 //
-void SearchStateProviderTest::testaboutToCloseView()
+void SearchStateProviderTest::testsettingsaction()
+    {
+    SearchProgressiveState* progressiveState = new SearchProgressiveState();
+    QEvent *event = new QEvent(QEvent::None);
+    progressiveState->onEntry(event);
+    progressiveState->getSettingCategory(5, true);
+    progressiveState->mOriginalString = "a";
+    progressiveState->settingsaction(false);
+    QCOMPARE(progressiveState->mResultcount, 0);
+    progressiveState->settingsaction(true);
+    QTest::qWait(50);
+    progressiveState->cancelSearch();
+    QCOMPARE(progressiveState->mResultcount, 0);
+    delete progressiveState;
+    }
+// ---------------------------------------------------------------------------
+//SearchStateProviderTest::testcancelsearch()
+// ---------------------------------------------------------------------------
+//
+void SearchStateProviderTest::testcancelsearch()
     {
     SearchProgressiveState* progressiveState = new SearchProgressiveState();
     QEvent *event = new QEvent(QEvent::None);
     progressiveState->onEntry(event);
-    //progressiveState->aboutToCloseView();
+    progressiveState->getSettingCategory(5, true);
+    progressiveState->startNewSearch("a");
+    progressiveState->cancelSearch();
+    delete progressiveState;
+
+    }
+void SearchStateProviderTest::testhandleokanderror()
+    {
+    SearchProgressiveState* progressiveState = new SearchProgressiveState();
+    QEvent *event = new QEvent(QEvent::None);
+    progressiveState->onEntry(event);
+    QVariant var;
+    progressiveState->handleOk(var);
+    int ret = 0;
+    progressiveState->handleError(ret, QString());
+    delete progressiveState;
+    }
+void SearchStateProviderTest::testTDisplayMode2Format()
+    {
+    SearchProgressiveState* progressiveState = new SearchProgressiveState();
+    QEvent *event = new QEvent(QEvent::None);
+    progressiveState->onEntry(event);
+    TDisplayMode mode = EGray2;
+    progressiveState->TDisplayMode2Format(mode);
+    mode = EColor256;
+    progressiveState->TDisplayMode2Format(mode);
+    mode = EGray256;
+    progressiveState->TDisplayMode2Format(mode);
+    mode = EColor4K;
+    progressiveState->TDisplayMode2Format(mode);
+    mode = EColor64K;
+    progressiveState->TDisplayMode2Format(mode);
+    mode = EColor16M;
+    progressiveState->TDisplayMode2Format(mode);
+    mode = EColor16MU;
+    progressiveState->TDisplayMode2Format(mode);
+    mode = EColor16MA;
+    progressiveState->TDisplayMode2Format(mode);
+    mode = EColor16MAP;
+    progressiveState->TDisplayMode2Format(mode);
+    mode = ENone;
+    progressiveState->TDisplayMode2Format(mode);
+
+    delete progressiveState;
+    }
+void SearchStateProviderTest::testsetSelectedCategories()
+    {
+    SearchProgressiveState* progressiveState = new SearchProgressiveState();
+    QEvent *event = new QEvent(QEvent::None);
+    progressiveState->onEntry(event);
+    progressiveState->getSettingCategory(0, true);
+    progressiveState->getSettingCategory(1, true);
+    progressiveState->getSettingCategory(2, true);
+    progressiveState->getSettingCategory(3, true);
+    progressiveState->getSettingCategory(4, true);
+    progressiveState->getSettingCategory(5, true);
+    progressiveState->getSettingCategory(6, true);
+    progressiveState->getSettingCategory(7, true);
+    progressiveState->setSelectedCategories();
     delete progressiveState;
     }
 
-void SearchStateProviderTest::test_CustomizeGoButton()
+void SearchStateProviderTest::testfilterdoc()
     {
-
-    SearchProgressiveState* progressiveState = new SearchProgressiveState();
-    progressiveState->_customizeGoButton(true);
-    progressiveState->_customizeGoButton(false);
-    //QEvent *event = new QEvent(QEvent::None);
-    // progressiveState->onEntry(event);
-    // progressiveState->aboutToCloseView();
-    delete progressiveState;
-
+    
+        SearchProgressiveState* progressiveState = new SearchProgressiveState();
+        QEvent *event = new QEvent(QEvent::None);
+        progressiveState->onEntry(event);
+        progressiveState->filterDoc(NULL,"Name");
+        delete progressiveState;  
+    
     }
-
--- a/searchui/stateproviders/searchstateprovider/tsrc/t_searchstateprovider/src/t_searchstateprovider.cpp	Mon Apr 19 14:40:05 2010 +0300
+++ b/searchui/stateproviders/searchstateprovider/tsrc/t_searchstateprovider/src/t_searchstateprovider.cpp	Mon May 03 12:32:15 2010 +0300
@@ -16,7 +16,7 @@
  */
 
 #include "t_searchstateprovider.h"
-#include "searchruntimeprovider.h"
+//#include "searchruntimeprovider.h"
 #include "searchstateprovider.h"
 
 #include <hsstatefactory.h>
@@ -43,7 +43,7 @@
 //
 SearchStateProviderTest::~SearchStateProviderTest()
     {
-    
+    delete mMainWindow;
     }
 
 // ---------------------------------------------------------------------------
@@ -78,7 +78,7 @@
     {
     SearchStateProvider provider;
 
-    QVERIFY(provider.mWizardMenuStateToken.mLibrary == "searchstateprovider.dll");
+ /*   QVERIFY(provider.mWizardMenuStateToken.mLibrary == "searchstateprovider.dll");
     QVERIFY(provider.mWizardMenuStateToken.mUri == "search.nokia.com/state/wizardprogressivestate");
 
     QVERIFY(provider.mWizardActivatedStateToken.mLibrary == "searchstateprovider.dll");
@@ -86,22 +86,22 @@
 
     QVERIFY(provider.mInitStateToken.mLibrary == "searchstateprovider.dll");
     QVERIFY(provider.mInitStateToken.mUri == "search.nokia.com/state/initstate");
-    }
+ */   }
 
 // ---------------------------------------------------------------------------
 // ---------------------------------------------------------------------------
 //
 void SearchStateProviderTest::testStates()
     {
-    SearchStateProvider provider;
-    QList<HsStateToken> states = provider.states();
+    /*  SearchStateProvider provider;
+   QList<HsStateToken> states = provider.states();
 
     QCOMPARE(states.count(), 3);
 
     QVERIFY(findStateInStateList(states, "searchstateprovider.dll","search.nokia.com/state/wizardprogressivestate"));
     QVERIFY(findStateInStateList(states, "searchstateprovider.dll","search.nokia.com/state/wizardsettingstate"));
     QVERIFY(findStateInStateList(states, "searchstateprovider.dll","search.nokia.com/state/initstate"));
-    }
+   */ }
 
 // ---------------------------------------------------------------------------
 // ---------------------------------------------------------------------------
@@ -109,7 +109,7 @@
 void SearchStateProviderTest::testCreateProgressiveState()
     {
     
-    QVERIFY(verifyStateCreation("searchstateprovider.dll", "search.nokia.com/state/wizardprogressivestate"));
+    QVERIFY(verifyStateCreation("search.nokia.com/state/wizardprogressivestate"));
    // delete wind;
     }
 // ---------------------------------------------------------------------------
@@ -118,7 +118,7 @@
 void SearchStateProviderTest::testCreateSettingsState()
     {
     //HbMainWindow* wind = mainWindow();   
-    QVERIFY(verifyStateCreation("searchstateprovider.dll", "search.nokia.com/state/wizardsettingstate"));
+    QVERIFY(verifyStateCreation("search.nokia.com/state/wizardsettingstate"));
    // delete wind;
     }
 // ---------------------------------------------------------------------------
@@ -127,30 +127,18 @@
 void SearchStateProviderTest::testCreateinitState()
     {
     //HbMainWindow* wind = mainWindow();   
-    QVERIFY(verifyStateCreation("searchstateprovider.dll", "search.nokia.com/state/initstate"));
+    QVERIFY(verifyStateCreation("search.nokia.com/state/initstate"));
   //  delete wind;
     }
 
+
 // ---------------------------------------------------------------------------
 // ---------------------------------------------------------------------------
 //
-void SearchStateProviderTest::testCreateInvalidState()
+bool SearchStateProviderTest::verifyStateCreation(const QString& uri)
     {
-    QVERIFY(!verifyStateCreation("searchstateprovider.dll", "invalid uri"));
-    }
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-bool SearchStateProviderTest::verifyStateCreation(const QString& library,
-        const QString& uri)
-    {
-
-    SearchStateProvider provider;
-    HsStateToken token;
-    token.mLibrary = library;
-    token.mUri = uri;
-    QState* state = provider.createState(token);
+    SearchStateProvider provider;   
+    QState* state = provider.createState(uri);
     bool result = (state != NULL);
     if (state)
         {
@@ -205,5 +193,5 @@
     return error;
     }
 #else //Q_OS_SYMBIAN
-//QTEST_MAIN(SearchStateProviderTest)
+QTEST_MAIN(SearchStateProviderTest)
 #endif //Q_OS_SYMBIAN
--- a/searchui/stateproviders/searchstateprovider/tsrc/t_searchstateprovider/src/t_settingswidget.cpp	Mon Apr 19 14:40:05 2010 +0300
+++ b/searchui/stateproviders/searchstateprovider/tsrc/t_searchstateprovider/src/t_settingswidget.cpp	Mon May 03 12:32:15 2010 +0300
@@ -24,7 +24,7 @@
 #include <QtGui>
 #include <hbaction.h>
 #include <qdir.h>
-
+#include <hbmainwindow.h>
 // ---------------------------------------------------------------------------
 // ---------------------------------------------------------------------------
 //
@@ -45,13 +45,18 @@
     {
     SettingsWidget* settingswizard = new SettingsWidget();
 
+    settingswizard->mCategoryDbMapping.insert("Contacts", true);
+    settingswizard->mCategoryDbMapping.insert("Messages", true);
+
+    settingswizard->q_currentIndexChanged(0);
+
     for (int i = 0; i < settingswizard->mDeviceCheckBoxList.count(); i++)
         (settingswizard->mDeviceCheckBoxList.at(i))->setCheckState(
                 Qt::Unchecked);
 
     settingswizard->storeSettingsToiniFile();
 
-    settingswizard->loadSettingsFrominiFile();
+    settingswizard->loadDeviceSettings();
     for (int i = 0; i < settingswizard->mDeviceCheckBoxList.count(); i++)
         QCOMPARE(settingswizard->mDeviceCheckBoxList.at(i)->checkState(),Qt::Unchecked);
 
@@ -60,29 +65,48 @@
 // ---------------------------------------------------------------------------
 // ---------------------------------------------------------------------------
 //
-void SearchStateProviderTest::testloadSettingsFrominiFile()
+void SearchStateProviderTest::testloadDeviceSettings()
     {
     SettingsWidget* settingswizard = new SettingsWidget();
 
+    settingswizard->mCategoryDbMapping.insert("Contacts", true);
+    settingswizard->mCategoryDbMapping.insert("Messages", true);
+    settingswizard->initialize();
+
+    settingswizard->q_currentIndexChanged(0);
+
     for (int i = 0; i < settingswizard->mDeviceCheckBoxList.count(); i++)
         (settingswizard->mDeviceCheckBoxList.at(i))->setCheckState(
                 Qt::Checked);
     settingswizard->storeSettingsToiniFile();
 
-    settingswizard->loadSettingsFrominiFile();
+    settingswizard->loadDeviceSettings();
+
     for (int i = 0; i < settingswizard->mDeviceCheckBoxList.count(); i++)
         QCOMPARE(settingswizard->mDeviceCheckBoxList.at(i)->checkState(),Qt::Checked);
 
     delete settingswizard;
     }
+void SearchStateProviderTest::testloadBaseSettings()
+    {
+    SettingsWidget* settingswizard = new SettingsWidget();
+    settingswizard->mCategoryDbMapping.insert("Contacts", true);
+    settingswizard->mCategoryDbMapping.insert("Messages", true);
+
+    QCOMPARE(settingswizard->mSelectedScope,0);
+    delete settingswizard;
+    }
 // ---------------------------------------------------------------------------
 // ---------------------------------------------------------------------------
 //
 void SearchStateProviderTest::testlaunchSettingWidget()
     {
     SettingsWidget* settingswizard = new SettingsWidget();
+    settingswizard->mCategoryDbMapping.insert("Contacts", true);
+    settingswizard->mCategoryDbMapping.insert("Messages", true);
+
+    settingswizard->q_currentIndexChanged(0);
     settingswizard->launchSettingWidget();
-    //  QVERIFY(settingswizard->popup->isActive());
 
     delete settingswizard;
 
@@ -90,6 +114,7 @@
 void SearchStateProviderTest::testisInternetSearchOptionSelected()
     {
     SettingsWidget* settingswizard = new SettingsWidget();
+    settingswizard->initialize();
     settingswizard->isInternetSelected = false;
     QCOMPARE(settingswizard->isInternetSearchOptionSelected(),false);
 
@@ -99,10 +124,15 @@
 void SearchStateProviderTest::testunCheckSubCategories()
     {
     SettingsWidget* settingswizard = new SettingsWidget();
-    settingswizard->checkSubCategories(0);
-    settingswizard->unCheckSubCategories(0);
+    settingswizard->initialize();
+    settingswizard->mCategoryDbMapping.insert("Contacts", true);
+    settingswizard->mCategoryDbMapping.insert("Messages", true);
+
+    settingswizard->q_currentIndexChanged(0);
+    settingswizard->mDeviceCheckBoxList.at(0)->setCheckState(Qt::Unchecked);
+
     for (int i = 0; i < settingswizard->mDeviceCheckBoxList.count(); i++)
-        QCOMPARE(settingswizard->mDeviceCheckBoxList.at(i)->checkState(),Qt::Checked);
+        QCOMPARE(settingswizard->mDeviceCheckBoxList.at(i)->checkState(),Qt::Unchecked);
 
     delete settingswizard;
 
@@ -110,31 +140,33 @@
 void SearchStateProviderTest::testcheckSubCategories()
     {
     SettingsWidget* settingswizard = new SettingsWidget();
+    settingswizard->initialize();
 
-    settingswizard->unCheckSubCategories(0);
-    settingswizard->checkSubCategories(0);
+    settingswizard->mCategoryDbMapping.insert("Contacts", true);
+    settingswizard->mCategoryDbMapping.insert("Messages", true);
+
+    settingswizard->q_currentIndexChanged(0);
+    settingswizard->mDeviceCheckBoxList.at(0)->setCheckState(Qt::Checked);
+
     for (int i = 0; i < settingswizard->mDeviceCheckBoxList.count(); i++)
         QCOMPARE(settingswizard->mDeviceCheckBoxList.at(i)->checkState(),Qt::Checked);
 
     delete settingswizard;
 
     }
-void SearchStateProviderTest::testsetActionVisibility()
-    {
-    SettingsWidget* settingswizard = new SettingsWidget();
-    settingswizard->mDeviceCheckBoxList.at(2)->setChecked(true);
-    settingswizard->setActionVisibility();
-    QVERIFY(settingswizard->popup->primaryAction()->isVisible());
-    delete settingswizard;
-    }
 
-void SearchStateProviderTest::testenableDefaultSettings()
+void SearchStateProviderTest::teststoreDefaultSettings()
     {
     QDir dir;
-    bool ret = dir.remove("Search.ini");
+    bool ret = dir.remove("search.ini");
+
     SettingsWidget* settingswizard = new SettingsWidget();
-    settingswizard->enableDefaultSettings();
-    settingswizard->loadSettingsFrominiFile();
+    settingswizard->initialize();
+    settingswizard->mCategoryDbMapping.insert("Contacts", true);
+    settingswizard->mCategoryDbMapping.insert("Messages", true);
+
+    settingswizard->q_currentIndexChanged(0);
+
     for (int i = 0; i < settingswizard->mDeviceCheckBoxList.count(); i++)
         QCOMPARE(settingswizard->mDeviceCheckBoxList.at(i)->checkState(),Qt::Checked);
     delete settingswizard;
@@ -142,7 +174,13 @@
 void SearchStateProviderTest::testcheckBoxOkEvent()
     {
     SettingsWidget* settingswizard = new SettingsWidget();
-    QSignalSpy spy(settingswizard, SIGNAL(settingsEvent()));
+
+    settingswizard->mCategoryDbMapping.insert("Contacts", true);
+    settingswizard->mCategoryDbMapping.insert("Messages", true);
+
+    settingswizard->q_currentIndexChanged(0);
+
+    QSignalSpy spy(settingswizard, SIGNAL(settingsEvent(bool)));
     settingswizard->checkBoxOkEvent();
     QCOMPARE(spy.count(), 1);
     delete settingswizard;
@@ -151,7 +189,12 @@
 void SearchStateProviderTest::testcheckBoxCancelEvent()
     {
     SettingsWidget* settingswizard = new SettingsWidget();
-    QSignalSpy spy(settingswizard, SIGNAL(settingsEvent()));
+
+    settingswizard->mCategoryDbMapping.insert("Contacts", true);
+    settingswizard->mCategoryDbMapping.insert("Messages", true);
+
+    settingswizard->q_currentIndexChanged(0);
+    QSignalSpy spy(settingswizard, SIGNAL(settingsEvent(bool)));
     settingswizard->checkBoxCancelEvent();
     QCOMPARE(spy.count(), 1);
     delete settingswizard;
@@ -160,26 +203,59 @@
 void SearchStateProviderTest::testitemChecked()
     {
     SettingsWidget* settingswizard = new SettingsWidget();
-    settingswizard->mDeviceCheckBoxList.at(0)->setChecked(2);
-    settingswizard->itemChecked(0);
+    settingswizard->initialize();
+    settingswizard->mCategoryDbMapping.insert("Contacts", true);
+    settingswizard->mCategoryDbMapping.insert("Messages", true);
+
+    settingswizard->q_currentIndexChanged(0);
+
+    settingswizard->mDeviceCheckBoxList.at(0)->setCheckState(Qt::Unchecked);
+
     for (int i = 0; i < settingswizard->mDeviceCheckBoxList.count(); i++)
-        QCOMPARE(settingswizard->mDeviceCheckBoxList.at(i)->checkState(),Qt::Checked);
+        QCOMPARE(settingswizard->mDeviceCheckBoxList.at(i)->checkState(),Qt::Unchecked);
 
     delete settingswizard;
 
     }
-void SearchStateProviderTest::testchangeDeviceInternetCheck()
+
+void SearchStateProviderTest::testpreparecategories()
     {
-    delete mMainWindow;
     SettingsWidget* settingswizard = new SettingsWidget();
-    settingswizard->isInternetSelected = false;
 
-    QSignalSpy spy(settingswizard, SIGNAL(settingsChanged()));
-    settingswizard->changeDeviceInternetCheck();
-    QCOMPARE(settingswizard->mInternetCheckBoxList.at(0)->checkState(), Qt::Checked);
-
-    QCOMPARE(spy.count(),1);
+    settingswizard->mCategoryDbMapping.insert("Contacts", true);
+    settingswizard->mCategoryDbMapping.insert("Messages", true);
+    settingswizard->preparecategories();
+    QVERIFY(settingswizard->mDeviceListDisplay.count());
     delete settingswizard;
 
     }
+void SearchStateProviderTest::testq_currentIndexChanged()
+    {
+    SettingsWidget* settingswizard = new SettingsWidget();
 
+       settingswizard->mCategoryDbMapping.insert("Contacts", true);
+       settingswizard->mCategoryDbMapping.insert("Messages", true);
+       settingswizard->initialize();
+
+       settingswizard->q_currentIndexChanged(0);
+       settingswizard->q_currentIndexChanged(1);
+       delete settingswizard;
+    }
+void SearchStateProviderTest::selectedItemCategory()
+    {
+    SettingsWidget* settingswizard = new SettingsWidget();
+
+    settingswizard->mCategoryDbMapping.insert("Contacts", true);
+    settingswizard->mCategoryDbMapping.insert("Messages", true);
+    settingswizard->q_currentIndexChanged(0);
+    QSignalSpy spy(settingswizard, SIGNAL(selectedItemCategory(int,bool)));
+    settingswizard->loadDeviceSettings();
+    QVERIFY(spy.count());
+    delete settingswizard;
+    }
+void SearchStateProviderTest::testcreateGui()
+    {
+    SettingsWidget* settingswizard = new SettingsWidget();    
+    delete settingswizard;
+    }
+
--- a/searchui/stateproviders/searchstateprovider/tsrc/t_searchstateprovider/t_searchstateprovider.pro	Mon Apr 19 14:40:05 2010 +0300
+++ b/searchui/stateproviders/searchstateprovider/tsrc/t_searchstateprovider/t_searchstateprovider.pro	Mon May 03 12:32:15 2010 +0300
@@ -16,7 +16,24 @@
 
 TEMPLATE = app
 
+DEFINES += BUILD_SEARCHSTATEPROVIDER
 
+symbian {
+	CONFIG(debug, debug|release) {
+	    DESTDIR = ./debug
+	} else {
+	    DESTDIR = ./release    
+	}
+}
+
+win32 {
+ 	               
+    LIBS += -L$$PWD/../../../../../bin/debug
+    
+    DESTDIR = $$PWD/../../../../../bin/debug/
+}
+
+#LIBS += -lappservices
 LIBS += -lstatemodel
 #LIBS += -searchstateprovider.dll
 #LIBS += -searchruntimeprovider.dll
@@ -29,7 +46,10 @@
 LIBS += -lapgrfx
 LIBS += -lbitgdi
     
-CONFIG += qtestlib 
+CONFIG += qtestlib \
+          symbian_test \
+          debug_and_release \
+          console
 CONFIG += hb
 
 QT += xml \
@@ -45,9 +65,8 @@
 INCLUDEPATH += .\
                ./inc \
                ../../inc \
-               ../../../../inc \
-               ../../../../indevicehandler/inc \
-	       ../../../../runtimeproviders/searchruntimeprovider/inc
+               ../../../../inc \               
+               ../../../../indevicehandler/inc 
 symbian {         
 CONFIG += symbian_test               
 TARGET.UID2 = 0x100039CE