harvester/harvesterplugins/VideoPlugin/src/harvestervideoplugin.cpp
branchRCL_3
changeset 8 6752808b2036
parent 1 acef663c1218
child 14 646a02f170b9
--- a/harvester/harvesterplugins/VideoPlugin/src/harvestervideoplugin.cpp	Tue Feb 02 00:24:33 2010 +0200
+++ b/harvester/harvesterplugins/VideoPlugin/src/harvestervideoplugin.cpp	Fri Feb 19 23:14:48 2010 +0200
@@ -25,6 +25,7 @@
 #include "harvestervideoplugin.h"
 #include "harvesterlog.h"
 #include "harvesterblacklist.h"
+#include "harvestercommon.h"
 #include "mdeobjectwrapper.h"
 
 #include <mdenamespacedef.h>
@@ -47,6 +48,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 +65,8 @@
 _LIT( KExtensionAvi,    "avi" );
 _LIT( KExtensionMkv,    "mkv" );
 _LIT( KExtensionRa,     "ra" );
+_LIT( KExtensionWmv,     "wmv" );
+_LIT( KExtensionDivx,     "divx" );
 
 _LIT(KVideo, "Video");
 _LIT(KAudio, "Audio");
@@ -91,6 +96,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 );
@@ -239,12 +245,28 @@
                     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 ) );
+    
+    SetPriority( KHarvesterPriorityHarvestingPlugin + 1 );
     }
 
 
@@ -342,6 +364,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 +502,11 @@
         		helixMetadata->GetMetaDataAt( i, metaid, buf );
         		switch (metaid)
         			{
+                    case HXMetaDataKeys::EHXTitle:
+                        {
+                        aVHD.iTitle = buf->Alloc();
+                        break;
+                        }
         			case HXMetaDataKeys::EHXVideoBitRate:
 	        			{
         				WRITELOG( "CHarvesterVideoPlugin - found videobitrate" );
@@ -759,6 +805,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 +828,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 +915,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 )