mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadatampxaccess.cpp
changeset 27 cbb1bfb7ebfb
parent 25 d881023c13eb
child 32 edd273b3192a
--- 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 );