30 #include <mpxcollectionplaylist.h> |
35 #include <mpxcollectionplaylist.h> |
31 #include <mpxmessagecontainerdefs.h> |
36 #include <mpxmessagecontainerdefs.h> |
32 #include <mpxmediacollectiondetaildefs.h> |
37 #include <mpxmediacollectiondetaildefs.h> |
33 #include <mpxmediamusicdefs.h> |
38 #include <mpxmediamusicdefs.h> |
34 #include <mpxmediageneraldefs.h> |
39 #include <mpxmediageneraldefs.h> |
|
40 #include <mpxmediaaudiodefs.h> |
|
41 #include <mpxmediadrmdefs.h> |
35 #include <mpxcollectionplugin.hrh> |
42 #include <mpxcollectionplugin.hrh> |
36 #include <mpxmessagegeneraldefs.h> |
43 #include <mpxmessagegeneraldefs.h> |
37 #include <mpxmediacontainerdefs.h> |
44 #include <mpxmediacontainerdefs.h> |
38 #include <mpxcollectionmessagedefs.h> |
45 #include <mpxcollectionmessagedefs.h> |
39 #include <mpxparameter.h> |
46 #include <mpxparameter.h> |
48 #include "mpmpxcollectionframeworkwrapper.h" |
55 #include "mpmpxcollectionframeworkwrapper.h" |
49 #include "mpmpxcollectiondata.h" |
56 #include "mpmpxcollectiondata.h" |
50 #include "mpcommondefs.h" |
57 #include "mpcommondefs.h" |
51 #include "mptrace.h" |
58 #include "mptrace.h" |
52 #include "mpsettingsmanager.h" |
59 #include "mpsettingsmanager.h" |
|
60 #include "mpsongdata.h" |
53 |
61 |
54 const TInt KIncrementalDelayNone = 0; |
62 const TInt KIncrementalDelayNone = 0; |
55 const TInt KIncrementalDelayHalfSecond = 1000000; |
63 const TInt KIncrementalDelayHalfSecond = 500000; |
56 const TInt KIncrementalFetchBlockSize = 40; |
64 const TInt KIncrementalFetchBlockSize = 400; |
57 |
65 |
58 const TInt KMPXChunkSize = 100; // number of songs added in each chunk, IncAddL |
66 const TInt KMPXChunkSize = 100; // number of songs added in each chunk, IncAddL |
59 _LIT( KPlaylistPath, "C:\\Data\\Playlists\\" ); // Todo |
67 _LIT( KPlaylistPath, "C:\\Data\\Playlists\\" ); // Todo |
60 |
68 |
61 /*! |
69 /*! |
82 iRepeatFeature( ETrue ), |
90 iRepeatFeature( ETrue ), |
83 iShuffleFeature( ETrue ), |
91 iShuffleFeature( ETrue ), |
84 iReopen( EFalse ), |
92 iReopen( EFalse ), |
85 iShuffleAll( EFalse ), |
93 iShuffleAll( EFalse ), |
86 iRestoreDefaultPath( EFalse ), |
94 iRestoreDefaultPath( EFalse ), |
87 iRestorePathIndex(0) |
95 iRestorePathIndex( 0 ), |
|
96 iSongData( 0 ) |
88 { |
97 { |
89 TX_LOG |
98 TX_LOG |
90 } |
99 } |
91 |
100 |
92 /*! |
101 /*! |
627 \internal |
657 \internal |
628 */ |
658 */ |
629 void MpMpxCollectionFrameworkWrapperPrivate::DoInitL() |
659 void MpMpxCollectionFrameworkWrapperPrivate::DoInitL() |
630 { |
660 { |
631 TX_ENTRY |
661 TX_ENTRY |
632 iCollectionUtility = MMPXCollectionUtility::NewL( this, mHostUid ); |
662 iCollectionUtility = MMPXCollectionUtility::NewL( this, iHostUid ); |
633 iCollectionUiHelper = CMPXCollectionHelperFactory:: NewCollectionUiHelperL( mHostUid ); |
663 iCollectionUiHelper = CMPXCollectionHelperFactory:: NewCollectionUiHelperL( iHostUid ); |
634 iIncrementalOpenUtil = CMPXCollectionOpenUtility::NewL( this, mHostUid ); |
664 iIncrementalOpenUtil = CMPXCollectionOpenUtility::NewL( this, iHostUid ); |
635 iCollectionData = new MpMpxCollectionData(); |
665 iCollectionData = new MpMpxCollectionData(); |
636 TX_EXIT |
666 TX_EXIT |
637 } |
667 } |
638 |
668 |
639 /*! |
669 /*! |
719 RArray<TMPXAttribute> attrs; |
749 RArray<TMPXAttribute> attrs; |
720 CleanupClosePushL( attrs ); |
750 CleanupClosePushL( attrs ); |
721 TArray<TMPXAttribute> ary = attrs.Array(); |
751 TArray<TMPXAttribute> ary = attrs.Array(); |
722 iIncrementalOpenUtil->SetDelay( KIncrementalDelayNone ); |
752 iIncrementalOpenUtil->SetDelay( KIncrementalDelayNone ); |
723 iIncrementalOpenUtil->StartL( ary, KIncrementalFetchBlockSize, |
753 iIncrementalOpenUtil->StartL( ary, KIncrementalFetchBlockSize, |
724 KErrNotFound, CMPXCollectionOpenUtility::EFetchNormal ); |
754 KErrNotFound, CMPXCollectionOpenUtility::EFetchDown ); |
725 iIncrementalOpenUtil->SetDelay( KIncrementalDelayHalfSecond ); |
755 iIncrementalOpenUtil->SetDelay( KIncrementalDelayHalfSecond ); |
726 CleanupStack::PopAndDestroy( &attrs ); |
756 CleanupStack::PopAndDestroy( &attrs ); |
727 TX_EXIT |
757 TX_EXIT |
728 } |
758 } |
729 |
759 |
760 delete iUserPlaylists; |
790 delete iUserPlaylists; |
761 iUserPlaylists = NULL; |
791 iUserPlaylists = NULL; |
762 |
792 |
763 RArray<TMPXAttribute> attrs; |
793 RArray<TMPXAttribute> attrs; |
764 CleanupClosePushL( attrs ); |
794 CleanupClosePushL( attrs ); |
765 attrs.Append( KMPXMediaGeneralId ); |
795 attrs.AppendL( KMPXMediaGeneralId ); |
766 attrs.Append( KMPXMediaGeneralTitle ); |
796 attrs.AppendL( KMPXMediaGeneralTitle ); |
767 |
797 |
768 CMPXMedia* criteria = CMPXMedia::NewL(); |
798 CMPXMedia* criteria = CMPXMedia::NewL(); |
769 CleanupStack::PushL( criteria ); |
799 CleanupStack::PushL( criteria ); |
770 criteria->SetTObjectValueL<TMPXGeneralType>( |
800 criteria->SetTObjectValueL<TMPXGeneralType>( |
771 KMPXMediaGeneralType, EMPXGroup ); |
801 KMPXMediaGeneralType, EMPXGroup ); |
1029 void MpMpxCollectionFrameworkWrapperPrivate::DoPreviewAlbumSongL( int index ) |
1059 void MpMpxCollectionFrameworkWrapperPrivate::DoPreviewAlbumSongL( int index ) |
1030 { |
1060 { |
1031 TX_ENTRY |
1061 TX_ENTRY |
1032 //TODO: all calls to playback utility should be done via the engine and trough the playback FW wrapper. |
1062 //TODO: all calls to playback utility should be done via the engine and trough the playback FW wrapper. |
1033 if ( !iPlaybackUtility ) { |
1063 if ( !iPlaybackUtility ) { |
1034 iPlaybackUtility = MMPXPlaybackUtility::UtilityL( mHostUid ); |
1064 iPlaybackUtility = MMPXPlaybackUtility::UtilityL( iHostUid ); |
1035 } |
1065 } |
1036 |
1066 |
1037 // Get the current path |
1067 // Get the current path |
1038 CMPXCollectionPath* cpath = iCollectionUtility->Collection().PathL(); |
1068 CMPXCollectionPath* cpath = iCollectionUtility->Collection().PathL(); |
1039 CleanupStack::PushL( cpath ); |
1069 CleanupStack::PushL( cpath ); |
1098 { |
1128 { |
1099 const CMPXMedia& container = iCollectionData->containerMedia(); |
1129 const CMPXMedia& container = iCollectionData->containerMedia(); |
1100 const CMPXMediaArray* mediaArray = container.Value<CMPXMediaArray>( KMPXMediaArrayContents ); |
1130 const CMPXMediaArray* mediaArray = container.Value<CMPXMediaArray>( KMPXMediaArrayContents ); |
1101 CMPXMedia* album( mediaArray->AtL( index ) ); |
1131 CMPXMedia* album( mediaArray->AtL( index ) ); |
1102 |
1132 |
1103 // Fetch the songs for the selected album |
1133 // Obtain the artistId from the container |
|
1134 TMPXItemId artistId = container.ValueTObjectL<TMPXItemId>(KMPXMediaGeneralId); |
|
1135 |
|
1136 // Fetch the songs for the selected album and the artist |
|
1137 // Specifying artistId is necessary to search for songs in the artist’s unknown album. |
1104 TMPXItemId albumId = album->ValueTObjectL<TMPXItemId>(KMPXMediaGeneralId); |
1138 TMPXItemId albumId = album->ValueTObjectL<TMPXItemId>(KMPXMediaGeneralId); |
1105 CMPXMedia* findCriteria = CMPXMedia::NewL(); |
1139 CMPXMedia* findCriteria = CMPXMedia::NewL(); |
1106 CleanupStack::PushL( findCriteria ); |
1140 CleanupStack::PushL( findCriteria ); |
1107 findCriteria->SetTObjectValueL<TMPXGeneralType>( KMPXMediaGeneralType, EMPXGroup ); |
1141 findCriteria->SetTObjectValueL<TMPXGeneralType>( KMPXMediaGeneralType, EMPXGroup ); |
1108 findCriteria->SetTObjectValueL<TMPXGeneralCategory>( KMPXMediaGeneralCategory, EMPXSong ); |
1142 findCriteria->SetTObjectValueL<TMPXGeneralCategory>( KMPXMediaGeneralCategory, EMPXSong ); |
1109 findCriteria->SetTObjectValueL<TMPXItemId>( KMPXMediaGeneralId, albumId ); |
1143 findCriteria->SetTObjectValueL<TMPXItemId>( KMPXMediaGeneralId, albumId ); |
|
1144 findCriteria->SetTObjectValueL<TMPXItemId>( KMPXMediaGeneralContainerId, artistId ); |
1110 RArray<TMPXAttribute> attrs; |
1145 RArray<TMPXAttribute> attrs; |
1111 CleanupClosePushL( attrs ); |
1146 CleanupClosePushL( attrs ); |
1112 attrs.Append( TMPXAttribute( KMPXMediaIdGeneral, |
1147 attrs.AppendL( TMPXAttribute( KMPXMediaIdGeneral, |
1113 EMPXMediaGeneralTitle | |
1148 EMPXMediaGeneralTitle | |
1114 EMPXMediaGeneralUri | |
1149 EMPXMediaGeneralUri | |
1115 EMPXMediaGeneralId | |
1150 EMPXMediaGeneralId | |
1116 EMPXMediaGeneralType | |
1151 EMPXMediaGeneralType | |
1117 EMPXMediaGeneralCategory | |
1152 EMPXMediaGeneralCategory | |
1118 EMPXMediaGeneralFlags ) ); |
1153 EMPXMediaGeneralFlags ) ); |
1119 attrs.Append( KMPXMediaMusicAlbumTrack ); |
1154 attrs.AppendL( KMPXMediaMusicAlbumTrack ); |
1120 |
1155 |
1121 iCollectionUtility->Collection().FindAllL( *findCriteria, attrs.Array(), *this ); |
1156 iCollectionUtility->Collection().FindAllL( *findCriteria, attrs.Array(), *this ); |
1122 CleanupStack::PopAndDestroy( &attrs ); |
1157 CleanupStack::PopAndDestroy( &attrs ); |
1123 CleanupStack::PopAndDestroy( findCriteria ); |
1158 CleanupStack::PopAndDestroy( findCriteria ); |
1124 } |
1159 } |
1299 findCriteria->SetTObjectValueL<TMPXGeneralType>( KMPXMediaGeneralType, EMPXGroup ); |
1338 findCriteria->SetTObjectValueL<TMPXGeneralType>( KMPXMediaGeneralType, EMPXGroup ); |
1300 findCriteria->SetTObjectValueL<TMPXGeneralCategory>( KMPXMediaGeneralCategory, EMPXSong ); |
1339 findCriteria->SetTObjectValueL<TMPXGeneralCategory>( KMPXMediaGeneralCategory, EMPXSong ); |
1301 findCriteria->SetTObjectValueL<TMPXItemId>( KMPXMediaGeneralId, containerId ); |
1340 findCriteria->SetTObjectValueL<TMPXItemId>( KMPXMediaGeneralId, containerId ); |
1302 RArray<TMPXAttribute> attrs; |
1341 RArray<TMPXAttribute> attrs; |
1303 CleanupClosePushL( attrs ); |
1342 CleanupClosePushL( attrs ); |
1304 attrs.Append( TMPXAttribute( KMPXMediaIdGeneral, |
1343 attrs.AppendL( TMPXAttribute( KMPXMediaIdGeneral, |
1305 EMPXMediaGeneralTitle | |
1344 EMPXMediaGeneralTitle | |
1306 EMPXMediaGeneralId ) ); |
1345 EMPXMediaGeneralId ) ); |
1307 results = iCollectionUtility->Collection().FindAllL( *findCriteria, attrs.Array() ); |
1346 results = iCollectionUtility->Collection().FindAllL( *findCriteria, attrs.Array() ); |
1308 CleanupStack::PopAndDestroy( &attrs ); |
1347 CleanupStack::PopAndDestroy( &attrs ); |
1309 CleanupStack::PopAndDestroy( findCriteria ); |
1348 CleanupStack::PopAndDestroy( findCriteria ); |
1363 */ |
1402 */ |
1364 void MpMpxCollectionFrameworkWrapperPrivate::createPlaybackUtilityL() |
1403 void MpMpxCollectionFrameworkWrapperPrivate::createPlaybackUtilityL() |
1365 { |
1404 { |
1366 if ( !iPlaybackUtility ) { |
1405 if ( !iPlaybackUtility ) { |
1367 |
1406 |
1368 iPlaybackUtility = MMPXPlaybackUtility::UtilityL( mHostUid ); |
1407 iPlaybackUtility = MMPXPlaybackUtility::UtilityL( iHostUid ); |
1369 |
1408 |
1370 if ( iShuffleFeature ) { |
1409 if ( iShuffleFeature ) { |
1371 iPlaybackUtility->SetL( EPbPropertyRandomMode, MpSettingsManager::shuffle() ? ETrue : EFalse ); |
1410 iPlaybackUtility->SetL( EPbPropertyRandomMode, MpSettingsManager::shuffle() ? ETrue : EFalse ); |
1372 } |
1411 } |
1373 if ( iRepeatFeature ) { |
1412 if ( iRepeatFeature ) { |
1390 MpSettingsManager::setShuffle( true ); |
1429 MpSettingsManager::setShuffle( true ); |
1391 createPlaybackUtilityL(); |
1430 createPlaybackUtilityL(); |
1392 iPlaybackUtility->InitL( *playList, ETrue ); |
1431 iPlaybackUtility->InitL( *playList, ETrue ); |
1393 CleanupStack::PopAndDestroy( playList ); |
1432 CleanupStack::PopAndDestroy( playList ); |
1394 CleanupStack::PopAndDestroy( cpath ); |
1433 CleanupStack::PopAndDestroy( cpath ); |
|
1434 TX_EXIT |
|
1435 } |
|
1436 |
|
1437 /*! |
|
1438 \internal |
|
1439 */ |
|
1440 void MpMpxCollectionFrameworkWrapperPrivate::DoRetrieveSongDetailsL( int index ) |
|
1441 { |
|
1442 TX_ENTRY |
|
1443 RArray<TMPXAttribute> requestedAttr; |
|
1444 CleanupClosePushL( requestedAttr ); |
|
1445 requestedAttr.AppendL( TMPXAttribute( KMPXMediaGeneralTitle ) ); |
|
1446 requestedAttr.AppendL( TMPXAttribute( KMPXMediaMusicArtist ) ); |
|
1447 requestedAttr.AppendL( TMPXAttribute( KMPXMediaMusicAlbum ) ); |
|
1448 requestedAttr.AppendL( TMPXAttribute( KMPXMediaGeneralUri ) ); |
|
1449 requestedAttr.AppendL( TMPXAttribute( KMPXMediaMusicAlbumArtFileName ) ); |
|
1450 requestedAttr.AppendL( TMPXAttribute( KMPXMediaGeneralMimeType ) ); |
|
1451 requestedAttr.AppendL( TMPXAttribute( KMPXMediaMusicAlbumTrack ) ); |
|
1452 requestedAttr.AppendL( TMPXAttribute( KMPXMediaMusicComposer ) ); |
|
1453 requestedAttr.AppendL( TMPXAttribute( KMPXMediaMusicYear ) ); |
|
1454 requestedAttr.AppendL( TMPXAttribute( KMPXMediaMusicGenre ) ); |
|
1455 requestedAttr.AppendL( TMPXAttribute( KMPXMediaGeneralDuration ) ); |
|
1456 requestedAttr.AppendL( TMPXAttribute( KMPXMediaAudioBitrate ) ); |
|
1457 requestedAttr.AppendL( TMPXAttribute( KMPXMediaAudioSamplerate ) ); |
|
1458 requestedAttr.AppendL( TMPXAttribute( KMPXMediaGeneralCopyright ) ); |
|
1459 requestedAttr.AppendL( TMPXAttribute( KMPXMediaMusicURL ) ); |
|
1460 requestedAttr.AppendL( TMPXAttribute( KMPXMediaDrmProtected ) ); |
|
1461 |
|
1462 CMPXCollectionPath* cpath = iCollectionUtility->Collection().PathL(); |
|
1463 CleanupStack::PushL( cpath ); |
|
1464 TCollectionContext context = iCollectionData->context(); |
|
1465 if ( context == ECollectionContextArtistAlbumsTBone |
|
1466 || context == ECollectionContextAlbumsTBone ) { |
|
1467 CMPXMediaArray *mediaArray; |
|
1468 const CMPXMedia& container = iCollectionData->containerMedia(); |
|
1469 mediaArray = const_cast<CMPXMediaArray*>( container.Value<CMPXMediaArray>( KMPXMediaArrayContents ) ); |
|
1470 int currentAlbumIndex = iCollectionData->currentAlbumIndex(); |
|
1471 CMPXMedia* album( mediaArray->AtL( currentAlbumIndex ) ); |
|
1472 if ( album->IsSupported(KMPXMediaArrayContents) ) { |
|
1473 const CMPXMediaArray* songs = album->Value<CMPXMediaArray>(KMPXMediaArrayContents); |
|
1474 User::LeaveIfNull(const_cast<CMPXMediaArray*>(songs)); |
|
1475 CMPXMedia* song = songs->AtL(index); |
|
1476 TMPXItemId id( song->ValueTObjectL<TMPXItemId>( KMPXMediaGeneralId ) ); |
|
1477 cpath->AppendL( id ); // Top level items of songs |
|
1478 cpath->Set( 0 ); // Select 1st song |
|
1479 } |
|
1480 } |
|
1481 else { |
|
1482 cpath->Set( index ); |
|
1483 } |
|
1484 iCollectionUtility->Collection().MediaL( *cpath, requestedAttr.Array() ); |
|
1485 CleanupStack::PopAndDestroy( cpath ); |
|
1486 CleanupStack::PopAndDestroy( &requestedAttr ); |
1395 TX_EXIT |
1487 TX_EXIT |
1396 } |
1488 } |
1397 |
1489 |
1398 /*! |
1490 /*! |
1399 \internal |
1491 \internal |