searcher/searchserver/src/csearchserversubsession.cpp
changeset 14 8bd192d47aaa
parent 8 6547bf8ca13a
child 16 2729d20a0010
--- a/searcher/searchserver/src/csearchserversubsession.cpp	Mon Jul 26 12:27:31 2010 +0530
+++ b/searcher/searchserver/src/csearchserversubsession.cpp	Mon Aug 09 10:51:30 2010 +0530
@@ -72,10 +72,13 @@
 	delete iIndexDb;
 	delete iSearchDb;	
 	delete iNextDocument;
+	idocList.ResetAndDestroy();
+	idocList.Close();
 }
 
 void CSearchServerSubSession::ConstructL()
 {
+    count = 0;
 	iIndexDb = CCPixIdxDb::NewL();
 	iSearchDb = CCPixSearch::NewL();
 }
@@ -259,6 +262,32 @@
 	OstTraceFunctionExit0( DUP1_CSEARCHSERVERSUBSESSION_GETDOCUMENTL_EXIT );
 	}
 	
+void CSearchServerSubSession::GetBatchDocumentL(const RMessage2& aMessage)
+	{
+	PERFORMANCE_LOG_START("CSearchServerSubSession::GetBatchDocumentL");
+	
+	// Sanity check
+	if (!iSearchDb->IsOpen())
+		{
+		iSession->PanicClient(aMessage, EDatabaseNotOpen);
+		return;
+		}
+	
+	// buf for the search terms
+	TInt index = aMessage.Int0();
+	count = aMessage.Int1();
+	
+	for (int i =0; i < idocList.Count(); i++)
+	    {
+	    delete idocList[i];
+	    idocList[i] = NULL;
+	    }
+	idocList.Reset();
+	LOG_PLAYER_RECORD( CLogPlayerRecorder::LogGetDocumentL( reinterpret_cast<TUint>( this ), index ) );
+	
+	iSearchDb->GetBatchDocumentL(index, this, aMessage, count);
+	}
+	
 void CSearchServerSubSession::GetDocumentCompleteL(const RMessage2& aMessage)
 	{
 	OstTraceFunctionEntry0( CSEARCHSERVERSUBSESSION_GETDOCUMENTCOMPLETEL_ENTRY );
@@ -270,6 +299,14 @@
 	OstTraceFunctionExit0( CSEARCHSERVERSUBSESSION_GETDOCUMENTCOMPLETEL_EXIT );
 	}
 
+void CSearchServerSubSession::GetBatchDocumentCompleteL(const RMessage2& aMessage)
+	{
+	PERFORMANCE_LOG_START("CSearchServerSubSession::GetBatchDocumentCompleteL");	
+	idocList = iSearchDb->GetBatchDocumentCompleteL();
+	const TPtrC8 ptr((const TUint8*)&(iSearchDb->docSizeArray[0]), sizeof(TInt) * iSearchDb->docSizeArray.Count());
+	aMessage.WriteL(2, ptr);
+	}
+	
 // CSearchServerSession::GetDocumentObjectL()
 // Client gets the object after GetDocumentL() has completed 
 void CSearchServerSubSession::GetDocumentObjectL(const RMessage2& aMessage)
@@ -319,6 +356,53 @@
 	aMessage.Complete(KErrNone);		
 	OstTraceFunctionExit0( DUP1_CSEARCHSERVERSUBSESSION_GETDOCUMENTOBJECTL_EXIT );
 	}
+	
+// CSearchServerSession::GetBatchDocumentObjectL()
+// Client gets the object after GetBatchDocumentL() has completed 
+void CSearchServerSubSession::GetBatchDocumentObjectL(const RMessage2& aMessage)
+	{
+	PERFORMANCE_LOG_START("CSearchServerSubSession::GetBatchDocumentObjectL");
+	
+	// Sanity check
+	if ( !iSearchDb || !iSearchDb->IsOpen() )
+		{
+		iSession->PanicClient(aMessage, EDatabaseNotOpen);
+		return;
+		}
+	TInt totalSize = 0;
+	for ( TInt i= 0; i < iSearchDb->docSizeArray.Count(); i++)
+	    totalSize += iSearchDb->docSizeArray[i];	
+	
+	// Create long enough descriptor for serialized hits
+	HBufC8* buf = HBufC8::NewLC(totalSize +1);
+	TPtr8 ptr = buf->Des();
+	// Initialize a new stream
+    RDesWriteStream stream;
+    stream.Open(ptr);
+    stream.PushL();
+	        
+	for(TInt i= 0; i < idocList.Count(); i++)
+        {
+        if ( idocList[i] )
+             {                
+             // Externalize hits to the stream//             
+             idocList[i]->ExternalizeL(stream);
+             }
+        }
+    // Commit and destroy the stream
+    stream.CommitL();
+    TInt len2 = ptr.Length();
+    CleanupStack::PopAndDestroy(&stream);
+
+    // write the serialized hits in to the message
+    aMessage.WriteL(0, ptr);
+
+    // Delete descriptor
+    CleanupStack::PopAndDestroy(buf);
+    
+	// Complete the request
+	aMessage.Complete(KErrNone);
+	}
 
 void CSearchServerSubSession::AddL(const RMessage2& aMessage)
 	{
@@ -360,7 +444,11 @@
 
 void CSearchServerSubSession::LimitExcerptToMaxLengthL(CSearchDocument* aSearchDocument)
     {
+	//This is commented because HIGHLIGHTER uses full expcerpt field, 
+	//no need to limit excerpt
     //check if excerpt is more then maximum allowed
+#ifdef USE_HIGHLIGHTER
+#else
     if(aSearchDocument->Excerpt().Length() > MAX_EXCERPT_LENGTH)
         {
         OstTraceExt1( TRACE_NORMAL, CSEARCHSERVERSUBSESSION_LIMITEXCERPTTOMAXLENGTHL, "CSearchServerSubSession::LimitExcerptToMaxLengthL;docuid=%S", (aSearchDocument->Id()) );
@@ -375,6 +463,7 @@
         aSearchDocument->AddExcerptL(*bufExcerpt);
         CleanupStack::PopAndDestroy(bufExcerpt);
         }
+#endif
     }
 
 void CSearchServerSubSession::AddCompleteL(const RMessage2& /*aMessage*/)
@@ -498,6 +587,11 @@
 				TRAP(aError, GetDocumentCompleteL(aMessage));
 				break;
 				}
+			case ECPixTaskTypeGetBatchDocument:
+			    {
+			    TRAP(aError, GetBatchDocumentCompleteL(aMessage));
+			    break;
+			    }
 			case ECPixTaskTypeAdd:
 				{
 				TRAP(aError, AddCompleteL(aMessage));