diff -r 8f0df5c82986 -r 67eb01668b0e videocollection/mpxmyvideoscollection/src/vcxmyvideosalbum.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videocollection/mpxmyvideoscollection/src/vcxmyvideosalbum.cpp Wed Jun 09 09:44:23 2010 +0300 @@ -0,0 +1,334 @@ +/* +* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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: Class representing album in My Videos collection. +*/ + +#include +#include +#include +#include +#include +#include "vcxmyvideosalbum.h" +#include "vcxmyvideoscollectionplugin.h" +#include "vcxmyvideosvideocache.h" +#include "vcxmyvideoscollectionutil.h" + + +// --------------------------------------------------------------------------- +// TVcxMyVideosAlbumVideo::TVcxMyVideosAlbumVideo +// --------------------------------------------------------------------------- +// +TVcxMyVideosAlbumVideo::TVcxMyVideosAlbumVideo() + { + Set( 0, 0, 0 ); + } + +// --------------------------------------------------------------------------- +// TVcxMyVideosAlbumVideo::operator= +// --------------------------------------------------------------------------- +// +TVcxMyVideosAlbumVideo& TVcxMyVideosAlbumVideo::operator=( const TVcxMyVideosAlbumVideo& aVideo ) + { + Set( aVideo.iMdsId, aVideo.iRelationMdsId, aVideo.iMedia ); + return *this; + } + +// --------------------------------------------------------------------------- +// TVcxMyVideosAlbumVideo::Set +// --------------------------------------------------------------------------- +// +void TVcxMyVideosAlbumVideo::Set( TUint32 aMdsId, TUint32 aRelationMdsId, CMPXMedia* aVideo ) + { + iMdsId = aMdsId; + iRelationMdsId = aRelationMdsId; + iMedia = aVideo; + } + +// --------------------------------------------------------------------------- +// CVcxMyVideosAlbum::CVcxMyVideosAlbum +// --------------------------------------------------------------------------- +// +CVcxMyVideosAlbum::CVcxMyVideosAlbum( CVcxMyVideosCollectionPlugin& aCollectionPlugin ) +: iCollection( aCollectionPlugin ) + { + // No implementation required + } + +// --------------------------------------------------------------------------- +// CVcxMyVideosAlbum::~CVcxMyVideosAlbum +// --------------------------------------------------------------------------- +// +CVcxMyVideosAlbum::~CVcxMyVideosAlbum() + { + iVideoList.Close(); + } + +// --------------------------------------------------------------------------- +// CVcxMyVideosAlbum::NewLC +// --------------------------------------------------------------------------- +// +CVcxMyVideosAlbum* CVcxMyVideosAlbum::NewLC( CVcxMyVideosCollectionPlugin& aCollectionPlugin ) + { + CVcxMyVideosAlbum* self = new (ELeave) CVcxMyVideosAlbum( aCollectionPlugin ); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------------------------- +// CVcxMyVideosAlbum::NewL +// --------------------------------------------------------------------------- +// +CVcxMyVideosAlbum* CVcxMyVideosAlbum::NewL( CVcxMyVideosCollectionPlugin& aCollectionPlugin ) + { + CVcxMyVideosAlbum* self = CVcxMyVideosAlbum::NewLC( aCollectionPlugin ); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// CVcxMyVideosAlbum::ConstructL +// --------------------------------------------------------------------------- +// +void CVcxMyVideosAlbum::ConstructL() + { + iVideoList.Reset(); + } + +// --------------------------------------------------------------------------- +// CVcxMyVideosAlbum::Sort +// --------------------------------------------------------------------------- +// +void CVcxMyVideosAlbum::Sort() + { + const TLinearOrder KOrderByMdsId( + CVcxMyVideosAlbum::CompareVideosByMdsId ); + + iVideoList.Sort( KOrderByMdsId ); + } + +// --------------------------------------------------------------------------- +// CVcxMyVideosAlbum::SetL +// --------------------------------------------------------------------------- +// +void CVcxMyVideosAlbum::SetL( /*CMPXMedia& aAlbum*/ ) + { + //TODO: + } + +// --------------------------------------------------------------------------- +// CVcxMyVideosAlbum::BelongsToAlbum +// --------------------------------------------------------------------------- +// +TBool CVcxMyVideosAlbum::BelongsToAlbum( TUint32 aMdsId ) + { + const TLinearOrder KOrderByMdsId( + CVcxMyVideosAlbum::CompareVideosByMdsId ); + + TInt index; + TVcxMyVideosAlbumVideo video; + video.iMdsId = aMdsId; + TInt err = iVideoList.FindInOrder( video, index, KOrderByMdsId ); + + if ( err != KErrNone ) + { + return EFalse; + } + + return ETrue; + } + +// --------------------------------------------------------------------------- +// CVcxMyVideosAlbum::Video +// --------------------------------------------------------------------------- +// +TInt CVcxMyVideosAlbum::Video( TUint32 aMdsId, TVcxMyVideosAlbumVideo& aVideo, TInt& aIndex ) + { + const TLinearOrder KOrderByMdsId( + CVcxMyVideosAlbum::CompareVideosByMdsId ); + + TVcxMyVideosAlbumVideo videoToFind; + videoToFind.iMdsId = aMdsId; + TInt err = iVideoList.FindInOrder( videoToFind, aIndex, KOrderByMdsId ); + + if ( err == KErrNone ) + { + aVideo = iVideoList[aIndex]; + } + + return err; + } + +// --------------------------------------------------------------------------- +// CVcxMyVideosAlbum::AddL +// --------------------------------------------------------------------------- +// +void CVcxMyVideosAlbum::AddL( TVcxMyVideosAlbumVideo aVideo ) + { + const TLinearOrder KOrderByMdsId( + CVcxMyVideosAlbum::CompareVideosByMdsId ); + + iVideoList.InsertInOrderAllowRepeatsL( aVideo, KOrderByMdsId ); + } + +// --------------------------------------------------------------------------- +// CVcxMyVideosAlbum::Remove +// --------------------------------------------------------------------------- +// +void CVcxMyVideosAlbum::Remove( RArray& aMdsIds ) + { + TInt count = aMdsIds.Count(); + for ( TInt i = 0; i < count; i++ ) + { + Remove( aMdsIds[i], EFalse /* don't compress */ ); + } + iVideoList.Compress(); + } + +// --------------------------------------------------------------------------- +// CVcxMyVideosAlbum::Remove +// --------------------------------------------------------------------------- +// +void CVcxMyVideosAlbum::Remove( TUint32 aMdsId, TBool aCompress ) + { + const TLinearOrder KOrderByMdsId( + CVcxMyVideosAlbum::CompareVideosByMdsId ); + + TVcxMyVideosAlbumVideo video; + video.iMdsId = aMdsId; + TInt pos; + TInt err = iVideoList.FindInOrder( video, pos, KOrderByMdsId ); + if ( err == KErrNone ) + { + iVideoList.Remove( pos ); + } + if ( aCompress ) + { + iVideoList.Compress(); + } + } + +// --------------------------------------------------------------------------- +// CVcxMyVideosAlbum::CompareVideosByMdsId +// --------------------------------------------------------------------------- +// +TInt CVcxMyVideosAlbum::CompareVideosByMdsId( const TVcxMyVideosAlbumVideo& aVideo1, + const TVcxMyVideosAlbumVideo& aVideo2 ) + { + if ( aVideo1.iMdsId == aVideo2.iMdsId ) + { + return 0; + } + + if ( aVideo1.iMdsId < aVideo2.iMdsId ) + { + return -1; + } + return 1; + } + +// --------------------------------------------------------------------------- +// CVcxMyVideosAlbum::CreateVideoListL +// Creates album video list from iCollection.iCache->iVideoList. +// --------------------------------------------------------------------------- +// +CMPXMedia* CVcxMyVideosAlbum::CreateVideoListL() + { + CMPXMedia* toVideoList = TVcxMyVideosCollectionUtil::CreateEmptyMediaListL(); + CleanupStack::PushL( toVideoList ); + + AppendToVideoListL( *iCollection.iCache->iVideoList, *toVideoList, 0 ); + + CleanupStack::Pop( toVideoList ); + + return toVideoList; + } + +// --------------------------------------------------------------------------- +// CVcxMyVideosAlbum::CreateVideoListL +// Appends to video list the items which belong to this album. +// --------------------------------------------------------------------------- +// +void CVcxMyVideosAlbum::AppendToVideoListL( CMPXMedia& aFromVideoList, + CMPXMedia& aToVideoList, TInt aNewItemStartIndex ) + { + if ( aNewItemStartIndex < 0 ) + { + return; + } + + CMPXMediaArray* fromArray = aFromVideoList.Value( KMPXMediaArrayContents ); + CMPXMediaArray* toArray = aToVideoList.Value( KMPXMediaArrayContents ); + TUint32 mdsId; + CMPXMedia* fromVideo; + TInt count = fromArray->Count(); + for ( TInt i = aNewItemStartIndex; i < count; i++ ) + { + fromVideo = fromArray->AtL( i ); + mdsId = TVcxMyVideosCollectionUtil::IdL( *fromVideo ).iId1; + if ( BelongsToAlbum( mdsId ) ) + { + CMPXMedia* toVideo = CMPXMedia::NewL( *fromVideo ); //share underlying memory + CleanupStack::PushL( toVideo ); + toArray->AppendL( toVideo ); + CleanupStack::Pop( toVideo ); + } + } + } + +// --------------------------------------------------------------------------- +// CVcxMyVideosAlbum::CalculateAttributesL +// --------------------------------------------------------------------------- +// +void CVcxMyVideosAlbum::CalculateAttributesL( TInt aStartIndex ) + { + TInt videoCount = 0; + TUint32 count = iVideoList.Count(); + TInt newCount = 0; + CMPXMedia* video; + CMPXMedia* latestNewVideo = NULL; + TInt pos; + TUint32 flags; + TInt64 currentItemsCreationDate = 0; + TInt64 latestCreationDate = TVcxMyVideosCollectionUtil::CreationDateL( *iMedia ); + for ( TInt i = aStartIndex; i < count; i++ ) + { + video = iCollection.iCache->FindVideoByMdsIdL( iVideoList[i].iMdsId, pos ); + if ( video ) + { + videoCount++; + flags = TVcxMyVideosCollectionUtil::FlagsL( *video ); + if ( flags & EVcxMyVideosVideoNew ) + { + newCount++; + currentItemsCreationDate = TVcxMyVideosCollectionUtil::CreationDateL( *video ); + if ( latestCreationDate < currentItemsCreationDate ) + { + latestCreationDate = currentItemsCreationDate; + latestNewVideo = video; + } + } + } + } + iMedia->SetTObjectValueL( KVcxMediaMyVideosCategoryItemCount, videoCount ); + iMedia->SetTObjectValueL( KVcxMediaMyVideosCategoryNewItemCount, newCount ); + if ( latestNewVideo ) + { + iMedia->SetTextValueL( KVcxMediaMyVideosCategoryNewItemName, + TVcxMyVideosCollectionUtil::Title( *latestNewVideo ) ); + } + iMedia->SetTObjectValueL( KMPXMediaGeneralDate, latestCreationDate ); + } +