harvester/server/src/harvesterao.cpp
changeset 20 6dfc5f825351
parent 3 b73a2e62868f
child 21 50bf9db68373
--- a/harvester/server/src/harvesterao.cpp	Tue Feb 02 00:24:33 2010 +0200
+++ b/harvester/server/src/harvesterao.cpp	Fri Mar 19 09:38:01 2010 +0200
@@ -51,8 +51,18 @@
 _LIT( KTAGDaemonName, "ThumbAGDaemon" );
 _LIT( KTAGDaemonExe, "thumbagdaemon.exe" );
 
+_LIT(KVideo, "Video");
 _LIT(KInUse, "InUse");
 
+_LIT(KUndefinedMime, " ");
+
+_LIT( KExtensionMp4,   "mp4" );
+_LIT( KExtensionMpg4,  "mpg4" );
+_LIT( KExtensionMpeg4, "mpeg4" );
+_LIT( KExtension3gp,   "3gp" );
+_LIT( KExtension3gpp,  "3gpp" );
+_LIT( KExtension3g2,   "3g2" );
+
 CHarvesterAoPropertyDefs::CHarvesterAoPropertyDefs() : CBase()
 	{
 	}
@@ -67,6 +77,8 @@
 	iLastModifiedDatePropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KLastModifiedDateProperty );
 	iSizePropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KSizeProperty );
 	iOriginPropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KOriginProperty );
+	iItemTypePropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KItemTypeProperty );
+	iTitlePropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KTitleProperty );
 	
 	CMdEObjectDef& mediaDef = nsDef.GetObjectDefL( MdeConstants::MediaObject::KMediaObject );
 	iPreinstalledPropertyDef = &mediaDef.GetPropertyDefL( MdeConstants::MediaObject::KPreinstalledProperty );
@@ -113,7 +125,7 @@
 // CHarvesterAO
 // ---------------------------------------------------------------------------
 //
-CHarvesterAO::CHarvesterAO() : CActive( KHarvesterCustomImportantPriority)
+CHarvesterAO::CHarvesterAO() : CActive( KHarvesterCustomImportantPriority )
     {
     WRITELOG( "CHarvesterAO::CHarvesterAO() - begin" );
     
@@ -186,7 +198,8 @@
     
     iContainerPHArray.ResetAndDestroy();
     iContainerPHArray.Close();
-	
+    
+	delete iHarvesterOomAO;
     delete iRestoreWatcher;
 	delete iOnDemandAO;
 	delete iMdEHarvesterSession;
@@ -197,6 +210,7 @@
 	delete iUnmountHandlerAO;
 	
 	delete iPropDefs;
+	delete iCameraExtensionArray;
 	
 	RMediaIdUtil::ReleaseInstance();
     
@@ -250,6 +264,14 @@
     
     iHarvesterPluginFactory = CHarvesterPluginFactory::NewL();
     iHarvesterPluginFactory->SetBlacklist( *iBlacklist );
+    
+    iCameraExtensionArray = new ( ELeave ) CDesCArraySeg( 6 );
+    iCameraExtensionArray->InsertIsqL( KExtensionMp4 );
+    iCameraExtensionArray->InsertIsqL( KExtensionMpg4 );
+    iCameraExtensionArray->InsertIsqL( KExtensionMpeg4 );
+    iCameraExtensionArray->InsertIsqL( KExtension3gp );
+    iCameraExtensionArray->InsertIsqL( KExtension3gpp );
+    iCameraExtensionArray->InsertIsqL( KExtension3g2 );
 	
     WRITELOG( "CHarvesterAO::ConstructL() - end" );
     }
@@ -704,8 +726,12 @@
 			continue;
 			}
 		TBuf<KObjectDefStrSize> objDefStr;
-		iHarvesterPluginFactory->GetObjectDefL( *hd, objDefStr );
-	    
+		
+		if( !CheckForCameraItem( hd, objDefStr ) )
+		    {
+		    iHarvesterPluginFactory->GetObjectDefL( *hd, objDefStr );
+		    }
+		
 		if( objDefStr.Length() == 0 ||
 		    ( objDefStr == KInUse ) )
 			{
@@ -788,7 +814,7 @@
 	    
 	    if( !iPropDefs )
 	    	{
-	    	iPropDefs = CHarvesterAoPropertyDefs::NewL( mdeObjectDef );
+	    	iPropDefs = CHarvesterAoPropertyDefs::NewL( defNS.GetObjectDefL( MdeConstants::Object::KBaseObject ) );
 	    	}
 
 	    // set file size
@@ -803,7 +829,30 @@
 	    
     	// set origin
 		mdeObject->AddUint8PropertyL( *iPropDefs->iOriginPropertyDef, hd->Origin() );
-    	
+
+        TBuf<KMaxDataTypeLength> mimeType;
+        iHarvesterPluginFactory->GetMimeType( hd->Uri(), mimeType );
+        if( mimeType.Length() > 0 )
+            {
+            mdeObject->AddTextPropertyL( *iPropDefs->iItemTypePropertyDef, mimeType );
+            }
+        else
+            {
+            mdeObject->AddTextPropertyL( *iPropDefs->iItemTypePropertyDef, KUndefinedMime );
+            }
+		
+	    TPtrC name;
+	    TBool nameFound = MdsUtils::GetName( hd->Uri(), name );
+
+	    if ( nameFound )
+	        {
+	        mdeObject->AddTextPropertyL( *iPropDefs->iTitlePropertyDef, name );
+	        }
+	    else
+	        {
+	        mdeObject->AddTextPropertyL( *iPropDefs->iTitlePropertyDef, KNullDesC );
+	        }
+	    
     	CPlaceholderData* ph = NULL;
     	if( hd->TakeSnapshot() )
     	    {
@@ -1119,7 +1168,6 @@
             
             delete aHD;
 			aHD = NULL;
-			return;
             }
         else
             {
@@ -1160,14 +1208,14 @@
         	{
             WRITELOG( "CHarvesterAO::HandleSessionOpened() - error creating mde harvester session" );
         	}
-        
-        TRAPD( ohTrap, iMdeObjectHandler = CMdeObjectHandler::NewL( *iMdESession ) );
-        if ( ohTrap != KErrNone )
+
+#ifdef _DEBUG        
+        TRAP( errorTrap, iMdeObjectHandler = CMdeObjectHandler::NewL( *iMdESession ) );
+        if ( errorTrap != KErrNone )
                 {
                 WRITELOG( "CHarvesterAO::HandleSessionOpened() - ObjectHandler creation failed" );
                 }
         
-#ifdef _DEBUG
         TRAP( errorTrap, PreallocateNamespaceL( aSession.GetDefaultNamespaceDefL() ) );
         if ( errorTrap != KErrNone )
             {
@@ -1187,12 +1235,12 @@
             WRITELOG( "CHarvesterAO::HandleSessionOpened() - couldn't start composer plugins" );
             }
 #else
-        // The idea here is that all of these three methods needs to be called,
-        // even if some leave, thus the three TRAPs
+        // The idea here is that all of these  methods needs to be called,
+        // even if some leave, thus the several TRAPs
+        TRAP_IGNORE( iMdeObjectHandler = CMdeObjectHandler::NewL( *iMdESession ) );
         TRAP_IGNORE( PreallocateNamespaceL( aSession.GetDefaultNamespaceDefL() ) );
         TRAP_IGNORE( LoadMonitorPluginsL() );
-        TRAP_IGNORE( StartComposersL() );
-        
+        TRAP_IGNORE( StartComposersL() );        
 #endif
 
         if ( iContextEngineInitialized )
@@ -1220,6 +1268,7 @@
     	
         // Initializing pause indicator
         iServerPaused = EFalse;
+		
 #ifdef _DEBUG
         WRITELOG( "HarvesterThread::HandleSessionOpened() - Succeeded!" );
         
@@ -1386,7 +1435,6 @@
             // no more items to harvest
             else
                 {
-                
                 // if container files to harvest, handle those
                 if( iContainerPHArray.Count() > 0 )
                 	{
@@ -1394,12 +1442,12 @@
                 	break;
                 	}
                 
-				if(iReadyPHArray.Count() > 0)
+                const TInt arrayCount( iReadyPHArray.Count() );
+				if( arrayCount > 0 )
             		{
 #ifdef _DEBUG
-            		WRITELOG1("CHarvesterAO::RunL - items in ready pharray: %d", iReadyPHArray.Count() );
+            		WRITELOG1("CHarvesterAO::RunL - items in ready pharray: %d", arrayCount );
 #endif   		
-            		const TInt arrayCount( iReadyPHArray.Count() );
             		TInt endIndex( KPlaceholderQueueSize );
             		if( arrayCount < KPlaceholderQueueSize )
             		    {
@@ -1721,7 +1769,7 @@
     
     CHarvesterData* hd = NULL;
     TRAP( err, hd = CHarvesterData::NewL( uri ) );
-    if ( err != KErrNone )
+    if ( err != KErrNone || !hd )
         {
         WRITELOG( "CHarvesterAO::HarvestFile - creating harvUri failed" );
         albumIds.Close();
@@ -1752,7 +1800,7 @@
         WRITELOG( "CHarvesterAO::HarvestFile - creating clientData failed" );
         }
 
-    if( iQueue && hd )
+    if( iQueue )
         {
         iQueue->Append( hd );
         
@@ -1764,6 +1812,7 @@
         }
     else
         {
+        delete hd;
         err = KErrUnknown;
         }
     
@@ -1897,7 +1946,7 @@
     
     CHarvesterData* hd = NULL;
     TRAP( err, hd = CHarvesterData::NewL( uri ) );
-    if ( err != KErrNone )
+    if ( err != KErrNone || !hd )
         {
         WRITELOG( "CHarvesterAO::HarvestFileWithUID - creating harvUri failed" );
         albumIds.Close();
@@ -1928,7 +1977,7 @@
         WRITELOG( "CHarvesterAO::HarvestFileWithUID - creating clientData failed" );
         }
 
-    if( iQueue && hd )
+    if( iQueue )
     	{
     	iQueue->Append( hd );
 
@@ -1940,6 +1989,7 @@
     	}
     else
         {
+        delete hd;
         err = KErrUnknown;
         }
 
@@ -2158,13 +2208,21 @@
     HarvestCompleted( aHD->ClientId(), aHD->Uri(), aHD->ErrorCode() );
 
     const TInt errorCode = aHD->ErrorCode();
-    if( errorCode != KErrNone )
+    if( errorCode != KErrNone && errorCode != KErrCompletion )
     	{
         WRITELOG1( "CHarvesterAO::ContextSnapshotStatus() - error occurred: %d", errorCode );    	
     	}
     else
     	{
-        WRITELOG( "CHarvesterAO::ContextSnapshotStatus() - successfully completed" );
+        if( errorCode == KErrCompletion )
+            {
+            WRITELOG( "CHarvesterAO::ContextSnapshotStatus() - snapshot could not be completed" );
+            WRITELOG( "CHarvesterAO::ContextSnapshotStatus() - processing non-context data anyway" );   
+            }
+        else
+            {
+            WRITELOG( "CHarvesterAO::ContextSnapshotStatus() - successfully completed" );
+            }
         if( aHD->Origin() == MdeConstants::Object::ECamera )
         	{
             aHD->MdeObject().SetPlaceholder( EFalse );
@@ -2252,7 +2310,11 @@
 	{
 	// check if partial restore was done before last boot
 	TBool partialRestore = iRestoreWatcher->Register();
-		
+	
+#ifdef __WINSCW__
+	partialRestore = ETrue;
+#endif
+	
 	if ( !partialRestore )
 		{
 		return;
@@ -2593,3 +2655,22 @@
 	TRAP_IGNORE( ResumeHarvesterL() );
 	}
 
+TBool CHarvesterAO::CheckForCameraItem( CHarvesterData* aHd, TDes& aObjectDef )
+    {
+    if( aHd->Origin() == MdeConstants::Object::ECamera )
+        {
+        TPtrC ext;
+        if( !MdsUtils::GetExt( aHd->Uri(), ext ) )
+            {
+            return EFalse;
+            }
+        TInt pos( 0 );
+        if( iCameraExtensionArray->FindIsq( ext, pos ) == 0 ) // video extension matched
+            {
+            aObjectDef.Copy( KVideo );
+            return ETrue;
+            }
+        }
+    return EFalse;
+    }
+