mmappcomponents/harvester/metadataextractor/src/mpxmetadataextractor.cpp
branchRCL_3
changeset 56 63223d4fd956
parent 55 6c1dfe4da5dd
child 59 666f9a5a90a9
--- a/mmappcomponents/harvester/metadataextractor/src/mpxmetadataextractor.cpp	Tue Aug 31 15:41:40 2010 +0300
+++ b/mmappcomponents/harvester/metadataextractor/src/mpxmetadataextractor.cpp	Wed Sep 01 12:23:05 2010 +0100
@@ -12,7 +12,7 @@
 * Contributors:
 *
 * Description:  Extracts metadata from a file
-*  Version     : %version: da1mmcf#38.1.4.2.6.1.5.3.8 % << Don't touch! Updated by Synergy at check-out.
+*  Version     : %version: da1mmcf#38.1.4.2.6.1.15 % << Don't touch! Updated by Synergy at check-out.
 *
 */
 
@@ -52,7 +52,7 @@
 #ifdef RD_MPX_TNM_INTEGRATION
 _LIT( KImageFileType, "image/jpeg" );
 const TInt KMPXTimeoutTimer = 3000000; // 3 seconds
-const TInt KMPXMaxThumbnailRequest = 2;
+const TInt KMPXMaxThumbnailRequest = 2; 
 #endif //RD_MPX_TNM_INTEGRATION
 
 #ifdef ABSTRACTAUDIOALBUM_INCLUDED
@@ -186,10 +186,10 @@
     aNewProperty = NULL;
     iFileName = aFile;
     iMetadataOnly = aMetadataOnly;
-
+    
     // populate the task array
     AddTasksL();
-
+    
     // execute all tasks in the array
     while ( iArrayTasks.Count() )
         {
@@ -211,10 +211,10 @@
                 }
             break;
             }
-
+        
         iArrayTasks.Remove( 0 );
         }
-
+    
     aNewProperty = iMedia;
     iMedia = NULL;  // ownership transferred.
     CleanUp();
@@ -236,6 +236,9 @@
     // Album
     aMediaProp.SetTextValueL( KMPXMediaMusicAlbum,
                               KNullDesC );
+    // Year
+    aMediaProp.SetTObjectValueL<TInt64>( KMPXMediaMusicYear,
+                                         (TInt64) 0 );
     // Track
     aMediaProp.SetTextValueL( KMPXMediaMusicAlbumTrack,
                               KNullDesC );
@@ -251,10 +254,6 @@
     // URL
     aMediaProp.SetTextValueL( KMPXMediaMusicURL,
                               KNullDesC );
-    // AlbumArtist
-    aMediaProp.SetTextValueL( KMPXMediaMusicAlbumArtist,
-                              KNullDesC );
-    
     }
 
 // ---------------------------------------------------------------------------
@@ -268,20 +267,20 @@
     const TDesC& mimeType = iMedia->ValueText( KMPXMediaGeneralMimeType );
     HBufC8* mimeType8 = HBufC8::NewLC( mimeType.Length() );
     mimeType8->Des().Append( mimeType );
-
+    
     // Continue to extract metadata even if fail.
     MPX_TRAPD( metadataerror, iMetadataUtility->OpenFileL( iFile, *mimeType8 ) );
     CleanupStack::PopAndDestroy( mimeType8 );
-
+    
     // Get MetadataUtility Container
     const CMetaDataFieldContainer& metaCont = iMetadataUtility->MetaDataFieldsL();
 
     // Get DRM data
     // Need the protected flag from metadataUtility Container
     MPX_TRAPD( drmerror, SetDrmMediaPropertiesL( metaCont ) );
-    MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL, result=%d getting drm data",
+    MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL, result=%d getting drm data", 
             drmerror );
-
+        
     // Get metadata fields
     TInt count( metaCont.Count() );
     for( TInt i=0; i<count; ++i )
@@ -290,19 +289,19 @@
 
         HBufC* value = NULL;
         metaCont.FieldIdAt( i, fieldType );  // get the field type
-
+        
         // get the value, except for album art
         if ( fieldType != EMetaDataJpeg )
            {
             MPX_TRAPD( err, value = metaCont.At( i, fieldType ).AllocL() );
            if ( KErrNone != err )
                {
-               MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL - error = %i", err);
+               MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL - error = %i", err);           
                continue;
-               }
+               }     
            CleanupStack::PushL( value );
            }
-
+        
         switch( fieldType )
             {
             case EMetaDataSongTitle:
@@ -410,82 +409,70 @@
                                       *value );
                 break;
                 }
-            case EMetaDataDuration:
-                {
+            case EMetaDataDuration:     
+                {                  
                 const TDesC& mimeType = iMedia->ValueText( KMPXMediaGeneralMimeType );
-                MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL, mimeType = %S", &mimeType);
-
+                MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL, mimeType = %S", &mimeType);   
+                
                 // Verify if WMA, get the duration
                 if( mimeType.Compare(KWmaMimeType) == 0 || mimeType.Compare(KWmaCafMimeType) == 0 )
                     {
-                    MPX_DEBUG1("CMPXMetadataExtractor::SetMediaPropertiesL- WMA");
+                    MPX_DEBUG1("CMPXMetadataExtractor::SetMediaPropertiesL- WMA");                         
 
                     // Perform the duration conversion
                     TLex lexer( *value );
                     TInt32 duration ( 0 );
-                    lexer.Val( duration );   // [second]
+                    lexer.Val( duration );   // [second]      
                     duration *= 1000;        // [msec]
-
+                
                     iMedia->SetTObjectValueL<TInt32>( KMPXMediaGeneralDuration,
-                                                duration );
-
-                    MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL- duration = %i", duration);
+                                                duration );      
+                
+                    MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL- duration = %i", duration);  
                     }
                 break;
                 }
-            case EMetaDataSampleRate:
-                {
+            case EMetaDataSampleRate:     
+                {                  
                 const TDesC& mimeType = iMedia->ValueText( KMPXMediaGeneralMimeType );
-                MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL, mimeType = %S", &mimeType);
-
+                MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL, mimeType = %S", &mimeType);   
+                
                 // Verify if WMA, get the sample rate
                 if( mimeType.Compare(KWmaMimeType) == 0 || mimeType.Compare(KWmaCafMimeType) == 0 )
                     {
-                    MPX_DEBUG1("CMPXMetadataExtractor::SetMediaPropertiesL- WMA");
+                    MPX_DEBUG1("CMPXMetadataExtractor::SetMediaPropertiesL- WMA");                         
 
                     // Perform the sample rate conversion
                     TLex lexer( *value );
                     TInt32 sampleRate ( 0 );
-                    lexer.Val( sampleRate );
-
+                    lexer.Val( sampleRate );         
+                    
                     iMedia->SetTObjectValueL<TUint>( KMPXMediaAudioSamplerate,
                                                       sampleRate );
-
-                    MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL- sample rate = %i", sampleRate);
+                           
+                    MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL- sample rate = %i", sampleRate);  
                     }
                 break;
                 }
-            case EMetaDataBitRate:
-                {
+            case EMetaDataBitRate:     
+                {                  
                 const TDesC& mimeType = iMedia->ValueText( KMPXMediaGeneralMimeType );
-                MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL, mimeType = %S", &mimeType);
-
+                MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL, mimeType = %S", &mimeType);   
+                
                 // Verify if WMA, get the duration
                 if( mimeType.Compare(KWmaMimeType) == 0 || mimeType.Compare(KWmaCafMimeType) == 0 )
                     {
-                    MPX_DEBUG1("CMPXMetadataExtractor::SetMediaPropertiesL- WMA");
+                    MPX_DEBUG1("CMPXMetadataExtractor::SetMediaPropertiesL- WMA");                         
 
                     // Perform the duration conversion
                     TLex lexer( *value );
                     TInt32 bitRate ( 0 );
-                    lexer.Val( bitRate );
-
+                    lexer.Val( bitRate );   
+                
                     iMedia->SetTObjectValueL<TUint>( KMPXMediaAudioBitrate,
                                                      bitRate );
-
-                    MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL- duration = %i", bitRate);
-                    }
-                break;
-                }
-            case EMetaDataAlbumArtist:
-                {
-                TPtr valptr = value->Des();
-                valptr.Trim();
-                TInt vallen = value->Length();
-                if (vallen>0)
-                    {
-                    FindAndReplaceForbiddenChars(valptr, vallen);
-                    iMedia->SetTextValueL(KMPXMediaMusicAlbumArtist, *value);
+                
+                    MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL- duration = %i", bitRate);  
                     }
                 break;
                 }
@@ -506,7 +493,7 @@
             }
         if (fieldType != EMetaDataJpeg)
             {
-            CleanupStack::PopAndDestroy( value );
+            CleanupStack::PopAndDestroy( value );       
             }
         }
     }
@@ -526,25 +513,25 @@
     if( iFileOpenError == KErrNone )
         {
         const TDesC& mimeType = iMedia->ValueText( KMPXMediaGeneralMimeType );
-        MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL, mimeType = %S", &mimeType);
+        MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL, mimeType = %S", &mimeType);   
         iFile.Size( size );
         iMedia->SetTObjectValueL<TInt>( KMPXMediaGeneralSize, size );
-
+        
         // Verify if WMA, skip getting info from MMF
         if( mimeType.Compare(KWmaMimeType) == 0 || mimeType.Compare(KWmaCafMimeType) == 0 )
             {
             // No need to get MMF support
-            MPX_DEBUG1("CMPXMetadataExtractor::SetExtMediaPropertiesL, skip MMF ");
+            MPX_DEBUG1("CMPXMetadataExtractor::SetExtMediaPropertiesL, skip MMF ");   
             }
         else
             {
-            MPX_DEBUG1("CMPXMetadataExtractor::SetExtMediaPropertiesL, get MMF controller");
+            MPX_DEBUG1("CMPXMetadataExtractor::SetExtMediaPropertiesL, get MMF controller");   
             // Duration, bitrate, samplerate, etc
             //
             if( !iMetadataOnly )
             {
                 MPX_TRAPD(err2, iFileInfoUtil->OpenFileL(
-                          iFile,
+                          iFile, 
                           iMedia->ValueText(KMPXMediaGeneralMimeType)));
                 MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL, file info util error %i", err2);
                 if( KErrNone == err2 )
@@ -559,7 +546,7 @@
 
                     MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL -- duration %i", duration);
                     }
-
+                
                 iFileInfoUtil->Reset();
                 }
             }
@@ -595,22 +582,22 @@
 // CMPXMetadataExtractor::ThumbnailPreviewReady
 // Callback but not used here
 // ---------------------------------------------------------------------------
-void CMPXMetadataExtractor::ThumbnailPreviewReady(
+void CMPXMetadataExtractor::ThumbnailPreviewReady( 
         MThumbnailData& /*aThumbnail*/, TThumbnailRequestId /*aId*/ )
     {
     MPX_FUNC("CMPXMetadataExtractor::ThumbnailPreviewReady()");
     }
-
+        
 
 // ---------------------------------------------------------------------------
 // CMPXMetadataExtractor::ThumbnailReady
 // Callback but not used here
 // ---------------------------------------------------------------------------
-void CMPXMetadataExtractor::ThumbnailReady( TInt /*aError*/,
+void CMPXMetadataExtractor::ThumbnailReady( TInt /*aError*/, 
         MThumbnailData& /*aThumbnail*/, TThumbnailRequestId aId )
     {
     MPX_FUNC("CMPXMetadataExtractor::ThumbnailReady()");
-
+    
     // Remove thumbnail id from array.
     TInt index = iArrayTNRequestId.Find( aId );
     if ( index >= 0 )
@@ -635,8 +622,8 @@
 
     CMPXMetadataExtractor* ptr =
         static_cast<CMPXMetadataExtractor*>(aPtr);
-
-    // Timer expired before thumbnail callback occurred. Stop wait loop to unblock.
+        
+    // Timer expired before thumbnail callback occurred. Stop wait loop to unblock. 
     ptr->StopWaitLoop();
     return KErrNone;
     }
@@ -649,7 +636,7 @@
     MPX_FUNC("CMPXMetadataExtractor::StopWaitLoop()");
     // Cancel timer
     CancelTimeoutTimer();
-
+    
     // Stop wait loop to unblock.
     if ( iTNSyncWait->IsStarted() )
         {
@@ -659,12 +646,12 @@
     }
 
 // ----------------------------------------------------------------------------
-// Cancel timer.
+// Cancel timer. 
 // ----------------------------------------------------------------------------
 void CMPXMetadataExtractor::CancelTimeoutTimer()
     {
     MPX_FUNC("CMPXMetadataExtractor::CancelTimeoutTimer()");
-
+    
     // Cancel timer.
     if ( iTimer && iTimer->IsActive() )
         {
@@ -681,12 +668,12 @@
     MPX_FUNC("CMPXMetadataExtractor::ExtractAlbumArtL()");
     TInt err = KErrNone;
     iCancelled = EFalse;
-
+    
     if ( !aMedia->IsSupported(KMPXMediaGeneralUri) )
         {
         return KErrArgument;
         }
-
+    
     // Get full file name.
     const TDesC& path = aMedia->ValueText(KMPXMediaGeneralUri);
     MPX_DEBUG2("CMPXMetadataExtractor::ExtractAlbumArtL Filename:%S ", &path );
@@ -708,7 +695,7 @@
             HBufC8* value8 = ((HBufC8*)sampleData)->Des().AllocLC();   // make a local copy of sampleData
             source = CThumbnailObjectSource::NewLC(
                 value8, mimeType, path );    // give up ownership of value8
-
+            
             MPX_DEBUG1("CMPXMetadataExtractor::ExtractAlbumArtL source created from buffer");
             TThumbnailRequestId tnId = iTNManager->CreateThumbnails( *source );
             iArrayTNRequestId.Append( tnId );
@@ -719,7 +706,7 @@
             {
             source = CThumbnailObjectSource::NewLC(
                 path, KImageFileType  );
-
+            
             MPX_DEBUG1("CMPXMetadataExtractor::ExtractAlbumArtL source created from path");
             TThumbnailRequestId tnId = iTNManager->CreateThumbnails( *source );
             iArrayTNRequestId.Append( tnId );
@@ -734,7 +721,7 @@
     RArray<TMetaDataFieldId> wantedFields;
     CleanupClosePushL( wantedFields );
     wantedFields.Append(EMetaDataJpeg);
-
+    
     // Open file
     if ( aMedia->IsSupported(KMPXMediaGeneralMimeType) )
         {
@@ -750,7 +737,7 @@
         MPX_TRAP( err, iMetadataUtility->OpenFileL( path, wantedFields ) );
         }
     CleanupStack::PopAndDestroy( &wantedFields );
-
+    
     if ( !err )
         {
         //check if can send TN request, If thumbnail creation is ongoing, wait til it is done
@@ -769,28 +756,28 @@
 // ----------------------------------------------------------------------------
 // Add album art to media object.
 // ----------------------------------------------------------------------------
-void CMPXMetadataExtractor::AddMediaAlbumArtL( CMPXMedia& aMedia,
+void CMPXMetadataExtractor::AddMediaAlbumArtL( CMPXMedia& aMedia, 
                                                const TDesC& aFile )
     {
     MPX_FUNC("CMPXMetadataExtractor::AddMediaAlbumArtL()");
-
+    
     // get metadata container.
     const CMetaDataFieldContainer& metaCont = iMetadataUtility->MetaDataFieldsL();
     TPtrC8 data8 = metaCont.Field8( EMetaDataJpeg );
-
+   
     if ( data8.Length() )
         {
         MPX_DEBUG1("CMPXMetadataExtractor::GetMediaAlbumArtL(): Album art exist.");
 #ifdef RD_MPX_TNM_INTEGRATION
-        HBufC8* value8 = NULL;
+        HBufC8* value8 = NULL; 
         MPX_TRAPD( err, value8 = data8.AllocL() );
         if ( KErrNone != err )
             {
             MPX_DEBUG2("CMPXMetadataExtractor::GetMediaAlbumArtL - error jpeg = %i", err);
             return;
-            }
+            }              
         CleanupStack::PushL( value8 );
-
+    
         TBuf<256> mimeType;
         mimeType.Copy( KImageFileType );
         CThumbnailObjectSource* source = CThumbnailObjectSource::NewL(
@@ -799,9 +786,9 @@
         iArrayTNRequestId.Append( tnId ); // add thumbnail id to array
         CleanupStack::Pop( value8 );
         delete source;
-
+        
         aMedia.SetTextValueL( KMPXMediaMusicOriginalAlbumArtFileName, aFile );
-#endif // RD_MPX_TNM_INTEGRATION
+#endif // RD_MPX_TNM_INTEGRATION          
         aMedia.SetTextValueL( KMPXMediaMusicAlbumArtFileName, aFile );
         }
     }
@@ -939,23 +926,10 @@
         {
         TDataType dataType;
         TUid dummyUid(KNullUid);
-        // File handle based mime type recogniton required , because AppArc does 
-        // not have All Files capa required for files in private folders 
-        TDataRecognitionResult result;
-        RFs fs;
-		RFile rFile;
-        User::LeaveIfError(fs.Connect());
-		CleanupClosePushL(fs);
-        User::LeaveIfError(fs.ShareProtected());
-        User::LeaveIfError(rFile.Open(fs, iFileName, EFileShareReadersOrWriters));
-		CleanupClosePushL(rFile);
-        User::LeaveIfError(iAppArc.RecognizeData(rFile, result)); 
-        CleanupStack::PopAndDestroy(&rFile);
-        CleanupStack::PopAndDestroy(&fs);
-        dataType = result.iDataType;
+        iAppArc.AppForDocument(iFileName, dummyUid, dataType);
         iMedia->SetTextValueL( KMPXMediaGeneralMimeType,dataType.Des() );
         }
-
+        
     // Initially set default tags.
     SetDefaultL( *iMedia );
     }
@@ -1007,23 +981,23 @@
         MPX_DEBUG1("CMPXMetadataExtractor::CreateMediaAsyncL Request ongoing. Abort!" );
         User::Leave( KErrAbort );
         }
-
+    
     iCancelled = EFalse;
     iFileOpenError = KErrNone;
     iFileName = aFile;
     iObs = aObs;
     iMetadataOnly = aMetadataOnly;
-
+    
     // populate the task array
     AddTasksL();
-
+    
     // Start task timer to execute task
     if ( iArrayTasks.Count() )
         {
         if ( iTaskTimer->IsActive() )
             {
             iTaskTimer->Cancel();
-            }
+            }   
         iTaskTimer->Start( 0, 0, TCallBack(TaskTimerCallback, this ));
         }
     }
@@ -1035,7 +1009,7 @@
 TInt CMPXMetadataExtractor::OpenFile()
     {
     MPX_FUNC("CMPXMetadataExtractor::OpenFile()");
-
+    
     // Open the file
     iFile.Close();
     TInt error = iFile.Open( iFs, iFileName, EFileRead | EFileShareReadersOrWriters );
@@ -1051,7 +1025,7 @@
     {
     MPX_FUNC("CMPXMetadataExtractor::AddTasks()");
     iFileOpenError = OpenFile();
-
+    
     // Do not change the order of the task below.
     iArrayTasks.Reset();
     if ( iFileOpenError == KErrNone )
@@ -1092,7 +1066,7 @@
 void CMPXMetadataExtractor::HandleTaskTimerExpired()
     {
     MPX_FUNC("CMPXMetadataExtractor::HandleTaskTimerExpired()");
-
+    
     if ( iTaskTimer && iTaskTimer->IsActive() )
         {
         iTaskTimer->Cancel();
@@ -1109,13 +1083,13 @@
             }
         iArrayTasks.Reset();
         }
-
+    
     // Remove task at index 0.
     if ( iArrayTasks.Count() )
         {
         iArrayTasks.Remove( 0 );
         }
-
+    
     // check if we have any more task to run
     if ( iArrayTasks.Count() )
         {
@@ -1130,7 +1104,7 @@
             iObs->HandleCreateMediaComplete( iMedia, error );
             iMedia = NULL;  // ownership transferred.
             }
-
+        
         CleanUp();
         }
     }
@@ -1161,7 +1135,7 @@
     // Validate the objects to be used
     MPX_ASSERT(iMedia);
     MPX_ASSERT(iDrmMediaUtility);
-
+    
     // File Path
     TParsePtrC parse( iFileName );
     iMedia->SetTextValueL( KMPXMediaGeneralUri, iFileName );
@@ -1169,7 +1143,7 @@
     MPX_DEBUG2("CMPXMetadataExtractor::SetDrmMediaPropertiesL - Filename=%S", &iFileName);
 
     // get the protected flag from MetadataUtility Container
-    TPtrC ptr = aMetaCont.Field( EMetaDataProtected );
+    TPtrC ptr = aMetaCont.Field( EMetaDataProtected );  
     MPX_DEBUG2("CMPXMetadataExtractor::SetDrmMediaPropertiesL -- status=%S", &ptr);
     _LIT( KNonProtected, "0" );
     if ( ptr.Compare( KNonProtected ) == 0 )
@@ -1180,7 +1154,7 @@
         iMedia->SetTObjectValueL<TBool>( KMPXMediaDrmProtected, prot );
         iMedia->SetTObjectValueL<TUint16>( KMPXMediaMTPDrmStatus, (TUint16)prot );
         }
-    else
+    else  
         {  // DRM file
 
         // DRM Rights
@@ -1232,20 +1206,20 @@
 
         iMedia->SetTObjectValueL<TBool>( KMPXMediaDrmProtected, prot );
         iMedia->SetTObjectValueL<TUint16>( KMPXMediaMTPDrmStatus, (TUint16)prot );
-
+    
         iDrmMediaUtility->Close();
-
+    
         }  // DRM file
 
-
+    
     // verify the file open status
     if( iFileOpenError == KErrNotFound || iFileOpenError == KErrPathNotFound )
         {
         dbFlags |= KMPXMediaGeneralFlagsIsInvalid;
         }
-
+    
     // Finally set the db flag
     //
     iMedia->SetTObjectValueL( KMPXMediaGeneralFlags, dbFlags );
-
+   
     }