diff -r 82baf59ce8dd -r ecf06a08d4d9 mpviewplugins/mpcollectionviewplugin/src/mpmpxframeworkwrapper_p.cpp --- a/mpviewplugins/mpcollectionviewplugin/src/mpmpxframeworkwrapper_p.cpp Fri Apr 16 14:56:30 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,942 +0,0 @@ -/* -* Copyright (c) 2009 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: Wrapper for mpx framework utilities - private implementation. -* -*/ - -#include - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "mpmpxframeworkwrapper_p.h" -#include "mpmpxframeworkwrapper.h" -#include "mpmpxcollectiondata.h" -#include "mpcommondefs.h" -#include "mptrace.h" -#include "mpsettingsmanager.h" - -const TInt KIncrementalDelayNone = 0; -const TInt KIncrementalDelayHalfSecond = 1000000; -const TInt KIncrementalFetchBlockSize = 40; - -const TInt KMPXChunkSize = 100; // number of songs added in each chunk, IncAddL -_LIT( KPlaylistPath, "C:\\Data\\Playlists\\" ); // Todo - -/*! - \class MpMpxFrameworkWrapperPrivate - \brief Wrapper for mpx framework utilities - private implementation. - - This is a private implementation of the mpx framework wrapper utilties interface. -*/ - -/*! - \internal - */ -MpMpxFrameworkWrapperPrivate::MpMpxFrameworkWrapperPrivate( MpMpxFrameworkWrapper *wrapper ) - : q_ptr( wrapper ), - iCollectionUtility( 0 ), - iCollectionUiHelper( 0 ), - iIncrementalOpenUtil( 0 ), - iIsolatedCollectionHelper( 0 ), - iPlaybackUtility( 0 ), - iCollectionData( 0 ), - iIsolatedCollectionData( 0 ), - iFirstIncrementalOpen( EFalse ), - iUserPlaylists( 0 ) -{ - TX_LOG -} - -/*! - \internal - */ -MpMpxFrameworkWrapperPrivate::~MpMpxFrameworkWrapperPrivate() -{ - TX_ENTRY - delete iCollectionData; - delete iIsolatedCollectionData; - - if ( iCollectionUtility ) { - iCollectionUtility->Collection().CancelRequest(); - iCollectionUtility->Close(); - } - - if ( iCollectionUiHelper ) { - iCollectionUiHelper->Close(); - } - - if ( iPlaybackUtility ) { - iPlaybackUtility->Close(); - } - - delete iIncrementalOpenUtil; - delete iIsolatedCollectionHelper; - delete iUserPlaylists; - - TX_EXIT -} - -/*! - \internal - */ -void MpMpxFrameworkWrapperPrivate::init( MpCommon::MpViewMode viewMode ) -{ - - iViewMode = viewMode; - TRAPD( err, DoInitL() ); - if ( err != KErrNone ) { - TX_LOG_ARGS( "Error: " << err << "; should never get here." ); - } -} - -/*! - \internal - */ -void MpMpxFrameworkWrapperPrivate::openCollection( TCollectionContext context ) -{ - TRAPD( err, DoOpenCollectionL( context ) ); - if ( err != KErrNone ) { - TX_LOG_ARGS( "Error: " << err << "; should never get here." ); - } -} - -/*! - \internal - */ -void MpMpxFrameworkWrapperPrivate::openCollectionItem( int index ) -{ - TRAPD( err, DoOpenCollectionItemL( index ) ); - if ( err != KErrNone ) { - TX_LOG_ARGS( "Error: " << err << "; should never get here." ); - } -} - -/*! - \internal - */ -void MpMpxFrameworkWrapperPrivate::reopenCollection() -{ - TRAPD( err, DoReopenCollectionL() ); - if ( err != KErrNone ) { - TX_LOG_ARGS( "Error: " << err << "; should never get here." ); - } -} - -/*! - \internal - */ -void MpMpxFrameworkWrapperPrivate::back() -{ - TRAPD( err, DoBackL() ); - if ( err != KErrNone ) { - TX_LOG_ARGS( "Error: " << err << "; should never get here." ); - } -} -/*! - \internal - */ -void MpMpxFrameworkWrapperPrivate::findPlaylists( QStringList &playlists ) -{ - TRAPD( err, DoFindPlaylistsL( playlists ) ); - if ( err != KErrNone ) { - TX_LOG_ARGS( "Error: " << err << "; should never get here." ); - } -} - -/*! - \internal - */ -void MpMpxFrameworkWrapperPrivate::createPlaylist( QString &playlistName, QList &selection, MpMpxCollectionData* collectionData ) -{ - TRAPD( err, DoCreatePlaylistL( playlistName, selection, collectionData ) ); - if ( err != KErrNone ) { - TX_LOG_ARGS( "Error: " << err << "; should never get here." ); - } -} - -/*! - \internal - */ -void MpMpxFrameworkWrapperPrivate::saveToPlaylist( int playlistIndex, QList &selection ) -{ - TRAPD( err, DoSaveToPlaylistL( playlistIndex, selection ) ); - if ( err != KErrNone ) { - TX_LOG_ARGS( "Error: " << err << "; should never get here." ); - } -} - -/*! - \internal - */ -void MpMpxFrameworkWrapperPrivate::saveToCurrentPlaylist( QList &selection, MpMpxCollectionData *collectionData ) -{ - TRAPD( err, DoSaveToCurrentPlaylistL( selection, collectionData ) ); - if ( err != KErrNone ) { - TX_LOG_ARGS( "Error: " << err << "; should never get here." ); - } -} - -/*! - \internal - */ -void MpMpxFrameworkWrapperPrivate::deleteSongs( QList &selection ) -{ - TRAPD( err, DoDeleteSongsL( selection ) ); - if ( err != KErrNone ) { - TX_LOG_ARGS( "Error: " << err << "; should never get here." ); - } -} - -/*! - \internal - */ -void MpMpxFrameworkWrapperPrivate::renamePlaylist( QString &newName, int index ) -{ - TRAPD( err, DoRenamePlaylistL( newName, index ) ); - if ( err != KErrNone ) { - TX_LOG_ARGS( "Error: " << err << "; should never get here." ); - } -} - -/*! - \internal - */ -void MpMpxFrameworkWrapperPrivate::renamePlaylist( QString &newName ) -{ - TRAPD( err, DoRenamePlaylistL( newName ) ); - if ( err != KErrNone ) { - TX_LOG_ARGS( "Error: " << err << "; should never get here." ); - } -} -/*! - \internal - */ -void MpMpxFrameworkWrapperPrivate::setShuffle( bool active ) -{ - TRAPD( err, DoSetShuffleL( active ) ); - if ( err != KErrNone ) { - TX_LOG_ARGS( "Error: " << err << "; should never get here." ); - } -} - -/*! - \internal - */ -void MpMpxFrameworkWrapperPrivate::previewItem( int index ) -{ - TRAPD( err, DoPreviewItemL( index ) ); - if ( err != KErrNone ) { - TX_LOG_ARGS( "Error: " << err << "; should never get here." ); - } -} - -/*! - \internal - */ - void MpMpxFrameworkWrapperPrivate::openIsolatedCollection( TCollectionContext context ) -{ - TRAPD( err, DoOpenIsolatedCollectionL( context ) ); - if ( err != KErrNone ) { - TX_LOG_ARGS( "Error: " << err << "; should never get here." ); - } -} - -/*! - \internal - */ -void MpMpxFrameworkWrapperPrivate::releaseIsolatedCollection() -{ - delete iIsolatedCollectionHelper; - iIsolatedCollectionHelper = 0; - delete iIsolatedCollectionData; - iIsolatedCollectionData = 0; -} - -/*! - \internal - */ -void MpMpxFrameworkWrapperPrivate::reorderPlaylist( int playlistId, int songId, int originalOrdinal, int newOrdinal ) -{ - TRAPD( err, DoReorderPlaylistL( playlistId, songId, originalOrdinal, newOrdinal ) ); - if ( err != KErrNone ) { - TX_LOG_ARGS( "Error: " << err << "; should never get here." ); - } -} - -/*! - \internal - */ -MpMpxCollectionData *MpMpxFrameworkWrapperPrivate::collectionData() -{ - return iCollectionData; -} - -/*! - \internal - */ -void MpMpxFrameworkWrapperPrivate::HandleOpenL( - const CMPXMedia& aEntries, - TInt aIndex, - TBool aComplete, - TInt aError ) -{ - Q_UNUSED( aIndex ); - TX_UNUSED( aComplete ); - TX_ENTRY_ARGS( "aError=" << aError << "aComplete=" << aComplete ); - if ( aError == KErrNone ) { - if ( iFirstIncrementalOpen ) { - iCollectionData->setMpxMedia( aEntries ); - iFirstIncrementalOpen = EFalse; - } - } - else { - TX_LOG_ARGS( "Error: " << aError << "; should never get here." ); - } - TX_EXIT -} - -/*! - \internal - */ -void MpMpxFrameworkWrapperPrivate::HandleOpenL( - const CMPXCollectionPlaylist& aPlaylist, - TInt aError ) -{ - TX_ENTRY_ARGS( "aError=" << aError ); - - if ( aError == KErrNone ) { - if ( !iPlaybackUtility ) { - iPlaybackUtility = MMPXPlaybackUtility::UtilityL( TUid::Uid( MpCommon::KMusicPlayerUid ) ); - if ( iViewMode == MpCommon::DefaultView ) { - iPlaybackUtility->SetL( EPbPropertyRandomMode, MpSettingsManager::shuffle() ? ETrue : EFalse ); - iPlaybackUtility->SetL( EPbPropertyRepeatMode, MpSettingsManager::repeat() ? EPbRepeatAll : EPbRepeatOff ); - } - } - iPlaybackUtility->InitL( aPlaylist, ETrue ); - emit q_ptr->collectionPlaylistOpened(); - } - else { - TX_LOG_ARGS( "Error: " << aError << "; should never get here." ); - } - TX_EXIT -} - -/*! - \internal - */ -void MpMpxFrameworkWrapperPrivate::HandleCollectionMessage( - CMPXMessage* aMsg, - TInt aErr ) -{ - TX_ENTRY_ARGS( "aErr=" << aErr ); - if ( aErr == KErrNone && aMsg ) - { - TRAP_IGNORE( DoHandleCollectionMessageL( *aMsg ) ); - } - TX_EXIT -} - -/*! - \internal - */ -void MpMpxFrameworkWrapperPrivate::HandleCollectionMediaL( - const CMPXMedia& aMedia, - TInt aError ) -{ - Q_UNUSED( aMedia ); - Q_UNUSED( aError ); -} - -/*! - \internal - Handles the completion of any collection helper event. - */ -void MpMpxFrameworkWrapperPrivate::HandleOperationCompleteL( - TCHelperOperation aOperation, - TInt aErr, - void* aArgument ) -{ - TX_ENTRY_ARGS( "aErr=" << aErr ); - switch( aOperation ) { - case EDeleteOp: - emit q_ptr->songsDeleted( KErrNone == aErr ); - break; - case EAddOp: - emit q_ptr->playlistSaved( KErrNone == aErr ); - break; - case ERenameOp: - emit q_ptr->playlistsRenamed( KErrNone == aErr ); - break; - default: - break; - } - - if ( aArgument ) { - delete ( CBase* )aArgument; - } -} - -/*! - \internal - */ -void MpMpxFrameworkWrapperPrivate::HandleIsolatedOpenL( const CMPXMedia& aEntries, TInt aError ) -{ - TX_ENTRY_ARGS( "aError=" << aError ); - if ( aError == KErrNone ) { - if ( iIsolatedCollectionData ) { - delete iIsolatedCollectionData; - iIsolatedCollectionData = 0; - } - iIsolatedCollectionData = new MpMpxCollectionData(); - iIsolatedCollectionData->setMpxMedia( aEntries ); - emit q_ptr->isolatedCollectionOpened( iIsolatedCollectionData ); - } - else { - TX_LOG_ARGS( "Error: " << aError << "; should never get here." ); - } - TX_EXIT -} - -/*! - \internal - */ -void MpMpxFrameworkWrapperPrivate::DoInitL() -{ - TX_ENTRY - iCollectionUtility = MMPXCollectionUtility::NewL( this, KMcModeDefault ); - iCollectionUiHelper = CMPXCollectionHelperFactory:: NewCollectionUiHelperL(); - iIncrementalOpenUtil = CMPXCollectionOpenUtility::NewL( this ); - - iCollectionData = new MpMpxCollectionData(); - TX_EXIT -} - -/*! - \internal - */ -void MpMpxFrameworkWrapperPrivate::DoOpenCollectionL( - TCollectionContext aContext ) -{ - TX_ENTRY_ARGS( "aContext=" << aContext ); - - switch ( aContext ) { - case ECollectionContextAllSongs: - { - CMPXCollectionPath* cpath = iCollectionUiHelper->MusicAllSongsPathL(); - CleanupStack::PushL( cpath ); - iCollectionUtility->Collection().OpenL( *cpath ); - CleanupStack::PopAndDestroy( cpath ); - break; - } - case ECollectionContextAlbums: - { - CMPXCollectionPath* cpath = iCollectionUiHelper->MusicMenuPathL(); - CleanupStack::PushL( cpath ); - cpath->AppendL( 3 ); - iCollectionUtility->Collection().OpenL( *cpath ); - CleanupStack::PopAndDestroy( cpath ); - break; - } - case ECollectionContextPlaylists: - { - CMPXCollectionPath* cpath = iCollectionUiHelper->MusicPlaylistPathL(); - CleanupStack::PushL( cpath ); - iCollectionUtility->Collection().OpenL( *cpath ); - CleanupStack::PopAndDestroy( cpath ); - break; - } - case ECollectionContextGenres: - { - CMPXCollectionPath* cpath = iCollectionUiHelper->MusicMenuPathL(); - CleanupStack::PushL( cpath ); - // Temp - cpath->AppendL( 5 ); - iCollectionUtility->Collection().OpenL( *cpath ); - CleanupStack::PopAndDestroy( cpath ); - break; - } - default: - TX_LOG_ARGS( "Error: Unexpected context; should never get here." ); - break; - } - TX_EXIT -} - -/*! - \internal - */ -void MpMpxFrameworkWrapperPrivate::DoOpenCollectionItemL( TInt aIndex ) - { - TX_ENTRY_ARGS( "aIndex=" << aIndex ); - iCollectionUtility->Collection().OpenL( aIndex ); - TX_EXIT - } - -/*! - \internal - */ -void MpMpxFrameworkWrapperPrivate::DoIncrementalOpenL() -{ - TX_ENTRY - // Cancel any reads - iIncrementalOpenUtil->Stop(); - - // Start the read - iFirstIncrementalOpen = ETrue; - RArray attrs; - CleanupClosePushL( attrs ); - TArray ary = attrs.Array(); - iIncrementalOpenUtil->SetDelay( KIncrementalDelayNone ); - iIncrementalOpenUtil->StartL( ary, KIncrementalFetchBlockSize, - KErrNotFound, CMPXCollectionOpenUtility::EFetchNormal ); - iIncrementalOpenUtil->SetDelay( KIncrementalDelayHalfSecond ); - CleanupStack::PopAndDestroy( &attrs ); - TX_EXIT -} - -/*! - \internal - */ -void MpMpxFrameworkWrapperPrivate::DoReopenCollectionL() -{ - TX_ENTRY - CMPXCollectionPath* cpath = iCollectionUtility->Collection().PathL(); - CleanupStack::PushL( cpath ); - cpath->Back(); - iCollectionUtility->Collection().OpenL( *cpath ); - CleanupStack::PopAndDestroy( cpath ); - TX_EXIT -} - -/*! - \internal - */ -void MpMpxFrameworkWrapperPrivate::DoBackL() -{ - TX_ENTRY - iCollectionUtility->Collection().BackL(); - TX_EXIT -} - -/*! - \internal - */ -void MpMpxFrameworkWrapperPrivate::DoFindPlaylistsL( QStringList &playlists ) -{ - TX_ENTRY - delete iUserPlaylists; - iUserPlaylists = NULL; - - RArray attrs; - CleanupClosePushL( attrs ); - attrs.Append( KMPXMediaGeneralId ); - attrs.Append( KMPXMediaGeneralTitle ); - - CMPXMedia* criteria = CMPXMedia::NewL(); - CleanupStack::PushL( criteria ); - criteria->SetTObjectValueL( - KMPXMediaGeneralType, EMPXGroup ); - criteria->SetTObjectValueL( - KMPXMediaGeneralCategory, EMPXPlaylist ); - - // Look up collection UID and set to criteria - RArray ary; - CleanupClosePushL( ary ); - ary.AppendL( TUid::Uid( EMPXCollectionPluginMusic ) ); - TUid musicCollection = iCollectionUtility->CollectionIDL( ary.Array() ); - CleanupStack::PopAndDestroy( &ary ); - - criteria->SetTObjectValueL( KMPXMediaGeneralCollectionId, musicCollection ); - - iUserPlaylists = iCollectionUtility->Collection().FindAllL( *criteria, attrs.Array() ); - CleanupStack::PopAndDestroy( criteria ); - CleanupStack::PopAndDestroy( &attrs ); - - if ( iUserPlaylists ) { - const CMPXMediaArray* mediaArray = - iUserPlaylists->Value( KMPXMediaArrayContents ); - User::LeaveIfNull( const_cast( mediaArray ) ); - TInt count = mediaArray->Count(); - for ( TInt i = 0; i < count; i++ ) { - CMPXMedia* media( mediaArray->AtL( i ) ); - const TDesC& titleText = media->ValueText( KMPXMediaGeneralTitle ); - if ( titleText.Compare( KNullDesC ) != 0 ) { - playlists += QString::fromUtf16( titleText.Ptr(), titleText.Length() ); - } - } - } - TX_EXIT -} - -/*! - \internal - */ -void MpMpxFrameworkWrapperPrivate::DoCreatePlaylistL( QString &playlistName, QList &selection, MpMpxCollectionData* collectionData ) -{ - TX_ENTRY_ARGS( "playlistName=" << playlistName ); - CMPXMedia* tracks = CMPXMedia::NewL(); - CleanupStack::PushL( tracks ); - - TPtrC ptr( reinterpret_cast( playlistName.constData() ) ); - tracks->SetTextValueL( KMPXMediaGeneralTitle, ptr ); - tracks->SetTextValueL( KMPXMediaGeneralUri, KPlaylistPath ); - //if collection data is not provided we use the browsing collection. - PreparePlaylistMediaL( *tracks, selection, collectionData ? collectionData : iCollectionData ); - - iCollectionUiHelper->IncAddL( *tracks, this, KMPXChunkSize ); - CleanupStack::PopAndDestroy( tracks ); - TX_EXIT -} - -/*! - \internal - */ -void MpMpxFrameworkWrapperPrivate::DoSaveToPlaylistL( TMPXItemId playlistId, QList &selection, MpMpxCollectionData *collectionData ) -{ - TX_ENTRY_ARGS( "playlistId=" << int( playlistId ) ); - - CMPXMedia* tracks = CMPXMedia::NewL(); - CleanupStack::PushL( tracks ); - - RArray ary; - CleanupClosePushL( ary ); - ary.AppendL( TUid::Uid( EMPXCollectionPluginMusic ) ); - TUid musicCollection = iCollectionUtility->CollectionIDL( ary.Array() ); - CleanupStack::PopAndDestroy( &ary ); - - tracks->SetTObjectValueL( KMPXMediaGeneralId, playlistId ); - tracks->SetTObjectValueL( KMPXMediaGeneralCollectionId, musicCollection ); - PreparePlaylistMediaL( *tracks, selection, collectionData ); - - iCollectionUiHelper->IncAddL( *tracks, this, KMPXChunkSize ); - CleanupStack::PopAndDestroy( tracks ); - TX_EXIT -} - -/*! - \internal - */ -void MpMpxFrameworkWrapperPrivate::DoSaveToPlaylistL( int playlistIndex, QList &selection ) -{ - TX_ENTRY_ARGS( "playlistIndex=" << playlistIndex ); - - const CMPXMediaArray* mediaArray = iUserPlaylists->Value( KMPXMediaArrayContents ); - User::LeaveIfNull( const_cast( mediaArray ) ); - CMPXMedia* media( mediaArray->AtL( playlistIndex ) ); - TMPXItemId playlistId = media->ValueTObjectL( KMPXMediaGeneralId ); - DoSaveToPlaylistL( playlistId, selection, iCollectionData ); - TX_EXIT -} - -/*! - \internal - */ -void MpMpxFrameworkWrapperPrivate::DoSaveToCurrentPlaylistL( QList &selection, MpMpxCollectionData *collectionData ) -{ - TX_ENTRY - - const CMPXMedia& container = iCollectionData->containerMedia(); - if ( container.ValueTObjectL(KMPXMediaGeneralType) != EMPXItem && - container.ValueTObjectL(KMPXMediaGeneralCategory) != EMPXPlaylist) { - User::Leave( KErrArgument ); - } - TMPXItemId playlistId( container.ValueTObjectL( KMPXMediaGeneralId ) ); - DoSaveToPlaylistL( playlistId, selection, collectionData ); - TX_EXIT -} - -/*! - \internal - */ -void MpMpxFrameworkWrapperPrivate::DoDeleteSongsL( QList &selection ) -{ - int count = selection.count(); - TX_ENTRY_ARGS( "selection count=" << count ); - - CMPXCollectionPath* path( iCollectionUtility->Collection().PathL() ); - CleanupStack::PushL( path ); - - for ( TInt i = 0; i < count; i++ ) { - path->SelectL( selection.at( i ) ); - } - iCollectionUiHelper->DeleteL( *path, this ); - CleanupStack::PopAndDestroy( path ); - TX_EXIT -} - -/*! - \internal - */ -void MpMpxFrameworkWrapperPrivate::DoRenamePlaylistL( QString &newName, int index ) -{ - TX_ENTRY - CMPXMediaArray *mediaArray; - const CMPXMedia& container = iCollectionData->containerMedia(); - mediaArray = const_cast( container.Value( KMPXMediaArrayContents ) ); - CMPXMedia* currentPlaylistMedia( mediaArray->AtL( index ) ); - TMPXItemId id( currentPlaylistMedia->ValueTObjectL( KMPXMediaGeneralId ) ); - DoRenamePlaylistL( id, newName ); - TX_EXIT -} - -/*! - \internal - */ -void MpMpxFrameworkWrapperPrivate::DoRenamePlaylistL( QString &newName ) -{ - TX_ENTRY - const CMPXMedia& container = iCollectionData->containerMedia(); - TMPXItemId id( container.ValueTObjectL( KMPXMediaGeneralId ) ); - DoRenamePlaylistL( id, newName ); - TX_EXIT -} - -/*! - \internal - */ -void MpMpxFrameworkWrapperPrivate::DoRenamePlaylistL( TMPXItemId id, QString &newName ) - { - CMPXMedia* media = CMPXMedia::NewL(); - CleanupStack::PushL( media ); - media->SetTObjectValueL( - KMPXMediaGeneralType, EMPXItem ); - media->SetTObjectValueL( - KMPXMediaGeneralCategory, EMPXPlaylist ); - media->SetTObjectValueL( KMPXMediaGeneralId, id ); - TPtrC ptr( reinterpret_cast( newName.constData() ) ); - media->SetTextValueL( KMPXMediaGeneralTitle, ptr ); - iCollectionUiHelper->RenameL( *media, this ); - CleanupStack::PopAndDestroy( media ); - } - -/*! - \internal - */ -void MpMpxFrameworkWrapperPrivate::DoSetShuffleL( bool active ) -{ - TX_ENTRY - if ( iPlaybackUtility ) { - iPlaybackUtility->SetL( EPbPropertyRandomMode, active ); - } - TX_EXIT -} - -/*! - \internal - */ -void MpMpxFrameworkWrapperPrivate::DoPreviewItemL( int index ) -{ - TX_ENTRY - if ( !iPlaybackUtility ) { - iPlaybackUtility = MMPXPlaybackUtility::UtilityL( TUid::Uid( MpCommon::KMusicPlayerUid ) ); - } - - // Get the current path - CMPXCollectionPath* cpath = iCollectionUtility->Collection().PathL(); - CleanupStack::PushL( cpath ); - MPX_DEBUG_PATH( *cpath ); - cpath->Back(); - - CMPXMediaArray *mediaArray; - const CMPXMedia& container = iCollectionData->containerMedia(); - mediaArray = const_cast( container.Value( KMPXMediaArrayContents ) ); - CMPXMedia* currentMedia( mediaArray->AtL( index ) ); - TMPXItemId id( currentMedia->ValueTObjectL( KMPXMediaGeneralId ) ); - - cpath->AppendL( id ); // Top level items of songs - cpath->Set( 0 ); // Select 1st song - - CMPXCollectionPlaylist* playList = CMPXCollectionPlaylist::NewL( *cpath ); - CleanupStack::PushL( playList ); - playList->SetToFirst(); - - iPlaybackUtility->InitL( *playList, ETrue ); - emit q_ptr->collectionPlaylistOpened(); - - CleanupStack::PopAndDestroy( playList ); - CleanupStack::PopAndDestroy( cpath ); - TX_EXIT -} - -/*! - \internal - */ -void MpMpxFrameworkWrapperPrivate::DoOpenIsolatedCollectionL( TCollectionContext context ) -{ - - if ( ECollectionContextAllSongs == context ) { - CMPXCollectionPath* cpath = iCollectionUiHelper->MusicAllSongsPathL(); - CleanupStack::PushL( cpath ); - if ( !iIsolatedCollectionHelper ) { - iIsolatedCollectionHelper = CMpMpxIsolatedCollectionHelper::NewL( this ); - } - iIsolatedCollectionHelper->OpenCollectionL( *cpath ); - CleanupStack::PopAndDestroy( cpath ); - } -} - -/*! - \internal - */ -void MpMpxFrameworkWrapperPrivate::DoReorderPlaylistL( int playlistId, int songId, int originalOrdinal, int newOrdinal ) -{ - iCollectionUiHelper->ReorderPlaylistL( playlistId, songId, originalOrdinal, newOrdinal, this ); -} - - -/*! - \internal - */ -void MpMpxFrameworkWrapperPrivate::DoHandleCollectionMessageL( - const CMPXMessage& aMsg ) -{ - TX_ENTRY - TMPXMessageId id( aMsg.ValueTObjectL( KMPXMessageGeneralId ) ); - if ( KMPXMessageGeneral == id ) { - TInt event( aMsg.ValueTObjectL( KMPXMessageGeneralEvent ) ); - TInt type( aMsg.ValueTObjectL( KMPXMessageGeneralType ) ); - TInt data( aMsg.ValueTObjectL( KMPXMessageGeneralData ) ); - TX_LOG_ARGS( "event=" << event << ", type=" << type << ", data=" << data ); - - if ( event == TMPXCollectionMessage::EPathChanged && - type == EMcPathChangedByOpen && - data == EMcContainerOpened ) { - // Incremental Open when browsing to the next level - DoIncrementalOpenL(); - } - else if ( event == TMPXCollectionMessage::EPathChanged && - type == EMcPathChangedByOpen && - data == EMcItemOpened ) { - // Opened a song - // This will result in HandleOpenL with CMPXCollectionPlaylist - iCollectionUtility->Collection().OpenL(); - } - } - TX_EXIT -} - - -/*! - \internal - */ -void MpMpxFrameworkWrapperPrivate::PreparePlaylistMediaL( - CMPXMedia& aMedia, - QList &selection, - MpMpxCollectionData *collectionData ) -{ - int count = selection.count(); - TX_ENTRY_ARGS( "selection count=" << count ); - - const CMPXMedia& container = collectionData->containerMedia(); - const CMPXMediaArray* containerArray = container.Value( KMPXMediaArrayContents ); - User::LeaveIfNull( const_cast( containerArray ) ); - CMPXMediaArray* tracksArray( CMPXMediaArray::NewL() ); - CleanupStack::PushL( tracksArray ); - - CMPXCollectionPath* path( iCollectionUtility->Collection().PathL() ); - CleanupStack::PushL( path ); - TMPXItemId collectionId( path->Id( 0 ) ); - CleanupStack::PopAndDestroy( path ); - - if ( collectionData->context() == ECollectionContextAlbums ) { - for ( TInt i = 0; i < count; i++ ) { - CMPXMedia* results; - CMPXMedia* album( containerArray->AtL( selection[i] ) ); - // Fetch the songs for the selected album - TMPXItemId albumId = album->ValueTObjectL( KMPXMediaGeneralId ); - CMPXMedia* findCriteria = CMPXMedia::NewL(); - CleanupStack::PushL( findCriteria ); - findCriteria->SetTObjectValueL( KMPXMediaGeneralType, EMPXGroup ); - findCriteria->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXSong ); - findCriteria->SetTObjectValueL( KMPXMediaGeneralId, albumId ); - RArray attrs; - CleanupClosePushL( attrs ); - attrs.Append( TMPXAttribute( KMPXMediaIdGeneral, - EMPXMediaGeneralTitle | - EMPXMediaGeneralId ) ); - attrs.Append( KMPXMediaMusicAlbumTrack ); - results = iCollectionUtility->Collection().FindAllL( *findCriteria, attrs.Array() ); - CleanupStack::PopAndDestroy( &attrs ); - CleanupStack::PopAndDestroy( findCriteria ); - CleanupStack::PushL( results ); - - const CMPXMediaArray* resultsArray = results->Value( KMPXMediaArrayContents ); - User::LeaveIfNull( resultsArray ); - for ( int j = 0 ; j < resultsArray->Count();j++ ) { - CMPXMedia* media( resultsArray->AtL( j ) ); - CMPXMedia* entry = CMPXMedia::NewL(); - CleanupStack::PushL( entry ); - entry->SetTextValueL( KMPXMediaGeneralTitle, - media->ValueText( KMPXMediaGeneralTitle ) ); - entry->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem ); - entry->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXSong ); - entry->SetTObjectValueL( KMPXMediaGeneralId, - media->ValueTObjectL( KMPXMediaGeneralId ) ); - entry->SetTObjectValueL( KMPXMediaGeneralCollectionId, collectionId ); - CleanupStack::Pop( entry ); - tracksArray->AppendL( entry ); - } - CleanupStack::PopAndDestroy( results ); - } - - } - else { - for ( TInt i = 0; i < count; i++ ) { - CMPXMedia* media( containerArray->AtL( selection.at( i ) ) ); - CMPXMedia* entry = CMPXMedia::NewL(); - CleanupStack::PushL( entry ); - entry->SetTextValueL( KMPXMediaGeneralTitle, - media->ValueText( KMPXMediaGeneralTitle ) ); - entry->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem ); - entry->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXSong ); - entry->SetTObjectValueL( KMPXMediaGeneralId, - media->ValueTObjectL( KMPXMediaGeneralId ) ); - entry->SetTObjectValueL( KMPXMediaGeneralCollectionId, collectionId ); - CleanupStack::Pop( entry ); - tracksArray->AppendL( entry ); - } - } - aMedia.SetTObjectValueL( KMPXMediaGeneralType, EMPXItem ); - aMedia.SetTObjectValueL( KMPXMediaGeneralCategory, EMPXPlaylist ); - aMedia.SetCObjectValueL( KMPXMediaArrayContents, tracksArray ); - aMedia.SetTObjectValueL( KMPXMediaArrayCount, tracksArray->Count() ); - - CleanupStack::PopAndDestroy( tracksArray ); - TX_EXIT -}