--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/upnpsharing/applicationengine/src/upnpprogresswatcher.cpp Thu Dec 17 08:52:00 2009 +0200
@@ -0,0 +1,311 @@
+/*
+* 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 "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: CUpnpProgressWatcher class implementation
+ *
+*/
+
+
+
+
+
+
+
+// Include Files
+#include <e32property.h>
+#include <e32debug.h>
+#include <upnpstring.h>
+#include "upnpprogresswatcher.h"
+#include "upnpfilesharingengine.h"
+
+_LIT( KComponentLogfile, "applicationengine.txt");
+#include "upnplog.h"
+
+
+// CONSTANTS
+// The maximum numbers of sharingrequests that can be currently received
+const TInt KMaxSharingReqs = 2;
+
+// ============================ MEMBER FUNCTIONS ============================
+
+// --------------------------------------------------------------------------
+// CUpnpProgressWatcher::CUpnpProgressWatcher
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// --------------------------------------------------------------------------
+//
+CUpnpProgressWatcher::CUpnpProgressWatcher( CUPnPFileSharingEngine& aEngine )
+ : CActive(CActive::EPriorityStandard),
+ iEngine( aEngine )
+ {
+ __LOG("[UPNP_ENGINE]\t CUpnpProgressWatcher::CUpnpProgressWatcher");
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpProgressWatcher::NewL
+// Two-phased constructor.
+// --------------------------------------------------------------------------
+//
+CUpnpProgressWatcher* CUpnpProgressWatcher::NewL(
+ CUPnPFileSharingEngine& aEngine )
+ {
+ __LOG("[UPNP_ENGINE]\t CUpnpProgressWatcher::NewL");
+ CUpnpProgressWatcher* self =
+ new ( ELeave ) CUpnpProgressWatcher( aEngine );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpProgressWatcher::ConstructL
+// Symbian 2nd phase constructor can leave.
+// --------------------------------------------------------------------------
+//
+void CUpnpProgressWatcher::ConstructL()
+ {
+ __LOG("[UPNP_ENGINE]\t CUpnpProgressWatcher::ConstructL");
+
+ User::LeaveIfError(
+ iProgressInfo.Attach( KUpnpContentServerCat, ESharingProgress ) );
+ CActiveScheduler::Add(this);
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpProgressWatcher::~CUpnpProgressWatcher
+// Destructor
+// --------------------------------------------------------------------------
+//
+CUpnpProgressWatcher::~CUpnpProgressWatcher()
+ {
+ __LOG("[UPNP_ENGINE]\t CUpnpProgressWatcher::~CUpnpProgressWatcher");
+
+ Cancel();
+ iProgressInfo.Close();
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpProgressWatcher::StartL
+// Starts active object
+// --------------------------------------------------------------------------
+//
+void CUpnpProgressWatcher::StartL()
+ {
+ __LOG("[UPNP_ENGINE]\t CUpnpProgressWatcher::StartL begin");
+
+ TUpnpProgress totalProgress;
+ TPckgBuf<TUpnpProgress> progressBuf( totalProgress );
+ TInt pubErr = iProgressInfo.Get( progressBuf );
+ iEngine.SetShareFileComplete( EFalse );
+ if ( !pubErr )
+ {
+ Mem::Copy( &totalProgress,
+ progressBuf.Ptr(), sizeof( TUpnpProgress ) );
+
+ // update UI
+ SetShowCompleteNote( totalProgress );
+ TProgressInfos progressArr( KMaxSharingReqs );
+ progressArr.Append( totalProgress.iImageVideoProgress );
+ progressArr.Append( totalProgress.iMusicProgress );
+ CleanupClosePushL( progressArr );
+ if ( iEngine.Observer() )
+ {
+ iEngine.Observer()->HandleSharingProgress(
+ iEngine, progressArr );
+ }
+ CleanupStack::PopAndDestroy( &progressArr );
+ }
+
+ if ( !IsActive() && SharingOngoing( totalProgress ) )
+ {
+ // start periodical reporting of progress
+ RunL();
+ }
+
+ __LOG("[UPNP_ENGINE]\t CUpnpProgressWatcher::StartL end");
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpProgressWatcher::Stop
+// Stops active object
+// --------------------------------------------------------------------------
+//
+void CUpnpProgressWatcher::Stop()
+ {
+ __LOG("[UPNP_ENGINE]\t CUpnpProgressWatcher::Stop");
+ Cancel();
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpProgressWatcher::RunL
+// Called when asyncronous request is ready
+// --------------------------------------------------------------------------
+//
+void CUpnpProgressWatcher::RunL()
+ {
+ __LOG("[UPNP_ENGINE]\t CUpnpProgressWatcher::RunL");
+
+ // resubscribe before processing new value to prevent missing updates
+ iProgressInfo.Subscribe( iStatus );
+ SetActive();
+
+ TUpnpProgress totalProgress;
+ TPckgBuf< TUpnpProgress > paramspkg( totalProgress );
+
+
+ // get value
+ if ( iProgressInfo.Get(
+ KUpnpContentServerCat,
+ ESharingProgress,
+ paramspkg ) == KErrNotFound )
+ {
+ // property deleted, do necessary actions here...
+ }
+ else
+ {
+ Mem::Copy( &totalProgress, paramspkg.Ptr(), sizeof( TUpnpProgress ) );
+
+
+ TProgressInfos progressArr( KMaxSharingReqs );
+
+ progressArr.Append( totalProgress.iImageVideoProgress );
+ progressArr.Append( totalProgress.iMusicProgress );
+
+ CleanupClosePushL( progressArr );
+ if ( totalProgress.iError )
+ {
+ HandleErrorL( totalProgress );
+ }
+ else
+ {
+ if ( iEngine.Observer() )
+ {
+ // update UI
+ iEngine.Observer()->HandleSharingProgress(
+ iEngine, progressArr );
+ }
+ if ( progressArr.Count() )
+ {
+ __LOG2( "ProgressCallbackL: cout:%d progress:%d\n",
+ progressArr.Count(),
+ progressArr[0].iProgress );
+ }
+ else
+ {
+ __LOG( "progressArr empty" );
+ }
+
+ SetShowCompleteNote( totalProgress );
+
+ if ( iShowCompleteNote && !SharingOngoing( totalProgress ) )
+ {
+ // no sharing operations ongoing, stop query
+ Cancel();
+ // inform UI to show final note
+ if ( iEngine.Observer() && iShowCompleteNote )
+ {
+ iShowCompleteNote = EFalse;
+ iEngine.Observer()->HandleSharingDone(
+ iEngine, KErrNone );
+ }
+ }
+ }
+ CleanupStack::PopAndDestroy( &progressArr );
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpProgressWatcher::DoCancel
+// Cancels active object
+// --------------------------------------------------------------------------
+//
+void CUpnpProgressWatcher::DoCancel()
+ {
+ __LOG("[UPNP_ENGINE]\t CUpnpProgressWatcher::DoCancel");
+ iEngine.SetShareFileComplete( ETrue );
+ iProgressInfo.Cancel();
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpProgressWatcher::SetShowCompleteNote
+// determine need to show complete note, handle errors
+// --------------------------------------------------------------------------
+//
+void CUpnpProgressWatcher::SetShowCompleteNote(
+ const TUpnpProgress& aProgress )
+ {
+ __LOG("[UPNP_ENGINE]\t CUpnpProgressWatcher::SetShowCompleteNote");
+
+ if( !iShowCompleteNote )
+ {
+ if( aProgress.iImageVideoProgress.iProgressType !=
+ TUpnpProgressInfo::EVisualStatus ||
+ aProgress.iMusicProgress.iProgressType !=
+ TUpnpProgressInfo::EVisualStatus)
+ {
+ iShowCompleteNote = ETrue;
+ }
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpProgressWatcher::SharingOngoing
+// determine need to show complete note, handle errors
+// --------------------------------------------------------------------------
+//
+TBool CUpnpProgressWatcher::SharingOngoing( const TUpnpProgress& aProgress )
+ {
+ __LOG("[UPNP_ENGINE]\t CUpnpProgressWatcher::SharingOngoing");
+ TBool ret( EFalse );
+
+ if( aProgress.iImageVideoProgress.iProgressType !=
+ TUpnpProgressInfo::EVisualStatus ||
+ aProgress.iMusicProgress.iProgressType !=
+ TUpnpProgressInfo::EVisualStatus)
+ {
+ ret = ETrue;
+ }
+ return ret;
+ }
+
+// --------------------------------------------------------------------------
+// CUpnpProgressWatcher::HandleErrorL
+// determine need to show complete note, handle errors
+// --------------------------------------------------------------------------
+//
+void CUpnpProgressWatcher::HandleErrorL( const TUpnpProgress& aProgress )
+ {
+ __LOG("[UPNP_ENGINE]\t CUpnpProgressWatcher::HandleIfErrorL");
+ Cancel();
+ if( aProgress.iError == KErrNoMemory ||
+ aProgress.iError == KErrDiskFull )
+ {
+ // update UI
+ TProgressInfos progressArr( KMaxSharingReqs );
+ CleanupClosePushL( progressArr );
+ progressArr.Append( aProgress.iImageVideoProgress );
+ progressArr.Append( aProgress.iMusicProgress );
+
+ if ( iEngine.Observer() )
+ {
+ iEngine.Observer()->HandleSharingProgress(
+ iEngine, progressArr );
+ }
+ CleanupStack::PopAndDestroy( &progressArr );
+ iShowCompleteNote = EFalse;
+ User::Leave( aProgress.iError );
+ }
+ }
+
+// End of file