mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadatampxaccess.cpp
branchRCL_3
changeset 17 780c925249c1
parent 14 05b0d2323768
child 19 51035f0751c2
equal deleted inserted replaced
15:d240f0a77280 17:780c925249c1
    22 #include <mtp/tmtptypeuint32.h>
    22 #include <mtp/tmtptypeuint32.h>
    23 #include <mtp/tmtptypeuint64.h>
    23 #include <mtp/tmtptypeuint64.h>
    24 #include <mtp/tmtptypeuint128.h>
    24 #include <mtp/tmtptypeuint128.h>
    25 #include <mtp/cmtptypestring.h>
    25 #include <mtp/cmtptypestring.h>
    26 #include <mtp/cmtptypearray.h>
    26 #include <mtp/cmtptypearray.h>
    27 #include <mtp/cmtpobjectmetadata.h>
       
    28 #include <mtp/mmtpdataproviderframework.h>
    27 #include <mtp/mmtpdataproviderframework.h>
    29 #include <mtp/mmtpreferencemgr.h>
       
    30 #include <mtp/mtpprotocolconstants.h>
    28 #include <mtp/mtpprotocolconstants.h>
    31 // from MPX
    29 // from MPX
    32 #include <mpxmedia.h>
    30 #include <mpxmedia.h>
    33 #include <mpxmediaarray.h>
    31 #include <mpxmediaarray.h>
    34 #include <mpxmediamusicdefs.h>
    32 #include <mpxmediamusicdefs.h>
    69 
    67 
    70 #ifdef  _DEBUG
    68 #ifdef  _DEBUG
    71 _LIT( KMtpMpxPanic, "CMmMtpDpMetadataMpxAccess" );
    69 _LIT( KMtpMpxPanic, "CMmMtpDpMetadataMpxAccess" );
    72 #endif
    70 #endif
    73 
    71 
    74 CMmMtpDpMetadataMpxAccess* CMmMtpDpMetadataMpxAccess::NewL( RFs& aRfs,
    72 CMmMtpDpMetadataMpxAccess* CMmMtpDpMetadataMpxAccess::NewL( RFs& aRfs )
    75     MMTPDataProviderFramework& aFramework )
    73     {
    76     {
    74     CMmMtpDpMetadataMpxAccess* self = new( ELeave ) CMmMtpDpMetadataMpxAccess( aRfs );
    77     CMmMtpDpMetadataMpxAccess* self = new(ELeave) CMmMtpDpMetadataMpxAccess( aRfs, aFramework );
       
    78     CleanupStack::PushL( self );
    75     CleanupStack::PushL( self );
    79     self->ConstructL();
    76     self->ConstructL();
    80     CleanupStack::Pop( self );
    77     CleanupStack::Pop( self );
    81 
    78 
    82     return self;
    79     return self;
    83     }
    80     }
    84 
    81 
    85 CMmMtpDpMetadataMpxAccess::CMmMtpDpMetadataMpxAccess( RFs& aRfs,
    82 CMmMtpDpMetadataMpxAccess::CMmMtpDpMetadataMpxAccess( RFs& aRfs ):
    86     MMTPDataProviderFramework& aFramework ):
    83     iRfs( aRfs )
    87     iRfs( aRfs ),
       
    88     iFramework( aFramework )
       
    89     {
    84     {
    90     // Do nothing
    85     // Do nothing
    91     }
    86     }
    92 
    87 
    93 // ---------------------------------------------------------------------------
    88 // ---------------------------------------------------------------------------
   127 // Gets a piece of metadata from the collection
   122 // Gets a piece of metadata from the collection
   128 // ---------------------------------------------------------------------------
   123 // ---------------------------------------------------------------------------
   129 //
   124 //
   130 void CMmMtpDpMetadataMpxAccess::GetObjectMetadataValueL( const TUint16 aPropCode,
   125 void CMmMtpDpMetadataMpxAccess::GetObjectMetadataValueL( const TUint16 aPropCode,
   131     MMTPType& aNewData,
   126     MMTPType& aNewData,
   132     const CMTPObjectMetaData& aObjectMetaData )
   127     const TDesC& aFullFileName,
       
   128     TMPXGeneralCategory aCategory )
   133     {
   129     {
   134     PRINT1( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::GetObjectMetadataValueL aPropCode = 0x%x" ), aPropCode );
   130     PRINT1( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::GetObjectMetadataValueL aPropCode = 0x%x" ), aPropCode );
   135 
   131 
   136     // File Path
       
   137     HBufC* suid = aObjectMetaData.DesC( CMTPObjectMetaData::ESuid ).AllocLC();  // + suid
       
   138     TUint format = aObjectMetaData.Uint( CMTPObjectMetaData::EFormatCode );
       
   139     TMPXGeneralCategory category = ( format == EMTPFormatCodeAbstractAudioVideoPlaylist ) ||
       
   140         ( format == EMTPFormatCodeM3UPlaylist ) ? EMPXPlaylist : EMPXSong;
       
   141 
       
   142     PERFLOGSTART( KMpxCollectionGetL );
   132     PERFLOGSTART( KMpxCollectionGetL );
   143     const CMPXMedia& media = CollectionHelperL()->GetL( *suid, category );
   133     const CMPXMedia& media = CollectionHelperL()->GetL( aFullFileName, aCategory );
   144     PERFLOGSTOP( KMpxCollectionGetL );
   134     PERFLOGSTOP( KMpxCollectionGetL );
   145 
       
   146     CleanupStack::PopAndDestroy( suid ); // - suid
       
   147 
   135 
   148     TMPXAttributeData attrib( MpxAttribFromPropL( aPropCode ) );
   136     TMPXAttributeData attrib( MpxAttribFromPropL( aPropCode ) );
   149     TBool isSupported = media.IsSupported( attrib );
   137     TBool isSupported = media.IsSupported( attrib );
   150     PRINT1(_L( "MM MTP <> CMmMtpDpMetadataMpxAccess::GetObjectMetadataValueL isSupported = %d" ), isSupported);
   138     PRINT1(_L( "MM MTP <> CMmMtpDpMetadataMpxAccess::GetObjectMetadataValueL isSupported = %d" ), isSupported );
   151 
   139 
   152     if ( aPropCode != EMTPObjectPropCodeOriginalReleaseDate
   140     if ( aPropCode != EMTPObjectPropCodeOriginalReleaseDate
   153         && aPropCode != EMTPObjectPropCodeDRMStatus
   141         && aPropCode != EMTPObjectPropCodeDRMStatus
   154         && !isSupported )
   142         && !isSupported )
   155         {
   143         {
   600 // Rename the filename onto MPX DB
   588 // Rename the filename onto MPX DB
   601 // -----------------------------------------------------------------------------
   589 // -----------------------------------------------------------------------------
   602 //
   590 //
   603 void CMmMtpDpMetadataMpxAccess::RenameObjectL( const TDesC& aOldFileName,
   591 void CMmMtpDpMetadataMpxAccess::RenameObjectL( const TDesC& aOldFileName,
   604     const TDesC& aNewFileName,
   592     const TDesC& aNewFileName,
   605     TUint aFormatCode )
   593     TMPXGeneralCategory aCategory )
   606     {
   594     {
   607     PRINT2( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::RenameObjectL aOldFileName = %S, aNewFileName = %S" ),
   595     PRINT2( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::RenameObjectL aOldFileName = %S, aNewFileName = %S" ),
   608             &aOldFileName,
   596             &aOldFileName,
   609             &aNewFileName );
   597             &aNewFileName );
   610 
   598 
   611     TInt err = KErrNone;
   599     TInt err = KErrNone;
   612 
   600     TRAP( err, CollectionHelperL()->RenameL( aOldFileName, aNewFileName, aCategory ) );
   613     if ( ( aFormatCode == EMTPFormatCodeAbstractAudioVideoPlaylist )
       
   614         || ( aFormatCode == EMTPFormatCodeM3UPlaylist ) )
       
   615         {
       
   616         PRINT( _L( "MM MTP <> Playlist" ) );
       
   617         TRAP( err, CollectionHelperL()->RenameL( aOldFileName, aNewFileName, EMPXPlaylist ) );
       
   618         }
       
   619     else // Not a playlist
       
   620         {
       
   621         PRINT( _L( "MM MTP <> Non-Playlist" ) );
       
   622         TRAP( err, CollectionHelperL()->RenameL( aOldFileName, aNewFileName, EMPXSong ) );
       
   623         }
       
   624 
   601 
   625     if ( KErrNotFound == err )
   602     if ( KErrNotFound == err )
   626         {
   603         {
   627         PRINT1( _L( "MM MTP <> Not found the %S in the MPX DB" ), &aOldFileName );
   604         PRINT1( _L( "MM MTP <> Not found the %S in the MPX DB" ), &aOldFileName );
   628         }
   605         }
   637 // CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL
   614 // CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL
   638 // Updated object metadata in MPX database
   615 // Updated object metadata in MPX database
   639 // -----------------------------------------------------------------------------
   616 // -----------------------------------------------------------------------------
   640 void CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL( const TUint16 aPropCode,
   617 void CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL( const TUint16 aPropCode,
   641     const MMTPType& aNewData,
   618     const MMTPType& aNewData,
   642     const TDesC& aSuid )
   619     const TDesC& aFullFileName,
   643     {
   620     TMPXGeneralCategory aCategory )
   644     PRINT2( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL aPropCode = 0x%x aSuid = %S" ),
   621     {
   645         aPropCode,
   622     PRINT1( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL aPropCode = 0x%x" ), aPropCode );
   646         &aSuid );
   623 
   647     CMPXMedia* media = NULL;
       
   648 
       
   649     // Creat media properties for the song
       
   650     RArray<TInt> contentIDs;
   624     RArray<TInt> contentIDs;
   651     CleanupClosePushL( contentIDs ); // + contentIDs
   625     CleanupClosePushL( contentIDs ); // + contentIDs
       
   626 
   652     contentIDs.AppendL( KMPXMediaIdGeneral );
   627     contentIDs.AppendL( KMPXMediaIdGeneral );
   653     contentIDs.AppendL( KMPXMediaIdAudio );
   628 
   654     contentIDs.AppendL( KMPXMediaIdMusic );
   629     if ( aCategory == EMPXSong )
   655     contentIDs.AppendL( KMPXMediaIdMTP );
   630         {
   656 
       
   657     media = CMPXMedia::NewL( contentIDs.Array() );
       
   658     CleanupStack::PopAndDestroy( &contentIDs ); // - contentIDs
       
   659     CleanupStack::PushL( media ); // + media
       
   660 
       
   661     media->SetTObjectValueL<TMPXGeneralCategory>(
       
   662         KMPXMediaGeneralCategory,
       
   663         EMPXSong );
       
   664 
       
   665     // MPXMedia default types
       
   666     media->SetTObjectValueL<TMPXGeneralType>( KMPXMediaGeneralType, EMPXItem );
       
   667 
       
   668     // Get file path
       
   669     TParsePtrC parse( aSuid );
       
   670     media->SetTextValueL( KMPXMediaGeneralUri, aSuid );
       
   671     media->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
       
   672 
       
   673     TRAPD( err, SetMetadataValueL( aPropCode, aNewData, *media ) );
       
   674 
       
   675     if ( err == KErrNone )
       
   676         {
       
   677         SetStorageRootL( parse.Drive() );
       
   678 
       
   679         // Update the song's metadata with the media object
       
   680         PERFLOGSTART( KMpxCollectionSetL );
       
   681         CollectionHelperL()->SetL( media );
       
   682         PERFLOGSTOP( KMpxCollectionSetL );
       
   683         }
       
   684     else
       
   685         {
       
   686         PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL ERROR = %d" ), err );
       
   687 
       
   688         User::Leave( err );
       
   689         }
       
   690 
       
   691     CleanupStack::PopAndDestroy( media ); // - media
       
   692     PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL" ) );
       
   693     }
       
   694 
       
   695 // -----------------------------------------------------------------------------
       
   696 // CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL
       
   697 // Updated object metadata in MPX database
       
   698 // -----------------------------------------------------------------------------
       
   699 void CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL( const TUint16 aPropCode,
       
   700     const MMTPType& aNewData,
       
   701     const CMTPObjectMetaData& aObjectMetaData )
       
   702     {
       
   703     PRINT1( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL aPropCode = 0x%x" ), aPropCode );
       
   704     CMPXMedia* media = NULL;
       
   705 
       
   706     RArray<TInt> contentIDs;
       
   707     CleanupClosePushL( contentIDs ); // + contentIDs
       
   708 
       
   709     TUint format = aObjectMetaData.Uint( CMTPObjectMetaData::EFormatCode );
       
   710     if ( ( format == EMTPFormatCodeAbstractAudioVideoPlaylist )
       
   711         || ( format == EMTPFormatCodeM3UPlaylist ) )
       
   712         {
       
   713         PRINT( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL format is abstract media" ) );
       
   714         contentIDs.AppendL( KMPXMediaIdGeneral );
       
   715 
       
   716         media = CMPXMedia::NewL( contentIDs.Array() );
       
   717         CleanupStack::PushL( media ); // + media
       
   718 
       
   719         media->SetTObjectValueL<TMPXGeneralCategory>( KMPXMediaGeneralCategory,
       
   720             EMPXPlaylist );
       
   721         }
       
   722     else
       
   723         {
       
   724         // Creat media properties for the song
       
   725         contentIDs.AppendL( KMPXMediaIdGeneral );
       
   726         contentIDs.AppendL( KMPXMediaIdAudio );
   631         contentIDs.AppendL( KMPXMediaIdAudio );
   727         contentIDs.AppendL( KMPXMediaIdMusic );
   632         contentIDs.AppendL( KMPXMediaIdMusic );
   728         contentIDs.AppendL( KMPXMediaIdMTP );
   633         contentIDs.AppendL( KMPXMediaIdMTP );
   729 
   634         }
   730         media = CMPXMedia::NewL( contentIDs.Array() );
   635 
   731         CleanupStack::PushL( media ); // + media
   636     CMPXMedia* media = CMPXMedia::NewL( contentIDs.Array() );
   732 
   637     CleanupStack::PushL( media ); // + media
   733         media->SetTObjectValueL<TMPXGeneralCategory>(
   638 
   734             KMPXMediaGeneralCategory,
   639     media->SetTObjectValueL<TMPXGeneralCategory>( KMPXMediaGeneralCategory, aCategory );
   735             EMPXSong );
       
   736         }
       
   737 
   640 
   738     // MPXMedia default types
   641     // MPXMedia default types
   739     media->SetTObjectValueL<TMPXGeneralType>( KMPXMediaGeneralType, EMPXItem );
   642     media->SetTObjectValueL<TMPXGeneralType>( KMPXMediaGeneralType, EMPXItem );
   740 
   643 
   741     // Get file path
   644     TParsePtrC parse( aFullFileName );
   742     HBufC* suid = aObjectMetaData.DesC( CMTPObjectMetaData::ESuid ).AllocLC(); // + suid
   645     media->SetTextValueL( KMPXMediaGeneralUri, aFullFileName );
   743     TParsePtrC parse( *suid );
       
   744     media->SetTextValueL( KMPXMediaGeneralUri, *suid );
       
   745     media->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
   646     media->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
   746     CleanupStack::PopAndDestroy( suid ); // - suid
       
   747 
   647 
   748     PERFLOGSTART( KSetMetadataValue );
   648     PERFLOGSTART( KSetMetadataValue );
   749     SetMetadataValueL( aPropCode, aNewData, *media );
   649     SetMetadataValueL( aPropCode, aNewData, *media );
   750     PERFLOGSTOP( KSetMetadataValue );
   650     PERFLOGSTOP( KSetMetadataValue );
   751 
   651 
   949             aMediaProp.SetTObjectValueL<TUint16>( attrib, uint16Data.Value() );
   849             aMediaProp.SetTObjectValueL<TUint16>( attrib, uint16Data.Value() );
   950             PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL DRM Status uint16 value = %u" ), uint16Data.Value() );
   850             PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL DRM Status uint16 value = %u" ), uint16Data.Value() );
   951             }
   851             }
   952             break;
   852             break;
   953 
   853 
       
   854         case EMTPObjectPropCodeRepresentativeSampleData:
       
   855             {
       
   856             const CMTPTypeArray& mtpTypeArray = static_cast<const CMTPTypeArray&>( aNewData );
       
   857             TUint32 numElements = mtpTypeArray.NumElements();
       
   858             const TDesC& suid = aMediaProp.ValueText( KMPXMediaGeneralUri );
       
   859             PRINT2( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL SampleData numElements = %d, suid = %S" ), numElements, &suid );
       
   860 
       
   861             HBufC8* sampleData = HBufC8::NewLC( numElements * sizeof( TUint8 ) );
       
   862             TPtr8 samplePtr = sampleData->Des();
       
   863             mtpTypeArray.ToDes( samplePtr );
       
   864             RFile sampleFile;
       
   865             CleanupClosePushL( sampleFile );
       
   866             User::LeaveIfError( sampleFile.Replace( iRfs, suid, EFileWrite ) );
       
   867             User::LeaveIfError( sampleFile.Write( samplePtr ) );
       
   868             CleanupStack::PopAndDestroy( &sampleFile );
       
   869             CleanupStack::PopAndDestroy( sampleData );
       
   870             aMediaProp.SetTObjectValueL<TBool>( attrib, ETrue );
       
   871             PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL SampleData is ready = %u" ), 1 );
       
   872             }
       
   873             break;
       
   874 
   954         default:
   875         default:
   955             {
   876             {
   956             User::Leave( KErrNotSupported );
   877             User::Leave( KErrNotSupported );
   957             }
   878             }
   958             break;
   879             break;
  1154         media->SetTextValueL( KMPXMediaGeneralUri, aFullFileName );
  1075         media->SetTextValueL( KMPXMediaGeneralUri, aFullFileName );
  1155 
  1076 
  1156         TParsePtrC parse( aFullFileName );
  1077         TParsePtrC parse( aFullFileName );
  1157 
  1078 
  1158         media->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
  1079         media->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
  1159         if ( aCategory == EMPXPlaylist )
  1080         if ( ( aCategory == EMPXPlaylist ) || ( aCategory == EMPXAbstractAlbum ) )
  1160             {
  1081             {
  1161             media->SetTextValueL( KMPXMediaGeneralTitle, parse.Name() );
  1082             media->SetTextValueL( KMPXMediaGeneralTitle, parse.Name() );
  1162             }
  1083             }
  1163         media->SetTObjectValueL<TBool>( KMPXMediaGeneralSynchronized, ETrue );
  1084         media->SetTObjectValueL<TBool>( KMPXMediaGeneralSynchronized, ETrue );
  1164         media->SetCObjectValueL( KMPXMediaArrayContents, abstractMediaArray );
  1085         media->SetCObjectValueL( KMPXMediaArrayContents, abstractMediaArray );
  1165         media->SetTObjectValueL( KMPXMediaArrayCount, abstractMediaArray->Count() );
  1086         media->SetTObjectValueL( KMPXMediaArrayCount, abstractMediaArray->Count() );
       
  1087         if ( aCategory == EMPXAbstractAlbum )
       
  1088             {
       
  1089             media->SetTObjectValueL( KMPXMediaMTPSampleDataFlag, EFalse );
       
  1090             }
  1166 
  1091 
  1167         PERFLOGSTART( KMpxCollectionAddL );
  1092         PERFLOGSTART( KMpxCollectionAddL );
  1168         CollectionHelperL()->AddL( media );
  1093         CollectionHelperL()->AddL( media );
  1169         PERFLOGSTOP( KMpxCollectionAddL );
  1094         PERFLOGSTOP( KMpxCollectionAddL );
  1170 
  1095 
  1178 
  1103 
  1179     PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::AddAbstractMediaL" ) );
  1104     PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::AddAbstractMediaL" ) );
  1180     }
  1105     }
  1181 
  1106 
  1182 // -----------------------------------------------------------------------------
  1107 // -----------------------------------------------------------------------------
  1183 // CMmMtpDpMetadataMpxAccess::SetAbstractMediaL
  1108 // CMmMtpDpMetadataMpxAccess::SetReferenceL
  1184 // Set abstract media to DB
  1109 // Set abstract media to DB
  1185 // -----------------------------------------------------------------------------
  1110 // -----------------------------------------------------------------------------
  1186 //
  1111 //
  1187 void CMmMtpDpMetadataMpxAccess::SetAbstractMediaL( const TDesC& aAbstractMediaFileName,
  1112 void CMmMtpDpMetadataMpxAccess::SetReferenceL( const TDesC& aRefOwnerName,
  1188     CDesCArray& aRefFileArray, TMPXGeneralCategory aCategory )
  1113     CDesCArray& aRefFileArray,
  1189     {
  1114     TMPXGeneralCategory aCategory )
  1190     PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::SetAbstractMediaL" ) );
  1115     {
       
  1116     PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::SetReferenceL" ) );
  1191     CMPXMediaArray* abstractMediaArray = CMPXMediaArray::NewL();
  1117     CMPXMediaArray* abstractMediaArray = CMPXMediaArray::NewL();
  1192     CleanupStack::PushL( abstractMediaArray ); // + abstractMediaArray
  1118     CleanupStack::PushL( abstractMediaArray ); // + abstractMediaArray
  1193 
  1119 
  1194     TUint count = aRefFileArray.Count();
  1120     TUint count = aRefFileArray.Count();
  1195     for ( TUint j = 0; j < count; j++ )
  1121     for ( TUint j = 0; j < count; j++ )
  1196         {
  1122         {
  1197         // if the file is video, skip it and continue
       
  1198         if ( MmMtpDpUtility::IsVideoL( aRefFileArray[j], iFramework ) )
       
  1199             {
       
  1200             continue;
       
  1201             }
       
  1202 
       
  1203         // Creat media properties for the song
  1123         // Creat media properties for the song
  1204         RArray<TInt> contentIDs;
  1124         RArray<TInt> contentIDs;
  1205         CleanupClosePushL( contentIDs ); // + contentIDs
  1125         CleanupClosePushL( contentIDs ); // + contentIDs
  1206         contentIDs.AppendL( KMPXMediaIdGeneral );
  1126         contentIDs.AppendL( KMPXMediaIdGeneral );
  1207         contentIDs.AppendL( KMPXMediaIdAudio );
  1127         contentIDs.AppendL( KMPXMediaIdAudio );
  1215         // MPXMedia default types
  1135         // MPXMedia default types
  1216         media->SetTObjectValueL<TMPXGeneralType>( KMPXMediaGeneralType,
  1136         media->SetTObjectValueL<TMPXGeneralType>( KMPXMediaGeneralType,
  1217             EMPXItem );
  1137             EMPXItem );
  1218         media->SetTObjectValueL<TMPXGeneralCategory>( KMPXMediaGeneralCategory,
  1138         media->SetTObjectValueL<TMPXGeneralCategory>( KMPXMediaGeneralCategory,
  1219             EMPXSong );
  1139             EMPXSong );
  1220         // File Path
  1140 
  1221         //
  1141         media->SetTextValueL( KMPXMediaGeneralUri, aRefFileArray[j] );
       
  1142         // TODO: need to confirm that should set drive letter or storage root path.
  1222         TParsePtrC parse( aRefFileArray[j] );
  1143         TParsePtrC parse( aRefFileArray[j] );
  1223         media->SetTextValueL( KMPXMediaGeneralUri, aRefFileArray[j] );
       
  1224         media->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
  1144         media->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
  1225 
  1145 
  1226         // Add media into array contents
  1146         // Add media into array contents
  1227         abstractMediaArray->AppendL( media );
  1147         abstractMediaArray->AppendL( media );
  1228 
  1148 
  1236     CMPXMedia* abstractMedia = CMPXMedia::NewL( contentIDs.Array() );
  1156     CMPXMedia* abstractMedia = CMPXMedia::NewL( contentIDs.Array() );
  1237     CleanupStack::PopAndDestroy( &contentIDs ); // - contentIDs
  1157     CleanupStack::PopAndDestroy( &contentIDs ); // - contentIDs
  1238     CleanupStack::PushL( abstractMedia ); // + abstractMedia
  1158     CleanupStack::PushL( abstractMedia ); // + abstractMedia
  1239 
  1159 
  1240     abstractMedia->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem );
  1160     abstractMedia->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem );
  1241 
       
  1242     abstractMedia->SetTObjectValueL( KMPXMediaGeneralCategory, aCategory );
  1161     abstractMedia->SetTObjectValueL( KMPXMediaGeneralCategory, aCategory );
  1243 
  1162     abstractMedia->SetTextValueL( KMPXMediaGeneralUri, aRefOwnerName );
  1244     abstractMedia->SetTextValueL( KMPXMediaGeneralUri, aAbstractMediaFileName );
  1163     TParsePtrC parse( aRefOwnerName );
  1245 
       
  1246     TParsePtrC parse( aAbstractMediaFileName );
       
  1247     abstractMedia->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
  1164     abstractMedia->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
  1248     abstractMedia->SetTObjectValueL<TBool>( KMPXMediaGeneralSynchronized,
  1165     abstractMedia->SetTObjectValueL<TBool>( KMPXMediaGeneralSynchronized,
  1249         ETrue );
  1166         ETrue );
  1250     abstractMedia->SetCObjectValueL( KMPXMediaArrayContents, abstractMediaArray );
  1167     abstractMedia->SetCObjectValueL( KMPXMediaArrayContents, abstractMediaArray );
  1251     abstractMedia->SetTObjectValueL( KMPXMediaArrayCount,
  1168     abstractMedia->SetTObjectValueL( KMPXMediaArrayCount,
  1255     PERFLOGSTART( KMpxCollectionSetReferenceL );
  1172     PERFLOGSTART( KMpxCollectionSetReferenceL );
  1256     CollectionHelperL()->SetL( abstractMedia );
  1173     CollectionHelperL()->SetL( abstractMedia );
  1257     PERFLOGSTOP( KMpxCollectionSetReferenceL );
  1174     PERFLOGSTOP( KMpxCollectionSetReferenceL );
  1258 
  1175 
  1259     CleanupStack::PopAndDestroy( abstractMedia ); // - abstractMedia
  1176     CleanupStack::PopAndDestroy( abstractMedia ); // - abstractMedia
  1260 
       
  1261     // Clear the array
       
  1262     CleanupStack::PopAndDestroy( abstractMediaArray ); // - abstractMediaArray
  1177     CleanupStack::PopAndDestroy( abstractMediaArray ); // - abstractMediaArray
  1263 
  1178 
  1264     PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::SetAbstractMediaL" ) );
  1179     PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::SetReferenceL" ) );
  1265     }
  1180     }
  1266 
  1181 
  1267 // ---------------------------------------------------------------------------
  1182 // ---------------------------------------------------------------------------
  1268 // CMmMtpDpMetadataMpxAccess::SetStorageRootL
  1183 // CMmMtpDpMetadataMpxAccess::SetStorageRootL
  1269 // Set storage root of the MPX DB
  1184 // Set storage root of the MPX DB
  1309     aMediaProp.SetTextValueL( KMPXMediaMusicAlbumTrack, KNullDesC );
  1224     aMediaProp.SetTextValueL( KMPXMediaMusicAlbumTrack, KNullDesC );
  1310     // Genre
  1225     // Genre
  1311     aMediaProp.SetTextValueL( KMPXMediaMusicGenre, KNullDesC );
  1226     aMediaProp.SetTextValueL( KMPXMediaMusicGenre, KNullDesC );
  1312     // Composer
  1227     // Composer
  1313     aMediaProp.SetTextValueL( KMPXMediaMusicComposer, KNullDesC );
  1228     aMediaProp.SetTextValueL( KMPXMediaMusicComposer, KNullDesC );
  1314     // Album artFilename
  1229     // Album Artist
  1315     aMediaProp.SetTextValueL( KMPXMediaMusicAlbumArtFileName, KNullDesC );
  1230     aMediaProp.SetTextValueL( KMPXMediaMusicAlbumArtist, KNullDesC );
  1316     // URL
  1231     // URL
  1317     aMediaProp.SetTextValueL( KMPXMediaMusicURL, KNullDesC );
  1232     aMediaProp.SetTextValueL( KMPXMediaMusicURL, KNullDesC );
  1318 
  1233 
  1319     // add below for P4S failed case, that get metadata from cached CMPXMedia object
  1234     // add below for P4S failed case, that get metadata from cached CMPXMedia object
  1320     // DateAdded
  1235     // DateAdded
  1355             { EMTPObjectPropCodeDescription,             KMPXMediaGeneralComment },
  1270             { EMTPObjectPropCodeDescription,             KMPXMediaGeneralComment },
  1356             { EMTPObjectPropCodeNumberOfChannels,        KMPXMediaAudioNumberOfChannels },
  1271             { EMTPObjectPropCodeNumberOfChannels,        KMPXMediaAudioNumberOfChannels },
  1357             { EMTPObjectPropCodeAudioBitRate,            KMPXMediaAudioBitrate },
  1272             { EMTPObjectPropCodeAudioBitRate,            KMPXMediaAudioBitrate },
  1358             { EMTPObjectPropCodeSampleRate,              KMPXMediaAudioSamplerate },
  1273             { EMTPObjectPropCodeSampleRate,              KMPXMediaAudioSamplerate },
  1359             { EMTPObjectPropCodeAudioWAVECodec,          KMPXMediaAudioAudioCodec },
  1274             { EMTPObjectPropCodeAudioWAVECodec,          KMPXMediaAudioAudioCodec },
  1360             { EMTPObjectPropCodeAlbumArtist,             KMPXMediaMusicArtist }
  1275             { EMTPObjectPropCodeAlbumArtist,             KMPXMediaMusicAlbumArtist },
       
  1276             { EMTPObjectPropCodeRepresentativeSampleData,KMPXMediaMTPSampleDataFlag }
  1361         };
  1277         };
  1362 
  1278 
  1363     TInt i = 0;
  1279     TInt i = 0;
  1364     TInt count = sizeof( KMetadataTable ) / sizeof( KMetadataTable[0] );
  1280     TInt count = sizeof( KMetadataTable ) / sizeof( KMetadataTable[0] );
  1365     while ( ( KMetadataTable[i].iPropCode != aPropCode )
  1281     while ( ( KMetadataTable[i].iPropCode != aPropCode )
  1382 // CMmMtpDpMetadataMpxAccess::GetAllAbstractMediaL
  1298 // CMmMtpDpMetadataMpxAccess::GetAllAbstractMediaL
  1383 // Get all abstract medias from MPX database in the assigned store
  1299 // Get all abstract medias from MPX database in the assigned store
  1384 // ---------------------------------------------------------------------------
  1300 // ---------------------------------------------------------------------------
  1385 //
  1301 //
  1386 void CMmMtpDpMetadataMpxAccess::GetAllAbstractMediaL( const TDesC& aStoreRoot,
  1302 void CMmMtpDpMetadataMpxAccess::GetAllAbstractMediaL( const TDesC& aStoreRoot,
  1387         CMPXMediaArray** aAbstractMedias, TMPXGeneralCategory aCategory )
  1303     CMPXMediaArray** aAbstractMedias,
       
  1304     TMPXGeneralCategory aCategory )
  1388     {
  1305     {
  1389     PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::GetAllAbstractMediaL" ) );
  1306     PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::GetAllAbstractMediaL" ) );
  1390 
  1307 
  1391     SetStorageRootL( aStoreRoot );
  1308     SetStorageRootL( aStoreRoot );
  1392 
  1309 
  1546             {
  1463             {
  1547             User::Leave( KErrNotSupported );
  1464             User::Leave( KErrNotSupported );
  1548             }
  1465             }
  1549         name = aAbstractMedia->ValueText( KMPXMediaGeneralUri ).AllocL();
  1466         name = aAbstractMedia->ValueText( KMPXMediaGeneralUri ).AllocL();
  1550         }
  1467         }
       
  1468     else if ( aCategory == EMPXAbstractAlbum )
       
  1469         {
       
  1470         if ( !aAbstractMedia->IsSupported( KMPXMediaGeneralTitle ) )
       
  1471             {
       
  1472             User::Leave( KErrNotSupported );
       
  1473             }
       
  1474         name = aAbstractMedia->ValueText( KMPXMediaGeneralTitle ).AllocL();
       
  1475         }
  1551     else
  1476     else
  1552         {
  1477         {
  1553         User::Leave( KErrNotSupported );
  1478         User::Leave( KErrNotSupported );
  1554         }
  1479         }
  1555 
  1480