mtpdataproviders/mtpplaybackcontroldp/mtpplaybackmpximplementation/src/cmtpplaybackplaylisthelper.cpp
author hgs
Fri, 25 Jun 2010 16:54:01 +0800
changeset 29 3ae5cb0b4c02
child 47 63cf70d3ecd8
permissions -rw-r--r--
201025_07
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
29
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
     1
// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
     2
// All rights reserved.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
     7
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
     8
// Initial Contributors:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    10
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    11
// Contributors:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    12
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    13
// Description:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    14
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    15
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    16
/**
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    17
 @file
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    18
 @internalComponent
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    19
*/
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    20
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    21
#include <mpxmediamusicdefs.h>
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    22
#include <mpxmediacontainerdefs.h>
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    23
#include <mpxmessagegeneraldefs.h>
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    24
#include <pathinfo.h>
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    25
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    26
#include <mpxcollectionhelper.h>
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    27
#include <mpxcollectionhelperfactory.h>
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    28
#include <mpxcollectionuihelper.h>
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    29
#include <mpxcollectionhelperfactory.h>
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    30
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    31
#include <mpxcollectionutility.h>
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    32
#include <mpxcollectionplaylist.h>
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    33
#include <mpxcollectionmessage.h>
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    34
#include <mpxcollectionpath.h>
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    35
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    36
#include "cmtpplaybackcontrolimpl.h"
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    37
#include "cmtpplaybackplaylisthelper.h"
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    38
#include "mtpplaybackcontrolpanic.h"
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    39
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    40
// Constants
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    41
__FLOG_STMT(_LIT8(KComponent,"PlaybackPlaylistHelper");)
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    42
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    43
// ======== MEMBER FUNCTIONS ========
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    44
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    45
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    46
// CMTPPlaybackPlaylistHelper::NewL
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    47
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    48
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    49
CMTPPlaybackPlaylistHelper* CMTPPlaybackPlaylistHelper::NewL( CMTPPlaybackControlImpl& aControlImpl )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    50
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    51
    CMTPPlaybackPlaylistHelper* self = new ( ELeave ) 
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    52
                CMTPPlaybackPlaylistHelper( aControlImpl );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    53
    CleanupStack::PushL( self );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    54
    self->ConstructL();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    55
    CleanupStack::Pop( self );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    56
    return self;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    57
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    58
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    59
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    60
// CMTPPlaybackPlaylistHelper::~CMTPPlaybackPlaylistHelper
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    61
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    62
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    63
CMTPPlaybackPlaylistHelper::~CMTPPlaybackPlaylistHelper()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    64
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    65
    __FLOG(_L8("+CMTPPlaybackPlaylistHelper::~CMTPPlaybackPlaylistHelper"));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    66
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    67
    if( iCollectionUiHelper )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    68
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    69
        iCollectionUiHelper->Close();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    70
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    71
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    72
    if ( iCollectionHelper )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    73
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    74
        iCollectionHelper->Close();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    75
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    76
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    77
    if( iCollectionUtil ) 
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    78
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    79
        iCollectionUtil->Close();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    80
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    81
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    82
    delete iPlayObject;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    83
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    84
    __FLOG(_L8("-CMTPPlaybackPlaylistHelper::~CMTPPlaybackPlaylistHelper"));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    85
    __FLOG_CLOSE;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    86
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    87
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    88
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    89
// CMTPPlaybackPlaylistHelper::GetPlayListFromCollectionL
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    90
//// Get Playlist via aMedia
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    91
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    92
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    93
void CMTPPlaybackPlaylistHelper::GetPlayListFromCollectionL( const TMTPPbDataSuid& aPlayObject )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    94
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    95
    __FLOG(_L8("+CMTPPlaybackPlaylistHelper::GetPlayListFromCollectionL"));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    96
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    97
    //Reset
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    98
    ResetPlaySource();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
    99
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   100
    iPlayCategory = aPlayObject.Category();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   101
    iPlayObject = aPlayObject.Suid().AllocL();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   102
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   103
    switch ( iPlayCategory )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   104
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   105
        case EMTPPbCatPlayList:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   106
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   107
            OpenMusicPlayListPathL();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   108
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   109
            break;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   110
        case EMTPPbCatAlbum:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   111
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   112
            OpenMusicAblumPathL();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   113
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   114
            break;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   115
        default:
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   116
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   117
            Panic( EMTPPBCollectionErrCall );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   118
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   119
            break;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   120
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   121
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   122
    __FLOG(_L8("-CMTPPlaybackPlaylistHelper::GetPlayListFromCollectionL"));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   123
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   124
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   125
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   126
// CMTPPlaybackPlaylistHelper::GetPlayListFromCollectionL
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   127
// Get Playlist via index
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   128
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   129
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   130
void CMTPPlaybackPlaylistHelper::GetPlayListFromCollectionL( TInt aIndex )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   131
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   132
    __FLOG(_L8("+CMTPPlaybackPlaylistHelper::GetPlayListFromCollectionL"));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   133
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   134
    iSongIndex = aIndex;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   135
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   136
    UpdatePathAndOpenL();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   137
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   138
    __FLOG(_L8("-CMTPPlaybackPlaylistHelper::GetPlayListFromCollectionL"));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   139
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   140
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   141
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   142
// CMTPPlaybackPlaylistHelper::GetMTPPBSuidFromCollectionL
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   143
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   144
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   145
TMTPPbDataSuid CMTPPlaybackPlaylistHelper::GetMTPPBSuidFromCollectionL( 
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   146
        const CMPXCollectionPlaylist& aPlaylist )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   147
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   148
    __FLOG(_L8("+CMTPPlaybackPlaylistHelper::GetPlayListFromCollectionL"));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   149
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   150
    CMPXCollectionPath* path = iCollectionUiHelper->MusicPlaylistPathL();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   151
    if ( path->Id() == aPlaylist.Path().Id( KMTPPlaybackPlaylistAblumLevel -1 ))
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   152
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   153
        iPlayCategory = EMTPPbCatPlayList;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   154
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   155
    else
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   156
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   157
        iPlayCategory = EMTPPbCatAlbum;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   158
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   159
    TFileName uri = ItemIdToUriL( aPlaylist.Path().Id( KMTPPlaybackPlaylistAblumLevel ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   160
    TMTPPbDataSuid dataSuid( iPlayCategory, uri );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   161
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   162
    __FLOG(_L8("-CMTPPlaybackPlaylistHelper::GetPlayListFromCollectionL"));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   163
    return dataSuid;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   164
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   165
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   166
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   167
// CMTPPlaybackPlaylistHelper::MTPPbCategory
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   168
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   169
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   170
TMTPPbCategory CMTPPlaybackPlaylistHelper::MTPPbCategory() const
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   171
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   172
    return iPlayCategory;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   173
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   174
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   175
// CMTPPlaybackPlaylistHelper::MTPPbSuid
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   176
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   177
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   178
TFileName CMTPPlaybackPlaylistHelper::MTPPbSuid() const
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   179
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   180
    return TFileName( *iPlayObject );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   181
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   182
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   183
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   184
// From MMPXCollectionObserver
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   185
// Handle completion of a asynchronous command
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   186
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   187
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   188
void CMTPPlaybackPlaylistHelper::HandleCollectionMessage( CMPXMessage* aMsg, TInt aErr )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   189
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   190
    __FLOG_1(_L8("+CMTPPlaybackPlaylistHelper::HandleCollectionMessage( %d ) "), aErr );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   191
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   192
    if (( KErrNone == aErr ) && aMsg )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   193
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   194
        TRAP( aErr, DoHandleCollectionMessageL( *aMsg ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   195
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   196
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   197
    if ( KErrNone != aErr )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   198
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   199
        TInt error = MTPPlaybackControlImpl().MapError( aErr );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   200
        MTPPlaybackControlImpl().DoHandleError( error );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   201
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   202
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   203
    __FLOG(_L8("-CMTPPlaybackPlaylistHelper::HandleCollectionMessage"));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   204
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   205
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   206
// From MMPXCollectionObserver
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   207
// ---------------------------------------------------------------------------  
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   208
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   209
void CMTPPlaybackPlaylistHelper::HandleOpenL( const CMPXMedia& aEntries, 
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   210
        TInt /*aIndex*/, TBool /*aComplete*/, TInt aError )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   211
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   212
    __FLOG_1(_L8("+CMTPPlaybackPlaylistHelper::HandleOpenL( %d )"), aError );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   213
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   214
    if ( KErrNone == aError )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   215
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   216
        TRAP( aError, DoHandleOpenL( aEntries ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   217
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   218
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   219
    if ( KErrNone != aError )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   220
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   221
        TInt error = MTPPlaybackControlImpl().MapError( aError );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   222
        MTPPlaybackControlImpl().DoHandleError( error );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   223
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   224
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   225
    __FLOG(_L8("-CMTPPlaybackPlaylistHelper::HandleOpenL"));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   226
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   227
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   228
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   229
// From MMPXCollectionObserver
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   230
// ---------------------------------------------------------------------------  
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   231
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   232
void CMTPPlaybackPlaylistHelper::HandleOpenL( const CMPXCollectionPlaylist& aPlaylist,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   233
        TInt aError )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   234
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   235
    __FLOG_1(_L8("+CMTPPlaybackPlaylistHelper::HandleOpenL( aPlaylist, aError = %d )"), aError );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   236
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   237
    if ( KErrNone == aError )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   238
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   239
        TRAP( aError, MTPPlaybackControlImpl().GetPlaylistFromCollectionCompleteL( aPlaylist ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   240
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   241
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   242
    if ( KErrNone != aError )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   243
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   244
        TInt error = MTPPlaybackControlImpl().MapError( aError );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   245
        MTPPlaybackControlImpl().DoHandleError( error );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   246
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   247
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   248
    __FLOG(_L8("-CMTPPlaybackPlaylistHelper::HandleOpenL( aPlaylist, aError )"));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   249
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   250
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   251
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   252
// From MMPXCollectionMediaObserver
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   253
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   254
void CMTPPlaybackPlaylistHelper::HandleCollectionMediaL( const CMPXMedia& /*aMedia*/, TInt /*aError*/ )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   255
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   256
    __FLOG(_L8("+CMTPPlaybackPlaylistHelper::HandleCollectionMediaL"));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   257
    __FLOG(_L8("-CMTPPlaybackPlaylistHelper::HandleCollectionMediaL"));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   258
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   259
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   260
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   261
// CMTPPlaybackPlaylistHelper::CMTPPlaybackPlaylistHelper
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   262
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   263
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   264
CMTPPlaybackPlaylistHelper::CMTPPlaybackPlaylistHelper( CMTPPlaybackControlImpl& aControlImpl )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   265
        : iCollectionUiHelper( NULL ),
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   266
          iCollectionHelper( NULL ),
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   267
          iCollectionUtil( NULL ),
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   268
          iPlayObject( NULL ),
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   269
          iMTPPlaybackControl( aControlImpl )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   270
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   271
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   272
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   273
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   274
// CMTPPlaybackPlaylistHelper::ConstructL
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   275
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   276
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   277
void CMTPPlaybackPlaylistHelper::ConstructL()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   278
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   279
    __FLOG_OPEN(KMTPSubsystem, KComponent);
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   280
    __FLOG(_L8("+CMTPPlaybackPlaylistHelper::ConstructL"));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   281
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   282
    iCollectionUiHelper = CMPXCollectionHelperFactory::NewCollectionUiHelperL();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   283
    iCollectionUtil = MMPXCollectionUtility::NewL( this, KMcModeDefault );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   284
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   285
    __FLOG(_L8("-CMTPPlaybackPlaylistHelper::ConstructL"));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   286
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   287
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   288
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   289
// CMTPPlaybackPlaylistHelper::DoHandleCollectionMessage
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   290
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   291
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   292
void CMTPPlaybackPlaylistHelper::DoHandleCollectionMessageL( const CMPXMessage& aMsg )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   293
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   294
    __FLOG(_L8("+CMTPPlaybackPlaylistHelper::DoHandleCollectionMessage"));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   295
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   296
    TMPXMessageId id( aMsg.ValueTObjectL<TMPXMessageId>( KMPXMessageGeneralId ) );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   297
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   298
    if ( KMPXMessageGeneral == id )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   299
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   300
        TInt event( aMsg.ValueTObjectL<TInt>( KMPXMessageGeneralEvent ) );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   301
        TInt type( aMsg.ValueTObjectL<TInt>( KMPXMessageGeneralType ) );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   302
        TInt data( aMsg.ValueTObjectL<TInt>( KMPXMessageGeneralData ) );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   303
        
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   304
        __FLOG_VA((_L8("Event code is 0x%X, type code is 0x%X"), event, type ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   305
        __FLOG_1(_L8("Data code is 0x%X"), data );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   306
        
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   307
        if ( event == TMPXCollectionMessage::EPathChanged &&
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   308
             type == EMcPathChangedByOpen && 
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   309
             data == EMcContainerOpened )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   310
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   311
            iCollectionUtil->Collection().OpenL();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   312
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   313
        else if ( event == TMPXCollectionMessage::EPathChanged &&
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   314
                  type == EMcPathChangedByOpen &&
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   315
                  data == EMcItemOpened )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   316
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   317
            iCollectionUtil->Collection().OpenL();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   318
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   319
        else if ( event == TMPXCollectionMessage::ECollectionChanged )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   320
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   321
            __FLOG(_L8("Ignore this event"));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   322
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   323
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   324
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   325
    __FLOG(_L8("-CMTPPlaybackPlaylistHelper::DoHandleCollectionMessage"));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   326
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   327
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   328
// ----------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   329
// CMTPPlaybackPlaylistHelper::DoHandleOpenL
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   330
// ----------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   331
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   332
void CMTPPlaybackPlaylistHelper::DoHandleOpenL( const CMPXMedia& aEntries )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   333
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   334
    __FLOG(_L8("+CMTPPlaybackPlaylistHelper::DoHandleOpenL( const CMPXMedia )"));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   335
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   336
    if ( EMTPPbCatAlbum == iPlayCategory )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   337
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   338
        UpdateAlbumPathAndOpenL();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   339
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   340
    else
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   341
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   342
        //playlist
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   343
        if ( -1 == iPathIndex )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   344
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   345
            //first, the top path
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   346
            UpdatePlaylistPathIndexL( aEntries );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   347
                
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   348
            if ( -1 == iPathIndex )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   349
                {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   350
                MTPPlaybackControlImpl().DoHandleError( KPlaybackErrParamInvalid );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   351
                }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   352
            else
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   353
                {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   354
                iCollectionUtil->Collection().OpenL( iPathIndex );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   355
                }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   356
                }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   357
        else
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   358
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   359
            //open the first song when initObject
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   360
            iCollectionUtil->Collection().OpenL( iSongIndex );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   361
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   362
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   363
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   364
    __FLOG(_L8("-CMTPPlaybackPlaylistHelper::DoHandleOpenL( const CMPXMedia )"));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   365
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   366
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   367
// ----------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   368
// CMTPPlaybackPlaylistHelper::OpenMusicPlayListPathL
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   369
// ----------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   370
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   371
void CMTPPlaybackPlaylistHelper::OpenMusicPlayListPathL()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   372
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   373
    __FLOG(_L8("+CMTPPlaybackPlaylistHelper::OpenMusicPlayListPathL"));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   374
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   375
    CMPXCollectionPath* path = iCollectionUiHelper->MusicPlaylistPathL();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   376
    CleanupStack::PushL( path );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   377
    iCollectionUtil->Collection().OpenL( *path );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   378
    CleanupStack::PopAndDestroy( path );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   379
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   380
    __FLOG(_L8("-CMTPPlaybackPlaylistHelper::OpenMusicPlayListPathL"));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   381
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   382
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   383
// ----------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   384
// CMTPPlaybackPlaylistHelper::OpenMusicAblumPathL
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   385
// ----------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   386
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   387
void CMTPPlaybackPlaylistHelper::OpenMusicAblumPathL()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   388
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   389
    __FLOG(_L8("+CMTPPlaybackPlaylistHelper::OpenMusicAblumPathL"));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   390
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   391
    CMPXCollectionPath* path = iCollectionUiHelper->MusicMenuPathL();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   392
    CleanupStack::PushL( path );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   393
    path->AppendL(KMPXCollectionArtistAlbum);
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   394
    iCollectionUtil->Collection().OpenL( *path );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   395
    CleanupStack::PopAndDestroy( path );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   396
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   397
    __FLOG(_L8("-CMTPPlaybackPlaylistHelper::OpenMusicAblumPathL"));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   398
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   399
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   400
// ----------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   401
// CMTPPlaybackPlaylistHelper::ResetPlaySource
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   402
// ----------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   403
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   404
void CMTPPlaybackPlaylistHelper::ResetPlaySource()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   405
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   406
    __FLOG(_L8("+CMTPPlaybackPlaylistHelper::ResetPlaySourceL"));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   407
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   408
    iPathIndex = -1;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   409
    iSongIndex = 0;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   410
    delete iPlayObject;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   411
    iPlayObject = NULL;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   412
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   413
    __FLOG(_L8("-CMTPPlaybackPlaylistHelper::ResetPlaySourceL"));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   414
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   415
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   416
// ----------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   417
// CMTPPlaybackPlaylistHelper::UpdatePlaylistPathIndexL
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   418
// ----------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   419
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   420
void CMTPPlaybackPlaylistHelper::UpdatePlaylistPathIndexL( const CMPXMedia& aEntries )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   421
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   422
    __FLOG(_L8("+CMTPPlaybackPlaylistHelper::UpdatePlaylistPathIndexL"));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   423
    __ASSERT_DEBUG( iPlayCategory == EMTPPbCatPlayList, Panic( EMTPPBCollectionErrCall ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   424
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   425
    const CMPXMediaArray* refArray = aEntries.Value<CMPXMediaArray> ( KMPXMediaArrayContents );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   426
    TInt count = refArray->Count();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   427
    const TMPXItemId playlistId = UriToItemIdL();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   428
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   429
    for ( TInt i=0; i<count; ++i )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   430
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   431
        CMPXMedia* container = refArray->AtL(i);
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   432
        /**
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   433
         * Try to find out the next path according to the 
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   434
         * playlist's ItemId
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   435
         */
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   436
        if ( container->IsSupported( KMPXMediaGeneralId ))
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   437
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   438
            const TMPXItemId tempId = container->ValueTObjectL<TMPXItemId>(KMPXMediaGeneralId);
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   439
            if ( tempId == playlistId )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   440
                {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   441
                iPathIndex = i;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   442
                break;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   443
                }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   444
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   445
       }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   446
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   447
    __FLOG(_L8("-CMTPPlaybackPlaylistHelper::UpdatePlaylistPathIndexL"));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   448
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   449
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   450
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   451
// return instance of CollectionHelper.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   452
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   453
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   454
MMPXCollectionHelper* CMTPPlaybackPlaylistHelper::CollectionHelperL()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   455
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   456
    __FLOG(_L8("+CMTPPlaybackPlaylistHelper::CollectionHelperL"));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   457
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   458
    if ( iCollectionHelper == NULL )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   459
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   460
        iCollectionHelper = CMPXCollectionHelperFactory::NewCollectionCachedHelperL();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   461
            
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   462
        // Do a search for a song ID that does not exist
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   463
        RArray<TInt> contentIDs;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   464
        CleanupClosePushL( contentIDs ); // + contentIDs
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   465
        contentIDs.AppendL( KMPXMediaIdGeneral );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   466
            
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   467
        CMPXMedia* searchMedia = CMPXMedia::NewL( contentIDs.Array() );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   468
        CleanupStack::PopAndDestroy( &contentIDs ); // - contentIDs
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   469
        CleanupStack::PushL( searchMedia ); // + searchMedia
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   470
            
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   471
        searchMedia->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   472
        searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXSong );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   473
        searchMedia->SetTObjectValueL<TMPXItemId>( KMPXMediaGeneralId,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   474
                KMTPPlaybackInvalidSongID );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   475
            
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   476
        /*
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   477
        * store root
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   478
        */
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   479
        TChar driveChar = 'c';
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   480
        TInt driveNumber;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   481
        User::LeaveIfError( RFs::CharToDrive( driveChar, driveNumber ) );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   482
            
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   483
        // get root path
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   484
        TBuf<KStorageRootMaxLength> storeRoot;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   485
        User::LeaveIfError( PathInfo::GetRootPath( storeRoot, driveNumber ) );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   486
            
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   487
        searchMedia->SetTextValueL( KMPXMediaGeneralDrive, storeRoot );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   488
            
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   489
        RArray<TMPXAttribute> songAttributes;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   490
        CleanupClosePushL( songAttributes ); // + songAttributes
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   491
        songAttributes.AppendL( KMPXMediaGeneralId );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   492
            
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   493
        CMPXMedia* foundMedia = NULL;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   494
        TRAPD( err, foundMedia = iCollectionHelper->FindAllL(
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   495
                *searchMedia,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   496
                songAttributes.Array() ) );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   497
            
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   498
        CleanupStack::PopAndDestroy( &songAttributes ); // - songAttributes
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   499
        CleanupStack::PopAndDestroy( searchMedia ); // - searchMedia
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   500
            
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   501
        CleanupStack::PushL( foundMedia ); // + foundMedia
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   502
            
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   503
        if ( err != KErrNone )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   504
            {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   505
            iCollectionHelper->Close();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   506
            iCollectionHelper = NULL;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   507
            User::Leave( KErrGeneral );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   508
            }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   509
        CleanupStack::PopAndDestroy( foundMedia ); // - foundMedia
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   510
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   511
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   512
    __FLOG(_L8("-CMTPPlaybackPlaylistHelper::CollectionHelperL"));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   513
    return iCollectionHelper;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   514
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   515
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   516
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   517
// CMTPPlaybackPlaylistHelper::UriToItemIdL
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   518
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   519
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   520
const TMPXItemId CMTPPlaybackPlaylistHelper::UriToItemIdL()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   521
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   522
    __FLOG(_L8("+CMTPPlaybackPlaylistHelper::UriToItemIdL"));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   523
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   524
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   525
    TMPXItemId itemId( KMPXInvalidItemId );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   526
    TInt error = KErrNone;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   527
    CMPXMedia* result = NULL;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   528
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   529
    RArray<TMPXAttribute> atts; 
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   530
    CleanupClosePushL( atts );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   531
    atts.AppendL( KMPXMediaGeneralId );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   532
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   533
    if ( EMTPPbCatPlayList == iPlayCategory )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   534
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   535
        TRAP( error, result = CollectionHelperL()->GetL( *iPlayObject, atts.Array(), EMPXPlaylist ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   536
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   537
    else
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   538
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   539
        TRAP( error, result = CollectionHelperL()->GetL( *iPlayObject, atts.Array(), EMPXAbstractAlbum ));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   540
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   541
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   542
    if ( error != KErrNone )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   543
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   544
        CleanupStack::PopAndDestroy( &atts );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   545
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   546
    else
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   547
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   548
        CleanupStack::PushL( result );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   549
        itemId = result->ValueTObjectL<TMPXItemId>(KMPXMediaGeneralId);
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   550
        CleanupStack::PopAndDestroy( result );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   551
        CleanupStack::PopAndDestroy( &atts );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   552
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   553
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   554
    __FLOG(_L8("-CMTPPlaybackPlaylistHelper::UriToItemIdL"));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   555
    return itemId;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   556
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   557
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   558
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   559
// CMTPPlaybackPlaylistHelper::ItemIdToUriL.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   560
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   561
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   562
const TFileName CMTPPlaybackPlaylistHelper::ItemIdToUriL( const TMPXItemId& aId )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   563
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   564
    __FLOG(_L8("+CMTPPlaybackPlaylistHelper::ItemIdToUriL"));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   565
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   566
    TFileName itemUri( KNullDesC );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   567
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   568
    RArray<TInt> contentIDs;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   569
    CleanupClosePushL( contentIDs ); // + contentIDs
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   570
    contentIDs.AppendL( KMPXMediaIdGeneral );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   571
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   572
    CMPXMedia* searchMedia = CMPXMedia::NewL( contentIDs.Array() );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   573
    CleanupStack::PopAndDestroy( &contentIDs ); // - contentIDs
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   574
    CleanupStack::PushL( searchMedia ); // + searchMedia
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   575
        
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   576
    searchMedia->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   577
    if ( iPlayCategory == EMTPPbCatPlayList )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   578
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   579
        searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXPlaylist );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   580
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   581
    else
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   582
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   583
        searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXAbstractAlbum );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   584
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   585
    searchMedia->SetTObjectValueL<TMPXItemId>( KMPXMediaGeneralId, aId );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   586
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   587
    RArray<TMPXAttribute> resultAttributes;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   588
    CleanupClosePushL( resultAttributes ); // + resultAttributes
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   589
    resultAttributes.AppendL( KMPXMediaGeneralUri );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   590
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   591
    CMPXMedia* foundMedia = CollectionHelperL()->FindAllL(
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   592
                    *searchMedia,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   593
                    resultAttributes.Array() );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   594
                    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   595
    CleanupStack::PopAndDestroy( &resultAttributes ); // - resultAttributes
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   596
    CleanupStack::PopAndDestroy( searchMedia ); // - searchMedia
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   597
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   598
    CleanupStack::PushL( foundMedia ); // + foundMedia
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   599
    if ( !foundMedia->IsSupported( KMPXMediaArrayCount ))
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   600
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   601
        User::Leave( KErrNotSupported );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   602
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   603
    else if ( *foundMedia->Value<TInt>( KMPXMediaArrayCount ) != 1 )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   604
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   605
        User::Leave( KErrNotSupported );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   606
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   607
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   608
    const CMPXMediaArray* tracksArray = foundMedia->Value<CMPXMediaArray> ( KMPXMediaArrayContents );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   609
    CMPXMedia* item = tracksArray->AtL(0);
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   610
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   611
    if ( item->IsSupported( KMPXMediaGeneralUri ))
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   612
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   613
        itemUri = item->ValueText(KMPXMediaGeneralUri);
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   614
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   615
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   616
    CleanupStack::PopAndDestroy( foundMedia ); // - foundMedia
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   617
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   618
    __FLOG(_L8("-CMTPPlaybackPlaylistHelper::ItemIdToUriL"));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   619
    return itemUri;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   620
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   621
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   622
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   623
// CMTPPlaybackPlaylistHelper::FindAlbumSongsL
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   624
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   625
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   626
CMPXMedia* CMTPPlaybackPlaylistHelper::FindAlbumSongsL( const TMPXItemId& aAlbumId )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   627
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   628
    __FLOG(_L8("+CMTPPlaybackPlaylistHelper::FindAlbumSongsL"));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   629
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   630
    // Fetch the songs for the selected album
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   631
    CMPXMedia* findCriteria = CMPXMedia::NewL();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   632
    CleanupStack::PushL( findCriteria );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   633
    findCriteria->SetTObjectValueL<TMPXGeneralType>( KMPXMediaGeneralType, EMPXGroup );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   634
    findCriteria->SetTObjectValueL<TMPXGeneralCategory>( KMPXMediaGeneralCategory, EMPXSong );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   635
    findCriteria->SetTObjectValueL<TMPXItemId>( KMPXMediaGeneralId, aAlbumId );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   636
    RArray<TMPXAttribute> attrs;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   637
    CleanupClosePushL( attrs );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   638
    attrs.Append( TMPXAttribute( KMPXMediaIdGeneral,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   639
                                 EMPXMediaGeneralTitle |
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   640
                                 EMPXMediaGeneralId ) );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   641
    attrs.Append( KMPXMediaMusicAlbumTrack );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   642
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   643
    CMPXMedia* foundMedia = CollectionHelperL()->FindAllL( *findCriteria,
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   644
            attrs.Array() );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   645
    CleanupStack::PopAndDestroy( &attrs );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   646
    CleanupStack::PopAndDestroy( findCriteria );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   647
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   648
    if ( !foundMedia->IsSupported( KMPXMediaArrayCount ) )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   649
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   650
        User::Leave( KErrNotSupported );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   651
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   652
    TInt foundItemCount = *foundMedia->Value<TInt>( KMPXMediaArrayCount );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   653
    if ( foundItemCount == 0 )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   654
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   655
        User::Leave( KErrNotFound );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   656
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   657
    if ( !foundMedia->IsSupported( KMPXMediaArrayContents ) )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   658
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   659
        User::Leave( KErrNotSupported );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   660
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   661
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   662
    __FLOG(_L8("-CMTPPlaybackPlaylistHelper::FindAlbumSongsL"));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   663
    return foundMedia;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   664
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   665
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   666
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   667
// CMTPPlaybackPlaylistHelper::UpdatePathAndOpenL.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   668
// aParam: const CMPXMedia& aAlbums
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   669
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   670
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   671
void CMTPPlaybackPlaylistHelper::UpdateAlbumPathAndOpenL()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   672
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   673
    __FLOG(_L8("+CMTPPlaybackPlaylistHelper::UpdateAlbumPathAndOpenL"));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   674
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   675
    RArray<TMPXItemId> ids;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   676
    CleanupClosePushL(ids);
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   677
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   678
    CMPXCollectionPath* cpath = iCollectionUtil->Collection().PathL();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   679
    CleanupStack::PushL( cpath );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   680
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   681
    if (cpath->Levels() == 3)
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   682
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   683
        // go back one level before amending path with new levels
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   684
        cpath->Back();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   685
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   686
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   687
    const TMPXItemId id = UriToItemIdL();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   688
    if ( KMPXInvalidItemId == id )
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   689
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   690
        MTPPlaybackControlImpl().DoHandleError( KPlaybackErrParamInvalid );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   691
        CleanupStack::PopAndDestroy( cpath );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   692
        CleanupStack::PopAndDestroy(&ids);
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   693
        return;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   694
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   695
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   696
    ids.AppendL(id);
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   697
    cpath->AppendL( ids.Array() ); // top level items
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   698
    cpath->Set( 0 );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   699
    ids.Reset();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   700
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   701
    CMPXMedia* songs = FindAlbumSongsL( id );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   702
    CleanupStack::PushL( songs );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   703
    const CMPXMediaArray* tracksArray = songs->Value<CMPXMediaArray> ( KMPXMediaArrayContents );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   704
    User::LeaveIfNull(const_cast<CMPXMediaArray*>(tracksArray));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   705
    TUint count = tracksArray->Count();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   706
    for (TInt i=0; i<count; ++i)
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   707
        {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   708
        CMPXMedia* song = tracksArray->AtL(i);
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   709
        const TMPXItemId id = song->ValueTObjectL<TMPXItemId>(KMPXMediaGeneralId);
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   710
        ids.AppendL(id);
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   711
        }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   712
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   713
    cpath->AppendL(ids.Array()); // top level items
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   714
    cpath->Set( iSongIndex );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   715
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   716
    iCollectionUtil->Collection().OpenL(*cpath);
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   717
    CleanupStack::PopAndDestroy( songs );    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   718
    CleanupStack::PopAndDestroy( cpath );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   719
    CleanupStack::PopAndDestroy(&ids);
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   720
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   721
    __FLOG(_L8("-CMTPPlaybackPlaylistHelper::UpdateAlbumPathAndOpenL"));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   722
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   723
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   724
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   725
// CMTPPlaybackPlaylistHelper::UpdatePathAndOpenL.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   726
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   727
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   728
void CMTPPlaybackPlaylistHelper::UpdatePathAndOpenL()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   729
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   730
    __FLOG(_L8("+CMTPPlaybackPlaylistHelper::UpdatePathAndOpenL()"));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   731
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   732
    RArray<TMPXItemId> ids;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   733
    CleanupClosePushL(ids);
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   734
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   735
    CMPXCollectionPath* cpath = iCollectionUtil->Collection().PathL();
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   736
    CleanupStack::PushL( cpath );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   737
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   738
    cpath->Set( iSongIndex );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   739
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   740
    iCollectionUtil->Collection().OpenL(*cpath);  
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   741
    CleanupStack::PopAndDestroy( cpath );
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   742
    CleanupStack::PopAndDestroy(&ids);
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   743
    
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   744
    __FLOG(_L8("-CMTPPlaybackPlaylistHelper::UpdatePathAndOpenL( aSong Index )"));
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   745
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   746
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   747
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   748
// CMTPPlaybackPlaylistHelper::MTPPlaybackControlImpl.
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   749
// ---------------------------------------------------------------------------
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   750
//
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   751
CMTPPlaybackControlImpl& CMTPPlaybackPlaylistHelper::MTPPlaybackControlImpl()
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   752
    {
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   753
    return iMTPPlaybackControl;
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   754
    }
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   755
3ae5cb0b4c02 201025_07
hgs
parents:
diff changeset
   756