mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadatampxaccess.cpp
branchRCL_3
changeset 28 f56ec6ce2732
parent 23 4740b34b83ce
child 34 e257e2b6459d
equal deleted inserted replaced
23:4740b34b83ce 28:f56ec6ce2732
    60 _LIT( KMpxCollectionSetReferenceL, "MpxCollectionSetReferenceL" );
    60 _LIT( KMpxCollectionSetReferenceL, "MpxCollectionSetReferenceL" );
    61 _LIT( KMpxCollectionGetAbstractMedia, "MpxCollectionGetAbstractMedia" );
    61 _LIT( KMpxCollectionGetAbstractMedia, "MpxCollectionGetAbstractMedia" );
    62 _LIT( KMpxCollectionGetReference, "MpxCollectionGetReference" );
    62 _LIT( KMpxCollectionGetReference, "MpxCollectionGetReference" );
    63 _LIT( KMpxCollectionFindAllLValidate, "MpxCollectionValidate" );
    63 _LIT( KMpxCollectionFindAllLValidate, "MpxCollectionValidate" );
    64 _LIT( KMpxCollectionFindAllLBeforeAdd, "MpxCollectionFindAllLBeforeAdd" );
    64 _LIT( KMpxCollectionFindAllLBeforeAdd, "MpxCollectionFindAllLBeforeAdd" );
       
    65 _LIT( KMpxCollectionFindAllLModified, "MpxCollectionFindAllLModified" );
       
    66 _LIT( KMpxCollectionCleanupDeletedMediasL, "KMpxCollectionCleanupDeletedMediasL" );
    65 _LIT( KSetMetadataValue, "SetMetadataValueL" );
    67 _LIT( KSetMetadataValue, "SetMetadataValueL" );
    66 #endif
    68 #endif
    67 
    69 
    68 #ifdef  _DEBUG
    70 #ifdef  _DEBUG
    69 _LIT( KMtpMpxPanic, "CMmMtpDpMetadataMpxAccess" );
    71 _LIT( KMtpMpxPanic, "CMmMtpDpMetadataMpxAccess" );
    78 
    80 
    79     return self;
    81     return self;
    80     }
    82     }
    81 
    83 
    82 CMmMtpDpMetadataMpxAccess::CMmMtpDpMetadataMpxAccess( RFs& aRfs ):
    84 CMmMtpDpMetadataMpxAccess::CMmMtpDpMetadataMpxAccess( RFs& aRfs ):
    83     iRfs( aRfs )
    85     iRfs( aRfs ),
       
    86     iSampleData( NULL )
    84     {
    87     {
    85     // Do nothing
    88     // Do nothing
    86     }
    89     }
    87 
    90 
    88 // ---------------------------------------------------------------------------
    91 // ---------------------------------------------------------------------------
   108     if ( iCollectionHelper != NULL )
   111     if ( iCollectionHelper != NULL )
   109         {
   112         {
   110         iCollectionHelper->Close();
   113         iCollectionHelper->Close();
   111         iCollectionHelper = NULL;
   114         iCollectionHelper = NULL;
   112         }
   115         }
       
   116 
       
   117     delete iSampleData;
   113 
   118 
   114     // for performance measurement purpose
   119     // for performance measurement purpose
   115 #if defined(_DEBUG) || defined(MMMTPDP_PERFLOG)
   120 #if defined(_DEBUG) || defined(MMMTPDP_PERFLOG)
   116     delete iPerfLog;
   121     delete iPerfLog;
   117 #endif
   122 #endif
   391 
   396 
   392         searchMedia->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem );
   397         searchMedia->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem );
   393         searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXSong );
   398         searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXSong );
   394         searchMedia->SetTObjectValueL<TMPXItemId>( KMPXMediaGeneralId,
   399         searchMedia->SetTObjectValueL<TMPXItemId>( KMPXMediaGeneralId,
   395             KMtpInvalidSongID );
   400             KMtpInvalidSongID );
   396         searchMedia->SetTextValueL( KMPXMediaGeneralDrive, iStoreRoot );
   401         if ( iStoreRoot.Length() > 0 )
       
   402             {
       
   403             searchMedia->SetTextValueL( KMPXMediaGeneralDrive, iStoreRoot );
       
   404             }
   397 
   405 
   398         RArray<TMPXAttribute> songAttributes;
   406         RArray<TMPXAttribute> songAttributes;
   399         CleanupClosePushL( songAttributes ); // + songAttributes
   407         CleanupClosePushL( songAttributes ); // + songAttributes
   400         songAttributes.AppendL( KMPXMediaGeneralId );
   408         songAttributes.AppendL( KMPXMediaGeneralId );
   401 
   409 
   453     CleanupClosePushL( songAttributes ); // + songAttributes
   461     CleanupClosePushL( songAttributes ); // + songAttributes
   454     songAttributes.AppendL( KMPXMediaGeneralUri );
   462     songAttributes.AppendL( KMPXMediaGeneralUri );
   455 
   463 
   456     PRINT( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::FindWMPMediaLC searchMedia setup with no problems" ) );
   464     PRINT( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::FindWMPMediaLC searchMedia setup with no problems" ) );
   457 
   465 
       
   466     PERFLOGSTART(KMpxCollectionFindAllLModified);
   458     CMPXMedia* foundMedia = CollectionHelperL()->FindAllL( *searchMedia,
   467     CMPXMedia* foundMedia = CollectionHelperL()->FindAllL( *searchMedia,
   459         songAttributes.Array() );
   468         songAttributes.Array() );
       
   469     PERFLOGSTOP(KMpxCollectionFindAllLModified);
   460     PRINT( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::FindWMPMediaLC foundMedia assigned from FindAllL" ) );
   470     PRINT( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::FindWMPMediaLC foundMedia assigned from FindAllL" ) );
   461 
   471 
   462     CleanupStack::PopAndDestroy( &songAttributes ); // - songAttributes
   472     CleanupStack::PopAndDestroy( &songAttributes ); // - songAttributes
   463     CleanupStack::PopAndDestroy( searchMedia ); // - searchMedia
   473     CleanupStack::PopAndDestroy( searchMedia ); // - searchMedia
   464     CleanupStack::PushL( foundMedia ); // + foundMedia
   474     CleanupStack::PushL( foundMedia ); // + foundMedia
   585     // Delete stale records from the audio collection, for files that have been deleted.
   595     // Delete stale records from the audio collection, for files that have been deleted.
   586     // Records are deleted everytime in CloseSession to improve the audio database performance
   596     // Records are deleted everytime in CloseSession to improve the audio database performance
   587     // as there is NOT a separate database for deleted files.
   597     // as there is NOT a separate database for deleted files.
   588     PRINT( _L( "MM MTP <> Deleting metadata for deleted files" ) );
   598     PRINT( _L( "MM MTP <> Deleting metadata for deleted files" ) );
   589 
   599 
       
   600     PERFLOGSTART( KMpxCollectionCleanupDeletedMediasL );
   590     CollectionHelperL()->CleanupDeletedMediasL();
   601     CollectionHelperL()->CleanupDeletedMediasL();
       
   602     PERFLOGSTOP( KMpxCollectionCleanupDeletedMediasL );
   591 
   603 
   592     PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::UpdateMusicCollectionL" ) );
   604     PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::UpdateMusicCollectionL" ) );
   593     }
   605     }
   594 
   606 
   595 // -----------------------------------------------------------------------------
   607 // -----------------------------------------------------------------------------
   682 
   694 
   683     // Update the song's metadata with the media object
   695     // Update the song's metadata with the media object
   684     PERFLOGSTART( KMpxCollectionSetL );
   696     PERFLOGSTART( KMpxCollectionSetL );
   685     CollectionHelperL()->SetL( media );
   697     CollectionHelperL()->SetL( media );
   686     PERFLOGSTOP( KMpxCollectionSetL );
   698     PERFLOGSTOP( KMpxCollectionSetL );
       
   699 
       
   700     delete iSampleData;
       
   701     iSampleData = NULL;
   687 
   702 
   688     CleanupStack::PopAndDestroy( 2, &contentIDs ); // - media, contentIDs
   703     CleanupStack::PopAndDestroy( 2, &contentIDs ); // - media, contentIDs
   689 
   704 
   690     PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL" ) );
   705     PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL" ) );
   691     }
   706     }
   879             const CMTPTypeArray& mtpTypeArray = static_cast<const CMTPTypeArray&>( aNewData );
   894             const CMTPTypeArray& mtpTypeArray = static_cast<const CMTPTypeArray&>( aNewData );
   880             TUint32 numElements = mtpTypeArray.NumElements();
   895             TUint32 numElements = mtpTypeArray.NumElements();
   881             const TDesC& suid = aMediaProp.ValueText( KMPXMediaGeneralUri );
   896             const TDesC& suid = aMediaProp.ValueText( KMPXMediaGeneralUri );
   882             PRINT2( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL SampleData numElements = %d, suid = %S" ), numElements, &suid );
   897             PRINT2( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL SampleData numElements = %d, suid = %S" ), numElements, &suid );
   883 
   898 
   884             HBufC8* sampleData = HBufC8::NewLC( numElements * sizeof( TUint8 ) );
   899             delete iSampleData;
   885             TPtr8 samplePtr = sampleData->Des();
   900             iSampleData = NULL;
       
   901 
       
   902             iSampleData = HBufC8::NewL( numElements * sizeof( TUint8 ) );
       
   903             TPtr8 samplePtr = iSampleData->Des();
   886             mtpTypeArray.ToDes( samplePtr );
   904             mtpTypeArray.ToDes( samplePtr );
   887             RFile sampleFile;
   905             RFile sampleFile;
   888             CleanupClosePushL( sampleFile );
   906             CleanupClosePushL( sampleFile );
   889             User::LeaveIfError( sampleFile.Replace( iRfs, suid, EFileWrite ) );
   907             User::LeaveIfError( sampleFile.Replace( iRfs, suid, EFileWrite ) );
   890             User::LeaveIfError( sampleFile.Write( samplePtr ) );
   908             User::LeaveIfError( sampleFile.Write( samplePtr ) );
       
   909             aMediaProp.SetTObjectValueL<TInt>( KMPXMediaMTPSampleData, (TInt)iSampleData );
       
   910             aMediaProp.SetTObjectValueL<TBool>( attrib, ETrue );
   891             CleanupStack::PopAndDestroy( &sampleFile );
   911             CleanupStack::PopAndDestroy( &sampleFile );
   892             CleanupStack::PopAndDestroy( sampleData );
       
   893             aMediaProp.SetTObjectValueL<TBool>( attrib, ETrue );
       
   894             PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL SampleData is ready = %u" ), 1 );
   912             PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL SampleData is ready = %u" ), 1 );
   895             }
   913             }
   896             break;
   914             break;
   897 
   915 
   898         default:
   916         default:
   924     CleanupStack::PushL( searchMedia ); // + searchMedia
   942     CleanupStack::PushL( searchMedia ); // + searchMedia
   925 
   943 
   926     searchMedia->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem );
   944     searchMedia->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem );
   927     searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXSong );
   945     searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXSong );
   928     searchMedia->SetTextValueL( KMPXMediaGeneralUri, aFullFileName );
   946     searchMedia->SetTextValueL( KMPXMediaGeneralUri, aFullFileName );
   929     searchMedia->SetTextValueL( KMPXMediaGeneralDrive, iStoreRoot );
   947 
       
   948     TParsePtrC parse( aFullFileName );
       
   949     searchMedia->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
   930 
   950 
   931     RArray<TMPXAttribute> songAttributes;
   951     RArray<TMPXAttribute> songAttributes;
   932     CleanupClosePushL( songAttributes ); // + songAttributes
   952     CleanupClosePushL( songAttributes ); // + songAttributes
   933     songAttributes.AppendL( KMPXMediaGeneralUri );
   953     songAttributes.AppendL( KMPXMediaGeneralUri );
   934 
   954 
  1156         media->SetTextValueL( KMPXMediaGeneralUri, aRefFileArray[j] );
  1176         media->SetTextValueL( KMPXMediaGeneralUri, aRefFileArray[j] );
  1157         // TODO: need to confirm that should set drive letter or storage root path.
  1177         // TODO: need to confirm that should set drive letter or storage root path.
  1158         TParsePtrC parse( aRefFileArray[j] );
  1178         TParsePtrC parse( aRefFileArray[j] );
  1159         media->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
  1179         media->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
  1160         media->SetTObjectValueL( KMPXMediaGeneralModified, EFalse );
  1180         media->SetTObjectValueL( KMPXMediaGeneralModified, EFalse );
  1161   
  1181 
  1162         // Add media into array contents
  1182         // Add media into array contents
  1163         abstractMediaArray->AppendL( media );
  1183         abstractMediaArray->AppendL( media );
  1164 
  1184 
  1165         CleanupStack::Pop( media ); // - media
  1185         CleanupStack::Pop( media ); // - media
  1166         }
  1186         }
  1566     CleanupStack::PushL( searchMedia ); // + searchMedia
  1586     CleanupStack::PushL( searchMedia ); // + searchMedia
  1567 
  1587 
  1568     searchMedia->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem );
  1588     searchMedia->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem );
  1569     searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXPlaylist );
  1589     searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXPlaylist );
  1570     searchMedia->SetTextValueL( KMPXMediaGeneralUri, aSuid );
  1590     searchMedia->SetTextValueL( KMPXMediaGeneralUri, aSuid );
  1571     searchMedia->SetTextValueL( KMPXMediaGeneralDrive, iStoreRoot );
  1591 
       
  1592     TParsePtrC parse( aSuid );
       
  1593     searchMedia->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() );
  1572 
  1594 
  1573     RArray<TMPXAttribute> playlistAttributes;
  1595     RArray<TMPXAttribute> playlistAttributes;
  1574     CleanupClosePushL( playlistAttributes ); // + playlistAttributes
  1596     CleanupClosePushL( playlistAttributes ); // + playlistAttributes
  1575     playlistAttributes.AppendL( KMPXMediaGeneralId );
  1597     playlistAttributes.AppendL( KMPXMediaGeneralId );
  1576     playlistAttributes.AppendL( KMPXMediaGeneralTitle );
  1598     playlistAttributes.AppendL( KMPXMediaGeneralTitle );