videocollection/mpxmyvideoscollection/src/vcxmyvideosalbum.cpp
author hgs
Thu, 01 Apr 2010 23:22:15 +0300
changeset 34 bbb98528c666
child 35 3738fe97f027
permissions -rw-r--r--
201009
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
34
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of the License "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
hgs
parents:
diff changeset
    10
* Initial Contributors:
hgs
parents:
diff changeset
    11
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    12
*
hgs
parents:
diff changeset
    13
* Contributors:
hgs
parents:
diff changeset
    14
*
hgs
parents:
diff changeset
    15
* Description:   Class representing album in My Videos collection.
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
#include <mpxlog.h>
hgs
parents:
diff changeset
    19
#include <mpxmedia.h>
hgs
parents:
diff changeset
    20
#include <mpxmediaarray.h>
hgs
parents:
diff changeset
    21
#include <mpxmediacontainerdefs.h>
hgs
parents:
diff changeset
    22
#include "vcxmyvideosalbum.h"
hgs
parents:
diff changeset
    23
#include "vcxmyvideoscollectionplugin.h"
hgs
parents:
diff changeset
    24
#include "vcxmyvideosvideocache.h"
hgs
parents:
diff changeset
    25
#include "vcxmyvideoscollectionutil.h"
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
hgs
parents:
diff changeset
    28
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    29
// TVcxMyVideosAlbumVideo::TVcxMyVideosAlbumVideo
hgs
parents:
diff changeset
    30
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    31
//
hgs
parents:
diff changeset
    32
TVcxMyVideosAlbumVideo::TVcxMyVideosAlbumVideo()
hgs
parents:
diff changeset
    33
    {
hgs
parents:
diff changeset
    34
    Set( 0, 0, 0 );
hgs
parents:
diff changeset
    35
    }
hgs
parents:
diff changeset
    36
hgs
parents:
diff changeset
    37
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    38
// TVcxMyVideosAlbumVideo::operator=
hgs
parents:
diff changeset
    39
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    40
//                
hgs
parents:
diff changeset
    41
TVcxMyVideosAlbumVideo& TVcxMyVideosAlbumVideo::operator=( const TVcxMyVideosAlbumVideo& aVideo )
hgs
parents:
diff changeset
    42
    {
hgs
parents:
diff changeset
    43
    Set( aVideo.iMdsId, aVideo.iRelationMdsId, aVideo.iMedia );
hgs
parents:
diff changeset
    44
    return *this;
hgs
parents:
diff changeset
    45
    }
hgs
parents:
diff changeset
    46
hgs
parents:
diff changeset
    47
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    48
// TVcxMyVideosAlbumVideo::Set
hgs
parents:
diff changeset
    49
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    50
//            
hgs
parents:
diff changeset
    51
void TVcxMyVideosAlbumVideo::Set( TUint32 aMdsId, TUint32 aRelationMdsId, CMPXMedia* aVideo )
hgs
parents:
diff changeset
    52
    {
hgs
parents:
diff changeset
    53
    iMdsId         = aMdsId;
hgs
parents:
diff changeset
    54
    iRelationMdsId = aRelationMdsId;
hgs
parents:
diff changeset
    55
    iMedia         = aVideo;
hgs
parents:
diff changeset
    56
    }
hgs
parents:
diff changeset
    57
hgs
parents:
diff changeset
    58
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    59
// CVcxMyVideosAlbum::CVcxMyVideosAlbum
hgs
parents:
diff changeset
    60
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    61
//
hgs
parents:
diff changeset
    62
CVcxMyVideosAlbum::CVcxMyVideosAlbum( CVcxMyVideosCollectionPlugin& aCollectionPlugin )
hgs
parents:
diff changeset
    63
: iCollection( aCollectionPlugin )
hgs
parents:
diff changeset
    64
    {
hgs
parents:
diff changeset
    65
    // No implementation required
hgs
parents:
diff changeset
    66
    }
hgs
parents:
diff changeset
    67
hgs
parents:
diff changeset
    68
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    69
// CVcxMyVideosAlbum::~CVcxMyVideosAlbum
hgs
parents:
diff changeset
    70
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    71
//
hgs
parents:
diff changeset
    72
CVcxMyVideosAlbum::~CVcxMyVideosAlbum()
hgs
parents:
diff changeset
    73
    {
hgs
parents:
diff changeset
    74
    iVideoList.Close();
hgs
parents:
diff changeset
    75
    }
hgs
parents:
diff changeset
    76
hgs
parents:
diff changeset
    77
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    78
// CVcxMyVideosAlbum::NewLC
hgs
parents:
diff changeset
    79
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    80
//
hgs
parents:
diff changeset
    81
CVcxMyVideosAlbum* CVcxMyVideosAlbum::NewLC( CVcxMyVideosCollectionPlugin& aCollectionPlugin )
hgs
parents:
diff changeset
    82
    {
hgs
parents:
diff changeset
    83
    CVcxMyVideosAlbum* self = new (ELeave) CVcxMyVideosAlbum( aCollectionPlugin );
hgs
parents:
diff changeset
    84
    CleanupStack::PushL(self);
hgs
parents:
diff changeset
    85
    self->ConstructL();
hgs
parents:
diff changeset
    86
    return self;
hgs
parents:
diff changeset
    87
    }
hgs
parents:
diff changeset
    88
hgs
parents:
diff changeset
    89
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    90
// CVcxMyVideosAlbum::NewL
hgs
parents:
diff changeset
    91
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    92
//
hgs
parents:
diff changeset
    93
CVcxMyVideosAlbum* CVcxMyVideosAlbum::NewL( CVcxMyVideosCollectionPlugin& aCollectionPlugin )
hgs
parents:
diff changeset
    94
    {
hgs
parents:
diff changeset
    95
    CVcxMyVideosAlbum* self = CVcxMyVideosAlbum::NewLC( aCollectionPlugin );
hgs
parents:
diff changeset
    96
    CleanupStack::Pop(); // self;
hgs
parents:
diff changeset
    97
    return self;
hgs
parents:
diff changeset
    98
    }
hgs
parents:
diff changeset
    99
hgs
parents:
diff changeset
   100
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   101
// CVcxMyVideosAlbum::ConstructL
hgs
parents:
diff changeset
   102
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   103
//
hgs
parents:
diff changeset
   104
void CVcxMyVideosAlbum::ConstructL()
hgs
parents:
diff changeset
   105
    {
hgs
parents:
diff changeset
   106
    iVideoList.Reset();
hgs
parents:
diff changeset
   107
    }
hgs
parents:
diff changeset
   108
hgs
parents:
diff changeset
   109
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   110
// CVcxMyVideosAlbum::Sort
hgs
parents:
diff changeset
   111
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   112
//
hgs
parents:
diff changeset
   113
void CVcxMyVideosAlbum::Sort()
hgs
parents:
diff changeset
   114
    {    
hgs
parents:
diff changeset
   115
    const TLinearOrder<TVcxMyVideosAlbumVideo> KOrderByMdsId(
hgs
parents:
diff changeset
   116
            CVcxMyVideosAlbum::CompareVideosByMdsId );
hgs
parents:
diff changeset
   117
hgs
parents:
diff changeset
   118
    iVideoList.Sort( KOrderByMdsId );
hgs
parents:
diff changeset
   119
    }
hgs
parents:
diff changeset
   120
hgs
parents:
diff changeset
   121
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   122
// CVcxMyVideosAlbum::SetL
hgs
parents:
diff changeset
   123
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   124
//
hgs
parents:
diff changeset
   125
void CVcxMyVideosAlbum::SetL( /*CMPXMedia& aAlbum*/ )
hgs
parents:
diff changeset
   126
    {
hgs
parents:
diff changeset
   127
    //TODO:
hgs
parents:
diff changeset
   128
    }
hgs
parents:
diff changeset
   129
hgs
parents:
diff changeset
   130
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   131
// CVcxMyVideosAlbum::BelongsToAlbum
hgs
parents:
diff changeset
   132
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   133
//
hgs
parents:
diff changeset
   134
TBool CVcxMyVideosAlbum::BelongsToAlbum( TUint32 aMdsId )
hgs
parents:
diff changeset
   135
    {
hgs
parents:
diff changeset
   136
    const TLinearOrder<TVcxMyVideosAlbumVideo> KOrderByMdsId(
hgs
parents:
diff changeset
   137
            CVcxMyVideosAlbum::CompareVideosByMdsId );
hgs
parents:
diff changeset
   138
    
hgs
parents:
diff changeset
   139
    TInt index;
hgs
parents:
diff changeset
   140
    TVcxMyVideosAlbumVideo video;
hgs
parents:
diff changeset
   141
    video.iMdsId = aMdsId;
hgs
parents:
diff changeset
   142
    TInt err = iVideoList.FindInOrder( video, index, KOrderByMdsId );
hgs
parents:
diff changeset
   143
    
hgs
parents:
diff changeset
   144
    if ( err != KErrNone )
hgs
parents:
diff changeset
   145
        {
hgs
parents:
diff changeset
   146
        return EFalse;
hgs
parents:
diff changeset
   147
        }
hgs
parents:
diff changeset
   148
    
hgs
parents:
diff changeset
   149
    return ETrue;
hgs
parents:
diff changeset
   150
    }
hgs
parents:
diff changeset
   151
hgs
parents:
diff changeset
   152
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   153
// CVcxMyVideosAlbum::Video
hgs
parents:
diff changeset
   154
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   155
//
hgs
parents:
diff changeset
   156
TInt CVcxMyVideosAlbum::Video( TUint32 aMdsId, TVcxMyVideosAlbumVideo& aVideo, TInt& aIndex )
hgs
parents:
diff changeset
   157
    {
hgs
parents:
diff changeset
   158
    const TLinearOrder<TVcxMyVideosAlbumVideo> KOrderByMdsId(
hgs
parents:
diff changeset
   159
            CVcxMyVideosAlbum::CompareVideosByMdsId );
hgs
parents:
diff changeset
   160
    
hgs
parents:
diff changeset
   161
    TVcxMyVideosAlbumVideo videoToFind;
hgs
parents:
diff changeset
   162
    videoToFind.iMdsId = aMdsId;
hgs
parents:
diff changeset
   163
    TInt err = iVideoList.FindInOrder( videoToFind, aIndex, KOrderByMdsId );
hgs
parents:
diff changeset
   164
hgs
parents:
diff changeset
   165
    if ( err == KErrNone )
hgs
parents:
diff changeset
   166
        {
hgs
parents:
diff changeset
   167
        aVideo = iVideoList[aIndex];
hgs
parents:
diff changeset
   168
        }
hgs
parents:
diff changeset
   169
   
hgs
parents:
diff changeset
   170
    return err;
hgs
parents:
diff changeset
   171
    }
hgs
parents:
diff changeset
   172
hgs
parents:
diff changeset
   173
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   174
// CVcxMyVideosAlbum::AddL
hgs
parents:
diff changeset
   175
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   176
//
hgs
parents:
diff changeset
   177
void CVcxMyVideosAlbum::AddL( TVcxMyVideosAlbumVideo aVideo )
hgs
parents:
diff changeset
   178
    {
hgs
parents:
diff changeset
   179
    const TLinearOrder<TVcxMyVideosAlbumVideo> KOrderByMdsId(
hgs
parents:
diff changeset
   180
            CVcxMyVideosAlbum::CompareVideosByMdsId );
hgs
parents:
diff changeset
   181
hgs
parents:
diff changeset
   182
    iVideoList.InsertInOrderAllowRepeatsL( aVideo, KOrderByMdsId );
hgs
parents:
diff changeset
   183
    }
hgs
parents:
diff changeset
   184
hgs
parents:
diff changeset
   185
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   186
// CVcxMyVideosAlbum::Remove
hgs
parents:
diff changeset
   187
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   188
//
hgs
parents:
diff changeset
   189
void CVcxMyVideosAlbum::Remove( RArray<TUint32>& aMdsIds )
hgs
parents:
diff changeset
   190
    {
hgs
parents:
diff changeset
   191
    TInt count = aMdsIds.Count();
hgs
parents:
diff changeset
   192
    for ( TInt i = 0; i < count; i++ )
hgs
parents:
diff changeset
   193
        {
hgs
parents:
diff changeset
   194
        Remove( aMdsIds[i], EFalse /* don't compress */ );
hgs
parents:
diff changeset
   195
        }
hgs
parents:
diff changeset
   196
    iVideoList.Compress();
hgs
parents:
diff changeset
   197
    }
hgs
parents:
diff changeset
   198
hgs
parents:
diff changeset
   199
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   200
// CVcxMyVideosAlbum::Remove
hgs
parents:
diff changeset
   201
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   202
//
hgs
parents:
diff changeset
   203
void CVcxMyVideosAlbum::Remove( TUint32 aMdsId, TBool aCompress )
hgs
parents:
diff changeset
   204
    {
hgs
parents:
diff changeset
   205
    const TLinearOrder<TVcxMyVideosAlbumVideo> KOrderByMdsId(
hgs
parents:
diff changeset
   206
            CVcxMyVideosAlbum::CompareVideosByMdsId );
hgs
parents:
diff changeset
   207
hgs
parents:
diff changeset
   208
    TVcxMyVideosAlbumVideo video;
hgs
parents:
diff changeset
   209
    video.iMdsId = aMdsId;
hgs
parents:
diff changeset
   210
    TInt pos;
hgs
parents:
diff changeset
   211
    TInt err = iVideoList.FindInOrder( video, pos, KOrderByMdsId );
hgs
parents:
diff changeset
   212
    if ( err == KErrNone )
hgs
parents:
diff changeset
   213
        {
hgs
parents:
diff changeset
   214
        iVideoList.Remove( pos );
hgs
parents:
diff changeset
   215
        }
hgs
parents:
diff changeset
   216
    if ( aCompress )
hgs
parents:
diff changeset
   217
        {
hgs
parents:
diff changeset
   218
        iVideoList.Compress();
hgs
parents:
diff changeset
   219
        }
hgs
parents:
diff changeset
   220
    }
hgs
parents:
diff changeset
   221
hgs
parents:
diff changeset
   222
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   223
// CVcxMyVideosAlbum::UpdateAttributesL
hgs
parents:
diff changeset
   224
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   225
//
hgs
parents:
diff changeset
   226
void CVcxMyVideosAlbum::UpdateAttributesL()
hgs
parents:
diff changeset
   227
    {
hgs
parents:
diff changeset
   228
    //CalcNewVideoCountAndLatestNonWatchedL();
hgs
parents:
diff changeset
   229
    //CalcPlaytimeL();
hgs
parents:
diff changeset
   230
    }
hgs
parents:
diff changeset
   231
hgs
parents:
diff changeset
   232
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   233
// CVcxMyVideosAlbum::CompareVideosByMdsId
hgs
parents:
diff changeset
   234
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   235
//
hgs
parents:
diff changeset
   236
TInt CVcxMyVideosAlbum::CompareVideosByMdsId( const TVcxMyVideosAlbumVideo& aVideo1,
hgs
parents:
diff changeset
   237
        const TVcxMyVideosAlbumVideo& aVideo2 )
hgs
parents:
diff changeset
   238
    {
hgs
parents:
diff changeset
   239
    if ( aVideo1.iMdsId == aVideo2.iMdsId )
hgs
parents:
diff changeset
   240
        {
hgs
parents:
diff changeset
   241
        return 0;
hgs
parents:
diff changeset
   242
        }
hgs
parents:
diff changeset
   243
hgs
parents:
diff changeset
   244
    if ( aVideo1.iMdsId < aVideo2.iMdsId )
hgs
parents:
diff changeset
   245
        {
hgs
parents:
diff changeset
   246
        return -1;
hgs
parents:
diff changeset
   247
        }
hgs
parents:
diff changeset
   248
    return 1;
hgs
parents:
diff changeset
   249
    }
hgs
parents:
diff changeset
   250
hgs
parents:
diff changeset
   251
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   252
// CVcxMyVideosAlbum::CreateVideoListL
hgs
parents:
diff changeset
   253
// Creates album video list from iCollection.iCache->iVideoList.
hgs
parents:
diff changeset
   254
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   255
//
hgs
parents:
diff changeset
   256
CMPXMedia* CVcxMyVideosAlbum::CreateVideoListL()
hgs
parents:
diff changeset
   257
    {
hgs
parents:
diff changeset
   258
    CMPXMedia* toVideoList = TVcxMyVideosCollectionUtil::CreateEmptyMediaListL();
hgs
parents:
diff changeset
   259
    CleanupStack::PushL( toVideoList );
hgs
parents:
diff changeset
   260
hgs
parents:
diff changeset
   261
    AppendToVideoListL( *iCollection.iCache->iVideoList, *toVideoList, 0 );
hgs
parents:
diff changeset
   262
    
hgs
parents:
diff changeset
   263
    CleanupStack::Pop( toVideoList );
hgs
parents:
diff changeset
   264
hgs
parents:
diff changeset
   265
    return toVideoList;
hgs
parents:
diff changeset
   266
    }
hgs
parents:
diff changeset
   267
hgs
parents:
diff changeset
   268
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   269
// CVcxMyVideosAlbum::CreateVideoListL
hgs
parents:
diff changeset
   270
// Appends to video list items which belong to this album.
hgs
parents:
diff changeset
   271
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   272
//
hgs
parents:
diff changeset
   273
void CVcxMyVideosAlbum::AppendToVideoListL( CMPXMedia& aFromVideoList,
hgs
parents:
diff changeset
   274
        CMPXMedia& aToVideoList, TInt aNewItemStartIndex )
hgs
parents:
diff changeset
   275
    {
hgs
parents:
diff changeset
   276
    if ( aNewItemStartIndex < 0 )
hgs
parents:
diff changeset
   277
        {
hgs
parents:
diff changeset
   278
        return;
hgs
parents:
diff changeset
   279
        }
hgs
parents:
diff changeset
   280
    
hgs
parents:
diff changeset
   281
    CMPXMediaArray* fromArray = aFromVideoList.Value<CMPXMediaArray>( KMPXMediaArrayContents ); 
hgs
parents:
diff changeset
   282
    CMPXMediaArray* toArray   = aToVideoList.Value<CMPXMediaArray>( KMPXMediaArrayContents ); 
hgs
parents:
diff changeset
   283
    TUint32 mdsId;
hgs
parents:
diff changeset
   284
    CMPXMedia* fromVideo;
hgs
parents:
diff changeset
   285
    TInt count = fromArray->Count();
hgs
parents:
diff changeset
   286
    for ( TInt i = aNewItemStartIndex; i < count; i++ )
hgs
parents:
diff changeset
   287
        {
hgs
parents:
diff changeset
   288
        fromVideo = fromArray->AtL( i );
hgs
parents:
diff changeset
   289
        mdsId = TVcxMyVideosCollectionUtil::IdL( *fromVideo ).iId1;
hgs
parents:
diff changeset
   290
        if ( BelongsToAlbum( mdsId ) )
hgs
parents:
diff changeset
   291
            {
hgs
parents:
diff changeset
   292
            CMPXMedia* toVideo = CMPXMedia::NewL( *fromVideo ); //share underlying memory
hgs
parents:
diff changeset
   293
            CleanupStack::PushL( toVideo );
hgs
parents:
diff changeset
   294
            toArray->AppendL( toVideo );
hgs
parents:
diff changeset
   295
            CleanupStack::Pop( toVideo );
hgs
parents:
diff changeset
   296
            }
hgs
parents:
diff changeset
   297
        }
hgs
parents:
diff changeset
   298
    }