searcher/searchserver/src/csearchserversubsession.cpp
changeset 1 6f2c1c46032b
parent 0 671dee74050a
child 8 6547bf8ca13a
equal deleted inserted replaced
0:671dee74050a 1:6f2c1c46032b
    27 #include "CCPixSearch.h"
    27 #include "CCPixSearch.h"
    28 #include "CSearchDocument.h"
    28 #include "CSearchDocument.h"
    29 #include "SearchServerLogger.h"
    29 #include "SearchServerLogger.h"
    30 #include "SearchServer.pan"
    30 #include "SearchServer.pan"
    31 #include "CLogPlayerRecorder.h"
    31 #include "CLogPlayerRecorder.h"
       
    32 #include "OstTraceDefinitions.h"
       
    33 #ifdef OST_TRACE_COMPILER_IN_USE
       
    34 #include "csearchserversubsessionTraces.h"
       
    35 #endif
       
    36 
    32 
    37 
    33 // Contants
    38 // Contants
    34 //_LIT8( KFileBaseAppClass, "root file" );
    39 //_LIT8( KFileBaseAppClass, "root file" );
    35 
    40 
    36 CSearchServerSubSession* CSearchServerSubSession::NewLC(CSearchServerSession* aSession)
    41 CSearchServerSubSession* CSearchServerSubSession::NewLC(CSearchServerSession* aSession)
    48 	return self;
    53 	return self;
    49 }
    54 }
    50 
    55 
    51 CSearchServerSubSession::CSearchServerSubSession(CSearchServerSession* aSession) : iSession(aSession)
    56 CSearchServerSubSession::CSearchServerSubSession(CSearchServerSession* aSession) : iSession(aSession)
    52 {
    57 {
       
    58     OstTrace0( TRACE_NORMAL, CSEARCHSERVERSUBSESSION_CSEARCHSERVERSUBSESSION, "Creating search server subsession" );
    53     CPIXLOGSTRING("Creating search server subsession");
    59     CPIXLOGSTRING("Creating search server subsession");
    54 	
    60 	
    55     // Dont ask why but I seem to have a compulsion to set everything NULL in constructor - AL
    61     // Dont ask why but I seem to have a compulsion to set everything NULL in constructor - AL
    56 	iIndexDb = NULL;
    62 	iIndexDb = NULL;
    57 	iSearchDb = NULL;
    63 	iSearchDb = NULL;
    58 	iNextDocument = NULL;
    64 	iNextDocument = NULL;
    59 }
    65 }
    60 
    66 
    61 CSearchServerSubSession::~CSearchServerSubSession()
    67 CSearchServerSubSession::~CSearchServerSubSession()
    62 {
    68 {
       
    69     OstTrace0( TRACE_NORMAL, DUP1_CSEARCHSERVERSUBSESSION_CSEARCHSERVERSUBSESSION, "Deleting search server subsession" );
    63     CPIXLOGSTRING("Deleting search server subsession");
    70     CPIXLOGSTRING("Deleting search server subsession");
    64 
    71 
    65 	delete iIndexDb;
    72 	delete iIndexDb;
    66 	delete iSearchDb;	
    73 	delete iSearchDb;	
    67 	delete iNextDocument;
    74 	delete iNextDocument;
   149 	aMessage.Complete(KErrNone);	
   156 	aMessage.Complete(KErrNone);	
   150 	}
   157 	}
   151 
   158 
   152 void CSearchServerSubSession::SearchL(const RMessage2& aMessage)
   159 void CSearchServerSubSession::SearchL(const RMessage2& aMessage)
   153 	{
   160 	{
       
   161 	OstTraceFunctionEntry0( CSEARCHSERVERSUBSESSION_SEARCHL_ENTRY );
   154 	PERFORMANCE_LOG_START("CSearchServerSubSession::SearchL");
   162 	PERFORMANCE_LOG_START("CSearchServerSubSession::SearchL");
   155 	
   163 	
   156 	// Sanity check
   164 	// Sanity check
   157 	if (!iSearchDb->IsOpen())
   165 	if (!iSearchDb->IsOpen())
   158 		{
   166 		{
   159 		iSession->PanicClient(aMessage, EDatabaseNotOpen);
   167 		iSession->PanicClient(aMessage, EDatabaseNotOpen);
       
   168 		OstTraceFunctionExit0( CSEARCHSERVERSUBSESSION_SEARCHL_EXIT );
   160 		return;
   169 		return;
   161 		}
   170 		}
   162 	
   171 	
   163 	// buf for the search terms
   172 	// buf for the search terms
   164 	HBufC* searchTerms = HBufC::NewLC(aMessage.GetDesLength(0));
   173 	HBufC* searchTerms = HBufC::NewLC(aMessage.GetDesLength(0));
   179 		aMessage.Complete(KErrNone);	
   188 		aMessage.Complete(KErrNone);	
   180 		}
   189 		}
   181 	
   190 	
   182 	// Cleanup search terms
   191 	// Cleanup search terms
   183 	CleanupStack::PopAndDestroy(searchTerms);
   192 	CleanupStack::PopAndDestroy(searchTerms);
       
   193 	OstTraceFunctionExit0( DUP1_CSEARCHSERVERSUBSESSION_SEARCHL_EXIT );
   184 	}
   194 	}
   185 	
   195 	
   186 void CSearchServerSubSession::SearchCompleteL(const RMessage2& aMessage)
   196 void CSearchServerSubSession::SearchCompleteL(const RMessage2& aMessage)
   187 	{
   197 	{
       
   198 	OstTraceFunctionEntry0( CSEARCHSERVERSUBSESSION_SEARCHCOMPLETEL_ENTRY );
   188 	PERFORMANCE_LOG_START("CSearchServerSubSession::SearchCompleteL");
   199 	PERFORMANCE_LOG_START("CSearchServerSubSession::SearchCompleteL");
   189 	
   200 	
   190 	// Complete search
   201 	// Complete search
   191 	const TInt resultCount = iSearchDb->SearchCompleteL();
   202 	const TInt resultCount = iSearchDb->SearchCompleteL();
   192 		
   203 		
   193 	// Return the size of the search results in first parameter
   204 	// Return the size of the search results in first parameter
   194 	TPckgBuf<TInt> resultCountPackage(resultCount);
   205 	TPckgBuf<TInt> resultCountPackage(resultCount);
   195 	aMessage.WriteL(1, resultCountPackage);
   206 	aMessage.WriteL(1, resultCountPackage);
   196 	
   207 	
       
   208 	OstTraceFunctionExit0( CSEARCHSERVERSUBSESSION_SEARCHCOMPLETEL_EXIT );
   197 	}
   209 	}
   198 
   210 
   199 // CSearchServerSession::GetDocumentL().
   211 // CSearchServerSession::GetDocumentL().
   200 // Client gets the next documents (result) when SearchL has completed
   212 // Client gets the next documents (result) when SearchL has completed
   201 void CSearchServerSubSession::GetDocumentL(const RMessage2& aMessage)
   213 void CSearchServerSubSession::GetDocumentL(const RMessage2& aMessage)
   202 	{
   214 	{
       
   215 	OstTraceFunctionEntry0( CSEARCHSERVERSUBSESSION_GETDOCUMENTL_ENTRY );
   203 	PERFORMANCE_LOG_START("CSearchServerSubSession::GetDocumentL");
   216 	PERFORMANCE_LOG_START("CSearchServerSubSession::GetDocumentL");
   204 	
   217 	
   205 	// Sanity check
   218 	// Sanity check
   206 	if (!iSearchDb->IsOpen())
   219 	if (!iSearchDb->IsOpen())
   207 		{
   220 		{
   208 		iSession->PanicClient(aMessage, EDatabaseNotOpen);
   221 		iSession->PanicClient(aMessage, EDatabaseNotOpen);
       
   222 		OstTraceFunctionExit0( CSEARCHSERVERSUBSESSION_GETDOCUMENTL_EXIT );
   209 		return;
   223 		return;
   210 		}
   224 		}
   211 	
   225 	
   212 	// buf for the search terms
   226 	// buf for the search terms
   213 	TInt index = aMessage.Int0();
   227 	TInt index = aMessage.Int0();
   214 	
   228 	
   215 	delete iNextDocument; 
   229 	delete iNextDocument; 
   216 	iNextDocument = NULL;
   230 	iNextDocument = NULL;
   217 	LOG_PLAYER_RECORD( CLogPlayerRecorder::LogGetDocumentL( reinterpret_cast<TUint>( this ), index ) );
   231 	LOG_PLAYER_RECORD( CLogPlayerRecorder::LogGetDocumentL( reinterpret_cast<TUint>( this ), index ) );
   218 	iSearchDb->GetDocumentL(index, this, aMessage);
   232 	iSearchDb->GetDocumentL(index, this, aMessage);
       
   233 	OstTraceFunctionExit0( DUP1_CSEARCHSERVERSUBSESSION_GETDOCUMENTL_EXIT );
   219 	}
   234 	}
   220 	
   235 	
   221 void CSearchServerSubSession::GetDocumentCompleteL(const RMessage2& aMessage)
   236 void CSearchServerSubSession::GetDocumentCompleteL(const RMessage2& aMessage)
   222 	{
   237 	{
       
   238 	OstTraceFunctionEntry0( CSEARCHSERVERSUBSESSION_GETDOCUMENTCOMPLETEL_ENTRY );
   223 	PERFORMANCE_LOG_START("CSearchServerSubSession::GetDocumentCompleteL");
   239 	PERFORMANCE_LOG_START("CSearchServerSubSession::GetDocumentCompleteL");
   224 	
   240 	
   225 	iNextDocument = iSearchDb->GetDocumentCompleteL();	
   241 	iNextDocument = iSearchDb->GetDocumentCompleteL();	
   226 	TPckgBuf<TInt> documentSizePackage(iNextDocument ? iNextDocument->Size() : 0);
   242 	TPckgBuf<TInt> documentSizePackage(iNextDocument ? iNextDocument->Size() : 0);
   227 	aMessage.WriteL(1, documentSizePackage);
   243 	aMessage.WriteL(1, documentSizePackage);
       
   244 	OstTraceFunctionExit0( CSEARCHSERVERSUBSESSION_GETDOCUMENTCOMPLETEL_EXIT );
   228 	}
   245 	}
   229 
   246 
   230 // CSearchServerSession::GetDocumentObjectL()
   247 // CSearchServerSession::GetDocumentObjectL()
   231 // Client gets the object after GetDocumentL() has completed 
   248 // Client gets the object after GetDocumentL() has completed 
   232 void CSearchServerSubSession::GetDocumentObjectL(const RMessage2& aMessage)
   249 void CSearchServerSubSession::GetDocumentObjectL(const RMessage2& aMessage)
   233 	{
   250 	{
       
   251 	OstTraceFunctionEntry0( CSEARCHSERVERSUBSESSION_GETDOCUMENTOBJECTL_ENTRY );
   234 	PERFORMANCE_LOG_START("CSearchServerSubSession::GetDocumentObjectL");
   252 	PERFORMANCE_LOG_START("CSearchServerSubSession::GetDocumentObjectL");
   235 	
   253 	
   236 	// Sanity check
   254 	// Sanity check
   237 	if (!iSearchDb->IsOpen())
   255 	if (!iSearchDb->IsOpen())
   238 		{
   256 		{
   239 		iSession->PanicClient(aMessage, EDatabaseNotOpen);
   257 		iSession->PanicClient(aMessage, EDatabaseNotOpen);
       
   258 		OstTraceFunctionExit0( CSEARCHSERVERSUBSESSION_GETDOCUMENTOBJECTL_EXIT );
   240 		return;
   259 		return;
   241 		}
   260 		}
   242 	
   261 	
   243 	if (iNextDocument)
   262 	if (iNextDocument)
   244 		{
   263 		{
   270 		aMessage.WriteL(0, KNullDesC8);
   289 		aMessage.WriteL(0, KNullDesC8);
   271 		}
   290 		}
   272 	
   291 	
   273 	// Complete the request
   292 	// Complete the request
   274 	aMessage.Complete(KErrNone);		
   293 	aMessage.Complete(KErrNone);		
       
   294 	OstTraceFunctionExit0( DUP1_CSEARCHSERVERSUBSESSION_GETDOCUMENTOBJECTL_EXIT );
   275 	}
   295 	}
   276 
   296 
   277 void CSearchServerSubSession::AddL(const RMessage2& aMessage)
   297 void CSearchServerSubSession::AddL(const RMessage2& aMessage)
   278 	{
   298 	{
   279 	// Sanity check
   299 	// Sanity check
   302 	if ( iIndexDb->BaseAppClass().Find( KFileBaseAppClass ) == KErrNotFound )
   322 	if ( iIndexDb->BaseAppClass().Find( KFileBaseAppClass ) == KErrNotFound )
   303 	    {
   323 	    {
   304 		CLogPlayerRecorder::LogAddL( reinterpret_cast<TUint>(this), *document );
   324 		CLogPlayerRecorder::LogAddL( reinterpret_cast<TUint>(this), *document );
   305 	    }
   325 	    }
   306 	);
   326 	);
       
   327 	//check if excerpt is more then maximum allowed
       
   328 	LimitExcerptToMaxLengthL(document);
   307 	iIndexDb->AddL(*document, this, aMessage);
   329 	iIndexDb->AddL(*document, this, aMessage);
   308 	
   330 	
   309 	CleanupStack::PopAndDestroy(document);
   331 	CleanupStack::PopAndDestroy(document);
   310 	CleanupStack::PopAndDestroy(serializedDocument);
   332 	CleanupStack::PopAndDestroy(serializedDocument);
   311 	}
   333 	}
       
   334 
       
   335 void CSearchServerSubSession::LimitExcerptToMaxLengthL(CSearchDocument* aSearchDocument)
       
   336     {
       
   337     //check if excerpt is more then maximum allowed
       
   338     if(aSearchDocument->Excerpt().Length() > MAX_EXCERPT_LENGTH)
       
   339         {
       
   340         OstTraceExt1( TRACE_NORMAL, CSEARCHSERVERSUBSESSION_LIMITEXCERPTTOMAXLENGTHL, "CSearchServerSubSession::LimitExcerptToMaxLengthL;docuid=%S", (aSearchDocument->Id()) );
       
   341         CPIXLOGSTRING2("CSearchServerSubSession::AddL docuid=%S", &(aSearchDocument->Id()));
       
   342         OstTrace1( TRACE_NORMAL, DUP1_CSEARCHSERVERSUBSESSION_LIMITEXCERPTTOMAXLENGTHL, "CSearchServerSubSession::LimitExcerptToMaxLengthL;Excerpt Length=%d", aSearchDocument->Excerpt().Length() );
       
   343         CPIXLOGSTRING2("CSearchServerSubSession::AddL Excerpt Length =%d", aSearchDocument->Excerpt().Length());
       
   344         const TDesC& excerpt = aSearchDocument->Excerpt();
       
   345         HBufC* bufExcerpt = HBufC::NewLC(MAX_EXCERPT_LENGTH);
       
   346         TPtr ptrExcerpt = bufExcerpt->Des();
       
   347         ptrExcerpt.Append(excerpt.Ptr(),MAX_EXCERPT_LENGTH - 1);
       
   348         ptrExcerpt.Append(KNullDesC); //Append NULL
       
   349         aSearchDocument->AddExcerptL(*bufExcerpt);
       
   350         CleanupStack::PopAndDestroy(bufExcerpt);
       
   351         }
       
   352     }
   312 
   353 
   313 void CSearchServerSubSession::AddCompleteL(const RMessage2& /*aMessage*/)
   354 void CSearchServerSubSession::AddCompleteL(const RMessage2& /*aMessage*/)
   314 	{
   355 	{
   315 	iIndexDb->AddCompleteL();	
   356 	iIndexDb->AddCompleteL();	
   316 	}
   357 	}
   339 	CleanupStack::PopAndDestroy(&stream);
   380 	CleanupStack::PopAndDestroy(&stream);
   340 	CleanupStack::PushL(document);
   381 	CleanupStack::PushL(document);
   341 	
   382 	
   342 	// Index the thing
   383 	// Index the thing
   343 	LOG_PLAYER_RECORD( CLogPlayerRecorder::LogUpdateL( reinterpret_cast<TUint>(this), *document ) );
   384 	LOG_PLAYER_RECORD( CLogPlayerRecorder::LogUpdateL( reinterpret_cast<TUint>(this), *document ) );
       
   385 	LimitExcerptToMaxLengthL(document);
   344 	iIndexDb->UpdateL(*document, this, aMessage);
   386 	iIndexDb->UpdateL(*document, this, aMessage);
   345 	
   387 	
   346 	CleanupStack::PopAndDestroy(document);
   388 	CleanupStack::PopAndDestroy(document);
   347 	CleanupStack::PopAndDestroy(serializedDocument);
   389 	CleanupStack::PopAndDestroy(serializedDocument);
   348 	}
   390 	}