mmappcomponents/harvester/metadataextractor/src/mpxmetadataextractor.cpp
branchRCL_3
changeset 28 f56ec6ce2732
parent 23 4740b34b83ce
child 30 6f9f6e99a23e
equal deleted inserted replaced
23:4740b34b83ce 28:f56ec6ce2732
    10 * Nokia Corporation - initial contribution.
    10 * Nokia Corporation - initial contribution.
    11 *
    11 *
    12 * Contributors:
    12 * Contributors:
    13 *
    13 *
    14 * Description:  Extracts metadata from a file
    14 * Description:  Extracts metadata from a file
    15 *  Version     : %version: da1mmcf#38.1.4.2.6.1.10 % << Don't touch! Updated by Synergy at check-out.
    15 *  Version     : %version: da1mmcf#38.1.4.2.6.1.12 % << Don't touch! Updated by Synergy at check-out.
    16 *
    16 *
    17 */
    17 */
    18 
    18 
    19 #include <e32base.h>
    19 #include <e32base.h>
    20 #include <badesca.h>
    20 #include <badesca.h>
   188     
   188     
   189     // execute all tasks in the array
   189     // execute all tasks in the array
   190     while ( iArrayTasks.Count() )
   190     while ( iArrayTasks.Count() )
   191         {
   191         {
   192         // execute task at index 0
   192         // execute task at index 0
   193         TRAPD( error, ExecuteTaskL() );
   193         MPX_TRAPD( error, ExecuteTaskL() );
   194         if ( error || iCancelled )
   194         if ( error || iCancelled )
   195             {
   195             {
   196             // cleanup
   196             // cleanup
   197             if ( iMedia != NULL )
   197             if ( iMedia != NULL )
   198                 {
   198                 {
   262     const TDesC& mimeType = iMedia->ValueText( KMPXMediaGeneralMimeType );
   262     const TDesC& mimeType = iMedia->ValueText( KMPXMediaGeneralMimeType );
   263     HBufC8* mimeType8 = HBufC8::NewLC( mimeType.Length() );
   263     HBufC8* mimeType8 = HBufC8::NewLC( mimeType.Length() );
   264     mimeType8->Des().Append( mimeType );
   264     mimeType8->Des().Append( mimeType );
   265     
   265     
   266     // Continue to extract metadata even if fail.
   266     // Continue to extract metadata even if fail.
   267     TRAPD( metadataerror, iMetadataUtility->OpenFileL( iFile, *mimeType8 ) );
   267     MPX_TRAPD( metadataerror, iMetadataUtility->OpenFileL( iFile, *mimeType8 ) );
   268     MPX_DEBUG2("CMPXMetadataExtractor::CreateMediaL, error %d parsing metadata", 
       
   269         metadataerror );
       
   270     CleanupStack::PopAndDestroy( mimeType8 );
   268     CleanupStack::PopAndDestroy( mimeType8 );
   271     
   269     
       
   270     // Get MetadataUtility Container
   272     const CMetaDataFieldContainer& metaCont = iMetadataUtility->MetaDataFieldsL();
   271     const CMetaDataFieldContainer& metaCont = iMetadataUtility->MetaDataFieldsL();
       
   272 
       
   273     // Get DRM data
       
   274     // Need the protected flag from metadataUtility Container
       
   275     MPX_TRAPD( drmerror, SetDrmMediaPropertiesL( metaCont ) );
       
   276     MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL, result=%d getting drm data", 
       
   277             drmerror );
       
   278         
       
   279     // Get metadata fields
   273     TInt count( metaCont.Count() );
   280     TInt count( metaCont.Count() );
   274     for( TInt i=0; i<count; ++i )
   281     for( TInt i=0; i<count; ++i )
   275         {
   282         {
   276         TMetaDataFieldId fieldType;
   283         TMetaDataFieldId fieldType;
   277 
   284 
   279         metaCont.FieldIdAt( i, fieldType );  // get the field type
   286         metaCont.FieldIdAt( i, fieldType );  // get the field type
   280         
   287         
   281         // get the value, except for album art
   288         // get the value, except for album art
   282         if ( fieldType != EMetaDataJpeg )
   289         if ( fieldType != EMetaDataJpeg )
   283            {
   290            {
   284            TRAPD( err, value = metaCont.At( i, fieldType ).AllocL() );
   291             MPX_TRAPD( err, value = metaCont.At( i, fieldType ).AllocL() );
   285            if ( KErrNone != err )
   292            if ( KErrNone != err )
   286                {
   293                {
   287                MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL - error = %i", err);           
   294                MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL - error = %i", err);           
   288                continue;
   295                continue;
   289                }     
   296                }     
   398                 break;
   405                 break;
   399                 }
   406                 }
   400             case EMetaDataDuration:     
   407             case EMetaDataDuration:     
   401                 {                  
   408                 {                  
   402                 const TDesC& mimeType = iMedia->ValueText( KMPXMediaGeneralMimeType );
   409                 const TDesC& mimeType = iMedia->ValueText( KMPXMediaGeneralMimeType );
   403                 MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL, mimeType = %S", &mimeType);   
   410                 MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL, mimeType = %S", &mimeType);   
   404                 
   411                 
   405                 // Verify if WMA, get the duration
   412                 // Verify if WMA, get the duration
   406                 if( mimeType.Compare(KWmaMimeType) == 0 || mimeType.Compare(KWmaCafMimeType) == 0 )
   413                 if( mimeType.Compare(KWmaMimeType) == 0 || mimeType.Compare(KWmaCafMimeType) == 0 )
   407                     {
   414                     {
   408                     MPX_DEBUG1("CMPXMetadataExtractor::SetMediaPropertiesL- WMA");                         
   415                     MPX_DEBUG1("CMPXMetadataExtractor::SetMediaPropertiesL- WMA");                         
   448 //
   455 //
   449 void CMPXMetadataExtractor::SetExtMediaPropertiesL()
   456 void CMPXMetadataExtractor::SetExtMediaPropertiesL()
   450     {
   457     {
   451     MPX_FUNC("CMPXMetadataExtractor::SetExtMediaPropertiesL()");
   458     MPX_FUNC("CMPXMetadataExtractor::SetExtMediaPropertiesL()");
   452 
   459 
   453     // DB Flags to set
       
   454     //
       
   455     TUint dbFlags(KMPXMediaGeneralFlagsSetOrUnsetBit);
       
   456 
       
   457     // File Path
       
   458     //
       
   459     TParsePtrC parse( iFileName );
       
   460     iMedia->SetTextValueL( KMPXMediaGeneralUri, iFileName );
       
   461     iMedia->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
       
   462 
       
   463     // DRM Rights
       
   464     //
       
   465     CMPXMedia* drm = NULL;
       
   466     TRAPD( drmError, iDrmMediaUtility->InitL( iFileName );
       
   467            drm = CMPXMedia::NewL( *iDrmMediaUtility->GetMediaL( KMPXMediaDrmProtected.iAttributeId |
       
   468                                                                 KMPXMediaDrmRightsStatus.iAttributeId ) );
       
   469          );
       
   470 
       
   471     TBool prot(EFalse);
       
   472     if( drm )
       
   473         {
       
   474         CleanupStack::PushL( drm );
       
   475         MPX_DEBUG1("CMPXMetadataExtractor::SetExtMediaPropertiesL -- is a drm file");
       
   476         if( drm->IsSupported( KMPXMediaDrmProtected ) )
       
   477             {
       
   478             prot = drm->ValueTObjectL<TBool>( KMPXMediaDrmProtected );
       
   479             MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL protected %i", prot);
       
   480             }
       
   481 
       
   482         TMPXMediaDrmRightsStatus status(EMPXDrmRightsFull);
       
   483         if( drm->IsSupported( KMPXMediaDrmRightsStatus ) )
       
   484             {
       
   485             status = drm->ValueTObjectL<TMPXMediaDrmRightsStatus>(KMPXMediaDrmRightsStatus);
       
   486             iMedia->SetTObjectValueL<TInt>(KMPXMediaDrmRightsStatus, status );
       
   487             MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL -- status %i", status);
       
   488             }
       
   489 
       
   490         // Set DB flags
       
   491         dbFlags |= KMPXMediaGeneralFlagsIsDrmProtected;
       
   492         if( status != EMPXDrmRightsFull && status != EMPXDrmRightsRestricted && status != EMPXDrmRightsPreview )
       
   493             {
       
   494             dbFlags |= KMPXMediaGeneralFlagsIsDrmLicenceInvalid;
       
   495             }
       
   496         CleanupStack::PopAndDestroy( drm );
       
   497         }
       
   498 
       
   499     // Trapped PV DRM error. If -46, we know the file has no rights
       
   500     //
       
   501     if( drmError == KErrPermissionDenied )
       
   502         {
       
   503         dbFlags |= KMPXMediaGeneralFlagsIsDrmLicenceInvalid;
       
   504         }
       
   505     else
       
   506         {
       
   507         User::LeaveIfError( drmError );
       
   508         }
       
   509 
       
   510     iMedia->SetTObjectValueL<TBool>( KMPXMediaDrmProtected, prot );
       
   511     iMedia->SetTObjectValueL<TUint16>( KMPXMediaMTPDrmStatus, (TUint16)prot );
       
   512     
       
   513     iDrmMediaUtility->Close();
       
   514     
       
   515     //
   460     //
   516     // File Size --- The following needs MMF support
   461     // File Size --- The following needs MMF support
   517     //
   462     //
   518     TInt size( 0 );
   463     TInt size( 0 );
   519     if( iFileOpenError == KErrNone )
   464     if( iFileOpenError == KErrNone )
   520         {
   465         {
   521         const TDesC& mimeType = iMedia->ValueText( KMPXMediaGeneralMimeType );
   466         const TDesC& mimeType = iMedia->ValueText( KMPXMediaGeneralMimeType );
   522         MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL, mimeType = %S", &mimeType);   
   467         MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL, mimeType = %S", &mimeType);   
       
   468         iFile.Size( size );
       
   469         iMedia->SetTObjectValueL<TInt>( KMPXMediaGeneralSize, size );
   523         
   470         
   524         // Verify if WMA, skip getting info from MMF
   471         // Verify if WMA, skip getting info from MMF
   525         if( mimeType.Compare(KWmaMimeType) == 0 || mimeType.Compare(KWmaCafMimeType) == 0 )
   472         if( mimeType.Compare(KWmaMimeType) == 0 || mimeType.Compare(KWmaCafMimeType) == 0 )
   526             {
   473             {
   527             // No need to get MMF support
   474             // No need to get MMF support
   528             MPX_DEBUG1("CMPXMetadataExtractor::SetExtMediaPropertiesL, skip MMF ");   
   475             MPX_DEBUG1("CMPXMetadataExtractor::SetExtMediaPropertiesL, skip MMF ");   
   529             }
   476             }
   530         else
   477         else
   531             {
   478             {
   532             MPX_DEBUG1("CMPXMetadataExtractor::SetExtMediaPropertiesL, get MMF controller");   
   479             MPX_DEBUG1("CMPXMetadataExtractor::SetExtMediaPropertiesL, get MMF controller");   
   533             iFile.Size( size );
       
   534             iMedia->SetTObjectValueL<TInt>( KMPXMediaGeneralSize, size );
       
   535 
       
   536             // Duration, bitrate, samplerate, etc
   480             // Duration, bitrate, samplerate, etc
   537             //
   481             //
   538             if( !iMetadataOnly )
   482             if( !iMetadataOnly )
   539             {
   483             {
   540                 TRAPD(err2, iFileInfoUtil->OpenFileL(
   484                 MPX_TRAPD(err2, iFileInfoUtil->OpenFileL(
   541                           iFile, 
   485                           iFile, 
   542                           iMedia->ValueText(KMPXMediaGeneralMimeType)));
   486                           iMedia->ValueText(KMPXMediaGeneralMimeType)));
   543                 MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL, file info util error %i", err2);
   487                 MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL, file info util error %i", err2);
   544                 if( KErrNone == err2 )
   488                 if( KErrNone == err2 )
   545                     {
   489                     {
   556                 
   500                 
   557                 iFileInfoUtil->Reset();
   501                 iFileInfoUtil->Reset();
   558                 }
   502                 }
   559             }
   503             }
   560         }
   504         }
   561     else if( iFileOpenError == KErrNotFound || iFileOpenError == KErrPathNotFound )
       
   562         {
       
   563         dbFlags |= KMPXMediaGeneralFlagsIsInvalid;
       
   564         }
       
   565     // Finally set the db flag
       
   566     //
       
   567     iMedia->SetTObjectValueL( KMPXMediaGeneralFlags,
       
   568                             dbFlags );
       
   569     }
   505     }
   570 
   506 
   571 // ---------------------------------------------------------------------------
   507 // ---------------------------------------------------------------------------
   572 // Check to see if this file is a supported container
   508 // Check to see if this file is a supported container
   573 // ---------------------------------------------------------------------------
   509 // ---------------------------------------------------------------------------
   695 #ifdef ABSTRACTAUDIOALBUM_INCLUDED
   631 #ifdef ABSTRACTAUDIOALBUM_INCLUDED
   696     TParsePtrC parse( path );
   632     TParsePtrC parse( path );
   697     TPtrC ext( parse.Ext() );
   633     TPtrC ext( parse.Ext() );
   698     if (ext.CompareF(KNonEmbeddedArtExt)== 0)
   634     if (ext.CompareF(KNonEmbeddedArtExt)== 0)
   699         {
   635         {
   700 		#ifdef RD_MPX_TNM_INTEGRATION
   636 #ifdef RD_MPX_TNM_INTEGRATION
       
   637 
   701         //check if can send TN request, If thumbnail creation is ongoing, wait til it is done
   638         //check if can send TN request, If thumbnail creation is ongoing, wait til it is done
   702         CheckBeforeSendRequest();
   639         CheckBeforeSendRequest();
   703         CThumbnailObjectSource* source = CThumbnailObjectSource::NewLC(
   640 
   704            path, KImageFileType  );
   641         CThumbnailObjectSource* source( NULL );
   705         TThumbnailRequestId tnId = iTNManager->CreateThumbnails( *source );
   642         if (aMedia->IsSupported(KMPXMediaMTPSampleData))
   706         iArrayTNRequestId.Append( tnId );
   643             {
   707         CleanupStack::PopAndDestroy( source );
   644             TBuf<20> mimeType(KImageFileType);
   708         #endif // RD_MPX_TNM_INTEGRATION
   645             TInt sampleData = aMedia->ValueTObjectL<TInt>(KMPXMediaMTPSampleData);
       
   646             HBufC8* value8 = ((HBufC8*)sampleData)->Des().AllocLC();   // make a local copy of sampleData
       
   647             source = CThumbnailObjectSource::NewLC(
       
   648                 value8, mimeType, path );    // give up ownership of value8
       
   649             
       
   650             MPX_DEBUG1("CMPXMetadataExtractor::ExtractAlbumArtL source created from buffer");
       
   651             TThumbnailRequestId tnId = iTNManager->CreateThumbnails( *source );
       
   652             iArrayTNRequestId.Append( tnId );
       
   653             CleanupStack::PopAndDestroy( source );
       
   654             CleanupStack::Pop( value8 );
       
   655             }
       
   656         else
       
   657             {
       
   658             source = CThumbnailObjectSource::NewLC(
       
   659                 path, KImageFileType  );
       
   660             
       
   661             MPX_DEBUG1("CMPXMetadataExtractor::ExtractAlbumArtL source created from path");
       
   662             TThumbnailRequestId tnId = iTNManager->CreateThumbnails( *source );
       
   663             iArrayTNRequestId.Append( tnId );
       
   664             CleanupStack::PopAndDestroy( source );
       
   665             }
       
   666 #endif // RD_MPX_TNM_INTEGRATION
   709         }
   667         }
   710     else
   668     else
   711         {
   669         {
   712 #endif // ABSTRACTAUDIOALBUM_INCLUDED
   670 #endif // ABSTRACTAUDIOALBUM_INCLUDED
   713     // create wanted fields array
   671     // create wanted fields array
   720         {
   678         {
   721         const TDesC& mimeType = aMedia->ValueText( KMPXMediaGeneralMimeType );
   679         const TDesC& mimeType = aMedia->ValueText( KMPXMediaGeneralMimeType );
   722         MPX_DEBUG2("CMPXMetadataExtractor::ExtractAlbumArtL MimeType:%S ", &mimeType );
   680         MPX_DEBUG2("CMPXMetadataExtractor::ExtractAlbumArtL MimeType:%S ", &mimeType );
   723         HBufC8* mimeType8 = HBufC8::NewLC( mimeType.Length() );
   681         HBufC8* mimeType8 = HBufC8::NewLC( mimeType.Length() );
   724         mimeType8->Des().Append( mimeType );
   682         mimeType8->Des().Append( mimeType );
   725         TRAP( err, iMetadataUtility->OpenFileL( path, wantedFields, *mimeType8 ) );
   683         MPX_TRAP( err, iMetadataUtility->OpenFileL( path, wantedFields, *mimeType8 ) );
   726         CleanupStack::PopAndDestroy( mimeType8 );
   684         CleanupStack::PopAndDestroy( mimeType8 );
   727         }
   685         }
   728     else
   686     else
   729         {
   687         {
   730         TRAP( err, iMetadataUtility->OpenFileL( path, wantedFields ) );
   688         MPX_TRAP( err, iMetadataUtility->OpenFileL( path, wantedFields ) );
   731         }
   689         }
   732     CleanupStack::PopAndDestroy( &wantedFields );
   690     CleanupStack::PopAndDestroy( &wantedFields );
   733     
   691     
   734     if ( !err )
   692     if ( !err )
   735         {
   693         {
   736         //check if can send TN request, If thumbnail creation is ongoing, wait til it is done
   694         //check if can send TN request, If thumbnail creation is ongoing, wait til it is done
   737         CheckBeforeSendRequest();
   695         CheckBeforeSendRequest();
   738         TRAP( err, AddMediaAlbumArtL( *aMedia, path ));
   696         MPX_TRAP( err, AddMediaAlbumArtL( *aMedia, path ));
   739         }
   697         }
   740 
   698 
   741     // Reset the utility
   699     // Reset the utility
   742     iMetadataUtility->ResetL();
   700     iMetadataUtility->ResetL();
   743 #ifdef ABSTRACTAUDIOALBUM_INCLUDED
   701 #ifdef ABSTRACTAUDIOALBUM_INCLUDED
   761     if ( data8.Length() )
   719     if ( data8.Length() )
   762         {
   720         {
   763         MPX_DEBUG1("CMPXMetadataExtractor::GetMediaAlbumArtL(): Album art exist.");
   721         MPX_DEBUG1("CMPXMetadataExtractor::GetMediaAlbumArtL(): Album art exist.");
   764 #ifdef RD_MPX_TNM_INTEGRATION
   722 #ifdef RD_MPX_TNM_INTEGRATION
   765         HBufC8* value8 = NULL; 
   723         HBufC8* value8 = NULL; 
   766         TRAPD( err, value8 = data8.AllocL() );
   724         MPX_TRAPD( err, value8 = data8.AllocL() );
   767         if ( KErrNone != err )
   725         if ( KErrNone != err )
   768             {
   726             {
   769             MPX_DEBUG2("CMPXMetadataExtractor::GetMediaAlbumArtL - error jpeg = %i", err);
   727             MPX_DEBUG2("CMPXMetadataExtractor::GetMediaAlbumArtL - error jpeg = %i", err);
   770             return;
   728             return;
   771             }              
   729             }              
  1017     
   975     
  1018     // Do not change the order of the task below.
   976     // Do not change the order of the task below.
  1019     iArrayTasks.Reset();
   977     iArrayTasks.Reset();
  1020     if ( iFileOpenError == KErrNone )
   978     if ( iFileOpenError == KErrNone )
  1021         {
   979         {
       
   980         // to avoid resources contention (i.e. accessing sql, file system, etc)
       
   981         // Ordering the tasks - so no multiple tasks run at the same time
       
   982         // put the longest running task at the last (i.e. thumbnailing)
  1022         iArrayTasks.AppendL(ETaskCreateMedia);
   983         iArrayTasks.AppendL(ETaskCreateMedia);
  1023         iArrayTasks.AppendL(ETaskAddMetadata);
   984         iArrayTasks.AppendL(ETaskAddExtMetadata);   // Get the MMF first
       
   985         iArrayTasks.AppendL(ETaskAddMetadata);      // Get metadata & maybe drm data
  1024         iArrayTasks.AppendL(ETaskCheckBeforeSend);
   986         iArrayTasks.AppendL(ETaskCheckBeforeSend);
  1025         iArrayTasks.AppendL(ETaskAddAlbumArt);
   987         iArrayTasks.AppendL(ETaskAddAlbumArt);      // Get album art / thumbnail last
  1026         iArrayTasks.AppendL(ETaskAddExtMetadata);
       
  1027         }
   988         }
  1028     else
   989     else
  1029         {
   990         {
  1030         iArrayTasks.AppendL(ETaskCreateMedia);
   991         iArrayTasks.AppendL(ETaskCreateMedia);
  1031         iArrayTasks.AppendL(ETaskAddExtMetadata);
   992         iArrayTasks.AppendL(ETaskAddExtMetadata);
  1053     {
  1014     {
  1054     MPX_FUNC("CMPXMetadataExtractor::HandleTaskTimerExpired()");
  1015     MPX_FUNC("CMPXMetadataExtractor::HandleTaskTimerExpired()");
  1055     
  1016     
  1056     iTaskTimer->Cancel();
  1017     iTaskTimer->Cancel();
  1057     // execute task at index 0
  1018     // execute task at index 0
  1058     TRAPD( error, ExecuteTaskL() );
  1019     MPX_TRAPD( error, ExecuteTaskL() );
  1059     if ( error || iCancelled )
  1020     if ( error || iCancelled )
  1060         {
  1021         {
  1061         // cleanup
  1022         // cleanup
  1062         if ( iMedia != NULL )
  1023         if ( iMedia != NULL )
  1063             {
  1024             {
  1100     // Reset the utility
  1061     // Reset the utility
  1101     TRAP_IGNORE( iMetadataUtility->ResetL() );
  1062     TRAP_IGNORE( iMetadataUtility->ResetL() );
  1102     iFile.Close();
  1063     iFile.Close();
  1103     }
  1064     }
  1104 
  1065 
       
  1066 
       
  1067 // ---------------------------------------------------------------------------
       
  1068 // Sets DRRM media properties not returned by metadata utilities
       
  1069 // ---------------------------------------------------------------------------
       
  1070 //
       
  1071 void CMPXMetadataExtractor::SetDrmMediaPropertiesL(const CMetaDataFieldContainer& aMetaCont)
       
  1072     {
       
  1073     MPX_FUNC("CMPXMetadataExtractor::SetDrmMediaPropertiesL()");
       
  1074 
       
  1075     TBool prot(EFalse);
       
  1076     // DB Flags to set
       
  1077     TUint dbFlags(KMPXMediaGeneralFlagsSetOrUnsetBit);
       
  1078     // Validate the objects to be used
       
  1079     MPX_ASSERT(iMedia);
       
  1080     MPX_ASSERT(iDrmMediaUtility);
       
  1081     
       
  1082     // File Path
       
  1083     TParsePtrC parse( iFileName );
       
  1084     iMedia->SetTextValueL( KMPXMediaGeneralUri, iFileName );
       
  1085     iMedia->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
       
  1086     MPX_DEBUG2("CMPXMetadataExtractor::SetDrmMediaPropertiesL - Filename=%S", &iFileName);
       
  1087 
       
  1088     // get the protected flag from MetadataUtility Container
       
  1089     TPtrC ptr = aMetaCont.Field( EMetaDataProtected );  
       
  1090     MPX_DEBUG2("CMPXMetadataExtractor::SetDrmMediaPropertiesL -- status=%S", &ptr);
       
  1091     _LIT( KNonProtected, "0" );
       
  1092     if ( ptr.Compare( KNonProtected ) == 0 )
       
  1093         {
       
  1094         // this is non-protected file
       
  1095         // prot = EFalse
       
  1096         MPX_DEBUG1("CMPXMetadataExtractor::SetDrmMediaPropertiesL - non protected");
       
  1097         iMedia->SetTObjectValueL<TBool>( KMPXMediaDrmProtected, prot );
       
  1098         iMedia->SetTObjectValueL<TUint16>( KMPXMediaMTPDrmStatus, (TUint16)prot );
       
  1099         }
       
  1100     else  
       
  1101         {  // DRM file
       
  1102 
       
  1103         // DRM Rights
       
  1104         //
       
  1105         CMPXMedia* drm = NULL;
       
  1106         MPX_TRAPD( drmError, iDrmMediaUtility->InitL( iFileName );
       
  1107         drm = CMPXMedia::NewL( *iDrmMediaUtility->GetMediaL( KMPXMediaDrmProtected.iAttributeId |
       
  1108                                                                 KMPXMediaDrmRightsStatus.iAttributeId ) );
       
  1109              );
       
  1110 
       
  1111         TBool prot(EFalse);
       
  1112         if( drm )
       
  1113             {
       
  1114             CleanupStack::PushL( drm );
       
  1115             MPX_DEBUG1("CMPXMetadataExtractor::SetDrmMediaPropertiesL -- is a drm file");
       
  1116             if( drm->IsSupported( KMPXMediaDrmProtected ) )
       
  1117                 {
       
  1118                 prot = drm->ValueTObjectL<TBool>( KMPXMediaDrmProtected );
       
  1119                 MPX_DEBUG2("CMPXMetadataExtractor::SetDrmMediaPropertiesL protected %i", prot);
       
  1120                 }
       
  1121 
       
  1122             TMPXMediaDrmRightsStatus status(EMPXDrmRightsFull);
       
  1123             if( drm->IsSupported( KMPXMediaDrmRightsStatus ) )
       
  1124                 {
       
  1125                 status = drm->ValueTObjectL<TMPXMediaDrmRightsStatus>(KMPXMediaDrmRightsStatus);
       
  1126                 iMedia->SetTObjectValueL<TInt>(KMPXMediaDrmRightsStatus, status );
       
  1127                 MPX_DEBUG2("CMPXMetadataExtractor::SetDrmMediaPropertiesL -- status %i", status);
       
  1128                 }
       
  1129 
       
  1130             // Set DB flags
       
  1131             dbFlags |= KMPXMediaGeneralFlagsIsDrmProtected;
       
  1132             if( status != EMPXDrmRightsFull && status != EMPXDrmRightsRestricted && status != EMPXDrmRightsPreview )
       
  1133                 {
       
  1134                 dbFlags |= KMPXMediaGeneralFlagsIsDrmLicenceInvalid;
       
  1135                 }
       
  1136             CleanupStack::PopAndDestroy( drm );
       
  1137             }
       
  1138 
       
  1139         // Trapped PV DRM error. If -46, we know the file has no rights
       
  1140         //
       
  1141         if( drmError == KErrPermissionDenied )
       
  1142             {
       
  1143             dbFlags |= KMPXMediaGeneralFlagsIsDrmLicenceInvalid;
       
  1144             }
       
  1145         else
       
  1146             {
       
  1147             User::LeaveIfError( drmError );
       
  1148             }
       
  1149 
       
  1150         iMedia->SetTObjectValueL<TBool>( KMPXMediaDrmProtected, prot );
       
  1151         iMedia->SetTObjectValueL<TUint16>( KMPXMediaMTPDrmStatus, (TUint16)prot );
       
  1152     
       
  1153         iDrmMediaUtility->Close();
       
  1154     
       
  1155         }  // DRM file
       
  1156 
       
  1157     
       
  1158     // verify the file open status
       
  1159     if( iFileOpenError == KErrNotFound || iFileOpenError == KErrPathNotFound )
       
  1160         {
       
  1161         dbFlags |= KMPXMediaGeneralFlagsIsInvalid;
       
  1162         }
       
  1163     
       
  1164     // Finally set the db flag
       
  1165     //
       
  1166     iMedia->SetTObjectValueL( KMPXMediaGeneralFlags, dbFlags );
       
  1167    
       
  1168     }