--- a/mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadatampxaccess.cpp Fri Apr 16 15:28:14 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadatampxaccess.cpp Mon May 03 12:58:40 2010 +0300
@@ -24,9 +24,7 @@
#include <mtp/tmtptypeuint128.h>
#include <mtp/cmtptypestring.h>
#include <mtp/cmtptypearray.h>
-#include <mtp/cmtpobjectmetadata.h>
#include <mtp/mmtpdataproviderframework.h>
-#include <mtp/mmtpreferencemgr.h>
#include <mtp/mtpprotocolconstants.h>
// from MPX
#include <mpxmedia.h>
@@ -44,26 +42,36 @@
#include "mmmtpdplogger.h"
#include "mmmtpdputility.h"
#include "tmmmtpdppanic.h"
+#include "tobjectdescription.h"
static const TInt KMtpInvalidSongID = 0x1FFFFFFF;
static const TInt KMtpChannelMono = 1;
static const TInt KMtpChannelStereo = 2;
-static const TInt KMtpDateTimeStringLength = 15;
-static const TInt KMtpMaxStringLength = 255;
-static const TInt KMtpMaxDescriptionLength = 0x200;
-_LIT( KMtpDateTimeFormat, "%F%Y%M%DT%H%T%S" );
+
_LIT( KMtpDateTimeConnector, "T" );
_LIT( KEmptyText, "" );
+#if defined(_DEBUG) || defined(MMMTPDP_PERFLOG)
+_LIT( KMpxCollectionNewL, "MpxCollectionNewL" );
+_LIT( KMpxCollectionAddL, "MpxCollectionAddL" );
+_LIT( KMpxCollectionGetL, "MpxCollectionGetL" );
+_LIT( KMpxCollectionSetL, "MpxCollectionSetL" );
+_LIT( KMpxCollectionSetReferenceL, "MpxCollectionSetReferenceL" );
+_LIT( KMpxCollectionGetAbstractMedia, "MpxCollectionGetAbstractMedia" );
+_LIT( KMpxCollectionGetReference, "MpxCollectionGetReference" );
+_LIT( KMpxCollectionFindAllLValidate, "MpxCollectionValidate" );
+_LIT( KMpxCollectionFindAllLBeforeAdd, "MpxCollectionFindAllLBeforeAdd" );
+_LIT( KSetMetadataValue, "SetMetadataValueL" );
+#endif
+
#ifdef _DEBUG
_LIT( KMtpMpxPanic, "CMmMtpDpMetadataMpxAccess" );
#endif
-CMmMtpDpMetadataMpxAccess* CMmMtpDpMetadataMpxAccess::NewL( RFs& aRfs,
- MMTPDataProviderFramework& aFramework )
+CMmMtpDpMetadataMpxAccess* CMmMtpDpMetadataMpxAccess::NewL( RFs& aRfs )
{
- CMmMtpDpMetadataMpxAccess* self = new(ELeave) CMmMtpDpMetadataMpxAccess( aRfs, aFramework );
+ CMmMtpDpMetadataMpxAccess* self = new( ELeave ) CMmMtpDpMetadataMpxAccess( aRfs );
CleanupStack::PushL( self );
self->ConstructL();
CleanupStack::Pop( self );
@@ -71,12 +79,10 @@
return self;
}
-CMmMtpDpMetadataMpxAccess::CMmMtpDpMetadataMpxAccess( RFs& aRfs,
- MMTPDataProviderFramework& aFramework ):
- iRfs( aRfs ),
- iFramework( aFramework )
+CMmMtpDpMetadataMpxAccess::CMmMtpDpMetadataMpxAccess( RFs& aRfs ):
+ iRfs( aRfs )
{
-
+ // Do nothing
}
// ---------------------------------------------------------------------------
@@ -118,25 +124,18 @@
//
void CMmMtpDpMetadataMpxAccess::GetObjectMetadataValueL( const TUint16 aPropCode,
MMTPType& aNewData,
- const CMTPObjectMetaData& aObjectMetaData )
+ const TDesC& aFullFileName,
+ TMPXGeneralCategory aCategory )
{
PRINT1( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::GetObjectMetadataValueL aPropCode = 0x%x" ), aPropCode );
- // File Path
- HBufC* suid = aObjectMetaData.DesC( CMTPObjectMetaData::ESuid ).AllocLC(); // + suid
- TUint format = aObjectMetaData.Uint( CMTPObjectMetaData::EFormatCode );
- TMPXGeneralCategory category = ( format == EMTPFormatCodeAbstractAudioVideoPlaylist ) ||
- ( format == EMTPFormatCodeM3UPlaylist ) ? EMPXPlaylist : EMPXSong;
-
PERFLOGSTART( KMpxCollectionGetL );
- const CMPXMedia& media = CollectionHelperL()->GetL( *suid, category );
+ const CMPXMedia& media = CollectionHelperL()->GetL( aFullFileName, aCategory );
PERFLOGSTOP( KMpxCollectionGetL );
- CleanupStack::PopAndDestroy( suid ); // - suid
-
- TMPXAttributeData attrib( MpxAttribFromPropL( media, aPropCode ) );
+ TMPXAttributeData attrib( MpxAttribFromPropL( aPropCode ) );
TBool isSupported = media.IsSupported( attrib );
- PRINT1(_L( "MM MTP <> CMmMtpDpMetadataMpxAccess::GetObjectMetadataValueL isSupported = %d" ), isSupported);
+ PRINT1(_L( "MM MTP <> CMmMtpDpMetadataMpxAccess::GetObjectMetadataValueL isSupported = %d" ), isSupported );
if ( aPropCode != EMTPObjectPropCodeOriginalReleaseDate
&& aPropCode != EMTPObjectPropCodeDRMStatus
@@ -193,7 +192,7 @@
case EMTPObjectPropCodeDateCreated:
{
TTime time( *media.Value<TInt64> ( attrib ) );
- TBuf<KMtpDateTimeStringLength> timeStr;
+ TBuf<KMtpMaxDateTimeStringLength> timeStr;
time.FormatL( timeStr, KMtpDateTimeFormat );
if ( EMTPTypeString == aNewData.Type() )
@@ -245,7 +244,7 @@
case EMTPObjectPropCodeOriginalReleaseDate:
{
// Compose DateTime string in format YYYYMMDDTHHMMSS
- TBuf<KMtpDateTimeStringLength> dateTime;
+ TBuf<KMtpMaxDateTimeStringLength> dateTime;
dateTime.Zero();
// NOTE: Handled specially, shouldn't leave like other property, following S60
@@ -346,9 +345,9 @@
// as a General Error
if ( iCollectionHelper == NULL )
{
- PERFLOGSTART(KMpxCollectionNewL);
+ PERFLOGSTART( KMpxCollectionNewL );
iCollectionHelper = CMPXCollectionHelperFactory::NewCollectionCachedHelperL();
- PERFLOGSTOP(KMpxCollectionNewL);
+ PERFLOGSTOP( KMpxCollectionNewL );
// Do a search for a song ID that does not exist
// This is to validate the presence of the media database.
@@ -418,7 +417,6 @@
searchMedia->SetTObjectValueL( KMPXMediaGeneralType, EMPXGroup );
searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXSong );
searchMedia->SetTObjectValueL<TBool>( aWMPMediaID, aFlag );
-
searchMedia->SetTextValueL( KMPXMediaGeneralDrive, iStoreRoot );
RArray<TMPXAttribute> songAttributes;
@@ -427,8 +425,7 @@
PRINT( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::FindWMPMediaLC searchMedia setup with no problems" ) );
- CMPXMedia* foundMedia = CollectionHelperL()->FindAllL(
- *searchMedia,
+ CMPXMedia* foundMedia = CollectionHelperL()->FindAllL( *searchMedia,
songAttributes.Array() );
PRINT( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::FindWMPMediaLC foundMedia assigned from FindAllL" ) );
@@ -543,9 +540,9 @@
KMPXMediaGeneralModified,
EFalse );
// Update the song's metadata with the media object
- PERFLOGSTART(KMpxCollectionSetL);
+ PERFLOGSTART( KMpxCollectionSetL );
CollectionHelperL()->SetL( media );
- PERFLOGSTOP(KMpxCollectionSetL);
+ PERFLOGSTOP( KMpxCollectionSetL );
CleanupStack::PopAndDestroy( media ); // - media
}
@@ -593,27 +590,14 @@
//
void CMmMtpDpMetadataMpxAccess::RenameObjectL( const TDesC& aOldFileName,
const TDesC& aNewFileName,
- TUint aFormatCode )
+ TMPXGeneralCategory aCategory )
{
PRINT2( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::RenameObjectL aOldFileName = %S, aNewFileName = %S" ),
- &aOldFileName, &aNewFileName );
+ &aOldFileName,
+ &aNewFileName );
TInt err = KErrNone;
-
- if ( ( aFormatCode == EMTPFormatCodeAbstractAudioVideoPlaylist )
- || ( aFormatCode == EMTPFormatCodeM3UPlaylist ) )
- {
- PRINT( _L( "MM MTP <> Playlist" ) );
- TRAP( err, CollectionHelperL()->RenameL(
- aOldFileName,
- aNewFileName,
- EMPXPlaylist ) );
- }
- else // Not a playlist
- {
- PRINT( _L( "MM MTP <> Non-Playlist" ) );
- TRAP( err, CollectionHelperL()->RenameL( aOldFileName, aNewFileName, EMPXSong ) );
- }
+ TRAP( err, CollectionHelperL()->RenameL( aOldFileName, aNewFileName, aCategory ) );
if ( KErrNotFound == err )
{
@@ -632,119 +616,43 @@
// -----------------------------------------------------------------------------
void CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL( const TUint16 aPropCode,
const MMTPType& aNewData,
- const TDesC& aSuid )
+ const TDesC& aFullFileName,
+ TMPXGeneralCategory aCategory )
{
- PRINT2( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL aPropCode = 0x%x aSuid = %S" ),
- aPropCode,
- &aSuid );
- CMPXMedia* media = NULL;
+ PRINT1( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL aPropCode = 0x%x" ), aPropCode );
- // Creat media properties for the song
RArray<TInt> contentIDs;
CleanupClosePushL( contentIDs ); // + contentIDs
+
contentIDs.AppendL( KMPXMediaIdGeneral );
- contentIDs.AppendL( KMPXMediaIdAudio );
- contentIDs.AppendL( KMPXMediaIdMusic );
- contentIDs.AppendL( KMPXMediaIdMTP );
- media = CMPXMedia::NewL( contentIDs.Array() );
- CleanupStack::PopAndDestroy( &contentIDs ); // - contentIDs
+ if ( aCategory == EMPXSong )
+ {
+ contentIDs.AppendL( KMPXMediaIdAudio );
+ contentIDs.AppendL( KMPXMediaIdMusic );
+ contentIDs.AppendL( KMPXMediaIdMTP );
+ }
+
+ CMPXMedia* media = CMPXMedia::NewL( contentIDs.Array() );
CleanupStack::PushL( media ); // + media
- media->SetTObjectValueL<TMPXGeneralCategory>(
- KMPXMediaGeneralCategory,
- EMPXSong );
+ media->SetTObjectValueL<TMPXGeneralCategory>( KMPXMediaGeneralCategory, aCategory );
// MPXMedia default types
media->SetTObjectValueL<TMPXGeneralType>( KMPXMediaGeneralType, EMPXItem );
- // Get file path
- TParsePtrC parse( aSuid );
- media->SetTextValueL( KMPXMediaGeneralUri, aSuid );
+ TParsePtrC parse( aFullFileName );
+ media->SetTextValueL( KMPXMediaGeneralUri, aFullFileName );
media->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
- TRAPD( err, SetMetadataValueL( aPropCode, aNewData, *media ) );
-
- if ( err == KErrNone )
- {
- SetStorageRootL( parse.Drive() );
-
- // Update the song's metadata with the media object
- PERFLOGSTART( KMpxCollectionSetL );
- CollectionHelperL()->SetL( media );
- PERFLOGSTOP( KMpxCollectionSetL );
- }
- else
- {
- PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL ERROR = %d" ), err );
-
- User::Leave( err );
- }
-
- CleanupStack::PopAndDestroy( media ); // - media
- PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL" ) );
- }
-
-// -----------------------------------------------------------------------------
-// CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL
-// Updated object metadata in MPX database
-// -----------------------------------------------------------------------------
-void CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL( const TUint16 aPropCode,
- const MMTPType& aNewData,
- const CMTPObjectMetaData& aObjectMetaData )
- {
- PRINT1( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL aPropCode = 0x%x" ), aPropCode );
- CMPXMedia* media = NULL;
-
- RArray<TInt> contentIDs;
- CleanupClosePushL( contentIDs ); // + contentIDs
-
- TUint format = aObjectMetaData.Uint( CMTPObjectMetaData::EFormatCode );
- if ( ( format == EMTPFormatCodeAbstractAudioVideoPlaylist )
- || ( format == EMTPFormatCodeM3UPlaylist ) )
- {
- PRINT( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL format is playlist" ) );
- contentIDs.AppendL( KMPXMediaIdGeneral );
-
- media = CMPXMedia::NewL( contentIDs.Array() );
- CleanupStack::PushL( media ); // + media
-
- media->SetTObjectValueL<TMPXGeneralCategory>(
- KMPXMediaGeneralCategory,
- EMPXPlaylist );
- }
- else
- {
- // Creat media properties for the song
- contentIDs.AppendL( KMPXMediaIdGeneral );
- contentIDs.AppendL( KMPXMediaIdAudio );
- contentIDs.AppendL( KMPXMediaIdMusic );
- contentIDs.AppendL( KMPXMediaIdMTP );
-
- media = CMPXMedia::NewL( contentIDs.Array() );
- CleanupStack::PushL( media ); // + media
-
- media->SetTObjectValueL<TMPXGeneralCategory>(
- KMPXMediaGeneralCategory,
- EMPXSong );
- }
-
- // MPXMedia default types
- media->SetTObjectValueL<TMPXGeneralType>( KMPXMediaGeneralType, EMPXItem );
-
- // Get file path
- HBufC* suid = aObjectMetaData.DesC( CMTPObjectMetaData::ESuid ).AllocLC(); // + suid
- TParsePtrC parse( *suid );
- media->SetTextValueL( KMPXMediaGeneralUri, *suid );
- media->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
- CleanupStack::PopAndDestroy( suid ); // - suid
-
+ PERFLOGSTART( KSetMetadataValue );
SetMetadataValueL( aPropCode, aNewData, *media );
+ PERFLOGSTOP( KSetMetadataValue );
// Update the song's metadata with the media object
- PERFLOGSTART(KMpxCollectionSetL);
+ PERFLOGSTART( KMpxCollectionSetL );
CollectionHelperL()->SetL( media );
- PERFLOGSTOP(KMpxCollectionSetL);
+ PERFLOGSTOP( KMpxCollectionSetL );
CleanupStack::PopAndDestroy( 2, &contentIDs ); // - media, contentIDs
@@ -765,7 +673,7 @@
TMTPTypeUint16 uint16Data;
TMTPTypeUint32 uint32Data;
- TMPXAttributeData attrib( MpxAttribFromPropL( aMediaProp, aPropCode ) );
+ TMPXAttributeData attrib( MpxAttribFromPropL( aPropCode ) );
switch ( aPropCode )
{
@@ -778,12 +686,11 @@
{
PRINT1( _L( "MM MTP <> SetMetadataValueL Before Copy, string length = %d" ), aNewData.Size() );
MMTPType::CopyL( aNewData, *textData );
- PRINT1( _L( "MM MTP <> SetMetadataValueL string length = %d" ), textData->StringChars().Length() );
- aMediaProp.SetTextValueL( attrib, textData->StringChars() );
- HBufC* log = textData->StringChars().AllocL();
- PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL string = %S" ), log );
- delete log;
- log = NULL;
+ HBufC* string = textData->StringChars().AllocLC();
+ PRINT1( _L( "MM MTP <> SetMetadataValueL string length = %d" ), string->Des().Length() );
+ aMediaProp.SetTextValueL( attrib, string->Des() );
+ PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL string = %S" ), string );
+ CleanupStack::PopAndDestroy(string);
}
break;
@@ -830,10 +737,10 @@
MMTPType::CopyL( aNewData, *textData );
TBuf<KMtpMaxStringLength> data;
- data.Copy( textData->StringChars().Left( KMtpDateTimeStringLength ) );
+ data.Copy( textData->StringChars().Left( KMtpMaxDateTimeStringLength ) );
PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL 0xDC99 date = %S" ),
&data );
- if ( data.Length() < KMtpDateTimeStringLength )
+ if ( data.Length() < KMtpMaxDateTimeStringLength )
{
PRINT( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL 0xDC99 date string is too short" ) );
break;
@@ -906,27 +813,25 @@
case EMTPObjectPropCodeDescription:
{
#ifdef __MUSIC_ID_SUPPORT
- //WriteMusicIdsL(*longString);
+ // WriteMusicIdsL(*longString);
#else
desData = CMTPTypeArray::NewLC( EMTPTypeAUINT16 ); // + desData
MMTPType::CopyL( aNewData, *desData );
TUint length = desData->NumElements();
PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL length = %d" ),
length );
- if ( length != 0 )
- {
- TBuf<KMtpMaxDescriptionLength> text;
- text.Zero();
- for ( TUint i = 0; i < length; i++ )
- text.Append( desData->ElementUint( i ) );
- PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL text = %S" ),
- &text );
- aMediaProp.SetTextValueL( KMPXMediaGeneralComment, text );
- }
- else
- {
- aMediaProp.SetTextValueL( KMPXMediaGeneralComment, KEmptyText );
- }
+
+ length = ( length < KMTPMaxDescriptionLen ) ? length : KMTPMaxDescriptionLen;
+ HBufC* text = HBufC::NewLC( length ); // + text
+ TPtr ptr = text->Des();
+
+ for ( TUint i = 0; i < length; i++ )
+ ptr.Append( desData->ElementUint( i ) );
+ PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL text = %S" ),
+ text );
+ aMediaProp.SetTextValueL( KMPXMediaGeneralComment, text->Des() );
+ CleanupStack::PopAndDestroy( text ); // - text
+
CleanupStack::PopAndDestroy( desData ); // - desData
#endif //__MUSIC_ID_SUPPORT
}
@@ -940,6 +845,27 @@
}
break;
+ case EMTPObjectPropCodeRepresentativeSampleData:
+ {
+ const CMTPTypeArray& mtpTypeArray = static_cast<const CMTPTypeArray&>( aNewData );
+ TUint32 numElements = mtpTypeArray.NumElements();
+ const TDesC& suid = aMediaProp.ValueText( KMPXMediaGeneralUri );
+ PRINT2( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL SampleData numElements = %d, suid = %S" ), numElements, &suid );
+
+ HBufC8* sampleData = HBufC8::NewLC( numElements * sizeof( TUint8 ) );
+ TPtr8 samplePtr = sampleData->Des();
+ mtpTypeArray.ToDes( samplePtr );
+ RFile sampleFile;
+ CleanupClosePushL( sampleFile );
+ User::LeaveIfError( sampleFile.Replace( iRfs, suid, EFileWrite ) );
+ User::LeaveIfError( sampleFile.Write( samplePtr ) );
+ CleanupStack::PopAndDestroy( &sampleFile );
+ CleanupStack::PopAndDestroy( sampleData );
+ aMediaProp.SetTObjectValueL<TBool>( attrib, ETrue );
+ PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL SampleData is ready = %u" ), 1 );
+ }
+ break;
+
default:
{
User::Leave( KErrNotSupported );
@@ -970,10 +896,9 @@
CleanupStack::PushL( searchMedia ); // + searchMedia
searchMedia->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem );
-
searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXSong );
-
searchMedia->SetTextValueL( KMPXMediaGeneralUri, aFullFileName );
+ searchMedia->SetTextValueL( KMPXMediaGeneralDrive, iStoreRoot );
RArray<TMPXAttribute> songAttributes;
CleanupClosePushL( songAttributes ); // + songAttributes
@@ -981,11 +906,10 @@
PRINT( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::AddSongL searchMedia setup with no problems" ) );
- PERFLOGSTART(KMpxCollectionFindAllLBeforeAdd);
- CMPXMedia* foundMedia = CollectionHelperL()->FindAllL(
- *searchMedia,
+ PERFLOGSTART( KMpxCollectionFindAllLBeforeAdd );
+ CMPXMedia* foundMedia = CollectionHelperL()->FindAllL( *searchMedia,
songAttributes.Array() );
- PERFLOGSTOP(KMpxCollectionFindAllLBeforeAdd);
+ PERFLOGSTOP( KMpxCollectionFindAllLBeforeAdd );
CleanupStack::PopAndDestroy( &songAttributes ); // - songAttributes
CleanupStack::PopAndDestroy( searchMedia ); // - searchMedia
@@ -1022,11 +946,9 @@
CleanupStack::PushL( media ); // + media
// MPXMedia default types
- media->SetTObjectValueL<TMPXGeneralType>(
- KMPXMediaGeneralType,
+ media->SetTObjectValueL<TMPXGeneralType>( KMPXMediaGeneralType,
EMPXItem );
- media->SetTObjectValueL<TMPXGeneralCategory>(
- KMPXMediaGeneralCategory,
+ media->SetTObjectValueL<TMPXGeneralCategory>( KMPXMediaGeneralCategory,
EMPXSong );
// File Path
//
@@ -1050,17 +972,17 @@
if ( foundItemCount == 0 )
{
- PERFLOGSTART(KMpxCollectionAddL);
+ PERFLOGSTART( KMpxCollectionAddL );
CollectionHelperL()->AddL( media );
- PERFLOGSTOP(KMpxCollectionAddL);
+ PERFLOGSTOP( KMpxCollectionAddL );
PRINT( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::AddSongL Media added into collection" ) );
}
else
{
- PERFLOGSTART(KMpxCollectionSetL);
+ PERFLOGSTART( KMpxCollectionSetL );
CollectionHelperL()->SetL( media );
- PERFLOGSTOP(KMpxCollectionSetL);
+ PERFLOGSTOP( KMpxCollectionSetL );
PRINT( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::AddSongL Media metadata updated in collection" ) );
}
@@ -1074,15 +996,15 @@
}
// -----------------------------------------------------------------------------
-// CMmMtpDpMetadataMpxAccess::AddPlaylistL
-// Adds Playlist to Mpx DB
+// CMmMtpDpMetadataMpxAccess::AddAbstractMediaL
+// Adds abstract media to Mpx DB
// -----------------------------------------------------------------------------
//
-void CMmMtpDpMetadataMpxAccess::AddPlaylistL( const TDesC& aFullFileName )
+void CMmMtpDpMetadataMpxAccess::AddAbstractMediaL( const TDesC& aFullFileName, TMPXGeneralCategory aCategory )
{
- PRINT1( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::AddPlaylistL aFullFileName = %S" ), &aFullFileName );
+ PRINT1( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::AddAbstractMediaL aFullFileName = %S" ), &aFullFileName );
- // Does a record already exist for this playlist?
+ // Does a record already exist for this AbstractMedia?
RArray<TInt> contentIDs;
CleanupClosePushL( contentIDs ); // + contentIDs
contentIDs.AppendL( KMPXMediaIdGeneral );
@@ -1092,21 +1014,24 @@
CleanupStack::PushL( searchMedia ); // + searchMedia
searchMedia->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem );
- searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXPlaylist );
+ searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, aCategory );
searchMedia->SetTextValueL( KMPXMediaGeneralUri, aFullFileName );
- RArray<TMPXAttribute> playlistAttributes;
- CleanupClosePushL( playlistAttributes ); // + playlistAttributes
- playlistAttributes.AppendL( KMPXMediaGeneralId );
- playlistAttributes.AppendL( KMPXMediaGeneralTitle );
- playlistAttributes.AppendL( KMPXMediaGeneralUri );
+ RArray<TMPXAttribute> abstractMediaAttributes;
+ CleanupClosePushL( abstractMediaAttributes ); // + abstractMediaAttributes
+ abstractMediaAttributes.AppendL( KMPXMediaGeneralId );
+ abstractMediaAttributes.AppendL( KMPXMediaGeneralTitle );
+ if ( aCategory == EMPXPlaylist )
+ {
+ abstractMediaAttributes.AppendL( KMPXMediaGeneralUri );
+ }
- PERFLOGSTART(KMpxCollectionFindAllLBeforeAdd);
+ PERFLOGSTART( KMpxCollectionFindAllLBeforeAdd );
CMPXMedia* foundMedia = CollectionHelperL()->FindAllL( *searchMedia,
- playlistAttributes.Array() );
- PERFLOGSTOP(KMpxCollectionFindAllLBeforeAdd);
+ abstractMediaAttributes.Array() );
+ PERFLOGSTOP( KMpxCollectionFindAllLBeforeAdd );
- CleanupStack::PopAndDestroy( &playlistAttributes ); // - playlistAttributes
+ CleanupStack::PopAndDestroy( &abstractMediaAttributes ); // - abstractMediaAttributes
CleanupStack::PopAndDestroy( searchMedia ); // - searchMedia
CleanupStack::PushL( foundMedia ); // + foundMedia
@@ -1117,12 +1042,12 @@
if ( foundItemCount != 0 )
{
- PRINT( _L( "MM MTP <> Playlist Media already exists in the collection" ) );
+ PRINT( _L( "MM MTP <> Abstract Media already exists in the collection" ) );
}
else
{
- // Creat media properties for the playlist
- PRINT( _L( "MM MTP <> Create playlist media properties" ) );
+ // Creat media properties for the abstractMedia
+ PRINT( _L( "MM MTP <> Create abstract media properties" ) );
RArray<TInt> contentIDs;
CleanupClosePushL( contentIDs ); // + contentIDs
contentIDs.AppendL( KMPXMediaIdGeneral );
@@ -1131,14 +1056,14 @@
CleanupStack::PopAndDestroy( &contentIDs ); // - contentIDs
CleanupStack::PushL( media ); // + media
- CMPXMediaArray* playlistArray = CMPXMediaArray::NewL();
- CleanupStack::PushL( playlistArray ); // + playlistArray;
+ CMPXMediaArray* abstractMediaArray = CMPXMediaArray::NewL();
+ CleanupStack::PushL( abstractMediaArray ); // + abstractMediaArray;
// MPXMedia default types
media->SetTObjectValueL<TMPXGeneralType>( KMPXMediaGeneralType,
EMPXItem );
media->SetTObjectValueL<TMPXGeneralCategory>( KMPXMediaGeneralCategory,
- EMPXPlaylist );
+ aCategory );
// File Path
//
media->SetTextValueL( KMPXMediaGeneralUri, aFullFileName );
@@ -1146,47 +1071,49 @@
TParsePtrC parse( aFullFileName );
media->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
- media->SetTextValueL( KMPXMediaGeneralTitle, parse.Name() );
+ if ( ( aCategory == EMPXPlaylist ) || ( aCategory == EMPXAbstractAlbum ) )
+ {
+ media->SetTextValueL( KMPXMediaGeneralTitle, parse.Name() );
+ }
media->SetTObjectValueL<TBool>( KMPXMediaGeneralSynchronized, ETrue );
- media->SetCObjectValueL( KMPXMediaArrayContents, playlistArray );
- media->SetTObjectValueL( KMPXMediaArrayCount, playlistArray->Count() );
+ media->SetCObjectValueL( KMPXMediaArrayContents, abstractMediaArray );
+ media->SetTObjectValueL( KMPXMediaArrayCount, abstractMediaArray->Count() );
+ if ( aCategory == EMPXAbstractAlbum )
+ {
+ media->SetTObjectValueL( KMPXMediaMTPSampleDataFlag, EFalse );
+ }
- PERFLOGSTART(KMpxCollectionAddL);
+ PERFLOGSTART( KMpxCollectionAddL );
CollectionHelperL()->AddL( media );
- PERFLOGSTOP(KMpxCollectionAddL);
+ PERFLOGSTOP( KMpxCollectionAddL );
// Clear the array
- CleanupStack::PopAndDestroy( playlistArray ); // - playlistArray
+ CleanupStack::PopAndDestroy( abstractMediaArray ); // - abstractMediaArray
CleanupStack::PopAndDestroy( media ); // - media
}
CleanupStack::PopAndDestroy( foundMedia ); // - foundMedia
- PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::AddPlaylistL" ) );
+ PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::AddAbstractMediaL" ) );
}
// -----------------------------------------------------------------------------
-// CMmMtpDpMetadataMpxAccess::SetPlaylistL
-// Set playlist to DB
+// CMmMtpDpMetadataMpxAccess::SetReferenceL
+// Set abstract media to DB
// -----------------------------------------------------------------------------
//
-void CMmMtpDpMetadataMpxAccess::SetPlaylistL( const TDesC& aPlaylistFileName,
- CDesCArray& aRefFileArray )
+void CMmMtpDpMetadataMpxAccess::SetReferenceL( const TDesC& aRefOwnerName,
+ CDesCArray& aRefFileArray,
+ TMPXGeneralCategory aCategory )
{
- PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::SetPlaylistL" ) );
- CMPXMediaArray* playlistArray = CMPXMediaArray::NewL();
- CleanupStack::PushL( playlistArray ); // + playlistArray
+ PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::SetReferenceL" ) );
+ CMPXMediaArray* abstractMediaArray = CMPXMediaArray::NewL();
+ CleanupStack::PushL( abstractMediaArray ); // + abstractMediaArray
TUint count = aRefFileArray.Count();
for ( TUint j = 0; j < count; j++ )
{
- // if the file is video, skip it and continue
- if ( MmMtpDpUtility::IsVideoL( aRefFileArray[j], iFramework ) )
- {
- continue;
- }
-
// Creat media properties for the song
RArray<TInt> contentIDs;
CleanupClosePushL( contentIDs ); // + contentIDs
@@ -1204,14 +1131,14 @@
EMPXItem );
media->SetTObjectValueL<TMPXGeneralCategory>( KMPXMediaGeneralCategory,
EMPXSong );
- // File Path
- //
+
+ media->SetTextValueL( KMPXMediaGeneralUri, aRefFileArray[j] );
+ // TODO: need to confirm that should set drive letter or storage root path.
TParsePtrC parse( aRefFileArray[j] );
- media->SetTextValueL( KMPXMediaGeneralUri, aRefFileArray[j] );
media->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
// Add media into array contents
- playlistArray->AppendL( media );
+ abstractMediaArray->AppendL( media );
CleanupStack::Pop( media ); // - media
}
@@ -1220,35 +1147,30 @@
CleanupClosePushL( contentIDs ); // + contentIDs
contentIDs.AppendL( KMPXMediaIdGeneral );
- CMPXMedia* playlistMedia = CMPXMedia::NewL( contentIDs.Array() );
+ CMPXMedia* abstractMedia = CMPXMedia::NewL( contentIDs.Array() );
CleanupStack::PopAndDestroy( &contentIDs ); // - contentIDs
- CleanupStack::PushL( playlistMedia ); // + playlistMedia
-
- playlistMedia->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem );
+ CleanupStack::PushL( abstractMedia ); // + abstractMedia
- playlistMedia->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXPlaylist );
-
- playlistMedia->SetTextValueL( KMPXMediaGeneralUri, aPlaylistFileName );
-
- TParsePtrC parse( aPlaylistFileName );
- playlistMedia->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
- playlistMedia->SetTObjectValueL<TBool>( KMPXMediaGeneralSynchronized,
+ abstractMedia->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem );
+ abstractMedia->SetTObjectValueL( KMPXMediaGeneralCategory, aCategory );
+ abstractMedia->SetTextValueL( KMPXMediaGeneralUri, aRefOwnerName );
+ TParsePtrC parse( aRefOwnerName );
+ abstractMedia->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
+ abstractMedia->SetTObjectValueL<TBool>( KMPXMediaGeneralSynchronized,
ETrue );
- playlistMedia->SetCObjectValueL( KMPXMediaArrayContents, playlistArray );
- playlistMedia->SetTObjectValueL( KMPXMediaArrayCount,
- playlistArray->Count() );
+ abstractMedia->SetCObjectValueL( KMPXMediaArrayContents, abstractMediaArray );
+ abstractMedia->SetTObjectValueL( KMPXMediaArrayCount,
+ abstractMediaArray->Count() );
- // Update the duplicate playlist(s) with the new playlist array
- PERFLOGSTART(KMpxCollectionSetL);
- CollectionHelperL()->SetL( playlistMedia );
- PERFLOGSTOP(KMpxCollectionSetL);
+ // Update the duplicate abstractMedia(s) with the new abstractMedia array
+ PERFLOGSTART( KMpxCollectionSetReferenceL );
+ CollectionHelperL()->SetL( abstractMedia );
+ PERFLOGSTOP( KMpxCollectionSetReferenceL );
- CleanupStack::PopAndDestroy( playlistMedia ); // - playlistMedia
+ CleanupStack::PopAndDestroy( abstractMedia ); // - abstractMedia
+ CleanupStack::PopAndDestroy( abstractMediaArray ); // - abstractMediaArray
- // Clear the array
- CleanupStack::PopAndDestroy( playlistArray ); // - playlistArray
-
- PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::SetPlaylistL" ) );
+ PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::SetReferenceL" ) );
}
// ---------------------------------------------------------------------------
@@ -1261,8 +1183,7 @@
PRINT1( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::SetStorageRoot aStoreRoot = %S" ), &aStorageRoot );
// get the drive number
- TParse pathParser;
- User::LeaveIfError( pathParser.Set( aStorageRoot, NULL, NULL ) );
+ TParsePtrC pathParser( aStorageRoot );
TChar driveChar( pathParser.Drive()[0] );
TInt driveNumber;
@@ -1299,36 +1220,55 @@
aMediaProp.SetTextValueL( KMPXMediaMusicGenre, KNullDesC );
// Composer
aMediaProp.SetTextValueL( KMPXMediaMusicComposer, KNullDesC );
- // Album artFilename
- aMediaProp.SetTextValueL( KMPXMediaMusicAlbumArtFileName, KNullDesC );
+ // Album Artist
+ aMediaProp.SetTextValueL( KMPXMediaMusicAlbumArtist, KNullDesC );
// URL
aMediaProp.SetTextValueL( KMPXMediaMusicURL, KNullDesC );
+
+ // add below for P4S failed case, that get metadata from cached CMPXMedia object
+ // DateAdded
+ TTime time;
+ time.HomeTime();
+ aMediaProp.SetTObjectValueL( KMPXMediaGeneralDate, time.Int64() );
+ // SampleRate
+ aMediaProp.SetTObjectValueL<TUint32>( KMPXMediaAudioSamplerate, 0 );
+ // AudioBitrate
+ aMediaProp.SetTObjectValueL<TUint32>( KMPXMediaAudioBitrate, 0 );
+ // Duration
+ aMediaProp.SetTObjectValueL<TInt>( KMPXMediaGeneralDuration, 0 );
+ // DrmStatus
+ aMediaProp.SetTObjectValueL<TUint16>( KMPXMediaMTPDrmStatus, 0 );
+ // NumberOfChannels
+ aMediaProp.SetTObjectValueL<TUint32>( KMPXMediaAudioNumberOfChannels, 0 );
+ // AudioCodec
+ aMediaProp.SetTObjectValueL<TUint32>( KMPXMediaAudioAudioCodec, 0 );
+
PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::SetDefaultL" ) );
}
-TMPXAttributeData CMmMtpDpMetadataMpxAccess::MpxAttribFromPropL( const CMPXMedia& aMedia,
- const TUint16 aPropCode )
+TMPXAttributeData CMmMtpDpMetadataMpxAccess::MpxAttribFromPropL( const TUint16 aPropCode )
{
const TMetadataTable KMetadataTable[] =
- {
- { EMTPObjectPropCodeName, KMPXMediaGeneralTitle },
- { EMTPObjectPropCodeArtist, KMPXMediaMusicArtist },
- { EMTPObjectPropCodeAlbumName, KMPXMediaMusicAlbum },
- { EMTPObjectPropCodeDateModified, KMPXMediaGeneralDate },
- { EMTPObjectPropCodeDateAdded, KMPXMediaGeneralDate },
- { EMTPObjectPropCodeDuration, KMPXMediaGeneralDuration },
- { EMTPObjectPropCodeTrack, KMPXMediaMusicAlbumTrack },
- { EMTPObjectPropCodeComposer, KMPXMediaMusicComposer },
- { EMTPObjectPropCodeOriginalReleaseDate, KMPXMediaMusicYear },
- { EMTPObjectPropCodeGenre, KMPXMediaMusicGenre },
- { EMTPObjectPropCodeDRMStatus, KMPXMediaMTPDrmStatus },
- { EMTPObjectPropCodeDescription, KMPXMediaGeneralComment },
- { EMTPObjectPropCodeNumberOfChannels, KMPXMediaAudioNumberOfChannels },
- { EMTPObjectPropCodeAudioBitRate, KMPXMediaAudioBitrate },
- { EMTPObjectPropCodeSampleRate, KMPXMediaAudioSamplerate },
- { EMTPObjectPropCodeAudioWAVECodec, KMPXMediaAudioAudioCodec },
- { EMTPObjectPropCodeAlbumArtist, KMPXMediaMusicArtist }
- };
+ {
+ { EMTPObjectPropCodeName, KMPXMediaGeneralTitle },
+ { EMTPObjectPropCodeArtist, KMPXMediaMusicArtist },
+ { EMTPObjectPropCodeAlbumName, KMPXMediaMusicAlbum },
+ { EMTPObjectPropCodeDateModified, KMPXMediaGeneralDate },
+ { EMTPObjectPropCodeDateAdded, KMPXMediaGeneralDate },
+ { EMTPObjectPropCodeDuration, KMPXMediaGeneralDuration },
+ { EMTPObjectPropCodeTrack, KMPXMediaMusicAlbumTrack },
+ { EMTPObjectPropCodeComposer, KMPXMediaMusicComposer },
+ { EMTPObjectPropCodeOriginalReleaseDate, KMPXMediaMusicYear },
+ { EMTPObjectPropCodeGenre, KMPXMediaMusicGenre },
+ { EMTPObjectPropCodeDRMStatus, KMPXMediaMTPDrmStatus },
+ { EMTPObjectPropCodeDescription, KMPXMediaGeneralComment },
+ { EMTPObjectPropCodeNumberOfChannels, KMPXMediaAudioNumberOfChannels },
+ { EMTPObjectPropCodeAudioBitRate, KMPXMediaAudioBitrate },
+ { EMTPObjectPropCodeSampleRate, KMPXMediaAudioSamplerate },
+ { EMTPObjectPropCodeAudioWAVECodec, KMPXMediaAudioAudioCodec },
+ { EMTPObjectPropCodeAlbumArtist, KMPXMediaMusicAlbumArtist },
+ { EMTPObjectPropCodeRepresentativeSampleData,KMPXMediaMTPSampleDataFlag }
+ };
TInt i = 0;
TInt count = sizeof( KMetadataTable ) / sizeof( KMetadataTable[0] );
@@ -1349,14 +1289,15 @@
}
// ---------------------------------------------------------------------------
-// CMmMtpDpMetadataMpxAccess::GetAllPlaylistL
-// Get all playlists from MPX database in the assigned store
+// CMmMtpDpMetadataMpxAccess::GetAllAbstractMediaL
+// Get all abstract medias from MPX database in the assigned store
// ---------------------------------------------------------------------------
//
-void CMmMtpDpMetadataMpxAccess::GetAllPlaylistL( const TDesC& aStoreRoot,
- CMPXMediaArray** aPlaylists )
+void CMmMtpDpMetadataMpxAccess::GetAllAbstractMediaL( const TDesC& aStoreRoot,
+ CMPXMediaArray** aAbstractMedias,
+ TMPXGeneralCategory aCategory )
{
- PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::GetAllPlaylistL" ) );
+ PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::GetAllAbstractMediaL" ) );
SetStorageRootL( aStoreRoot );
@@ -1369,21 +1310,24 @@
CleanupStack::PushL( searchMedia ); // + searchMedia
searchMedia->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem );
- searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXPlaylist );
+ searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, aCategory );
searchMedia->SetTextValueL( KMPXMediaGeneralDrive, iStoreRoot );
- RArray<TMPXAttribute> playlistAttributes;
- CleanupClosePushL( playlistAttributes ); // + playlistAttributes
- playlistAttributes.AppendL( KMPXMediaGeneralId );
- playlistAttributes.AppendL( KMPXMediaGeneralTitle );
- playlistAttributes.AppendL( KMPXMediaGeneralUri );
+ RArray<TMPXAttribute> abstractMediaAttributes;
+ CleanupClosePushL( abstractMediaAttributes ); // + abstractMediaAttributes
+ abstractMediaAttributes.AppendL( KMPXMediaGeneralId );
+ abstractMediaAttributes.AppendL( KMPXMediaGeneralTitle );
+ if ( aCategory == EMPXPlaylist )
+ {
+ abstractMediaAttributes.AppendL( KMPXMediaGeneralUri );
+ }
- PERFLOGSTART(KMpxCollectionGetPlaylist);
+ PERFLOGSTART( KMpxCollectionGetAbstractMedia );
CMPXMedia* foundMedia = CollectionHelperL()->FindAllL( *searchMedia,
- playlistAttributes.Array() );
- PERFLOGSTOP(KMpxCollectionGetPlaylist);
+ abstractMediaAttributes.Array() );
+ PERFLOGSTOP( KMpxCollectionGetAbstractMedia );
- CleanupStack::PopAndDestroy( &playlistAttributes ); // - playlistAttributes
+ CleanupStack::PopAndDestroy( &abstractMediaAttributes ); // - abstractMediaAttributes
CleanupStack::PopAndDestroy( searchMedia ); // - searchMedia
CleanupStack::PushL( foundMedia ); // + foundMedia
@@ -1392,9 +1336,9 @@
User::Leave( KErrNotSupported );
}
- TInt count = *foundMedia->Value<TInt> ( KMPXMediaArrayCount );
+ TInt count = *foundMedia->Value<TInt>( KMPXMediaArrayCount );
- PRINT1( _L("MM MTP <> CMmMtpDpMetadataMpxAccess::GetAllPlaylistL [%d] playlists found in Playlist Database"), count );
+ PRINT1( _L("MM MTP <> CMmMtpDpMetadataMpxAccess::GetAllAbstractMediaL [%d] abstractMedias found in Database"), count );
if ( count > 0 )
{
@@ -1403,13 +1347,13 @@
User::Leave( KErrNotSupported );
}
- *aPlaylists = CMPXMediaArray::NewL( *( foundMedia->Value<CMPXMediaArray> (
- KMPXMediaArrayContents ) ) );
+ *aAbstractMedias =
+ CMPXMediaArray::NewL( *( foundMedia->Value<CMPXMediaArray> ( KMPXMediaArrayContents ) ) );
}
CleanupStack::PopAndDestroy( foundMedia ); // - foundMedia
- PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::GetAllPlaylistL" ) );
+ PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::GetAllAbstractMediaL" ) );
}
// ---------------------------------------------------------------------------
@@ -1417,15 +1361,15 @@
// Get all references of specified playlist
// ---------------------------------------------------------------------------
//
-void CMmMtpDpMetadataMpxAccess::GetAllReferenceL( CMPXMedia* aPlaylist,
- CDesCArray& aReferences )
+void CMmMtpDpMetadataMpxAccess::GetAllReferenceL( CMPXMedia* aAbstractMedia,
+ CDesCArray& aReferences )
{
PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::GetAllReferenceL" ) );
- __ASSERT_DEBUG( aPlaylist, User::Panic( KMtpMpxPanic, KErrArgument ) );
+ __ASSERT_DEBUG( aAbstractMedia, User::Panic( KMtpMpxPanic, KErrArgument ) );
// Extract the playlist id from the found object
- TUint32 playlistId = *(*aPlaylist).Value<TMPXItemId> ( KMPXMediaGeneralId );
+ TUint32 abstractMediaId = *( *aAbstractMedia ).Value<TMPXItemId>( KMPXMediaGeneralId );
// find the media object that contains a list of songs in the playlist
RArray<TInt> contentIDs;
@@ -1438,17 +1382,17 @@
searchMedia->SetTObjectValueL( KMPXMediaGeneralType, EMPXGroup );
searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXSong );
- searchMedia->SetTObjectValueL<TMPXItemId> ( KMPXMediaGeneralId, playlistId );
+ searchMedia->SetTObjectValueL<TMPXItemId>( KMPXMediaGeneralId, abstractMediaId );
RArray<TMPXAttribute> songAttributes;
CleanupClosePushL( songAttributes ); // + songAttributes
songAttributes.AppendL( KMPXMediaGeneralId );
songAttributes.AppendL( KMPXMediaGeneralUri );
- PERFLOGSTART(KMpxCollectionGetReference);
+ PERFLOGSTART( KMpxCollectionGetReference );
CMPXMedia* foundMedia = CollectionHelperL()->FindAllL( *searchMedia,
songAttributes.Array() );
- PERFLOGSTOP(KMpxCollectionGetReference);
+ PERFLOGSTOP( KMpxCollectionGetReference );
CleanupStack::PopAndDestroy( &songAttributes ); // - songAttributes
CleanupStack::PopAndDestroy( searchMedia ); // - searchMedia
@@ -1498,23 +1442,38 @@
}
// ---------------------------------------------------------------------------
-// CMmMtpDpMetadataMpxAccess::GetPlaylistNameL
+// CMmMtpDpMetadataMpxAccess::GetAbstractMediaNameL
//
// ---------------------------------------------------------------------------
//
-void CMmMtpDpMetadataMpxAccess::GetPlaylistNameL( CMPXMedia* aPlaylist,
- TDes& aPlaylistName )
+HBufC* CMmMtpDpMetadataMpxAccess::GetAbstractMediaNameL( CMPXMedia* aAbstractMedia,
+ TMPXGeneralCategory aCategory )
{
- PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::GetPlaylistNameL" ) );
-
- if ( !aPlaylist->IsSupported( KMPXMediaGeneralUri ) )
+ PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::GetAbstractMediaNameL" ) );
+ HBufC* name = NULL;
+ if ( aCategory == EMPXPlaylist )
+ {
+ if( !aAbstractMedia->IsSupported( KMPXMediaGeneralUri ) )
+ {
+ User::Leave( KErrNotSupported );
+ }
+ name = aAbstractMedia->ValueText( KMPXMediaGeneralUri ).AllocL();
+ }
+ else if ( aCategory == EMPXAbstractAlbum )
+ {
+ if ( !aAbstractMedia->IsSupported( KMPXMediaGeneralTitle ) )
+ {
+ User::Leave( KErrNotSupported );
+ }
+ name = aAbstractMedia->ValueText( KMPXMediaGeneralTitle ).AllocL();
+ }
+ else
{
User::Leave( KErrNotSupported );
}
- aPlaylistName.Copy( aPlaylist->ValueText( KMPXMediaGeneralUri ) );
-
- PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::GetPlaylistNameL" ) );
+ PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::GetAbstractMediaNameL" ) );
+ return name;
}
// ---------------------------------------------------------------------------
@@ -1523,7 +1482,7 @@
// ---------------------------------------------------------------------------
//
void CMmMtpDpMetadataMpxAccess::GetModifiedContentL( TInt& arrayCount,
- CDesCArray& aModifiedcontent )
+ CDesCArray& aModifiedcontent )
{
PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::GetModifiedContentL" ) );
CMPXMedia* foundMedia;
@@ -1597,6 +1556,7 @@
searchMedia->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem );
searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXPlaylist );
searchMedia->SetTextValueL( KMPXMediaGeneralUri, aSuid );
+ searchMedia->SetTextValueL( KMPXMediaGeneralDrive, iStoreRoot );
RArray<TMPXAttribute> playlistAttributes;
CleanupClosePushL( playlistAttributes ); // + playlistAttributes