searcher/searchserver/src/csearchserversubsession.cpp
changeset 15 cf5c74390b98
parent 10 afe194b6b1cd
child 16 2729d20a0010
equal deleted inserted replaced
10:afe194b6b1cd 15:cf5c74390b98
    70     CPIXLOGSTRING("Deleting search server subsession");
    70     CPIXLOGSTRING("Deleting search server subsession");
    71 
    71 
    72 	delete iIndexDb;
    72 	delete iIndexDb;
    73 	delete iSearchDb;	
    73 	delete iSearchDb;	
    74 	delete iNextDocument;
    74 	delete iNextDocument;
       
    75 	idocList.ResetAndDestroy();
       
    76 	idocList.Close();
    75 }
    77 }
    76 
    78 
    77 void CSearchServerSubSession::ConstructL()
    79 void CSearchServerSubSession::ConstructL()
    78 {
    80 {
       
    81     count = 0;
    79 	iIndexDb = CCPixIdxDb::NewL();
    82 	iIndexDb = CCPixIdxDb::NewL();
    80 	iSearchDb = CCPixSearch::NewL();
    83 	iSearchDb = CCPixSearch::NewL();
    81 }
    84 }
    82 
    85 
    83 // CSearchServerSession::CancelAll()
    86 // CSearchServerSession::CancelAll()
   257 	LOG_PLAYER_RECORD( CLogPlayerRecorder::LogGetDocumentL( reinterpret_cast<TUint>( this ), index ) );
   260 	LOG_PLAYER_RECORD( CLogPlayerRecorder::LogGetDocumentL( reinterpret_cast<TUint>( this ), index ) );
   258 	iSearchDb->GetDocumentL(index, this, aMessage);
   261 	iSearchDb->GetDocumentL(index, this, aMessage);
   259 	OstTraceFunctionExit0( DUP1_CSEARCHSERVERSUBSESSION_GETDOCUMENTL_EXIT );
   262 	OstTraceFunctionExit0( DUP1_CSEARCHSERVERSUBSESSION_GETDOCUMENTL_EXIT );
   260 	}
   263 	}
   261 	
   264 	
       
   265 void CSearchServerSubSession::GetBatchDocumentL(const RMessage2& aMessage)
       
   266 	{
       
   267 	PERFORMANCE_LOG_START("CSearchServerSubSession::GetBatchDocumentL");
       
   268 	
       
   269 	// Sanity check
       
   270 	if (!iSearchDb->IsOpen())
       
   271 		{
       
   272 		iSession->PanicClient(aMessage, EDatabaseNotOpen);
       
   273 		return;
       
   274 		}
       
   275 	
       
   276 	// buf for the search terms
       
   277 	TInt index = aMessage.Int0();
       
   278 	count = aMessage.Int1();
       
   279 	
       
   280 	for (int i =0; i < idocList.Count(); i++)
       
   281 	    {
       
   282 	    delete idocList[i];
       
   283 	    idocList[i] = NULL;
       
   284 	    }
       
   285 	idocList.Reset();
       
   286 	LOG_PLAYER_RECORD( CLogPlayerRecorder::LogGetDocumentL( reinterpret_cast<TUint>( this ), index ) );
       
   287 	
       
   288 	iSearchDb->GetBatchDocumentL(index, this, aMessage, count);
       
   289 	}
       
   290 	
   262 void CSearchServerSubSession::GetDocumentCompleteL(const RMessage2& aMessage)
   291 void CSearchServerSubSession::GetDocumentCompleteL(const RMessage2& aMessage)
   263 	{
   292 	{
   264 	OstTraceFunctionEntry0( CSEARCHSERVERSUBSESSION_GETDOCUMENTCOMPLETEL_ENTRY );
   293 	OstTraceFunctionEntry0( CSEARCHSERVERSUBSESSION_GETDOCUMENTCOMPLETEL_ENTRY );
   265 	PERFORMANCE_LOG_START("CSearchServerSubSession::GetDocumentCompleteL");
   294 	PERFORMANCE_LOG_START("CSearchServerSubSession::GetDocumentCompleteL");
   266 	
   295 	
   268 	TPckgBuf<TInt> documentSizePackage(iNextDocument ? iNextDocument->Size() : 0);
   297 	TPckgBuf<TInt> documentSizePackage(iNextDocument ? iNextDocument->Size() : 0);
   269 	aMessage.WriteL(1, documentSizePackage);
   298 	aMessage.WriteL(1, documentSizePackage);
   270 	OstTraceFunctionExit0( CSEARCHSERVERSUBSESSION_GETDOCUMENTCOMPLETEL_EXIT );
   299 	OstTraceFunctionExit0( CSEARCHSERVERSUBSESSION_GETDOCUMENTCOMPLETEL_EXIT );
   271 	}
   300 	}
   272 
   301 
       
   302 void CSearchServerSubSession::GetBatchDocumentCompleteL(const RMessage2& aMessage)
       
   303 	{
       
   304 	PERFORMANCE_LOG_START("CSearchServerSubSession::GetBatchDocumentCompleteL");	
       
   305 	idocList = iSearchDb->GetBatchDocumentCompleteL();
       
   306 	const TPtrC8 ptr((const TUint8*)&(iSearchDb->docSizeArray[0]), sizeof(TInt) * iSearchDb->docSizeArray.Count());
       
   307 	aMessage.WriteL(2, ptr);
       
   308 	}
       
   309 	
   273 // CSearchServerSession::GetDocumentObjectL()
   310 // CSearchServerSession::GetDocumentObjectL()
   274 // Client gets the object after GetDocumentL() has completed 
   311 // Client gets the object after GetDocumentL() has completed 
   275 void CSearchServerSubSession::GetDocumentObjectL(const RMessage2& aMessage)
   312 void CSearchServerSubSession::GetDocumentObjectL(const RMessage2& aMessage)
   276 	{
   313 	{
   277 	OstTraceFunctionEntry0( CSEARCHSERVERSUBSESSION_GETDOCUMENTOBJECTL_ENTRY );
   314 	OstTraceFunctionEntry0( CSEARCHSERVERSUBSESSION_GETDOCUMENTOBJECTL_ENTRY );
   316 		}
   353 		}
   317 	
   354 	
   318 	// Complete the request
   355 	// Complete the request
   319 	aMessage.Complete(KErrNone);		
   356 	aMessage.Complete(KErrNone);		
   320 	OstTraceFunctionExit0( DUP1_CSEARCHSERVERSUBSESSION_GETDOCUMENTOBJECTL_EXIT );
   357 	OstTraceFunctionExit0( DUP1_CSEARCHSERVERSUBSESSION_GETDOCUMENTOBJECTL_EXIT );
       
   358 	}
       
   359 	
       
   360 // CSearchServerSession::GetBatchDocumentObjectL()
       
   361 // Client gets the object after GetBatchDocumentL() has completed 
       
   362 void CSearchServerSubSession::GetBatchDocumentObjectL(const RMessage2& aMessage)
       
   363 	{
       
   364 	PERFORMANCE_LOG_START("CSearchServerSubSession::GetBatchDocumentObjectL");
       
   365 	
       
   366 	// Sanity check
       
   367 	if ( !iSearchDb || !iSearchDb->IsOpen() )
       
   368 		{
       
   369 		iSession->PanicClient(aMessage, EDatabaseNotOpen);
       
   370 		return;
       
   371 		}
       
   372 	TInt totalSize = 0;
       
   373 	for ( TInt i= 0; i < iSearchDb->docSizeArray.Count(); i++)
       
   374 	    totalSize += iSearchDb->docSizeArray[i];	
       
   375 	
       
   376 	// Create long enough descriptor for serialized hits
       
   377 	HBufC8* buf = HBufC8::NewLC(totalSize +1);
       
   378 	TPtr8 ptr = buf->Des();
       
   379 	// Initialize a new stream
       
   380     RDesWriteStream stream;
       
   381     stream.Open(ptr);
       
   382     stream.PushL();
       
   383 	        
       
   384 	for(TInt i= 0; i < idocList.Count(); i++)
       
   385         {
       
   386         if ( idocList[i] )
       
   387              {                
       
   388              // Externalize hits to the stream//             
       
   389              idocList[i]->ExternalizeL(stream);
       
   390              }
       
   391         }
       
   392     // Commit and destroy the stream
       
   393     stream.CommitL();
       
   394     TInt len2 = ptr.Length();
       
   395     CleanupStack::PopAndDestroy(&stream);
       
   396 
       
   397     // write the serialized hits in to the message
       
   398     aMessage.WriteL(0, ptr);
       
   399 
       
   400     // Delete descriptor
       
   401     CleanupStack::PopAndDestroy(buf);
       
   402     
       
   403 	// Complete the request
       
   404 	aMessage.Complete(KErrNone);
   321 	}
   405 	}
   322 
   406 
   323 void CSearchServerSubSession::AddL(const RMessage2& aMessage)
   407 void CSearchServerSubSession::AddL(const RMessage2& aMessage)
   324 	{
   408 	{
   325 	// Sanity check
   409 	// Sanity check
   358 	CleanupStack::PopAndDestroy(serializedDocument);
   442 	CleanupStack::PopAndDestroy(serializedDocument);
   359 	}
   443 	}
   360 
   444 
   361 void CSearchServerSubSession::LimitExcerptToMaxLengthL(CSearchDocument* aSearchDocument)
   445 void CSearchServerSubSession::LimitExcerptToMaxLengthL(CSearchDocument* aSearchDocument)
   362     {
   446     {
       
   447 	//This is commented because HIGHLIGHTER uses full expcerpt field, 
       
   448 	//no need to limit excerpt
   363     //check if excerpt is more then maximum allowed
   449     //check if excerpt is more then maximum allowed
       
   450 #ifdef USE_HIGHLIGHTER
       
   451 #else
   364     if(aSearchDocument->Excerpt().Length() > MAX_EXCERPT_LENGTH)
   452     if(aSearchDocument->Excerpt().Length() > MAX_EXCERPT_LENGTH)
   365         {
   453         {
   366         OstTraceExt1( TRACE_NORMAL, CSEARCHSERVERSUBSESSION_LIMITEXCERPTTOMAXLENGTHL, "CSearchServerSubSession::LimitExcerptToMaxLengthL;docuid=%S", (aSearchDocument->Id()) );
   454         OstTraceExt1( TRACE_NORMAL, CSEARCHSERVERSUBSESSION_LIMITEXCERPTTOMAXLENGTHL, "CSearchServerSubSession::LimitExcerptToMaxLengthL;docuid=%S", (aSearchDocument->Id()) );
   367         CPIXLOGSTRING2("CSearchServerSubSession::AddL docuid=%S", &(aSearchDocument->Id()));
   455         CPIXLOGSTRING2("CSearchServerSubSession::AddL docuid=%S", &(aSearchDocument->Id()));
   368         OstTrace1( TRACE_NORMAL, DUP1_CSEARCHSERVERSUBSESSION_LIMITEXCERPTTOMAXLENGTHL, "CSearchServerSubSession::LimitExcerptToMaxLengthL;Excerpt Length=%d", aSearchDocument->Excerpt().Length() );
   456         OstTrace1( TRACE_NORMAL, DUP1_CSEARCHSERVERSUBSESSION_LIMITEXCERPTTOMAXLENGTHL, "CSearchServerSubSession::LimitExcerptToMaxLengthL;Excerpt Length=%d", aSearchDocument->Excerpt().Length() );
   373         ptrExcerpt.Append(excerpt.Ptr(),MAX_EXCERPT_LENGTH - 1);
   461         ptrExcerpt.Append(excerpt.Ptr(),MAX_EXCERPT_LENGTH - 1);
   374         ptrExcerpt.Append(KNullDesC); //Append NULL
   462         ptrExcerpt.Append(KNullDesC); //Append NULL
   375         aSearchDocument->AddExcerptL(*bufExcerpt);
   463         aSearchDocument->AddExcerptL(*bufExcerpt);
   376         CleanupStack::PopAndDestroy(bufExcerpt);
   464         CleanupStack::PopAndDestroy(bufExcerpt);
   377         }
   465         }
       
   466 #endif
   378     }
   467     }
   379 
   468 
   380 void CSearchServerSubSession::AddCompleteL(const RMessage2& /*aMessage*/)
   469 void CSearchServerSubSession::AddCompleteL(const RMessage2& /*aMessage*/)
   381 	{
   470 	{
   382 	iIndexDb->AddCompleteL();	
   471 	iIndexDb->AddCompleteL();	
   496 			case ECPixTaskTypeGetDocument:
   585 			case ECPixTaskTypeGetDocument:
   497 				{
   586 				{
   498 				TRAP(aError, GetDocumentCompleteL(aMessage));
   587 				TRAP(aError, GetDocumentCompleteL(aMessage));
   499 				break;
   588 				break;
   500 				}
   589 				}
       
   590 			case ECPixTaskTypeGetBatchDocument:
       
   591 			    {
       
   592 			    TRAP(aError, GetBatchDocumentCompleteL(aMessage));
       
   593 			    break;
       
   594 			    }
   501 			case ECPixTaskTypeAdd:
   595 			case ECPixTaskTypeAdd:
   502 				{
   596 				{
   503 				TRAP(aError, AddCompleteL(aMessage));
   597 				TRAP(aError, AddCompleteL(aMessage));
   504 				break;
   598 				break;
   505 				}
   599 				}