diff -r 0aa8cc770c8a -r 4a793f564d72 mtpdataproviders/mtpplaybackcontroldp/mtpplaybackmpximplementation/src/cmtpplaybackplaylisthelper.cpp --- a/mtpdataproviders/mtpplaybackcontroldp/mtpplaybackmpximplementation/src/cmtpplaybackplaylisthelper.cpp Tue Aug 31 16:03:15 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,756 +0,0 @@ -// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). -// All rights reserved. -// This component and the accompanying materials are made available -// under the terms of "Eclipse Public License v1.0" -// which accompanies this distribution, and is available -// at the URL "http://www.eclipse.org/legal/epl-v10.html". -// -// Initial Contributors: -// Nokia Corporation - initial contribution. -// -// Contributors: -// -// Description: -// - -/** - @file - @internalComponent -*/ - -#include -#include -#include -#include - -#include -#include -#include -#include - -#include -#include -#include -#include - -#include "cmtpplaybackcontrolimpl.h" -#include "cmtpplaybackplaylisthelper.h" -#include "mtpplaybackcontrolpanic.h" - -// Constants -__FLOG_STMT(_LIT8(KComponent,"PlaybackPlaylistHelper");) - -// ======== MEMBER FUNCTIONS ======== - -// --------------------------------------------------------------------------- -// CMTPPlaybackPlaylistHelper::NewL -// --------------------------------------------------------------------------- -// -CMTPPlaybackPlaylistHelper* CMTPPlaybackPlaylistHelper::NewL( CMTPPlaybackControlImpl& aControlImpl ) - { - CMTPPlaybackPlaylistHelper* self = new ( ELeave ) - CMTPPlaybackPlaylistHelper( aControlImpl ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// --------------------------------------------------------------------------- -// CMTPPlaybackPlaylistHelper::~CMTPPlaybackPlaylistHelper -// --------------------------------------------------------------------------- -// -CMTPPlaybackPlaylistHelper::~CMTPPlaybackPlaylistHelper() - { - __FLOG(_L8("+CMTPPlaybackPlaylistHelper::~CMTPPlaybackPlaylistHelper")); - - if( iCollectionUiHelper ) - { - iCollectionUiHelper->Close(); - } - - if ( iCollectionHelper ) - { - iCollectionHelper->Close(); - } - - if( iCollectionUtil ) - { - iCollectionUtil->Close(); - } - - delete iPlayObject; - - __FLOG(_L8("-CMTPPlaybackPlaylistHelper::~CMTPPlaybackPlaylistHelper")); - __FLOG_CLOSE; - } - -// --------------------------------------------------------------------------- -// CMTPPlaybackPlaylistHelper::GetPlayListFromCollectionL -//// Get Playlist via aMedia -// --------------------------------------------------------------------------- -// -void CMTPPlaybackPlaylistHelper::GetPlayListFromCollectionL( const TMTPPbDataSuid& aPlayObject ) - { - __FLOG(_L8("+CMTPPlaybackPlaylistHelper::GetPlayListFromCollectionL")); - - //Reset - ResetPlaySource(); - - iPlayCategory = aPlayObject.Category(); - iPlayObject = aPlayObject.Suid().AllocL(); - - switch ( iPlayCategory ) - { - case EMTPPbCatPlayList: - { - OpenMusicPlayListPathL(); - } - break; - case EMTPPbCatAlbum: - { - OpenMusicAblumPathL(); - } - break; - default: - { - Panic( EMTPPBCollectionErrCall ); - } - break; - } - - __FLOG(_L8("-CMTPPlaybackPlaylistHelper::GetPlayListFromCollectionL")); - } - -// --------------------------------------------------------------------------- -// CMTPPlaybackPlaylistHelper::GetPlayListFromCollectionL -// Get Playlist via index -// --------------------------------------------------------------------------- -// -void CMTPPlaybackPlaylistHelper::GetPlayListFromCollectionL( TInt aIndex ) - { - __FLOG(_L8("+CMTPPlaybackPlaylistHelper::GetPlayListFromCollectionL")); - - iSongIndex = aIndex; - - UpdatePathAndOpenL(); - - __FLOG(_L8("-CMTPPlaybackPlaylistHelper::GetPlayListFromCollectionL")); - } - -// --------------------------------------------------------------------------- -// CMTPPlaybackPlaylistHelper::GetMTPPBSuidFromCollectionL -// --------------------------------------------------------------------------- -// -TMTPPbDataSuid CMTPPlaybackPlaylistHelper::GetMTPPBSuidFromCollectionL( - const CMPXCollectionPlaylist& aPlaylist ) - { - __FLOG(_L8("+CMTPPlaybackPlaylistHelper::GetPlayListFromCollectionL")); - - CMPXCollectionPath* path = iCollectionUiHelper->MusicPlaylistPathL(); - if ( path->Id() == aPlaylist.Path().Id( KMTPPlaybackPlaylistAblumLevel -1 )) - { - iPlayCategory = EMTPPbCatPlayList; - } - else - { - iPlayCategory = EMTPPbCatAlbum; - } - TFileName uri = ItemIdToUriL( aPlaylist.Path().Id( KMTPPlaybackPlaylistAblumLevel )); - TMTPPbDataSuid dataSuid( iPlayCategory, uri ); - - __FLOG(_L8("-CMTPPlaybackPlaylistHelper::GetPlayListFromCollectionL")); - return dataSuid; - } - -// --------------------------------------------------------------------------- -// CMTPPlaybackPlaylistHelper::MTPPbCategory -// --------------------------------------------------------------------------- -// -TMTPPbCategory CMTPPlaybackPlaylistHelper::MTPPbCategory() const - { - return iPlayCategory; - } -// --------------------------------------------------------------------------- -// CMTPPlaybackPlaylistHelper::MTPPbSuid -// --------------------------------------------------------------------------- -// -TFileName CMTPPlaybackPlaylistHelper::MTPPbSuid() const - { - return TFileName( *iPlayObject ); - } - -// --------------------------------------------------------------------------- -// From MMPXCollectionObserver -// Handle completion of a asynchronous command -// --------------------------------------------------------------------------- -// -void CMTPPlaybackPlaylistHelper::HandleCollectionMessage( CMPXMessage* aMsg, TInt aErr ) - { - __FLOG_1(_L8("+CMTPPlaybackPlaylistHelper::HandleCollectionMessage( %d ) "), aErr ); - - if (( KErrNone == aErr ) && aMsg ) - { - TRAP( aErr, DoHandleCollectionMessageL( *aMsg )); - } - - if ( KErrNone != aErr ) - { - TInt error = MTPPlaybackControlImpl().MapError( aErr ); - MTPPlaybackControlImpl().DoHandleError( error ); - } - - __FLOG(_L8("-CMTPPlaybackPlaylistHelper::HandleCollectionMessage")); - } -// --------------------------------------------------------------------------- -// From MMPXCollectionObserver -// --------------------------------------------------------------------------- -// -void CMTPPlaybackPlaylistHelper::HandleOpenL( const CMPXMedia& aEntries, - TInt /*aIndex*/, TBool /*aComplete*/, TInt aError ) - { - __FLOG_1(_L8("+CMTPPlaybackPlaylistHelper::HandleOpenL( %d )"), aError ); - - if ( KErrNone == aError ) - { - TRAP( aError, DoHandleOpenL( aEntries )); - } - - if ( KErrNone != aError ) - { - TInt error = MTPPlaybackControlImpl().MapError( aError ); - MTPPlaybackControlImpl().DoHandleError( error ); - } - - __FLOG(_L8("-CMTPPlaybackPlaylistHelper::HandleOpenL")); - } - -// --------------------------------------------------------------------------- -// From MMPXCollectionObserver -// --------------------------------------------------------------------------- -// -void CMTPPlaybackPlaylistHelper::HandleOpenL( const CMPXCollectionPlaylist& aPlaylist, - TInt aError ) - { - __FLOG_1(_L8("+CMTPPlaybackPlaylistHelper::HandleOpenL( aPlaylist, aError = %d )"), aError ); - - if ( KErrNone == aError ) - { - TRAP( aError, MTPPlaybackControlImpl().GetPlaylistFromCollectionCompleteL( aPlaylist )); - } - - if ( KErrNone != aError ) - { - TInt error = MTPPlaybackControlImpl().MapError( aError ); - MTPPlaybackControlImpl().DoHandleError( error ); - } - - __FLOG(_L8("-CMTPPlaybackPlaylistHelper::HandleOpenL( aPlaylist, aError )")); - } - -// --------------------------------------------------------------------------- -// From MMPXCollectionMediaObserver -// --------------------------------------------------------------------------- -void CMTPPlaybackPlaylistHelper::HandleCollectionMediaL( const CMPXMedia& /*aMedia*/, TInt /*aError*/ ) - { - __FLOG(_L8("+CMTPPlaybackPlaylistHelper::HandleCollectionMediaL")); - __FLOG(_L8("-CMTPPlaybackPlaylistHelper::HandleCollectionMediaL")); - } - -// -// CMTPPlaybackPlaylistHelper::CMTPPlaybackPlaylistHelper -// --------------------------------------------------------------------------- -// -CMTPPlaybackPlaylistHelper::CMTPPlaybackPlaylistHelper( CMTPPlaybackControlImpl& aControlImpl ) - : iCollectionUiHelper( NULL ), - iCollectionHelper( NULL ), - iCollectionUtil( NULL ), - iPlayObject( NULL ), - iMTPPlaybackControl( aControlImpl ) - { - } - -// --------------------------------------------------------------------------- -// CMTPPlaybackPlaylistHelper::ConstructL -// --------------------------------------------------------------------------- -// -void CMTPPlaybackPlaylistHelper::ConstructL() - { - __FLOG_OPEN(KMTPSubsystem, KComponent); - __FLOG(_L8("+CMTPPlaybackPlaylistHelper::ConstructL")); - - iCollectionUiHelper = CMPXCollectionHelperFactory::NewCollectionUiHelperL(); - iCollectionUtil = MMPXCollectionUtility::NewL( this, KMcModeDefault ); - - __FLOG(_L8("-CMTPPlaybackPlaylistHelper::ConstructL")); - } - -// --------------------------------------------------------------------------- -// CMTPPlaybackPlaylistHelper::DoHandleCollectionMessage -// --------------------------------------------------------------------------- -// -void CMTPPlaybackPlaylistHelper::DoHandleCollectionMessageL( const CMPXMessage& aMsg ) - { - __FLOG(_L8("+CMTPPlaybackPlaylistHelper::DoHandleCollectionMessage")); - - TMPXMessageId id( aMsg.ValueTObjectL( KMPXMessageGeneralId ) ); - - if ( KMPXMessageGeneral == id ) - { - TInt event( aMsg.ValueTObjectL( KMPXMessageGeneralEvent ) ); - TInt type( aMsg.ValueTObjectL( KMPXMessageGeneralType ) ); - TInt data( aMsg.ValueTObjectL( KMPXMessageGeneralData ) ); - - __FLOG_VA((_L8("Event code is 0x%X, type code is 0x%X"), event, type )); - __FLOG_1(_L8("Data code is 0x%X"), data ); - - if ( event == TMPXCollectionMessage::EPathChanged && - type == EMcPathChangedByOpen && - data == EMcContainerOpened ) - { - iCollectionUtil->Collection().OpenL(); - } - else if ( event == TMPXCollectionMessage::EPathChanged && - type == EMcPathChangedByOpen && - data == EMcItemOpened ) - { - iCollectionUtil->Collection().OpenL(); - } - else if ( event == TMPXCollectionMessage::ECollectionChanged ) - { - __FLOG(_L8("Ignore this event")); - } - } - - __FLOG(_L8("-CMTPPlaybackPlaylistHelper::DoHandleCollectionMessage")); - } - -// ---------------------------------------------------- -// CMTPPlaybackPlaylistHelper::DoHandleOpenL -// ---------------------------------------------------- -// -void CMTPPlaybackPlaylistHelper::DoHandleOpenL( const CMPXMedia& aEntries ) - { - __FLOG(_L8("+CMTPPlaybackPlaylistHelper::DoHandleOpenL( const CMPXMedia )")); - - if ( EMTPPbCatAlbum == iPlayCategory ) - { - UpdateAlbumPathAndOpenL(); - } - else - { - //playlist - if ( -1 == iPathIndex ) - { - //first, the top path - UpdatePlaylistPathIndexL( aEntries ); - - if ( -1 == iPathIndex ) - { - MTPPlaybackControlImpl().DoHandleError( KPlaybackErrParamInvalid ); - } - else - { - iCollectionUtil->Collection().OpenL( iPathIndex ); - } - } - else - { - //open the first song when initObject - iCollectionUtil->Collection().OpenL( iSongIndex ); - } - } - - __FLOG(_L8("-CMTPPlaybackPlaylistHelper::DoHandleOpenL( const CMPXMedia )")); - } - -// ---------------------------------------------------- -// CMTPPlaybackPlaylistHelper::OpenMusicPlayListPathL -// ---------------------------------------------------- -// -void CMTPPlaybackPlaylistHelper::OpenMusicPlayListPathL() - { - __FLOG(_L8("+CMTPPlaybackPlaylistHelper::OpenMusicPlayListPathL")); - - CMPXCollectionPath* path = iCollectionUiHelper->MusicPlaylistPathL(); - CleanupStack::PushL( path ); - iCollectionUtil->Collection().OpenL( *path ); - CleanupStack::PopAndDestroy( path ); - - __FLOG(_L8("-CMTPPlaybackPlaylistHelper::OpenMusicPlayListPathL")); - } - -// ---------------------------------------------------- -// CMTPPlaybackPlaylistHelper::OpenMusicAblumPathL -// ---------------------------------------------------- -// -void CMTPPlaybackPlaylistHelper::OpenMusicAblumPathL() - { - __FLOG(_L8("+CMTPPlaybackPlaylistHelper::OpenMusicAblumPathL")); - - CMPXCollectionPath* path = iCollectionUiHelper->MusicMenuPathL(); - CleanupStack::PushL( path ); - path->AppendL(KMPXCollectionArtistAlbum); - iCollectionUtil->Collection().OpenL( *path ); - CleanupStack::PopAndDestroy( path ); - - __FLOG(_L8("-CMTPPlaybackPlaylistHelper::OpenMusicAblumPathL")); - } - -// ---------------------------------------------------- -// CMTPPlaybackPlaylistHelper::ResetPlaySource -// ---------------------------------------------------- -// -void CMTPPlaybackPlaylistHelper::ResetPlaySource() - { - __FLOG(_L8("+CMTPPlaybackPlaylistHelper::ResetPlaySourceL")); - - iPathIndex = -1; - iSongIndex = 0; - delete iPlayObject; - iPlayObject = NULL; - - __FLOG(_L8("-CMTPPlaybackPlaylistHelper::ResetPlaySourceL")); - } - -// ---------------------------------------------------- -// CMTPPlaybackPlaylistHelper::UpdatePlaylistPathIndexL -// ---------------------------------------------------- -// -void CMTPPlaybackPlaylistHelper::UpdatePlaylistPathIndexL( const CMPXMedia& aEntries ) - { - __FLOG(_L8("+CMTPPlaybackPlaylistHelper::UpdatePlaylistPathIndexL")); - __ASSERT_DEBUG( iPlayCategory == EMTPPbCatPlayList, Panic( EMTPPBCollectionErrCall )); - - const CMPXMediaArray* refArray = aEntries.Value ( KMPXMediaArrayContents ); - TInt count = refArray->Count(); - const TMPXItemId playlistId = UriToItemIdL(); - - for ( TInt i=0; iAtL(i); - /** - * Try to find out the next path according to the - * playlist's ItemId - */ - if ( container->IsSupported( KMPXMediaGeneralId )) - { - const TMPXItemId tempId = container->ValueTObjectL(KMPXMediaGeneralId); - if ( tempId == playlistId ) - { - iPathIndex = i; - break; - } - } - } - - __FLOG(_L8("-CMTPPlaybackPlaylistHelper::UpdatePlaylistPathIndexL")); - } - -// --------------------------------------------------------------------------- -// return instance of CollectionHelper. -// --------------------------------------------------------------------------- -// -MMPXCollectionHelper* CMTPPlaybackPlaylistHelper::CollectionHelperL() - { - __FLOG(_L8("+CMTPPlaybackPlaylistHelper::CollectionHelperL")); - - if ( iCollectionHelper == NULL ) - { - iCollectionHelper = CMPXCollectionHelperFactory::NewCollectionCachedHelperL(); - - // Do a search for a song ID that does not exist - RArray contentIDs; - CleanupClosePushL( contentIDs ); // + contentIDs - contentIDs.AppendL( KMPXMediaIdGeneral ); - - CMPXMedia* searchMedia = CMPXMedia::NewL( contentIDs.Array() ); - CleanupStack::PopAndDestroy( &contentIDs ); // - contentIDs - CleanupStack::PushL( searchMedia ); // + searchMedia - - searchMedia->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem ); - searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXSong ); - searchMedia->SetTObjectValueL( KMPXMediaGeneralId, - KMTPPlaybackInvalidSongID ); - - /* - * store root - */ - TChar driveChar = 'c'; - TInt driveNumber; - User::LeaveIfError( RFs::CharToDrive( driveChar, driveNumber ) ); - - // get root path - TBuf storeRoot; - User::LeaveIfError( PathInfo::GetRootPath( storeRoot, driveNumber ) ); - - searchMedia->SetTextValueL( KMPXMediaGeneralDrive, storeRoot ); - - RArray songAttributes; - CleanupClosePushL( songAttributes ); // + songAttributes - songAttributes.AppendL( KMPXMediaGeneralId ); - - CMPXMedia* foundMedia = NULL; - TRAPD( err, foundMedia = iCollectionHelper->FindAllL( - *searchMedia, - songAttributes.Array() ) ); - - CleanupStack::PopAndDestroy( &songAttributes ); // - songAttributes - CleanupStack::PopAndDestroy( searchMedia ); // - searchMedia - - CleanupStack::PushL( foundMedia ); // + foundMedia - - if ( err != KErrNone ) - { - iCollectionHelper->Close(); - iCollectionHelper = NULL; - User::Leave( KErrGeneral ); - } - CleanupStack::PopAndDestroy( foundMedia ); // - foundMedia - } - - __FLOG(_L8("-CMTPPlaybackPlaylistHelper::CollectionHelperL")); - return iCollectionHelper; - } - -// --------------------------------------------------------------------------- -// CMTPPlaybackPlaylistHelper::UriToItemIdL -// --------------------------------------------------------------------------- -// -const TMPXItemId CMTPPlaybackPlaylistHelper::UriToItemIdL() - { - __FLOG(_L8("+CMTPPlaybackPlaylistHelper::UriToItemIdL")); - - - TMPXItemId itemId( KMPXInvalidItemId ); - TInt error = KErrNone; - CMPXMedia* result = NULL; - - RArray atts; - CleanupClosePushL( atts ); - atts.AppendL( KMPXMediaGeneralId ); - - if ( EMTPPbCatPlayList == iPlayCategory ) - { - TRAP( error, result = CollectionHelperL()->GetL( *iPlayObject, atts.Array(), EMPXPlaylist )); - } - else - { - TRAP( error, result = CollectionHelperL()->GetL( *iPlayObject, atts.Array(), EMPXAbstractAlbum )); - } - - if ( error != KErrNone ) - { - CleanupStack::PopAndDestroy( &atts ); - } - else - { - CleanupStack::PushL( result ); - itemId = result->ValueTObjectL(KMPXMediaGeneralId); - CleanupStack::PopAndDestroy( result ); - CleanupStack::PopAndDestroy( &atts ); - } - - __FLOG(_L8("-CMTPPlaybackPlaylistHelper::UriToItemIdL")); - return itemId; - } - -// --------------------------------------------------------------------------- -// CMTPPlaybackPlaylistHelper::ItemIdToUriL. -// --------------------------------------------------------------------------- -// -const TFileName CMTPPlaybackPlaylistHelper::ItemIdToUriL( const TMPXItemId& aId ) - { - __FLOG(_L8("+CMTPPlaybackPlaylistHelper::ItemIdToUriL")); - - TFileName itemUri( KNullDesC ); - - RArray contentIDs; - CleanupClosePushL( contentIDs ); // + contentIDs - contentIDs.AppendL( KMPXMediaIdGeneral ); - - CMPXMedia* searchMedia = CMPXMedia::NewL( contentIDs.Array() ); - CleanupStack::PopAndDestroy( &contentIDs ); // - contentIDs - CleanupStack::PushL( searchMedia ); // + searchMedia - - searchMedia->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem ); - if ( iPlayCategory == EMTPPbCatPlayList ) - { - searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXPlaylist ); - } - else - { - searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXAbstractAlbum ); - } - searchMedia->SetTObjectValueL( KMPXMediaGeneralId, aId ); - - RArray resultAttributes; - CleanupClosePushL( resultAttributes ); // + resultAttributes - resultAttributes.AppendL( KMPXMediaGeneralUri ); - - CMPXMedia* foundMedia = CollectionHelperL()->FindAllL( - *searchMedia, - resultAttributes.Array() ); - - CleanupStack::PopAndDestroy( &resultAttributes ); // - resultAttributes - CleanupStack::PopAndDestroy( searchMedia ); // - searchMedia - - CleanupStack::PushL( foundMedia ); // + foundMedia - if ( !foundMedia->IsSupported( KMPXMediaArrayCount )) - { - User::Leave( KErrNotSupported ); - } - else if ( *foundMedia->Value( KMPXMediaArrayCount ) != 1 ) - { - User::Leave( KErrNotSupported ); - } - - const CMPXMediaArray* tracksArray = foundMedia->Value ( KMPXMediaArrayContents ); - CMPXMedia* item = tracksArray->AtL(0); - - if ( item->IsSupported( KMPXMediaGeneralUri )) - { - itemUri = item->ValueText(KMPXMediaGeneralUri); - } - - CleanupStack::PopAndDestroy( foundMedia ); // - foundMedia - - __FLOG(_L8("-CMTPPlaybackPlaylistHelper::ItemIdToUriL")); - return itemUri; - } - -// --------------------------------------------------------------------------- -// CMTPPlaybackPlaylistHelper::FindAlbumSongsL -// --------------------------------------------------------------------------- -// -CMPXMedia* CMTPPlaybackPlaylistHelper::FindAlbumSongsL( const TMPXItemId& aAlbumId ) - { - __FLOG(_L8("+CMTPPlaybackPlaylistHelper::FindAlbumSongsL")); - - // Fetch the songs for the selected album - CMPXMedia* findCriteria = CMPXMedia::NewL(); - CleanupStack::PushL( findCriteria ); - findCriteria->SetTObjectValueL( KMPXMediaGeneralType, EMPXGroup ); - findCriteria->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXSong ); - findCriteria->SetTObjectValueL( KMPXMediaGeneralId, aAlbumId ); - RArray attrs; - CleanupClosePushL( attrs ); - attrs.Append( TMPXAttribute( KMPXMediaIdGeneral, - EMPXMediaGeneralTitle | - EMPXMediaGeneralId ) ); - attrs.Append( KMPXMediaMusicAlbumTrack ); - - CMPXMedia* foundMedia = CollectionHelperL()->FindAllL( *findCriteria, - attrs.Array() ); - CleanupStack::PopAndDestroy( &attrs ); - CleanupStack::PopAndDestroy( findCriteria ); - - if ( !foundMedia->IsSupported( KMPXMediaArrayCount ) ) - { - User::Leave( KErrNotSupported ); - } - TInt foundItemCount = *foundMedia->Value( KMPXMediaArrayCount ); - if ( foundItemCount == 0 ) - { - User::Leave( KErrNotFound ); - } - if ( !foundMedia->IsSupported( KMPXMediaArrayContents ) ) - { - User::Leave( KErrNotSupported ); - } - - __FLOG(_L8("-CMTPPlaybackPlaylistHelper::FindAlbumSongsL")); - return foundMedia; - } - -// --------------------------------------------------------------------------- -// CMTPPlaybackPlaylistHelper::UpdatePathAndOpenL. -// aParam: const CMPXMedia& aAlbums -// --------------------------------------------------------------------------- -// -void CMTPPlaybackPlaylistHelper::UpdateAlbumPathAndOpenL() - { - __FLOG(_L8("+CMTPPlaybackPlaylistHelper::UpdateAlbumPathAndOpenL")); - - RArray ids; - CleanupClosePushL(ids); - - CMPXCollectionPath* cpath = iCollectionUtil->Collection().PathL(); - CleanupStack::PushL( cpath ); - - if (cpath->Levels() == 3) - { - // go back one level before amending path with new levels - cpath->Back(); - } - - const TMPXItemId id = UriToItemIdL(); - if ( KMPXInvalidItemId == id ) - { - MTPPlaybackControlImpl().DoHandleError( KPlaybackErrParamInvalid ); - CleanupStack::PopAndDestroy( cpath ); - CleanupStack::PopAndDestroy(&ids); - return; - } - - ids.AppendL(id); - cpath->AppendL( ids.Array() ); // top level items - cpath->Set( 0 ); - ids.Reset(); - - CMPXMedia* songs = FindAlbumSongsL( id ); - CleanupStack::PushL( songs ); - const CMPXMediaArray* tracksArray = songs->Value ( KMPXMediaArrayContents ); - User::LeaveIfNull(const_cast(tracksArray)); - TUint count = tracksArray->Count(); - for (TInt i=0; iAtL(i); - const TMPXItemId id = song->ValueTObjectL(KMPXMediaGeneralId); - ids.AppendL(id); - } - - cpath->AppendL(ids.Array()); // top level items - cpath->Set( iSongIndex ); - - iCollectionUtil->Collection().OpenL(*cpath); - CleanupStack::PopAndDestroy( songs ); - CleanupStack::PopAndDestroy( cpath ); - CleanupStack::PopAndDestroy(&ids); - - __FLOG(_L8("-CMTPPlaybackPlaylistHelper::UpdateAlbumPathAndOpenL")); - } - -// --------------------------------------------------------------------------- -// CMTPPlaybackPlaylistHelper::UpdatePathAndOpenL. -// --------------------------------------------------------------------------- -// -void CMTPPlaybackPlaylistHelper::UpdatePathAndOpenL() - { - __FLOG(_L8("+CMTPPlaybackPlaylistHelper::UpdatePathAndOpenL()")); - - RArray ids; - CleanupClosePushL(ids); - - CMPXCollectionPath* cpath = iCollectionUtil->Collection().PathL(); - CleanupStack::PushL( cpath ); - - cpath->Set( iSongIndex ); - - iCollectionUtil->Collection().OpenL(*cpath); - CleanupStack::PopAndDestroy( cpath ); - CleanupStack::PopAndDestroy(&ids); - - __FLOG(_L8("-CMTPPlaybackPlaylistHelper::UpdatePathAndOpenL( aSong Index )")); - } - -// --------------------------------------------------------------------------- -// CMTPPlaybackPlaylistHelper::MTPPlaybackControlImpl. -// --------------------------------------------------------------------------- -// -CMTPPlaybackControlImpl& CMTPPlaybackPlaylistHelper::MTPPlaybackControlImpl() - { - return iMTPPlaybackControl; - } - -