--- a/mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadatampxaccess.cpp Wed Jun 16 16:05:08 2010 +0100
+++ b/mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadatampxaccess.cpp Thu Jul 22 16:38:21 2010 +0100
@@ -67,10 +67,6 @@
_LIT( KSetMetadataValue, "SetMetadataValueL" );
#endif
-#ifdef _DEBUG
-_LIT( KMtpMpxPanic, "CMmMtpDpMetadataMpxAccess" );
-#endif
-
CMmMtpDpMetadataMpxAccess* CMmMtpDpMetadataMpxAccess::NewL( RFs& aRfs )
{
CMmMtpDpMetadataMpxAccess* self = new( ELeave ) CMmMtpDpMetadataMpxAccess( aRfs );
@@ -81,9 +77,10 @@
return self;
}
-CMmMtpDpMetadataMpxAccess::CMmMtpDpMetadataMpxAccess( RFs& aRfs ):
+CMmMtpDpMetadataMpxAccess::CMmMtpDpMetadataMpxAccess( RFs& aRfs ) :
iRfs( aRfs ),
- iSampleData( NULL )
+ iSampleData( NULL ),
+ iHasCleanUp( EFalse )
{
// Do nothing
}
@@ -149,6 +146,7 @@
iCollectionHelper = NULL;
}
+ iHasCleanUp = EFalse; // must reset, as class is not always destoryed
PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::CloseSession" ) );
}
@@ -398,7 +396,10 @@
searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXSong );
searchMedia->SetTObjectValueL<TMPXItemId>( KMPXMediaGeneralId,
KMtpInvalidSongID );
- searchMedia->SetTextValueL( KMPXMediaGeneralDrive, iStoreRoot );
+ if ( iStoreRoot.Length() > 0 )
+ {
+ searchMedia->SetTextValueL( KMPXMediaGeneralDrive, iStoreRoot );
+ }
RArray<TMPXAttribute> songAttributes;
CleanupClosePushL( songAttributes ); // + songAttributes
@@ -594,9 +595,14 @@
// as there is NOT a separate database for deleted files.
PRINT( _L( "MM MTP <> Deleting metadata for deleted files" ) );
- PERFLOGSTART( KMpxCollectionCleanupDeletedMediasL );
- CollectionHelperL()->CleanupDeletedMediasL();
- PERFLOGSTOP( KMpxCollectionCleanupDeletedMediasL );
+ if ( !iHasCleanUp )
+ {
+ PERFLOGSTART( KMpxCollectionCleanupDeletedMediasL );
+ CollectionHelperL()->CleanupDeletedMediasL();
+ PERFLOGSTOP( KMpxCollectionCleanupDeletedMediasL );
+
+ iHasCleanUp = ETrue;
+ }
PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::UpdateMusicCollectionL" ) );
}
@@ -941,7 +947,9 @@
searchMedia->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem );
searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXSong );
searchMedia->SetTextValueL( KMPXMediaGeneralUri, aFullFileName );
- searchMedia->SetTextValueL( KMPXMediaGeneralDrive, iStoreRoot );
+
+ TParsePtrC parse( aFullFileName );
+ searchMedia->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
RArray<TMPXAttribute> songAttributes;
CleanupClosePushL( songAttributes ); // + songAttributes
@@ -995,7 +1003,6 @@
EMPXSong );
// File Path
//
- TParsePtrC parse( aFullFileName );
media->SetTextValueL( KMPXMediaGeneralUri, aFullFileName );
media->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
@@ -1173,7 +1180,7 @@
TParsePtrC parse( aRefFileArray[j] );
media->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
media->SetTObjectValueL( KMPXMediaGeneralModified, EFalse );
-
+
// Add media into array contents
abstractMediaArray->AppendL( media );
@@ -1331,7 +1338,7 @@
// ---------------------------------------------------------------------------
//
void CMmMtpDpMetadataMpxAccess::GetAllAbstractMediaL( const TDesC& aStoreRoot,
- CMPXMediaArray** aAbstractMedias,
+ CDesCArray& aAbstractMedias,
TMPXGeneralCategory aCategory )
{
PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::GetAllAbstractMediaL" ) );
@@ -1382,8 +1389,9 @@
User::Leave( KErrNotSupported );
}
- *aAbstractMedias =
- CMPXMediaArray::NewL( *( foundMedia->Value<CMPXMediaArray> ( KMPXMediaArrayContents ) ) );
+ CMPXMediaArray* mediaArray = foundMedia->Value<CMPXMediaArray> ( KMPXMediaArrayContents );
+ for ( TInt i = 0; i < count; i++ )
+ aAbstractMedias.AppendL( ( *mediaArray )[i]->ValueText( KMPXMediaGeneralUri ) );
}
CleanupStack::PopAndDestroy( foundMedia ); // - foundMedia
@@ -1396,15 +1404,36 @@
// Get all references of specified playlist
// ---------------------------------------------------------------------------
//
-void CMmMtpDpMetadataMpxAccess::GetAllReferenceL( CMPXMedia* aAbstractMedia,
+void CMmMtpDpMetadataMpxAccess::GetAllReferenceL( const TDesC& aRefOwnerSuid,
+ TMPXGeneralCategory aCategory,
CDesCArray& aReferences )
{
PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::GetAllReferenceL" ) );
- __ASSERT_DEBUG( aAbstractMedia, User::Panic( KMtpMpxPanic, KErrArgument ) );
+ // 1. Get CMPXMedia object by the reference owner suid
+ RArray<TMPXAttribute> attributes;
+ CleanupClosePushL( attributes ); // + attributes
+ attributes.AppendL( KMPXMediaGeneralId );
+ attributes.AppendL( KMPXMediaGeneralTitle );
+ attributes.AppendL( KMPXMediaGeneralUri );
+
+ CMPXMedia* refOwner = CollectionHelperL()->GetL( aRefOwnerSuid,
+ attributes.Array(),
+ aCategory );
- // Extract the playlist id from the found object
- TUint32 abstractMediaId = *( *aAbstractMedia ).Value<TMPXItemId>( KMPXMediaGeneralId );
+ __ASSERT_DEBUG( refOwner, Panic( EMmMTPDpObjectNull ) );
+
+ CleanupStack::PushL( refOwner ); // + refOwner
+
+ // 2. Extract the general id from the found object
+ if ( !refOwner->IsSupported( KMPXMediaGeneralId ) )
+ PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::GetAllReferenceL Before GeneralId" ) );
+
+ TUint32 abstractMediaId = *( *refOwner ).Value<TMPXItemId>( KMPXMediaGeneralId );
+ PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::GetAllReferenceL After GeneralId" ) );
+
+ CleanupStack::PopAndDestroy( refOwner ); // - refOwner
+ CleanupStack::PopAndDestroy( &attributes ); // - attributes
// find the media object that contains a list of songs in the playlist
RArray<TInt> contentIDs;
@@ -1462,7 +1491,7 @@
// may replace the following 3 statements into the following:
// AppendL(refMedia->ValueText(KMPXMediaGeneralUri));
- HBufC* musicFileLocation = refMedia->ValueText( KMPXMediaGeneralUri ).AllocLC();
+ HBufC* musicFileLocation = refMedia->ValueText( KMPXMediaGeneralUri ).AllocLC(); // + musicFileLocation
aReferences.AppendL( *musicFileLocation );
PRINT1( _L("MM MTP <> CMmMtpDpMetadataMpxAccess::GetAllReferenceL, [%S] found from MPX db"), musicFileLocation );
@@ -1477,33 +1506,6 @@
}
// ---------------------------------------------------------------------------
-// CMmMtpDpMetadataMpxAccess::GetAbstractMediaNameL
-//
-// ---------------------------------------------------------------------------
-//
-HBufC* CMmMtpDpMetadataMpxAccess::GetAbstractMediaNameL( CMPXMedia* aAbstractMedia,
- TMPXGeneralCategory aCategory )
- {
- PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::GetAbstractMediaNameL" ) );
- HBufC* name = NULL;
- if ( aCategory == EMPXPlaylist || aCategory == EMPXAbstractAlbum )
- {
- if( !aAbstractMedia->IsSupported( KMPXMediaGeneralUri ) )
- {
- User::Leave( KErrNotSupported );
- }
- name = aAbstractMedia->ValueText( KMPXMediaGeneralUri ).AllocL();
- }
- else
- {
- User::Leave( KErrNotSupported );
- }
-
- PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::GetAbstractMediaNameL" ) );
- return name;
- }
-
-// ---------------------------------------------------------------------------
// CMmMtpDpMetadataMpxAccess::GetModifiedContentL
// Get modified content
// ---------------------------------------------------------------------------
@@ -1583,7 +1585,9 @@
searchMedia->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem );
searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXPlaylist );
searchMedia->SetTextValueL( KMPXMediaGeneralUri, aSuid );
- searchMedia->SetTextValueL( KMPXMediaGeneralDrive, iStoreRoot );
+
+ TParsePtrC parse( aSuid );
+ searchMedia->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
RArray<TMPXAttribute> playlistAttributes;
CleanupClosePushL( playlistAttributes ); // + playlistAttributes