--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/videofeeds/vcnsuiengine/src/vcxnsupdateprogresshandler.cpp Mon Jan 18 20:21:12 2010 +0200
@@ -0,0 +1,369 @@
+/*
+* 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: Content update progress handling*
+*/
+
+
+
+
+// INCLUDE FILES
+#include <centralrepository.h>
+#include "CIptvUtil.h"
+#include "CIptvTimer.h"
+#include "IptvDebug.h"
+#include "vcxnsupdateprogresshandler.h"
+#include "vcxnsserviceprovider.h"
+#include "vcxnsuiengine.h"
+
+//CONSTANTS
+const TInt KVcxNsProgCompletedNoThumbnails = 10;
+const TInt KVcxNsProgStartedNoThumbnails = 5;
+const TInt KVcxNsProgStartedThumbnails = 3;
+const TInt KVcxNsThumbProgressPercentVal = 3;
+const TInt KVcxNsProgressUpdateStarted = 5;
+const TInt KVcxNsProgressUpdateCompletedNoThumb = 70;
+const TInt KVcxNsProgressUpdateCompleted = 40;
+const TInt KVcxNsProgressUpdateSucceeded = 99;
+const TInt KVcxNsProgressTimerDefault = 200000; // 0,2 sec
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CVcxNsUpdateProgressHandler::CVcxNsUpdateProgressHandler()
+// -----------------------------------------------------------------------------
+//
+CVcxNsUpdateProgressHandler::CVcxNsUpdateProgressHandler(
+ CVcxNsUiEngine& aUiEngine )
+: iUiEngine( aUiEngine ),
+ iThumbnails ( EFalse ),
+ iPreviousProgress ( 0 ),
+ iProgressPerThumbnail ( 0 ),
+ iThumbnailsInPercent ( 0 )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxNsUpdateProgressHandler::NewL()
+// -----------------------------------------------------------------------------
+//
+CVcxNsUpdateProgressHandler* CVcxNsUpdateProgressHandler::NewL(
+ CVcxNsUiEngine& aUiEngine )
+ {
+ IPTVLOGSTRING_HIGH_LEVEL(
+ "UI Engine ## CVcxNsUpdateProgressHandler::NewL()");
+ return new (ELeave) CVcxNsUpdateProgressHandler( aUiEngine );
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxNsUpdateProgressHandler::~CVcxNsUpdateProgressHandler()
+// -----------------------------------------------------------------------------
+//
+CVcxNsUpdateProgressHandler::~CVcxNsUpdateProgressHandler()
+ {
+ if ( iProgressTimer && iProgressTimer->IsActive() )
+ {
+ iProgressTimer->Cancel();
+ }
+
+ delete iProgressTimer;
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxNsUpdateProgressHandler::RegisterObserver()
+// -----------------------------------------------------------------------------
+//
+void CVcxNsUpdateProgressHandler::RegisterObserver(
+ MVcxNsUpdateProgressObserver* aObserver )
+ {
+ IPTVLOGSTRING_HIGH_LEVEL(
+ "UI Engine ## CVcxNsUpdateProgressHandler::RegisterObserver()");
+ iProgressObserver = aObserver;
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxNsUpdateProgressHandler::DeRegisterObserver()
+// -----------------------------------------------------------------------------
+//
+void CVcxNsUpdateProgressHandler::DeRegisterObserver(
+ MVcxNsUpdateProgressObserver* aObserver )
+ {
+ IPTVLOGSTRING_HIGH_LEVEL(
+ "UI Engine ## CVcxNsUpdateProgressHandler::DeRegisterObserver()");
+
+ if ( aObserver == iProgressObserver )
+ {
+ iProgressObserver = NULL;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxNsUpdateProgressHandler::GetProgress
+// -----------------------------------------------------------------------------
+//
+TInt CVcxNsUpdateProgressHandler::GetProgress( TUint32 aServiceId )
+ {
+ if ( aServiceId == iCurrentServiceId )
+ {
+ IPTVLOGSTRING2_HIGH_LEVEL(
+ "UI Engine ## CVcxNsUpdateProgressHandler::GetProgress( %d )",
+ iPreviousProgress );
+ return iPreviousProgress;
+ }
+
+ return KErrNotFound;
+ }
+
+// -----------------------------------------------------------------------------
+// Handle service update status
+// -----------------------------------------------------------------------------
+//
+void CVcxNsUpdateProgressHandler::HandleUpdateStatusChangeL(
+ TUint32 aServiceId,
+ TInt aUpdateStatusMsg,
+ TInt aInfo )
+ {
+ IPTVLOGSTRING_HIGH_LEVEL(
+ "UI Engine ## CVcxNsUpdateProgressHandler::HandleUpdateStatusChangeL()");
+
+ TInt progress( iPreviousProgress );
+ iCurrentServiceId = aServiceId;
+ iCurrentStatus = aUpdateStatusMsg;
+
+ if ( iProgressTimer && iProgressTimer->IsActive() )
+ {
+ iProgressTimer->Cancel();
+ }
+
+ switch ( aUpdateStatusMsg )
+ {
+ case KIptvVodUpdateStarted:
+ {
+ //Update started: progress 5%
+ progress = KVcxNsProgressUpdateStarted;
+ TRAP_IGNORE( iThumbnails = ThumbnailsAllowedL() );
+ StartProgressUpdateTimerL( );
+ }
+ break;
+ case KIptvContentUpdateCompleted:
+ {
+ if ( iThumbnails )
+ {
+ //Update completed, thumbnails: progress 40%
+ if ( progress < KVcxNsProgressUpdateCompleted )
+ {
+ progress = KVcxNsProgressUpdateCompleted;
+ }
+ }
+ else
+ {
+ if ( progress < KVcxNsProgressUpdateCompletedNoThumb )
+ {
+ //Update completed, no thumbnails: progress 70%
+ progress = KVcxNsProgressUpdateCompletedNoThumb;
+ }
+ StartProgressUpdateTimerL();
+ }
+ }
+ break;
+ case KIptvThumbnailCount:
+ {
+ if ( aInfo > 0 && iThumbnails )
+ {
+ TInt thumbnailPercentage =
+ ( KVcxNsProgressUpdateSucceeded - KVcxNsProgressUpdateCompleted );
+
+ iProgressPerThumbnail = ( thumbnailPercentage / aInfo );
+
+ //If there's more thumbnails than percents left:
+ if ( iProgressPerThumbnail == 0 )
+ {
+ iThumbnailsInPercent = ( aInfo / thumbnailPercentage );
+ }
+ }
+ }
+ break;
+ case KIptvServiceThumbnailDownloaded:
+ case KIptvContentThumbnailDownloaded:
+ {
+ if ( iProgressPerThumbnail > 0 )
+ {
+ progress += iProgressPerThumbnail;
+ }
+ else
+ {
+ iThumbnailCounter++;
+ if ( iThumbnailCounter ==
+ ( iThumbnailsInPercent * KVcxNsThumbProgressPercentVal ) )
+ {
+ //When downloaded enough for increasing progress,
+ //zero thumbnail counter
+ progress += KVcxNsThumbProgressPercentVal;
+ iThumbnailCounter = 0;
+ }
+ }
+ }
+ break;
+ case KIptvErrorEpgUpdateSuccessed:
+ //Update succeeded: progress 99%
+ progress = KVcxNsProgressUpdateSucceeded;
+ break;
+
+ case KIptvErrorEpgUpdateFailed:
+ case KIptvErrorEpgUpdateStopped:
+ {
+ progress = 0;
+ iPreviousProgress = 0;
+ iProgressPerThumbnail = 0;
+ iThumbnailsInPercent = 0;
+ iThumbnailCounter = 0;
+ }
+ break;
+ default:
+ break;
+ }
+
+ if ( progress > 0 && progress > iPreviousProgress )
+ {
+ //Refresh only if any progress
+ RefreshProgressL( progress );
+ }
+ }
+
+// --------------------------------------------------------------------------
+// Timer expired
+// --------------------------------------------------------------------------
+//
+void CVcxNsUpdateProgressHandler::TimerExpired( CIptvTimer* /*aTimer*/ )
+ {
+ TInt progress ( iPreviousProgress );
+ TInt timeout ( KVcxNsProgressTimerDefault );
+
+ if ( iThumbnails &&
+ progress < KVcxNsProgressUpdateCompleted &&
+ iCurrentStatus == KIptvVodUpdateStarted )
+ {
+ progress += KVcxNsProgStartedThumbnails;
+ }
+ else if ( !iThumbnails &&
+ progress < KVcxNsProgressUpdateCompletedNoThumb &&
+ iCurrentStatus == KIptvVodUpdateStarted )
+ {
+ progress += KVcxNsProgStartedNoThumbnails;
+ }
+ else if ( !iThumbnails &&
+ iCurrentStatus == KIptvContentUpdateCompleted )
+ {
+ progress += KVcxNsProgCompletedNoThumbnails;
+ }
+
+ if ( progress > iPreviousProgress )
+ {
+ TRAP_IGNORE( RefreshProgressL( progress ) );
+ }
+
+ if ( iProgressTimer )
+ {
+ if ( iProgressTimer ->IsActive() )
+ {
+ iProgressTimer->Cancel();
+ }
+ iProgressTimer->After( timeout );
+ }
+ }
+
+// --------------------------------------------------------------------------
+// Cancel progress handler timer
+// --------------------------------------------------------------------------
+//
+void CVcxNsUpdateProgressHandler::Cancel()
+ {
+ if ( iProgressTimer && iProgressTimer->IsActive() )
+ {
+ IPTVLOGSTRING_HIGH_LEVEL(
+ "UI Engine ## CVcxNsUpdateProgressHandler::Cancel()");
+ iProgressTimer->Cancel();
+ }
+ }
+
+// --------------------------------------------------------------------------
+// Check if thumbnails are allowed
+// --------------------------------------------------------------------------
+//
+TBool CVcxNsUpdateProgressHandler::ThumbnailsAllowedL() const
+ {
+ TBool thumbnails( EFalse );
+ CRepository* cenRep = CRepository::NewL( KIptvCenRepUid );
+ if ( cenRep )
+ {
+ TInt value;
+ TInt error = cenRep->Get( KIptvCenRepVoDThumbnailsKey, value );
+ if ( error == KErrNone && value == 1 )
+ {
+ thumbnails = ETrue;
+ }
+ }
+
+ delete cenRep;
+ return thumbnails;
+ }
+
+// --------------------------------------------------------------------------
+// Check progress
+// --------------------------------------------------------------------------
+//
+void CVcxNsUpdateProgressHandler::StartProgressUpdateTimerL( )
+ {
+ IPTVLOGSTRING_HIGH_LEVEL(
+ "UI Engine ## CVcxNsUpdateProgressHandler::StartProgressUpdateTimerL()");
+
+ if ( iProgressTimer && iProgressTimer->IsActive())
+ {
+ iProgressTimer->Cancel();
+ }
+
+ if ( !iProgressTimer )
+ {
+ iProgressTimer = CIptvTimer::NewL( CActive::EPriorityUserInput, *this );
+ }
+
+ iProgressTimer->After( KVcxNsProgressTimerDefault );
+ }
+
+// --------------------------------------------------------------------------
+// Refresh progress
+// --------------------------------------------------------------------------
+//
+void CVcxNsUpdateProgressHandler::RefreshProgressL( TInt aProgress )
+ {
+ IPTVLOGSTRING2_HIGH_LEVEL(
+ "UI Engine ## CVcxNsUpdateProgressHandler::RefreshProgressL( %d )",
+ aProgress );
+
+ if ( aProgress > KVcxNsProgressUpdateSucceeded )
+ {
+ aProgress = KVcxNsProgressUpdateSucceeded;
+ }
+
+ iPreviousProgress = aProgress;
+
+ CVcxNsServiceProvider* serviceProvider = iUiEngine.ServiceProvider();
+ if ( serviceProvider && aProgress > 0 )
+ {
+ TInt index = serviceProvider->ServiceIndex( iCurrentServiceId );
+ if ( iProgressObserver )
+ {
+ iProgressObserver->HandleFeedUpdateProgressL( index, aProgress );
+ }
+ }
+ }