videofeeds/vcnsuiengine/src/vcxnsdownloadupdater.cpp
changeset 0 96612d01cf9f
--- /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 <mpxmedia.h>
+#include <vcxmyvideosdefs.h>
+#include <mpxmediageneraldefs.h>
+
+#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<TUint8>( KVcxMediaMyVideosDownloadState );
+        TInt8 progress = media->ValueTObjectL<TInt8>( 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<CVcxNsDownloadUpdater*>( 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<TUint8>( KVcxMediaMyVideosDownloadState );
+    TInt8 progress = media->ValueTObjectL<TInt8>( KVcxMediaMyVideosDownloadProgress );
+    TUint32 mpxId  = media->ValueTObjectL<TMPXItemId>( 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;
+    }