diff -r 000000000000 -r 96612d01cf9f videocollection/hgmyvideos/src/vcxhgmyvideosvideolist.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videocollection/hgmyvideos/src/vcxhgmyvideosvideolist.cpp Mon Jan 18 20:21:12 2010 +0200 @@ -0,0 +1,363 @@ +/* +* Copyright (c) 2008 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 for providing video list.* +*/ + + + + +// INCLUDE FILES +#include +#include +#include +#include +#include "vcxhgmyvideosvideolist.h" +#include "vcxhgmyvideosvideolistitem.h" +#include "IptvDebug.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVcxHgMyVideosVideoList::NewL() +// ----------------------------------------------------------------------------- +// +CVcxHgMyVideosVideoList* CVcxHgMyVideosVideoList::NewL() + { + CVcxHgMyVideosVideoList* self = + CVcxHgMyVideosVideoList::NewLC(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CVcxHgMyVideosVideoList::NewLC() +// ----------------------------------------------------------------------------- +// +CVcxHgMyVideosVideoList* CVcxHgMyVideosVideoList::NewLC() + { + CVcxHgMyVideosVideoList* self = + new (ELeave) CVcxHgMyVideosVideoList(); + CleanupStack::PushL( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CVcxHgMyVideosVideoList::CVcxHgMyVideosVideoList() +// ----------------------------------------------------------------------------- +// +CVcxHgMyVideosVideoList::CVcxHgMyVideosVideoList() + { + // No implementation required. + } + +// ----------------------------------------------------------------------------- +// CVcxHgMyVideosVideoList::~CVcxHgMyVideosVideoList() +// ----------------------------------------------------------------------------- +// +CVcxHgMyVideosVideoList::~CVcxHgMyVideosVideoList() + { + RemoveVideoList(); + } + +// ----------------------------------------------------------------------------- +// CVcxHgMyVideosVideoList::RemoveVideoList() +// ----------------------------------------------------------------------------- +// +void CVcxHgMyVideosVideoList::RemoveVideoList() + { + iVideoList.ResetAndDestroy(); + } + +// ----------------------------------------------------------------------------- +// CVcxHgMyVideosVideoList::ReplaceVideoListL() +// ----------------------------------------------------------------------------- +// +void CVcxHgMyVideosVideoList::ReplaceVideoListL( CMPXMediaArray& aVideoList ) + { + IPTVLOGSTRING_LOW_LEVEL( "MPX My Videos UI # CVcxHgMyVideosVideoList::ReplaceVideoListL() - Enter" ); + + // Removes the all videos from array. + RemoveVideoList(); + + TInt count = aVideoList.Count(); + iVideoList.ReserveL( count ); + for ( TInt i = 0; i < count; i++ ) + { + CMPXMedia* media = CMPXMedia::NewL( *( aVideoList[i] ) ); + if ( media ) + { + CVcxHgMyVideosVideoListItem* item = CVcxHgMyVideosVideoListItem::NewLC( media ); + iVideoList.AppendL( item ); + CleanupStack::Pop( item ); + } + } + IPTVLOGSTRING_LOW_LEVEL( "MPX My Videos UI # CVcxHgMyVideosVideoList::ReplaceVideoListL() - Exit" ); + } + +// ----------------------------------------------------------------------------- +// CVcxHgMyVideosVideoList::VideoCount() +// ----------------------------------------------------------------------------- +// +TInt CVcxHgMyVideosVideoList::VideoCount() + { + return iVideoList.Count(); + } + +// ----------------------------------------------------------------------------- +// CVcxHgMyVideosVideoList::VideoDownloadState() +// ----------------------------------------------------------------------------- +// +TVcxMyVideosDownloadState CVcxHgMyVideosVideoList::VideoDownloadState( TInt aIndex ) + { + TVcxMyVideosDownloadState state( EVcxMyVideosDlStateNone ); + + if ( aIndex >= 0 && aIndex < iVideoList.Count() ) + { + state = iVideoList[aIndex]->DownloadState(); + } + return state; + } + +// ----------------------------------------------------------------------------- +// CVcxHgMyVideosVideoList::GetOngoingDownloads() +// ----------------------------------------------------------------------------- +// +void CVcxHgMyVideosVideoList::GetOngoingDownloads( RArray& aDownloads ) + { + TInt count( iVideoList.Count() ); + for ( TInt i = 0; i < count; i++ ) + { + if ( iVideoList[i]->DownloadState() != EVcxMyVideosDlStateNone ) + { + aDownloads.Append( i ); + } + } + } + +// ----------------------------------------------------------------------------- +// CVcxHgMyVideosVideoList::RemoveVideo() +// ----------------------------------------------------------------------------- +// +TInt CVcxHgMyVideosVideoList::RemoveVideo( TMPXItemId aMpxItemId ) + { + TInt index = IndexByMPXItemId( aMpxItemId ); + + if ( index != KErrNotFound ) + { + delete iVideoList[index]; + iVideoList.Remove( index ); + } + return index; + } + +// ----------------------------------------------------------------------------- +// CVcxHgMyVideosVideoList::MPXMedia() +// ----------------------------------------------------------------------------- +// +CMPXMedia* CVcxHgMyVideosVideoList::MPXMedia( TInt aIndex ) + { + if ( aIndex >= 0 && aIndex < iVideoList.Count() ) + { + return iVideoList[aIndex]->Media(); + } + return NULL; + } + +// ----------------------------------------------------------------------------- +// CVcxHgMyVideosVideoList::MPXMediaByUri() +// ----------------------------------------------------------------------------- +// +CMPXMedia* CVcxHgMyVideosVideoList::MPXMediaByUri( const TDesC& aUri ) + { + CMPXMedia* media = NULL; + TInt count( iVideoList.Count() ); + + for ( TInt i = 0; i < count; i++ ) + { + media = iVideoList[i]->Media(); + + if ( media && media->IsSupported( KMPXMediaGeneralUri ) ) + { + if ( aUri.CompareF( media->ValueText( KMPXMediaGeneralUri ) ) == 0 ) + { + return media; + } + } + } + return NULL; + } + +// ----------------------------------------------------------------------------- +// CVcxHgMyVideosVideoList::MPXMediaByMPXItemId() +// ----------------------------------------------------------------------------- +// +CMPXMedia* CVcxHgMyVideosVideoList::MPXMediaByMPXItemId( TMPXItemId aMpxItemId ) + { + CMPXMedia* media = NULL; + TInt count( iVideoList.Count() ); + + for ( TInt i = 0; i < count; i++ ) + { + media = iVideoList[i]->Media(); + + if ( media && media->IsSupported( KMPXMediaGeneralId ) ) + { + if ( aMpxItemId == media->ValueTObjectL( KMPXMediaGeneralId ) ) + { + return media; + } + } + } + return NULL; + } + +// ----------------------------------------------------------------------------- +// CVcxHgMyVideosVideoList::ArrayIndexToMpxItemIdL() +// ----------------------------------------------------------------------------- +// +TMPXItemId CVcxHgMyVideosVideoList::ArrayIndexToMpxItemIdL( TInt aArrayIndex ) + { + if ( aArrayIndex < 0 || aArrayIndex >= iVideoList.Count() ) + { + User::Leave( KErrArgument ); + } + + return iVideoList[aArrayIndex]->Media()->ValueTObjectL( KMPXMediaGeneralId ); + } + +// ----------------------------------------------------------------------------- +// CVcxHgMyVideosVideoList::IndexByMPXItemId() +// ----------------------------------------------------------------------------- +// +TInt CVcxHgMyVideosVideoList::IndexByMPXItemId( TMPXItemId aMpxItemId ) + { + CMPXMedia* media = NULL; + TInt count( iVideoList.Count() ); + + for ( TInt i = 0; i < count; i++ ) + { + media = iVideoList[i]->Media(); + + if ( media && media->IsSupported( KMPXMediaGeneralId ) ) + { + if ( aMpxItemId == media->ValueTObjectL( KMPXMediaGeneralId ) ) + { + return i; + } + } + } + return KErrNotFound; + } + +// ---------------------------------------------------------------------------- +// CVcxHgMyVideosVideoList::AddToCorrectPlaceL() +// ---------------------------------------------------------------------------- +// +void CVcxHgMyVideosVideoList::AddToCorrectPlaceL( CMPXMedia* aVideo, + TVcxMyVideosSortingOrder aSortingOrder ) + { + IPTVLOGSTRING_LOW_LEVEL( "MPX My Videos UI # CVcxHgMyVideosVideoList::AddToCorrectPlaceL() - Enter" ); + + if ( aVideo ) + { + // Ownership of aVideo is transferred. + CVcxHgMyVideosVideoListItem* video = CVcxHgMyVideosVideoListItem::NewL( aVideo ); + CleanupStack::PushL( video ); + + TLinearOrder sortOrder( + CVcxHgMyVideosVideoListItem::CompareByDate ); + + switch( aSortingOrder ) + { + case EVcxMyVideosSortingName: + { + sortOrder = CVcxHgMyVideosVideoListItem::CompareByName; + } + break; + + case EVcxMyVideosSortingSize: + { + sortOrder = CVcxHgMyVideosVideoListItem::CompareBySize; + } + break; + + case EVcxMyVideosSortingCreationDate: + { + sortOrder = CVcxHgMyVideosVideoListItem::CompareByDate; + } + break; + + case EVcxMyVideosSortingModified: + case EVcxMyVideosSortingId: + default: + { + CleanupStack::PopAndDestroy( video ); + IPTVLOGSTRING_LOW_LEVEL( "MPX My Videos UI # CVcxHgMyVideosVideoList::AddToCorrectPlaceL() - LEAVE: Invalid sort order" ); + User::Leave( KErrNotSupported ); + } + break; + } + + // Ownership of video is transferred. + iVideoList.InsertInOrderAllowRepeatsL( video, sortOrder ); + + CleanupStack::Pop( video ); + } + + IPTVLOGSTRING_LOW_LEVEL( "MPX My Videos UI # CVcxHgMyVideosVideoList::AddToCorrectPlaceL() - Exit" ); + } + +// ----------------------------------------------------------------------------- +// CVcxHgMyVideosVideoList::ResortVideoListL() +// ----------------------------------------------------------------------------- +// +void CVcxHgMyVideosVideoList::ResortVideoListL( const TVcxMyVideosSortingOrder& aSortingOrder ) + { + IPTVLOGSTRING_LOW_LEVEL( "MPX My Videos UI # CVcxHgMyVideosVideoList::ResortVideoListL() - Enter" ); + + TLinearOrder sortOrder( + CVcxHgMyVideosVideoListItem::CompareByDate ); + + switch ( aSortingOrder ) + { + case EVcxMyVideosSortingName: + { + sortOrder = CVcxHgMyVideosVideoListItem::CompareByName; + } + break; + + case EVcxMyVideosSortingSize: + { + sortOrder = CVcxHgMyVideosVideoListItem::CompareBySize; + } + break; + + case EVcxMyVideosSortingCreationDate: + { + sortOrder = CVcxHgMyVideosVideoListItem::CompareByDate; + } + break; + + case EVcxMyVideosSortingModified: + case EVcxMyVideosSortingId: + default: + { + IPTVLOGSTRING_LOW_LEVEL( "MPX My Videos UI # CVcxHgMyVideosVideoList::ResortVideoListL() - LEAVE: Invalid sort order" ); + User::Leave( KErrNotSupported ); + } + break; + } + iVideoList.Sort( sortOrder ); + IPTVLOGSTRING_LOW_LEVEL( "MPX My Videos UI # CVcxHgMyVideosVideoList::ResortVideoListL() - Exit" ); + }