mpviewplugins/mpcollectionviewplugin/src/mpmpxframeworkwrapper_p.cpp
changeset 22 ecf06a08d4d9
parent 20 82baf59ce8dd
child 23 d45f4c087764
child 25 3ec52facab4d
child 34 2c5162224003
--- 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 <QStringList>
-
-#include <s32strm.h>
-#include <s32mem.h>
-#include <apgcli.h>
-#include <apacmdln.h>
-
-#include <mpxplaybackutility.h>
-#include <mpxcollectionutility.h>
-#include <mpxharvesterutility.h>
-#include <mpxcollectionpath.h>
-#include <mpxcollectionmessage.h>
-#include <mpxcollectionplaylist.h>
-#include <mpxmessagecontainerdefs.h>
-#include <mpxmediacollectiondetaildefs.h>
-#include <mpxmediamusicdefs.h>
-#include <mpxmediageneraldefs.h>
-#include <mpxcollectionplugin.hrh>
-#include <mpxmessagegeneraldefs.h>
-#include <mpxmediacontainerdefs.h>
-#include <mpxcollectionmessagedefs.h>
-#include <mpxparameter.h>
-#include <mpxcollectionhelperfactory.h>
-#include <mpxcollectionuihelper.h>
-#include <mpxcollectionopenutility.h>
-#include <mpxmediaarray.h>
-#include <mpxmedia.h>
-#include <mpxlog.h>
-
-#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<int> &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<int> &selection )
-{
-    TRAPD( err, DoSaveToPlaylistL( playlistIndex, selection ) );
-    if ( err != KErrNone ) {
-        TX_LOG_ARGS( "Error: " << err << "; should never get here." );
-    }
-}
-
-/*!
- \internal
- */
-void MpMpxFrameworkWrapperPrivate::saveToCurrentPlaylist( QList<int> &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<int> &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<TMPXAttribute> attrs;
-    CleanupClosePushL( attrs );
-    TArray<TMPXAttribute> 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<TMPXAttribute> attrs;
-    CleanupClosePushL( attrs );
-    attrs.Append( KMPXMediaGeneralId );
-    attrs.Append( KMPXMediaGeneralTitle );
-
-    CMPXMedia* criteria = CMPXMedia::NewL();
-    CleanupStack::PushL( criteria );
-    criteria->SetTObjectValueL<TMPXGeneralType>( 
-        KMPXMediaGeneralType, EMPXGroup );
-    criteria->SetTObjectValueL<TMPXGeneralCategory>( 
-        KMPXMediaGeneralCategory, EMPXPlaylist );
-
-    // Look up collection UID and set to criteria
-    RArray<TUid> ary;
-    CleanupClosePushL( ary );
-    ary.AppendL( TUid::Uid( EMPXCollectionPluginMusic ) );
-    TUid musicCollection = iCollectionUtility->CollectionIDL( ary.Array() );
-    CleanupStack::PopAndDestroy( &ary );
-
-    criteria->SetTObjectValueL<TUid>( KMPXMediaGeneralCollectionId, musicCollection );
-
-    iUserPlaylists = iCollectionUtility->Collection().FindAllL( *criteria, attrs.Array() );
-    CleanupStack::PopAndDestroy( criteria );
-    CleanupStack::PopAndDestroy( &attrs );
-
-    if ( iUserPlaylists ) {
-        const CMPXMediaArray* mediaArray =
-            iUserPlaylists->Value<CMPXMediaArray>( KMPXMediaArrayContents );
-        User::LeaveIfNull( const_cast<CMPXMediaArray*>( 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<int> &selection, MpMpxCollectionData* collectionData )
-{
-    TX_ENTRY_ARGS( "playlistName=" << playlistName );
-    CMPXMedia* tracks = CMPXMedia::NewL();
-    CleanupStack::PushL( tracks );
-
-    TPtrC ptr( reinterpret_cast<const TText*>( 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<int> &selection, MpMpxCollectionData *collectionData )
-{
-    TX_ENTRY_ARGS( "playlistId=" << int( playlistId ) );
-    
-    CMPXMedia* tracks = CMPXMedia::NewL();
-    CleanupStack::PushL( tracks );
-
-    RArray<TUid> ary;
-    CleanupClosePushL( ary );
-    ary.AppendL( TUid::Uid( EMPXCollectionPluginMusic ) );
-    TUid musicCollection = iCollectionUtility->CollectionIDL( ary.Array() );
-    CleanupStack::PopAndDestroy( &ary );
-
-    tracks->SetTObjectValueL<TMPXItemId>( KMPXMediaGeneralId, playlistId );
-    tracks->SetTObjectValueL<TUid>( KMPXMediaGeneralCollectionId, musicCollection );
-    PreparePlaylistMediaL( *tracks, selection, collectionData );
-
-    iCollectionUiHelper->IncAddL( *tracks, this, KMPXChunkSize );
-    CleanupStack::PopAndDestroy( tracks );
-    TX_EXIT
-}
-
-/*!
- \internal
- */
-void MpMpxFrameworkWrapperPrivate::DoSaveToPlaylistL( int playlistIndex, QList<int> &selection )
-{
-    TX_ENTRY_ARGS( "playlistIndex=" << playlistIndex );
-
-    const CMPXMediaArray* mediaArray =  iUserPlaylists->Value<CMPXMediaArray>( KMPXMediaArrayContents );
-    User::LeaveIfNull( const_cast<CMPXMediaArray*>( mediaArray ) );
-    CMPXMedia* media( mediaArray->AtL( playlistIndex ) );
-    TMPXItemId playlistId = media->ValueTObjectL<TMPXItemId>( KMPXMediaGeneralId );
-    DoSaveToPlaylistL( playlistId, selection, iCollectionData );
-    TX_EXIT
-}
-
-/*!
- \internal
- */
-void MpMpxFrameworkWrapperPrivate::DoSaveToCurrentPlaylistL( QList<int> &selection, MpMpxCollectionData *collectionData )
-{
-    TX_ENTRY
-
-    const CMPXMedia& container = iCollectionData->containerMedia();
-    if ( container.ValueTObjectL<TMPXGeneralType>(KMPXMediaGeneralType) != EMPXItem && 
-        container.ValueTObjectL<TMPXGeneralCategory>(KMPXMediaGeneralCategory) != EMPXPlaylist) {
-        User::Leave( KErrArgument );
-    }
-    TMPXItemId playlistId( container.ValueTObjectL<TMPXItemId>( KMPXMediaGeneralId ) );
-    DoSaveToPlaylistL( playlistId, selection, collectionData );
-    TX_EXIT
-}
-
-/*!
- \internal
- */
-void MpMpxFrameworkWrapperPrivate::DoDeleteSongsL( QList<int> &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<CMPXMediaArray*>( container.Value<CMPXMediaArray>( KMPXMediaArrayContents ) );
-    CMPXMedia* currentPlaylistMedia( mediaArray->AtL( index ) );
-    TMPXItemId id( currentPlaylistMedia->ValueTObjectL<TMPXItemId>( KMPXMediaGeneralId ) );
-    DoRenamePlaylistL( id, newName );
-    TX_EXIT
-}
-
-/*!
- \internal
- */
-void MpMpxFrameworkWrapperPrivate::DoRenamePlaylistL( QString &newName )
-{
-    TX_ENTRY
-    const CMPXMedia& container = iCollectionData->containerMedia();
-    TMPXItemId id( container.ValueTObjectL<TMPXItemId>( KMPXMediaGeneralId ) );
-    DoRenamePlaylistL( id, newName );
-    TX_EXIT
-}
-
-/*!
- \internal
- */
-void MpMpxFrameworkWrapperPrivate::DoRenamePlaylistL( TMPXItemId id, QString &newName )
- {
-     CMPXMedia* media = CMPXMedia::NewL();
-     CleanupStack::PushL( media );
-     media->SetTObjectValueL<TMPXGeneralType>( 
-     KMPXMediaGeneralType, EMPXItem );
-     media->SetTObjectValueL<TMPXGeneralCategory>( 
-     KMPXMediaGeneralCategory, EMPXPlaylist );
-     media->SetTObjectValueL<TMPXItemId>( KMPXMediaGeneralId, id );
-     TPtrC ptr( reinterpret_cast<const TText*>( 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<CMPXMediaArray*>( container.Value<CMPXMediaArray>( KMPXMediaArrayContents ) );
-    CMPXMedia* currentMedia( mediaArray->AtL( index ) );
-    TMPXItemId id( currentMedia->ValueTObjectL<TMPXItemId>( 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<TMPXMessageId>( KMPXMessageGeneralId ) );
-    if ( KMPXMessageGeneral == id ) {
-        TInt event( aMsg.ValueTObjectL<TInt>( KMPXMessageGeneralEvent ) );
-        TInt type( aMsg.ValueTObjectL<TInt>( KMPXMessageGeneralType ) );
-        TInt data( aMsg.ValueTObjectL<TInt>( 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<int> &selection,
-        MpMpxCollectionData *collectionData )
-{
-    int count = selection.count();
-    TX_ENTRY_ARGS( "selection count=" << count );
-
-    const CMPXMedia& container = collectionData->containerMedia();
-    const CMPXMediaArray* containerArray = container.Value<CMPXMediaArray>( KMPXMediaArrayContents );
-    User::LeaveIfNull( const_cast<CMPXMediaArray*>( 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<TMPXItemId>( KMPXMediaGeneralId );
-            CMPXMedia* findCriteria = CMPXMedia::NewL();
-            CleanupStack::PushL( findCriteria );
-            findCriteria->SetTObjectValueL<TMPXGeneralType>( KMPXMediaGeneralType, EMPXGroup );
-            findCriteria->SetTObjectValueL<TMPXGeneralCategory>( KMPXMediaGeneralCategory, EMPXSong );
-            findCriteria->SetTObjectValueL<TMPXItemId>( KMPXMediaGeneralId, albumId );
-            RArray<TMPXAttribute> 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<CMPXMediaArray>( 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<TMPXItemId>( 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<TMPXItemId>( KMPXMediaGeneralId ) );
-            entry->SetTObjectValueL( KMPXMediaGeneralCollectionId, collectionId );
-            CleanupStack::Pop( entry );
-            tracksArray->AppendL( entry );
-        }
-    }
-    aMedia.SetTObjectValueL<TMPXGeneralType>( KMPXMediaGeneralType, EMPXItem );
-    aMedia.SetTObjectValueL<TMPXGeneralCategory>( KMPXMediaGeneralCategory, EMPXPlaylist );
-    aMedia.SetCObjectValueL( KMPXMediaArrayContents, tracksArray );
-    aMedia.SetTObjectValueL( KMPXMediaArrayCount, tracksArray->Count() );
-
-    CleanupStack::PopAndDestroy( tracksArray );
-    TX_EXIT
-}