--- a/mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadatampxaccess.cpp Mon May 03 12:58:40 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadatampxaccess.cpp Fri May 14 16:21:14 2010 +0300
@@ -62,6 +62,8 @@
_LIT( KMpxCollectionGetReference, "MpxCollectionGetReference" );
_LIT( KMpxCollectionFindAllLValidate, "MpxCollectionValidate" );
_LIT( KMpxCollectionFindAllLBeforeAdd, "MpxCollectionFindAllLBeforeAdd" );
+_LIT( KMpxCollectionFindAllLModified, "MpxCollectionFindAllLModified" );
+_LIT( KMpxCollectionCleanupDeletedMediasL, "KMpxCollectionCleanupDeletedMediasL" );
_LIT( KSetMetadataValue, "SetMetadataValueL" );
#endif
@@ -80,7 +82,8 @@
}
CMmMtpDpMetadataMpxAccess::CMmMtpDpMetadataMpxAccess( RFs& aRfs ):
- iRfs( aRfs )
+ iRfs( aRfs ),
+ iSampleData( NULL )
{
// Do nothing
}
@@ -105,12 +108,14 @@
//
CMmMtpDpMetadataMpxAccess::~CMmMtpDpMetadataMpxAccess()
{
- if ( iCollectionHelper )
+ if ( iCollectionHelper != NULL )
{
iCollectionHelper->Close();
iCollectionHelper = NULL;
}
+ delete iSampleData;
+
// for performance measurement purpose
#if defined(_DEBUG) || defined(MMMTPDP_PERFLOG)
delete iPerfLog;
@@ -118,6 +123,36 @@
}
// ---------------------------------------------------------------------------
+// CMmMtpDpMetadataMpxAccess::OpenSession
+// This is introduced to fix CollectionHelper Flush problem
+// ---------------------------------------------------------------------------
+//
+void CMmMtpDpMetadataMpxAccess::OpenSession()
+ {
+ // do nothing
+ }
+
+// ---------------------------------------------------------------------------
+// CMmMtpDpMetadataMpxAccess::CloseSession
+// This is introduced to fix CollectionHelper Flush problem
+// ---------------------------------------------------------------------------
+//
+void CMmMtpDpMetadataMpxAccess::CloseSession()
+ {
+ PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::CloseSession" ) );
+
+ // flush cache
+ if ( iCollectionHelper != NULL )
+ {
+ PRINT( _L( "MM MTP <> Delete & Close CollectionHelper" ) );
+ iCollectionHelper->Close();
+ iCollectionHelper = NULL;
+ }
+
+ PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::CloseSession" ) );
+ }
+
+// ---------------------------------------------------------------------------
// CMmMtpDpMetadataMpxAccess::GetObjectMetadataValueL
// Gets a piece of metadata from the collection
// ---------------------------------------------------------------------------
@@ -425,8 +460,10 @@
PRINT( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::FindWMPMediaLC searchMedia setup with no problems" ) );
+ PERFLOGSTART(KMpxCollectionFindAllLModified);
CMPXMedia* foundMedia = CollectionHelperL()->FindAllL( *searchMedia,
songAttributes.Array() );
+ PERFLOGSTOP(KMpxCollectionFindAllLModified);
PRINT( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::FindWMPMediaLC foundMedia assigned from FindAllL" ) );
CleanupStack::PopAndDestroy( &songAttributes ); // - songAttributes
@@ -557,7 +594,9 @@
// 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 );
PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::UpdateMusicCollectionL" ) );
}
@@ -644,6 +683,7 @@
TParsePtrC parse( aFullFileName );
media->SetTextValueL( KMPXMediaGeneralUri, aFullFileName );
media->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
+ media->SetTObjectValueL( KMPXMediaGeneralModified, EFalse );
PERFLOGSTART( KSetMetadataValue );
SetMetadataValueL( aPropCode, aNewData, *media );
@@ -654,6 +694,9 @@
CollectionHelperL()->SetL( media );
PERFLOGSTOP( KMpxCollectionSetL );
+ delete iSampleData;
+ iSampleData = NULL;
+
CleanupStack::PopAndDestroy( 2, &contentIDs ); // - media, contentIDs
PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL" ) );
@@ -668,7 +711,6 @@
CMPXMedia& aMediaProp )
{
PRINT1( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::SetMetadataValueL aPropCode = 0x%x" ), aPropCode );
- CMTPTypeString* textData = CMTPTypeString::NewLC(); // + textData
CMTPTypeArray* desData = NULL;
TMTPTypeUint16 uint16Data;
TMTPTypeUint32 uint32Data;
@@ -684,13 +726,12 @@
case EMTPObjectPropCodeComposer:
case EMTPObjectPropCodeAlbumArtist:
{
- PRINT1( _L( "MM MTP <> SetMetadataValueL Before Copy, string length = %d" ), aNewData.Size() );
- MMTPType::CopyL( aNewData, *textData );
- HBufC* string = textData->StringChars().AllocLC();
- PRINT1( _L( "MM MTP <> SetMetadataValueL string length = %d" ), string->Des().Length() );
+ const CMTPTypeString& textData = static_cast<const CMTPTypeString&>( aNewData );
+ HBufC* string = textData.StringChars().AllocLC(); // + string
+ PRINT2( _L( "MM MTP <> SetMetadataValueL des.ptr() = 0x%x, string length = %d" ),string->Des().Ptr(), string->Des().Length() );
+ PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL string = %S" ), string );
aMediaProp.SetTextValueL( attrib, string->Des() );
- PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL string = %S" ), string );
- CleanupStack::PopAndDestroy(string);
+ CleanupStack::PopAndDestroy( string ); // - string
}
break;
@@ -734,10 +775,10 @@
case EMTPObjectPropCodeOriginalReleaseDate:
{
- MMTPType::CopyL( aNewData, *textData );
+ const CMTPTypeString& textData = static_cast<const CMTPTypeString&>( aNewData );
TBuf<KMtpMaxStringLength> data;
- data.Copy( textData->StringChars().Left( KMtpMaxDateTimeStringLength ) );
+ data.Copy( textData.StringChars().Left( KMtpMaxDateTimeStringLength ) );
PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL 0xDC99 date = %S" ),
&data );
if ( data.Length() < KMtpMaxDateTimeStringLength )
@@ -852,16 +893,19 @@
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();
+ delete iSampleData;
+ iSampleData = NULL;
+
+ iSampleData = HBufC8::NewL( numElements * sizeof( TUint8 ) );
+ TPtr8 samplePtr = iSampleData->Des();
mtpTypeArray.ToDes( samplePtr );
RFile sampleFile;
CleanupClosePushL( sampleFile );
User::LeaveIfError( sampleFile.Replace( iRfs, suid, EFileWrite ) );
User::LeaveIfError( sampleFile.Write( samplePtr ) );
+ aMediaProp.SetTObjectValueL<TInt>( KMPXMediaMTPSampleData, (TInt)iSampleData );
+ aMediaProp.SetTObjectValueL<TBool>( attrib, ETrue );
CleanupStack::PopAndDestroy( &sampleFile );
- CleanupStack::PopAndDestroy( sampleData );
- aMediaProp.SetTObjectValueL<TBool>( attrib, ETrue );
PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL SampleData is ready = %u" ), 1 );
}
break;
@@ -873,7 +917,6 @@
break;
}
- CleanupStack::PopAndDestroy( textData ); // - textData
PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::SetMetadataValueL" ) );
}
@@ -1021,10 +1064,7 @@
CleanupClosePushL( abstractMediaAttributes ); // + abstractMediaAttributes
abstractMediaAttributes.AppendL( KMPXMediaGeneralId );
abstractMediaAttributes.AppendL( KMPXMediaGeneralTitle );
- if ( aCategory == EMPXPlaylist )
- {
- abstractMediaAttributes.AppendL( KMPXMediaGeneralUri );
- }
+ abstractMediaAttributes.AppendL( KMPXMediaGeneralUri );
PERFLOGSTART( KMpxCollectionFindAllLBeforeAdd );
CMPXMedia* foundMedia = CollectionHelperL()->FindAllL( *searchMedia,
@@ -1069,12 +1109,8 @@
media->SetTextValueL( KMPXMediaGeneralUri, aFullFileName );
TParsePtrC parse( aFullFileName );
-
media->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
- if ( ( aCategory == EMPXPlaylist ) || ( aCategory == EMPXAbstractAlbum ) )
- {
- media->SetTextValueL( KMPXMediaGeneralTitle, parse.Name() );
- }
+ media->SetTextValueL( KMPXMediaGeneralTitle, parse.Name() );
media->SetTObjectValueL<TBool>( KMPXMediaGeneralSynchronized, ETrue );
media->SetCObjectValueL( KMPXMediaArrayContents, abstractMediaArray );
media->SetTObjectValueL( KMPXMediaArrayCount, abstractMediaArray->Count() );
@@ -1136,7 +1172,8 @@
// TODO: need to confirm that should set drive letter or storage root path.
TParsePtrC parse( aRefFileArray[j] );
media->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
-
+ media->SetTObjectValueL( KMPXMediaGeneralModified, EFalse );
+
// Add media into array contents
abstractMediaArray->AppendL( media );
@@ -1317,10 +1354,8 @@
CleanupClosePushL( abstractMediaAttributes ); // + abstractMediaAttributes
abstractMediaAttributes.AppendL( KMPXMediaGeneralId );
abstractMediaAttributes.AppendL( KMPXMediaGeneralTitle );
- if ( aCategory == EMPXPlaylist )
- {
- abstractMediaAttributes.AppendL( KMPXMediaGeneralUri );
- }
+
+ abstractMediaAttributes.AppendL( KMPXMediaGeneralUri );
PERFLOGSTART( KMpxCollectionGetAbstractMedia );
CMPXMedia* foundMedia = CollectionHelperL()->FindAllL( *searchMedia,
@@ -1451,7 +1486,7 @@
{
PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::GetAbstractMediaNameL" ) );
HBufC* name = NULL;
- if ( aCategory == EMPXPlaylist )
+ if ( aCategory == EMPXPlaylist || aCategory == EMPXAbstractAlbum )
{
if( !aAbstractMedia->IsSupported( KMPXMediaGeneralUri ) )
{
@@ -1459,14 +1494,6 @@
}
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 );