mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadatampxaccess.cpp
changeset 27 cbb1bfb7ebfb
parent 25 d881023c13eb
child 32 edd273b3192a
equal deleted inserted replaced
25:d881023c13eb 27:cbb1bfb7ebfb
    60 _LIT( KMpxCollectionSetReferenceL, "MpxCollectionSetReferenceL" );
    60 _LIT( KMpxCollectionSetReferenceL, "MpxCollectionSetReferenceL" );
    61 _LIT( KMpxCollectionGetAbstractMedia, "MpxCollectionGetAbstractMedia" );
    61 _LIT( KMpxCollectionGetAbstractMedia, "MpxCollectionGetAbstractMedia" );
    62 _LIT( KMpxCollectionGetReference, "MpxCollectionGetReference" );
    62 _LIT( KMpxCollectionGetReference, "MpxCollectionGetReference" );
    63 _LIT( KMpxCollectionFindAllLValidate, "MpxCollectionValidate" );
    63 _LIT( KMpxCollectionFindAllLValidate, "MpxCollectionValidate" );
    64 _LIT( KMpxCollectionFindAllLBeforeAdd, "MpxCollectionFindAllLBeforeAdd" );
    64 _LIT( KMpxCollectionFindAllLBeforeAdd, "MpxCollectionFindAllLBeforeAdd" );
       
    65 _LIT( KMpxCollectionFindAllLModified, "MpxCollectionFindAllLModified" );
       
    66 _LIT( KMpxCollectionCleanupDeletedMediasL, "KMpxCollectionCleanupDeletedMediasL" );
    65 _LIT( KSetMetadataValue, "SetMetadataValueL" );
    67 _LIT( KSetMetadataValue, "SetMetadataValueL" );
    66 #endif
    68 #endif
    67 
    69 
    68 #ifdef  _DEBUG
    70 #ifdef  _DEBUG
    69 _LIT( KMtpMpxPanic, "CMmMtpDpMetadataMpxAccess" );
    71 _LIT( KMtpMpxPanic, "CMmMtpDpMetadataMpxAccess" );
    78 
    80 
    79     return self;
    81     return self;
    80     }
    82     }
    81 
    83 
    82 CMmMtpDpMetadataMpxAccess::CMmMtpDpMetadataMpxAccess( RFs& aRfs ):
    84 CMmMtpDpMetadataMpxAccess::CMmMtpDpMetadataMpxAccess( RFs& aRfs ):
    83     iRfs( aRfs )
    85     iRfs( aRfs ),
       
    86     iSampleData( NULL )
    84     {
    87     {
    85     // Do nothing
    88     // Do nothing
    86     }
    89     }
    87 
    90 
    88 // ---------------------------------------------------------------------------
    91 // ---------------------------------------------------------------------------
   103 // Destructor
   106 // Destructor
   104 // ---------------------------------------------------------------------------
   107 // ---------------------------------------------------------------------------
   105 //
   108 //
   106 CMmMtpDpMetadataMpxAccess::~CMmMtpDpMetadataMpxAccess()
   109 CMmMtpDpMetadataMpxAccess::~CMmMtpDpMetadataMpxAccess()
   107     {
   110     {
   108     if ( iCollectionHelper )
   111     if ( iCollectionHelper != NULL )
   109         {
   112         {
   110         iCollectionHelper->Close();
   113         iCollectionHelper->Close();
   111         iCollectionHelper = NULL;
   114         iCollectionHelper = NULL;
   112         }
   115         }
       
   116 
       
   117     delete iSampleData;
   113 
   118 
   114     // for performance measurement purpose
   119     // for performance measurement purpose
   115 #if defined(_DEBUG) || defined(MMMTPDP_PERFLOG)
   120 #if defined(_DEBUG) || defined(MMMTPDP_PERFLOG)
   116     delete iPerfLog;
   121     delete iPerfLog;
   117 #endif
   122 #endif
       
   123     }
       
   124 
       
   125 // ---------------------------------------------------------------------------
       
   126 // CMmMtpDpMetadataMpxAccess::OpenSession
       
   127 // This is introduced to fix CollectionHelper Flush problem
       
   128 // ---------------------------------------------------------------------------
       
   129 //
       
   130 void CMmMtpDpMetadataMpxAccess::OpenSession()
       
   131     {
       
   132     // do nothing
       
   133     }
       
   134 
       
   135 // ---------------------------------------------------------------------------
       
   136 // CMmMtpDpMetadataMpxAccess::CloseSession
       
   137 // This is introduced to fix CollectionHelper Flush problem
       
   138 // ---------------------------------------------------------------------------
       
   139 //
       
   140 void CMmMtpDpMetadataMpxAccess::CloseSession()
       
   141     {
       
   142     PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::CloseSession" ) );
       
   143 
       
   144     // flush cache
       
   145     if ( iCollectionHelper != NULL )
       
   146         {
       
   147         PRINT( _L( "MM MTP <> Delete & Close CollectionHelper" ) );
       
   148         iCollectionHelper->Close();
       
   149         iCollectionHelper = NULL;
       
   150         }
       
   151 
       
   152     PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::CloseSession" ) );
   118     }
   153     }
   119 
   154 
   120 // ---------------------------------------------------------------------------
   155 // ---------------------------------------------------------------------------
   121 // CMmMtpDpMetadataMpxAccess::GetObjectMetadataValueL
   156 // CMmMtpDpMetadataMpxAccess::GetObjectMetadataValueL
   122 // Gets a piece of metadata from the collection
   157 // Gets a piece of metadata from the collection
   423     CleanupClosePushL( songAttributes ); // + songAttributes
   458     CleanupClosePushL( songAttributes ); // + songAttributes
   424     songAttributes.AppendL( KMPXMediaGeneralUri );
   459     songAttributes.AppendL( KMPXMediaGeneralUri );
   425 
   460 
   426     PRINT( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::FindWMPMediaLC searchMedia setup with no problems" ) );
   461     PRINT( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::FindWMPMediaLC searchMedia setup with no problems" ) );
   427 
   462 
       
   463     PERFLOGSTART(KMpxCollectionFindAllLModified);
   428     CMPXMedia* foundMedia = CollectionHelperL()->FindAllL( *searchMedia,
   464     CMPXMedia* foundMedia = CollectionHelperL()->FindAllL( *searchMedia,
   429         songAttributes.Array() );
   465         songAttributes.Array() );
       
   466     PERFLOGSTOP(KMpxCollectionFindAllLModified);
   430     PRINT( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::FindWMPMediaLC foundMedia assigned from FindAllL" ) );
   467     PRINT( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::FindWMPMediaLC foundMedia assigned from FindAllL" ) );
   431 
   468 
   432     CleanupStack::PopAndDestroy( &songAttributes ); // - songAttributes
   469     CleanupStack::PopAndDestroy( &songAttributes ); // - songAttributes
   433     CleanupStack::PopAndDestroy( searchMedia ); // - searchMedia
   470     CleanupStack::PopAndDestroy( searchMedia ); // - searchMedia
   434     CleanupStack::PushL( foundMedia ); // + foundMedia
   471     CleanupStack::PushL( foundMedia ); // + foundMedia
   555     // Delete stale records from the audio collection, for files that have been deleted.
   592     // Delete stale records from the audio collection, for files that have been deleted.
   556     // Records are deleted everytime in CloseSession to improve the audio database performance
   593     // Records are deleted everytime in CloseSession to improve the audio database performance
   557     // as there is NOT a separate database for deleted files.
   594     // as there is NOT a separate database for deleted files.
   558     PRINT( _L( "MM MTP <> Deleting metadata for deleted files" ) );
   595     PRINT( _L( "MM MTP <> Deleting metadata for deleted files" ) );
   559 
   596 
       
   597     PERFLOGSTART( KMpxCollectionCleanupDeletedMediasL );
   560     CollectionHelperL()->CleanupDeletedMediasL();
   598     CollectionHelperL()->CleanupDeletedMediasL();
       
   599     PERFLOGSTOP( KMpxCollectionCleanupDeletedMediasL );
   561 
   600 
   562     PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::UpdateMusicCollectionL" ) );
   601     PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::UpdateMusicCollectionL" ) );
   563     }
   602     }
   564 
   603 
   565 // -----------------------------------------------------------------------------
   604 // -----------------------------------------------------------------------------
   642     media->SetTObjectValueL<TMPXGeneralType>( KMPXMediaGeneralType, EMPXItem );
   681     media->SetTObjectValueL<TMPXGeneralType>( KMPXMediaGeneralType, EMPXItem );
   643 
   682 
   644     TParsePtrC parse( aFullFileName );
   683     TParsePtrC parse( aFullFileName );
   645     media->SetTextValueL( KMPXMediaGeneralUri, aFullFileName );
   684     media->SetTextValueL( KMPXMediaGeneralUri, aFullFileName );
   646     media->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
   685     media->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
       
   686     media->SetTObjectValueL( KMPXMediaGeneralModified, EFalse );
   647 
   687 
   648     PERFLOGSTART( KSetMetadataValue );
   688     PERFLOGSTART( KSetMetadataValue );
   649     SetMetadataValueL( aPropCode, aNewData, *media );
   689     SetMetadataValueL( aPropCode, aNewData, *media );
   650     PERFLOGSTOP( KSetMetadataValue );
   690     PERFLOGSTOP( KSetMetadataValue );
   651 
   691 
   652     // Update the song's metadata with the media object
   692     // Update the song's metadata with the media object
   653     PERFLOGSTART( KMpxCollectionSetL );
   693     PERFLOGSTART( KMpxCollectionSetL );
   654     CollectionHelperL()->SetL( media );
   694     CollectionHelperL()->SetL( media );
   655     PERFLOGSTOP( KMpxCollectionSetL );
   695     PERFLOGSTOP( KMpxCollectionSetL );
       
   696 
       
   697     delete iSampleData;
       
   698     iSampleData = NULL;
   656 
   699 
   657     CleanupStack::PopAndDestroy( 2, &contentIDs ); // - media, contentIDs
   700     CleanupStack::PopAndDestroy( 2, &contentIDs ); // - media, contentIDs
   658 
   701 
   659     PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL" ) );
   702     PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL" ) );
   660     }
   703     }
   666 void CMmMtpDpMetadataMpxAccess::SetMetadataValueL( const TUint16 aPropCode,
   709 void CMmMtpDpMetadataMpxAccess::SetMetadataValueL( const TUint16 aPropCode,
   667     const MMTPType& aNewData,
   710     const MMTPType& aNewData,
   668     CMPXMedia& aMediaProp )
   711     CMPXMedia& aMediaProp )
   669     {
   712     {
   670     PRINT1( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::SetMetadataValueL aPropCode = 0x%x" ), aPropCode );
   713     PRINT1( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::SetMetadataValueL aPropCode = 0x%x" ), aPropCode );
   671     CMTPTypeString* textData = CMTPTypeString::NewLC(); // + textData
       
   672     CMTPTypeArray* desData = NULL;
   714     CMTPTypeArray* desData = NULL;
   673     TMTPTypeUint16 uint16Data;
   715     TMTPTypeUint16 uint16Data;
   674     TMTPTypeUint32 uint32Data;
   716     TMTPTypeUint32 uint32Data;
   675 
   717 
   676     TMPXAttributeData attrib( MpxAttribFromPropL( aPropCode ) );
   718     TMPXAttributeData attrib( MpxAttribFromPropL( aPropCode ) );
   682         case EMTPObjectPropCodeGenre:
   724         case EMTPObjectPropCodeGenre:
   683         case EMTPObjectPropCodeAlbumName:
   725         case EMTPObjectPropCodeAlbumName:
   684         case EMTPObjectPropCodeComposer:
   726         case EMTPObjectPropCodeComposer:
   685         case EMTPObjectPropCodeAlbumArtist:
   727         case EMTPObjectPropCodeAlbumArtist:
   686             {
   728             {
   687             PRINT1( _L( "MM MTP <> SetMetadataValueL Before Copy, string length = %d" ), aNewData.Size() );
   729             const CMTPTypeString& textData = static_cast<const CMTPTypeString&>( aNewData );
   688             MMTPType::CopyL( aNewData, *textData );
   730             HBufC* string = textData.StringChars().AllocLC();    // + string
   689             HBufC* string = textData->StringChars().AllocLC();
   731             PRINT2( _L( "MM MTP <> SetMetadataValueL des.ptr() = 0x%x, string length = %d" ),string->Des().Ptr(), string->Des().Length() );
   690             PRINT1( _L( "MM MTP <> SetMetadataValueL string length = %d" ), string->Des().Length() );
   732             PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL string = %S" ), string );
   691             aMediaProp.SetTextValueL( attrib, string->Des() );
   733             aMediaProp.SetTextValueL( attrib, string->Des() );
   692             PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL string = %S" ), string );
   734             CleanupStack::PopAndDestroy( string );               // - string
   693             CleanupStack::PopAndDestroy(string);
       
   694             }
   735             }
   695             break;
   736             break;
   696 
   737 
   697         case EMTPObjectPropCodeTrack:
   738         case EMTPObjectPropCodeTrack:
   698             {
   739             {
   732             }
   773             }
   733             break;
   774             break;
   734 
   775 
   735         case EMTPObjectPropCodeOriginalReleaseDate:
   776         case EMTPObjectPropCodeOriginalReleaseDate:
   736             {
   777             {
   737             MMTPType::CopyL( aNewData, *textData );
   778             const CMTPTypeString& textData = static_cast<const CMTPTypeString&>( aNewData );
   738 
   779 
   739             TBuf<KMtpMaxStringLength> data;
   780             TBuf<KMtpMaxStringLength> data;
   740             data.Copy( textData->StringChars().Left( KMtpMaxDateTimeStringLength ) );
   781             data.Copy( textData.StringChars().Left( KMtpMaxDateTimeStringLength ) );
   741             PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL 0xDC99 date = %S" ),
   782             PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL 0xDC99 date = %S" ),
   742                 &data );
   783                 &data );
   743             if ( data.Length() < KMtpMaxDateTimeStringLength )
   784             if ( data.Length() < KMtpMaxDateTimeStringLength )
   744                 {
   785                 {
   745                 PRINT( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL 0xDC99 date string is too short" ) );
   786                 PRINT( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL 0xDC99 date string is too short" ) );
   850             const CMTPTypeArray& mtpTypeArray = static_cast<const CMTPTypeArray&>( aNewData );
   891             const CMTPTypeArray& mtpTypeArray = static_cast<const CMTPTypeArray&>( aNewData );
   851             TUint32 numElements = mtpTypeArray.NumElements();
   892             TUint32 numElements = mtpTypeArray.NumElements();
   852             const TDesC& suid = aMediaProp.ValueText( KMPXMediaGeneralUri );
   893             const TDesC& suid = aMediaProp.ValueText( KMPXMediaGeneralUri );
   853             PRINT2( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL SampleData numElements = %d, suid = %S" ), numElements, &suid );
   894             PRINT2( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL SampleData numElements = %d, suid = %S" ), numElements, &suid );
   854 
   895 
   855             HBufC8* sampleData = HBufC8::NewLC( numElements * sizeof( TUint8 ) );
   896             delete iSampleData;
   856             TPtr8 samplePtr = sampleData->Des();
   897             iSampleData = NULL;
       
   898 
       
   899             iSampleData = HBufC8::NewL( numElements * sizeof( TUint8 ) );
       
   900             TPtr8 samplePtr = iSampleData->Des();
   857             mtpTypeArray.ToDes( samplePtr );
   901             mtpTypeArray.ToDes( samplePtr );
   858             RFile sampleFile;
   902             RFile sampleFile;
   859             CleanupClosePushL( sampleFile );
   903             CleanupClosePushL( sampleFile );
   860             User::LeaveIfError( sampleFile.Replace( iRfs, suid, EFileWrite ) );
   904             User::LeaveIfError( sampleFile.Replace( iRfs, suid, EFileWrite ) );
   861             User::LeaveIfError( sampleFile.Write( samplePtr ) );
   905             User::LeaveIfError( sampleFile.Write( samplePtr ) );
       
   906             aMediaProp.SetTObjectValueL<TInt>( KMPXMediaMTPSampleData, (TInt)iSampleData );
       
   907             aMediaProp.SetTObjectValueL<TBool>( attrib, ETrue );
   862             CleanupStack::PopAndDestroy( &sampleFile );
   908             CleanupStack::PopAndDestroy( &sampleFile );
   863             CleanupStack::PopAndDestroy( sampleData );
       
   864             aMediaProp.SetTObjectValueL<TBool>( attrib, ETrue );
       
   865             PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL SampleData is ready = %u" ), 1 );
   909             PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL SampleData is ready = %u" ), 1 );
   866             }
   910             }
   867             break;
   911             break;
   868 
   912 
   869         default:
   913         default:
   871             User::Leave( KErrNotSupported );
   915             User::Leave( KErrNotSupported );
   872             }
   916             }
   873             break;
   917             break;
   874         }
   918         }
   875 
   919 
   876     CleanupStack::PopAndDestroy( textData ); // - textData
       
   877     PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::SetMetadataValueL" ) );
   920     PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::SetMetadataValueL" ) );
   878     }
   921     }
   879 
   922 
   880 // ---------------------------------------------------------------------------
   923 // ---------------------------------------------------------------------------
   881 // CMmMtpDpMetadataMpxAccess::AddSongL
   924 // CMmMtpDpMetadataMpxAccess::AddSongL
  1019 
  1062 
  1020     RArray<TMPXAttribute> abstractMediaAttributes;
  1063     RArray<TMPXAttribute> abstractMediaAttributes;
  1021     CleanupClosePushL( abstractMediaAttributes ); // + abstractMediaAttributes
  1064     CleanupClosePushL( abstractMediaAttributes ); // + abstractMediaAttributes
  1022     abstractMediaAttributes.AppendL( KMPXMediaGeneralId );
  1065     abstractMediaAttributes.AppendL( KMPXMediaGeneralId );
  1023     abstractMediaAttributes.AppendL( KMPXMediaGeneralTitle );
  1066     abstractMediaAttributes.AppendL( KMPXMediaGeneralTitle );
  1024     if ( aCategory == EMPXPlaylist )
  1067     abstractMediaAttributes.AppendL( KMPXMediaGeneralUri );
  1025         {
       
  1026         abstractMediaAttributes.AppendL( KMPXMediaGeneralUri );
       
  1027         }
       
  1028 
  1068 
  1029     PERFLOGSTART( KMpxCollectionFindAllLBeforeAdd );
  1069     PERFLOGSTART( KMpxCollectionFindAllLBeforeAdd );
  1030     CMPXMedia* foundMedia = CollectionHelperL()->FindAllL( *searchMedia,
  1070     CMPXMedia* foundMedia = CollectionHelperL()->FindAllL( *searchMedia,
  1031         abstractMediaAttributes.Array() );
  1071         abstractMediaAttributes.Array() );
  1032     PERFLOGSTOP( KMpxCollectionFindAllLBeforeAdd );
  1072     PERFLOGSTOP( KMpxCollectionFindAllLBeforeAdd );
  1067         // File Path
  1107         // File Path
  1068         //
  1108         //
  1069         media->SetTextValueL( KMPXMediaGeneralUri, aFullFileName );
  1109         media->SetTextValueL( KMPXMediaGeneralUri, aFullFileName );
  1070 
  1110 
  1071         TParsePtrC parse( aFullFileName );
  1111         TParsePtrC parse( aFullFileName );
  1072 
       
  1073         media->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
  1112         media->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
  1074         if ( ( aCategory == EMPXPlaylist ) || ( aCategory == EMPXAbstractAlbum ) )
  1113         media->SetTextValueL( KMPXMediaGeneralTitle, parse.Name() );
  1075             {
       
  1076             media->SetTextValueL( KMPXMediaGeneralTitle, parse.Name() );
       
  1077             }
       
  1078         media->SetTObjectValueL<TBool>( KMPXMediaGeneralSynchronized, ETrue );
  1114         media->SetTObjectValueL<TBool>( KMPXMediaGeneralSynchronized, ETrue );
  1079         media->SetCObjectValueL( KMPXMediaArrayContents, abstractMediaArray );
  1115         media->SetCObjectValueL( KMPXMediaArrayContents, abstractMediaArray );
  1080         media->SetTObjectValueL( KMPXMediaArrayCount, abstractMediaArray->Count() );
  1116         media->SetTObjectValueL( KMPXMediaArrayCount, abstractMediaArray->Count() );
  1081         if ( aCategory == EMPXAbstractAlbum )
  1117         if ( aCategory == EMPXAbstractAlbum )
  1082             {
  1118             {
  1134 
  1170 
  1135         media->SetTextValueL( KMPXMediaGeneralUri, aRefFileArray[j] );
  1171         media->SetTextValueL( KMPXMediaGeneralUri, aRefFileArray[j] );
  1136         // TODO: need to confirm that should set drive letter or storage root path.
  1172         // TODO: need to confirm that should set drive letter or storage root path.
  1137         TParsePtrC parse( aRefFileArray[j] );
  1173         TParsePtrC parse( aRefFileArray[j] );
  1138         media->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
  1174         media->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
  1139 
  1175         media->SetTObjectValueL( KMPXMediaGeneralModified, EFalse );
       
  1176   
  1140         // Add media into array contents
  1177         // Add media into array contents
  1141         abstractMediaArray->AppendL( media );
  1178         abstractMediaArray->AppendL( media );
  1142 
  1179 
  1143         CleanupStack::Pop( media ); // - media
  1180         CleanupStack::Pop( media ); // - media
  1144         }
  1181         }
  1315 
  1352 
  1316     RArray<TMPXAttribute> abstractMediaAttributes;
  1353     RArray<TMPXAttribute> abstractMediaAttributes;
  1317     CleanupClosePushL( abstractMediaAttributes ); // + abstractMediaAttributes
  1354     CleanupClosePushL( abstractMediaAttributes ); // + abstractMediaAttributes
  1318     abstractMediaAttributes.AppendL( KMPXMediaGeneralId );
  1355     abstractMediaAttributes.AppendL( KMPXMediaGeneralId );
  1319     abstractMediaAttributes.AppendL( KMPXMediaGeneralTitle );
  1356     abstractMediaAttributes.AppendL( KMPXMediaGeneralTitle );
  1320     if ( aCategory == EMPXPlaylist )
  1357 
  1321         {
  1358     abstractMediaAttributes.AppendL( KMPXMediaGeneralUri );
  1322         abstractMediaAttributes.AppendL( KMPXMediaGeneralUri );
       
  1323         }
       
  1324 
  1359 
  1325     PERFLOGSTART( KMpxCollectionGetAbstractMedia );
  1360     PERFLOGSTART( KMpxCollectionGetAbstractMedia );
  1326     CMPXMedia* foundMedia = CollectionHelperL()->FindAllL( *searchMedia,
  1361     CMPXMedia* foundMedia = CollectionHelperL()->FindAllL( *searchMedia,
  1327         abstractMediaAttributes.Array() );
  1362         abstractMediaAttributes.Array() );
  1328     PERFLOGSTOP( KMpxCollectionGetAbstractMedia );
  1363     PERFLOGSTOP( KMpxCollectionGetAbstractMedia );
  1449 HBufC* CMmMtpDpMetadataMpxAccess::GetAbstractMediaNameL( CMPXMedia* aAbstractMedia,
  1484 HBufC* CMmMtpDpMetadataMpxAccess::GetAbstractMediaNameL( CMPXMedia* aAbstractMedia,
  1450     TMPXGeneralCategory aCategory )
  1485     TMPXGeneralCategory aCategory )
  1451     {
  1486     {
  1452     PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::GetAbstractMediaNameL" ) );
  1487     PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::GetAbstractMediaNameL" ) );
  1453     HBufC* name = NULL;
  1488     HBufC* name = NULL;
  1454     if ( aCategory == EMPXPlaylist )
  1489     if ( aCategory == EMPXPlaylist || aCategory == EMPXAbstractAlbum )
  1455         {
  1490         {
  1456         if( !aAbstractMedia->IsSupported( KMPXMediaGeneralUri ) )
  1491         if( !aAbstractMedia->IsSupported( KMPXMediaGeneralUri ) )
  1457             {
  1492             {
  1458             User::Leave( KErrNotSupported );
  1493             User::Leave( KErrNotSupported );
  1459             }
  1494             }
  1460         name = aAbstractMedia->ValueText( KMPXMediaGeneralUri ).AllocL();
  1495         name = aAbstractMedia->ValueText( KMPXMediaGeneralUri ).AllocL();
  1461         }
       
  1462     else if ( aCategory == EMPXAbstractAlbum )
       
  1463         {
       
  1464         if ( !aAbstractMedia->IsSupported( KMPXMediaGeneralTitle ) )
       
  1465             {
       
  1466             User::Leave( KErrNotSupported );
       
  1467             }
       
  1468         name = aAbstractMedia->ValueText( KMPXMediaGeneralTitle ).AllocL();
       
  1469         }
  1496         }
  1470     else
  1497     else
  1471         {
  1498         {
  1472         User::Leave( KErrNotSupported );
  1499         User::Leave( KErrNotSupported );
  1473         }
  1500         }