diff -r 000000000000 -r 96612d01cf9f videofeeds/vcnsuiengine/src/vcxnsdownloadupdater.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videofeeds/vcnsuiengine/src/vcxnsdownloadupdater.cpp Mon Jan 18 20:21:12 2010 +0200 @@ -0,0 +1,272 @@ +/* +* 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: +* +*/ + + + + +#include "IptvDebug.h" +#include +#include +#include + +#include "vcxnsdownloadupdater.h" +#include "vcxnscontent.h" + +const TInt KUpdateDelay = 3000000; // 3 seconds + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CVcxNsDownloadUpdater::CVcxNsDownloadUpdater( MVcxNsDownloadUpdaterObserver* aObserver ): + iObserver( aObserver ) + { + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CVcxNsDownloadUpdater::ConstructL() + { + iTimer = CPeriodic::NewL( EPriorityNormal ); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CVcxNsDownloadUpdater* CVcxNsDownloadUpdater::NewL( MVcxNsDownloadUpdaterObserver* aObserver ) + { + CVcxNsDownloadUpdater* self = new( ELeave ) CVcxNsDownloadUpdater( aObserver ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CVcxNsDownloadUpdater::~CVcxNsDownloadUpdater() + { + if( iTimer ) + { + iTimer->Cancel(); + } + + delete iTimer; + + iDownloadArray.Close(); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CVcxNsDownloadUpdater::AddDownload( CVcxNsContent* aContent ) + { + IPTVLOGSTRING_LOW_LEVEL("CVcxNsDownloadUpdater::AddDownload IN"); + + if ( !aContent ) + { + return; + } + + CMPXMedia* media = aContent->GetMpxMedia(); + + if( !media ) + { + IPTVLOGSTRING_LOW_LEVEL("CVcxNsDownloadUpdater::AddDownload OUT, media == NULL"); + return; + } + + TInt index( KErrNotFound ); + + if( !FindDownload( aContent, &index ) ) + { + TDownloadItem item; + item.iContent = aContent; + + TUint32 status = media->ValueTObjectL( KVcxMediaMyVideosDownloadState ); + TInt8 progress = media->ValueTObjectL( KVcxMediaMyVideosDownloadProgress ); + + item.iProgress = progress; + item.iState = status; + + iDownloadArray.Append( item ); + } + + if( !iTimer->IsActive() ) + { + TCallBack callback = TCallBack( Callback, this ); + const TTimeIntervalMicroSeconds32 KUpdateInterval( KUpdateDelay ); + iTimer->Start( KUpdateInterval, KUpdateInterval, callback ); + } + + IPTVLOGSTRING_LOW_LEVEL("CVcxNsDownloadUpdater::AddDownload OUT"); + } +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CVcxNsDownloadUpdater::RemoveDownload( CVcxNsContent* aContent ) + { + IPTVLOGSTRING_LOW_LEVEL("CVcxNsDownloadUpdater::RemoveDownload IN"); + + if ( !aContent ) + { + return; + } + + TInt index( KErrNotFound ); + + if( FindDownload( aContent, &index ) ) + { + iDownloadArray.Remove( index ); + } + + if( iDownloadArray.Count() < 1 ) + { + iTimer->Cancel(); + } + + IPTVLOGSTRING_LOW_LEVEL("CVcxNsDownloadUpdater::RemoveDownload OUT"); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CVcxNsDownloadUpdater::RemoveAllDownloads() + { + iDownloadArray.Reset(); + + iTimer->Cancel(); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TInt CVcxNsDownloadUpdater::Callback( TAny *aPtr ) + { + IPTVLOGSTRING_LOW_LEVEL("CVcxNsDownloadUpdater::Callback IN"); + + CVcxNsDownloadUpdater* ptr = static_cast( aPtr ); + + TInt err ( KErrNotFound ); + + if ( ptr ) + { + TRAP( err, ptr->UpdateDownloadsL() ); + } + +#ifdef _DEBUG + if( err ) + { + IPTVLOGSTRING2_LOW_LEVEL("CVcxNsDownloadUpdater::Callback leaved with %d", err); + } +#endif // _DEBUG + + IPTVLOGSTRING_LOW_LEVEL("CVcxNsDownloadUpdater::Callback OUT"); + + return 0; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CVcxNsDownloadUpdater::UpdateDownloadsL() + { + IPTVLOGSTRING_LOW_LEVEL("CVcxNsDownloadUpdater::UpdateDownloadsL IN"); + + for ( TInt i = 0; i < iDownloadArray.Count(); i++ ) + { + UpdateDownloadL( iDownloadArray[i] ); + } + + IPTVLOGSTRING_LOW_LEVEL("CVcxNsDownloadUpdater::UpdateDownloadsL OUT"); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CVcxNsDownloadUpdater::UpdateDownloadL( TDownloadItem& aDownload ) + { + IPTVLOGSTRING_LOW_LEVEL("CVcxNsDownloadUpdater::UpdateDownloadL IN"); + + CMPXMedia* media = aDownload.iContent->GetMpxMedia(); + + if ( !media ) + { + return; + } + + TUint32 status = media->ValueTObjectL( KVcxMediaMyVideosDownloadState ); + TInt8 progress = media->ValueTObjectL( KVcxMediaMyVideosDownloadProgress ); + TUint32 mpxId = media->ValueTObjectL( KMPXMediaGeneralId ).iId1; + + if ( progress == 0 && aDownload.iProgress > 0 ) + { + IPTVLOGSTRING_LOW_LEVEL("CVcxNsDownloadUpdater::UpdateDownloadL: Resume started from beginning."); + iObserver->ResumeStartedFromBeginningL( mpxId ); + } + if ( progress != aDownload.iProgress || status != aDownload.iState ) + { + IPTVLOGSTRING2_LOW_LEVEL("CVcxNsDownloadUpdater:: dl state = %d", status ); + IPTVLOGSTRING2_LOW_LEVEL("CVcxNsDownloadUpdater:: dl progress = %d", progress ); + + IPTVLOGSTRING_LOW_LEVEL("CVcxNsDownloadUpdater::UpdateDownloadL: updating video"); + aDownload.iProgress = progress; + aDownload.iState = status; + + iObserver->UpdateVideoObject( mpxId ); + } + + IPTVLOGSTRING_LOW_LEVEL("CVcxNsDownloadUpdater::UpdateDownloadL OUT"); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TBool CVcxNsDownloadUpdater::FindDownload( CVcxNsContent* aContent, TInt* aIndex ) + { + IPTVLOGSTRING_LOW_LEVEL("CVcxNsDownloadUpdater::FindDownload IN"); + + for ( TInt i = iDownloadArray.Count()-1; i >= 0; i-- ) + { + if ( iDownloadArray[i].iContent == aContent ) + { + *aIndex = i; + + IPTVLOGSTRING_LOW_LEVEL("CVcxNsDownloadUpdater::FindDownload OUT: found"); + + return ETrue; + } + } + + IPTVLOGSTRING_LOW_LEVEL("CVcxNsDownloadUpdater::FindDownload OUT: NOT found"); + + return EFalse; + }