phonebookengines/contactsmodel/cntsrv/src/CCntFileManagerMsgHandler.cpp
changeset 46 efe85016a067
parent 31 2a11b5b00470
--- a/phonebookengines/contactsmodel/cntsrv/src/CCntFileManagerMsgHandler.cpp	Fri Jun 11 13:29:23 2010 +0300
+++ b/phonebookengines/contactsmodel/cntsrv/src/CCntFileManagerMsgHandler.cpp	Wed Jun 23 18:02:44 2010 +0300
@@ -37,6 +37,7 @@
 #include <cntviewstore.h>
 #include "cntviewprivate.h"
 #include "cviewsubsessions.h"
+#include "cntpredictivesearch.h"
 
 const TInt KCntFileManagerIpcCodes[] =
 	{
@@ -57,6 +58,7 @@
 	ECntFetchTemplateIds,
 	ECntFetchGroupIdLists,
 	ECntSearchResultList,
+	ECntPredictiveSearchList,
 	ECntFilesSize,
 	ECntGetDefinitionsForExistingView
 	};
@@ -73,9 +75,18 @@
 :CCntMsgHandler(aSession)
 	{		
 	}
-	
+
+// ----------------------------------------------------------------------------
+// CntPredictiveSearch::ConstructL
+// ----------------------------------------------------------------------------
+void CCntFileManagerMsgHandler::ConstructL()
+    {
+    predictiveSearch = CntPredictiveSearch::NewL();
+    }
+
 CCntFileManagerMsgHandler::~CCntFileManagerMsgHandler()
 	{
+    delete predictiveSearch;
 	}
 
 /**
@@ -388,7 +399,37 @@
 		}
 	}
 	
+void CCntFileManagerMsgHandler::FetchPredictiveSearchResultsL(const RMessage2& aMessage)
+    {
+    const TInt KSqlQueryMaxLen = aMessage.GetDesLengthL(1); 
+    HBufC* searchQuery = HBufC::NewLC(KSqlQueryMaxLen);
+    TPtr searchQueryPtr(searchQuery->Des());
+    aMessage.ReadL(1, searchQueryPtr);
+    
+    CheckForManagerL();
+    HBufC* newPredictiveQuery = predictiveSearch->CreateSQLQueryL(*searchQuery, 1 );
+    CleanupStack::PushL(newPredictiveQuery);
+    CBufSeg* buffer = iManager->GetPersistenceLayer().ContactProperties().DetailsListL(newPredictiveQuery->Des());
+    if (aMessage.GetDesMaxLength(0) >= buffer->Size())
+        {
+        TInt offset = 0;
+        while (offset < buffer->Size())
+            {
+            TPtr8 ptr = buffer->Ptr(offset);
+            aMessage.WriteL(0, ptr, offset);
+            offset += ptr.Size();
+            }
+        aMessage.Complete(KErrNone);
+        }
+    else
+        {
+        aMessage.Complete(buffer->Size());
+        }
 
+    delete buffer;
+    CleanupStack::PopAndDestroy(); //searchQuery*/
+    CleanupStack::PopAndDestroy(); //newPredictiveQuery
+    }
 void CCntFileManagerMsgHandler::FetchSearchResultsL(const RMessage2& aMessage)
     {
     const TInt KSqlQueryMaxLen = aMessage.GetDesLengthL(1);