--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/homesync/contentmanager/cmserver/cmfillmanager/src/cmfmdownloadproxy.cpp Thu Dec 17 08:52:00 2009 +0200
@@ -0,0 +1,231 @@
+/*
+* 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: Proxy class to handle multiple download sessions
+*
+*/
+
+
+#include "upnpavcontroller.h"
+#include "upnpavdevicelist.h"
+#include "upnpitem.h"
+#include "cmfmdownloadmngr.h"
+#include "cmfmdownloadproxy.h"
+#include "msdebug.h"
+
+// ---------------------------------------------------------------------------
+// CCmFmDownloadProxy::NewL
+// ---------------------------------------------------------------------------
+//
+CCmFmDownloadProxy* CCmFmDownloadProxy::NewL( )
+ {
+ LOG(_L("[FILL MNGR]\t CCmFmDownloadProxy::NewL() start"));
+ CCmFmDownloadProxy* self = CCmFmDownloadProxy::NewLC( );
+ CleanupStack::Pop( self );
+ LOG(_L("[FILL MNGR]\t CCmFmDownloadProxy::NewL() end"));
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CCmFmDownloadProxy::NewLC
+// ---------------------------------------------------------------------------
+//
+CCmFmDownloadProxy* CCmFmDownloadProxy::NewLC( )
+ {
+ LOG(_L("[FILL MNGR]\t CCmFmDownloadProxy::NewLC() start"));
+ CCmFmDownloadProxy* self =
+ new ( ELeave ) CCmFmDownloadProxy( );
+ CleanupStack::PushL( self );
+ self->ConstructL( );
+ LOG(_L("[FILL MNGR]\t CCmFmDownloadProxy::NewLC() end"));
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CCmFmDownloadProxy::~CCmFmDownloadProxy
+// ---------------------------------------------------------------------------
+//
+CCmFmDownloadProxy::~CCmFmDownloadProxy()
+ {
+ LOG(_L("[FILL MNGR]\t CCmFmDownloadProxy::~CCmFmDownloadProxy()"));
+ CancelOperation();
+ }
+
+// ---------------------------------------------------------------------------
+// CCmFmDownloadProxy::CCmFmDownloadProxy
+// ---------------------------------------------------------------------------
+//
+CCmFmDownloadProxy::CCmFmDownloadProxy( )
+ {
+ LOG(_L("[FILL MNGR]\t CCmFmDownloadProxy::CCmFmDownloadProxy()"));
+ }
+
+// ---------------------------------------------------------------------------
+// CCmFmDownloadProxy::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CCmFmDownloadProxy::ConstructL()
+ {
+ LOG(_L("[FILL MNGR]\t CCmFmDownloadProxy::ConstructL()"));
+ }
+
+// ---------------------------------------------------------------------------
+// CCmFmDownloadProxy::FetchFileL
+// ---------------------------------------------------------------------------
+//
+void CCmFmDownloadProxy::FetchFileL( MCmFmTransferObserver* aObserver,
+ MUPnPAVController* aAVController, CUpnpAVDeviceList* aDevices,
+ const CUpnpElement& aResElement, const CUpnpItem& aItem, RFile& aFile,
+ const TInt aInternalDeviceIndex, const TInt64 aInternalItemId )
+ {
+ LOG(_L("[FILL MNGR]\t CCmFmDownloadProxy::FetchFileL()"));
+
+ // Starts download session if no session for defined device exists yet
+ TInt index = StartNewDownloadSessionIfNeededL( aObserver,
+ aAVController,
+ aDevices,
+ aInternalDeviceIndex );
+
+ if( index > KErrNotFound && index < iDownloadSessions.Count() )
+ {
+ TRACE(Print(_L("[FILL MNGR]\t FetchFileL index = %d"), index ));
+ iDownloadSessions[ index ]->
+ FetchFileL( aResElement, aItem, aFile, aInternalItemId );
+ }
+ else
+ {
+ User::Leave( KErrNotFound );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CCmFmDownloadProxy::CloseDownloadSession
+// ---------------------------------------------------------------------------
+//
+TBool CCmFmDownloadProxy::CloseDownloadSession( const TInt aSessionId )
+ {
+ TRACE(Print(_L("[FILL MNGR]\t CloseDownloadSession = %d"), aSessionId ));
+ TBool sessionsLeft( EFalse );
+
+ if( KErrNotFound < aSessionId &&
+ aSessionId < iDownloadSessions.Count() &&
+ iDownloadSessions[ aSessionId ] )
+ {
+ // Delete defined download session
+ delete iDownloadSessions[ aSessionId ];
+ iDownloadSessions[ aSessionId ] = NULL;
+ iDownloadSessionCount--;
+ TInt temp( KErrNotFound );
+ for( TInt i = 0; i < iSessionIndexes.Count(); i++ )
+ {
+ if( iSessionIndexes[i].iSessionIndex == aSessionId )
+ {
+ temp = i;
+ }
+ }
+
+ if( temp != KErrNotFound )
+ {
+ iSessionIndexes.Remove( temp );
+ }
+ }
+
+ if( iDownloadSessionCount )
+ {
+ sessionsLeft = ETrue;
+ }
+ else
+ {
+ LOG(_L("[FILL MNGR]\t No sessions left!"));
+ }
+
+ LOG(_L("[FILL MNGR]\t CCmFmDownloadProxy::CloseDownloadSession() end"));
+ return sessionsLeft;
+ }
+
+// ---------------------------------------------------------------------------
+// CCmFmDownloadProxy::CancelOperation
+// ---------------------------------------------------------------------------
+//
+void CCmFmDownloadProxy::CancelOperation()
+ {
+ LOG(_L("[FILL MNGR]\t CCmFmDownloadProxy::CancelOperation()"));
+ iDownloadSessions.ResetAndDestroy();
+ iSessionIndexes.Reset();
+ iSessionIndexes.Close();
+ iDownloadSessionCount = 0;
+ }
+
+// ---------------------------------------------------------------------------
+// CCmFmDownloadProxy::StartNewDownloadSessionIfNeededL
+// ---------------------------------------------------------------------------
+//
+TInt CCmFmDownloadProxy::StartNewDownloadSessionIfNeededL(
+ MCmFmTransferObserver* aObserver, MUPnPAVController* aAVController,
+ CUpnpAVDeviceList* aDevices, const TInt aInternalDeviceIndex )
+ {
+ LOG(_L("[FILL MNGR]\t CCmFmDownloadProxy::\
+ StartNewDownloadSessionIfNeededL()"));
+
+ TBool newServer( ETrue );
+ TInt sessionIndex( KErrNotFound );
+ for( TInt i = 0; i < iSessionIndexes.Count(); i++ )
+ {
+ if( iSessionIndexes[i].iDeviceIndex == aInternalDeviceIndex )
+ {
+ TRACE(Print(_L("[FILL MNGR]\t old server sessionIndex = %d"),
+ i ));
+ newServer = EFalse;
+ sessionIndex = i;
+ // Index found => end loop
+ i = iSessionIndexes.Count();
+ }
+ }
+
+ if( newServer )
+ {
+ TRACE(Print(_L("[FILL MNGR]\t New server found")));
+
+ CreateNewSessionL( aObserver, aAVController, aDevices,
+ iDownloadSessionCount, sessionIndex );
+ }
+ TRACE(Print(_L("[FILL MNGR]\t started sessionIndex = %d"), sessionIndex ));
+
+ return sessionIndex;
+ }
+
+// ---------------------------------------------------------------------------
+// CCmFmDownloadProxy::CreateNewSessionL
+// ---------------------------------------------------------------------------
+//
+void CCmFmDownloadProxy::CreateNewSessionL(
+ MCmFmTransferObserver* aObserver, MUPnPAVController* aAVController,
+ CUpnpAVDeviceList* aDevices, TInt aSessionCount, TInt& aSessionIndex )
+ {
+ LOG(_L("[FILL MNGR]\t CCmFmDownloadProxy::CreateNewSessionL()"));
+
+ CCmFmDownloadMngr* mngr = CCmFmDownloadMngr::NewL( aAVController, aObserver,
+ *(*aDevices)[aSessionCount], aSessionCount );
+ CleanupStack::PushL( mngr );
+ iDownloadSessions.Append( mngr );
+ CleanupStack::Pop( mngr );
+ iDownloadSessionCount++;
+ TCmFmDownloadSessionIndexes index;
+ index.iDeviceIndex = aSessionCount;
+ index.iSessionIndex = ( iDownloadSessions.Count() - 1 );
+ iSessionIndexes.Append( index );
+ aSessionIndex = index.iSessionIndex;
+ }
+
+// End of file
+