harvester/harvesterplugins/VideoPlugin/src/harvestervideoplugin.cpp
changeset 20 6dfc5f825351
parent 1 acef663c1218
child 21 50bf9db68373
--- a/harvester/harvesterplugins/VideoPlugin/src/harvestervideoplugin.cpp	Tue Feb 02 00:24:33 2010 +0200
+++ b/harvester/harvesterplugins/VideoPlugin/src/harvestervideoplugin.cpp	Fri Mar 19 09:38:01 2010 +0200
@@ -47,6 +47,8 @@
 _LIT( KMimeTypeAvi,        "video/avi");
 _LIT( KMimeTypeVideoMatroska, "video/x-matroska");
 _LIT( KMimeTypeAudioMatroska, "audio/x-matroska");
+_LIT( KMimeTypeWmv, "video/x-ms-wmv");
+_LIT( KMimeTypeDivx, "video/x-hx-divx");
 
 _LIT( KExtensionMp4,   "mp4" );
 _LIT( KExtensionMpg4,  "mpg4" );
@@ -62,6 +64,8 @@
 _LIT( KExtensionAvi,    "avi" );
 _LIT( KExtensionMkv,    "mkv" );
 _LIT( KExtensionRa,     "ra" );
+_LIT( KExtensionWmv,     "wmv" );
+_LIT( KExtensionDivx,     "divx" );
 
 _LIT(KVideo, "Video");
 _LIT(KAudio, "Audio");
@@ -91,6 +95,7 @@
 	iSizePropertyDef = &objectDef.GetPropertyDefL( Object::KSizeProperty );
 	iTimeOffsetPropertyDef = &objectDef.GetPropertyDefL( Object::KTimeOffsetProperty );
 	iItemTypePropertyDef = &objectDef.GetPropertyDefL( Object::KItemTypeProperty );
+	iTitlePropertyDef = &objectDef.GetPropertyDefL( Object::KTitleProperty );
 
 	CMdEObjectDef& mediaDef = nsDef.GetObjectDefL( MediaObject::KMediaObject );
 	iReleaseDatePropertyDef = &mediaDef.GetPropertyDefL( MediaObject::KReleaseDateProperty );
@@ -153,6 +158,7 @@
 CHarvesterVideoPlugin::~CHarvesterVideoPlugin()
 	{
 	delete iPropDefs;
+	iMimeTypeMappings.Close();
 
 	WRITELOG("CHarvesterVideoPlugin::CHarvesterVideoPlugin()");
 	}
@@ -239,12 +245,27 @@
                     KMimeTypeAvi(), KMimeTypeAvi() ) ), 
             cmp ) );
     
+    // Divx
+    User::LeaveIfError( iMimeTypeMappings.InsertInOrder( THarvestingHandling(
+            KExtensionDivx(), KMimeTypeDivx(), 
+            TVideoMetadataHandling( TVideoMetadataHandling::EHexilMetadataHandling, KVideo(),
+                    KMimeTypeDivx(), KMimeTypeDivx() ) ), 
+            cmp ) );
+    
     // Matroska
     User::LeaveIfError( iMimeTypeMappings.InsertInOrder( THarvestingHandling(
             KExtensionMkv(), KNullDesC(), 
             TVideoMetadataHandling( TVideoMetadataHandling::EHexilMetadataHandling, KNullDesC(),
                     KMimeTypeVideoMatroska(), KMimeTypeAudioMatroska() ) ), 
             cmp ) );
+    
+    // Wmv
+    User::LeaveIfError( iMimeTypeMappings.InsertInOrder( THarvestingHandling(
+            KExtensionWmv(), KMimeTypeWmv(), 
+            TVideoMetadataHandling( TVideoMetadataHandling::EHexilMetadataHandling, KVideo(),
+                    KMimeTypeWmv(), KMimeTypeWmv() ) ), 
+            cmp ) );
+    
     }
 
 
@@ -342,6 +363,25 @@
 	}
 
 // ---------------------------------------------------------------------------
+// CHarvesterVideoPlugin::GetMimeType (from CHarvesterPlugin)
+// ---------------------------------------------------------------------------
+//    
+void CHarvesterVideoPlugin::GetMimeType( const TDesC& aUri, TDes& aMimeType )
+    {
+    aMimeType.Zero();
+    
+    const THarvestingHandling* mapping = FindHandler( aUri );
+
+    // no matching extension found
+    if( !mapping )
+        {
+        return;
+        }
+
+    aMimeType = mapping->iMimeType;
+    }
+
+// ---------------------------------------------------------------------------
 // GatherDataL
 // ---------------------------------------------------------------------------
 //
@@ -461,6 +501,11 @@
         		helixMetadata->GetMetaDataAt( i, metaid, buf );
         		switch (metaid)
         			{
+                    case HXMetaDataKeys::EHXTitle:
+                        {
+                        aVHD.iTitle = buf->Alloc();
+                        break;
+                        }
         			case HXMetaDataKeys::EHXVideoBitRate:
 	        			{
         				WRITELOG( "CHarvesterVideoPlugin - found videobitrate" );
@@ -612,7 +657,10 @@
 	        	// Match MIME type for audio object with "audio" substring
 	        	else if( MdsUtils::Find( mime, KAudio() ) != KErrNotFound )
 	        		{
-	        		break;
+	        	    if( !aVHD.iVideoObject )
+	        	        {
+	        	        break;
+	        	        }
 	        		}
 	        	}
 	        }
@@ -622,6 +670,7 @@
         	aVHD.iMimeBuf = mime.Alloc();
         	}
         
+        helixMetadata->ResetL();
         CleanupStack::PopAndDestroy( helixMetadata );
         
         // don't destory mime type pointers just clean array
@@ -759,6 +808,19 @@
     	CMdeObjectWrapper::HandleObjectPropertyL(mdeObject, *iPropDefs->iSizePropertyDef, &aVHD.iFileSize, aIsAdd );
     	}
 
+    // Item Type
+    if( aVHD.iMimeBuf )
+        {
+        TBool isAdd( EFalse );
+        CMdEProperty* prop = NULL;
+        TInt index = mdeObject.Property( *iPropDefs->iItemTypePropertyDef, prop );
+        if( index < 0 )
+            {
+            isAdd = ETrue;
+            }
+            CMdeObjectWrapper::HandleObjectPropertyL(mdeObject, *iPropDefs->iItemTypePropertyDef, aVHD.iMimeBuf, isAdd );
+        }
+    
     // Release date
 	CMdeObjectWrapper::HandleObjectPropertyL(mdeObject, *iPropDefs->iReleaseDatePropertyDef, &localModifiedDate, aIsAdd );
 
@@ -769,12 +831,6 @@
 	TInt16 timeOffsetMinutes = timeOffsetSeconds.Int() / 60;
 	CMdeObjectWrapper::HandleObjectPropertyL(mdeObject, *iPropDefs->iTimeOffsetPropertyDef, &timeOffsetMinutes, aIsAdd );
 
-    // Item Type
-	if( aVHD.iMimeBuf )
-		{
-		CMdeObjectWrapper::HandleObjectPropertyL(mdeObject, *iPropDefs->iItemTypePropertyDef, aVHD.iMimeBuf, aIsAdd );
-		}
-
     // Duration
 	if( aVHD.iDuration != 0.0f )
 		{
@@ -862,6 +918,12 @@
         {
         CMdeObjectWrapper::HandleObjectPropertyL(mdeObject, *iPropDefs->iAudioFourCCDef, &aVHD.iCodec, aIsAdd );
         }
+    
+    // Title
+    if( aVHD.iTitle )
+        {
+        CMdeObjectWrapper::HandleObjectPropertyL(mdeObject, *iPropDefs->iTitlePropertyDef, aVHD.iTitle, EFalse );
+        }
     }
 
 void CHarvesterVideoPlugin::GetMp4Type( RFile64& aFile, TDes& aType )
@@ -996,6 +1058,7 @@
 		aType.Copy( KVideo );
 		}
     
+	helixMetadata->ResetL();
     CleanupStack::PopAndDestroy( helixMetadata );
 	}