diff -r 000000000000 -r 71ca22bcf22a mmfenh/enhancedmediaclient/Client/src/Components/ClientProgDLSource/DownloadGateway.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmfenh/enhancedmediaclient/Client/src/Components/ClientProgDLSource/DownloadGateway.cpp Tue Feb 02 01:08:46 2010 +0200 @@ -0,0 +1,273 @@ +/* +* Copyright (c) 2006 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: Implementation of DownloadGateway class. +* +*/ + + +#include "DownloadGateway.h" +#include + +#define RETURN_IF_ERROR(x) if(x != KErrNone) return x + +using namespace multimedia; + +// CONSTANTS +CDownloadGateway::CDownloadGateway() + { + iDMgrConnected = EFalse; + iDownload = NULL; + iDownloadId = 0; + } + +CDownloadGateway::~CDownloadGateway() + { + if ( iDMgrConnected ) + { + iDownloadMgr.Close(); + } + } + +TInt CDownloadGateway::Initialize(TUid aClientUid) + { + TInt status(KErrNone); + if ( !iDMgrConnected ) + { + TRAP(status,iDownloadMgr.ConnectL( aClientUid, *this, EFalse )); + if(!status) + { + iDMgrConnected = ETrue; + } + } + return status; + } + +TInt CDownloadGateway::MoveFile( TInt aId, const TDesC& aDestFileName ) + { + TInt status(KErrNotFound); + // Check here if the download is complete and the Source is in Stopped State + if(iDownloadId == aId && iDownload) + { + status = iDownload->SetStringAttribute( EDlAttrDestFilename, aDestFileName ); + if(!status) + { + iDownload->Move(); + } + } + return status; + } + +TInt CDownloadGateway::ConnectToDownload(TInt aId, MDownloadGatewayObserver& aObserver, TUid /*aAppUid*/) + { + TInt status(KErrNotFound); + TRAP(status, iDownload = &(iDownloadMgr.AttachToDownloadL( aId ))); + if(status == KErrNone) + { + iObserver = &aObserver; + iDownloadId = aId; + } + else + { + iDownload = NULL; + } + return status; + } + +TInt CDownloadGateway::DisconnectFromDownload(TInt aId) + { + TInt status(KErrNotFound); + if(iDownloadId == aId && iDownload) + { + iDownload = NULL; + iDownloadId = 0; + status = KErrNone; + } + return status; + } + +TInt CDownloadGateway::GetMimeType(TInt aId, TDes8& aMimeType) + { + TInt status(KErrNotFound); + if(iDownloadId == aId && iDownload) + { + status = iDownload->GetStringAttribute( EDlAttrContentType, aMimeType ); + } + return status; + } + +TInt CDownloadGateway::GetCurrentSize( TInt aId, TUint& aSize ) + { + TInt status(KErrNotFound); + TInt32 value(0); + if(iDownloadId == aId && iDownload) + { + status = iDownload->GetIntAttribute( EDlAttrDownloadedSize, value ); + if(!status) + { + aSize = value; + } + } + return status; + } + +TInt CDownloadGateway::GetDownloadSize( TInt aId, TUint& aSize ) + { + TInt status(KErrNotFound); + TInt32 value(0); + if(iDownloadId == aId && iDownload) + { + status = iDownload->GetIntAttribute( EDlAttrLength, value ); + if(status == KErrNone) + { + aSize = value; + } + } + return status; + } + +TInt CDownloadGateway::GetDownloadStatus(TInt aId, MProgDLSource::TDownloadStatus& aStatus) + { + TInt status(KErrNotFound); + if(iDownloadId == aId && iDownload) + { + aStatus = iDownloadStatus; + } + return status; + } + +TInt CDownloadGateway::DeleteDownload(TInt aId) + { + TInt status(KErrNotFound); + if(iDownloadId == aId && iDownload) + { + status = iDownload->Delete(); + } + return status; + } + +TInt CDownloadGateway::ResumeDownload(TInt aId) + { + TInt status(KErrNotFound); + if(iDownloadId == aId && iDownload) + { + status = iDownload->Start(); + } + return status; + } + +TInt CDownloadGateway::SetProgressiveMode(TInt aId, TBool aMode) + { + TInt status(KErrNotFound); + if(iDownloadId == aId && iDownloadStatus != MProgDLSource::EDeleted && iDownload) + { + status = iDownload->SetBoolAttribute( EDlAttrProgressive, aMode ); + } + return status; + } + +TInt CDownloadGateway::SetLocalFileName( TInt aId, TDesC& aFilName ) + { + TInt status(KErrNotFound); + if( iDownloadId == aId && iDownload) + { + status = iDownload->SetStringAttribute( EDlAttrLocalFileName, aFilName ); + } + return status; + } + +TInt CDownloadGateway::GetLocalFileName( TInt aId, TDes& aFileName ) + { + TInt status(KErrNotFound); + if( iDownloadId == aId && iDownload) + { + status = iDownload->GetStringAttribute( EDlAttrDestFilename, aFileName ); + } + return status; + } + +void CDownloadGateway::HandleDMgrEventL( RHttpDownload& /*aDownload*/, THttpDownloadEvent aEvent ) + { +#ifdef _DEBUG + RDebug::Print(_L("CDownloadGateway::HandleDMgrEventL DownloadState[%d] ProgressState[%d]"),aEvent.iDownloadState,aEvent.iProgressState); +#endif + MProgDLSource::TDownloadStatus status; + + // When the new evnet is different in one of the states + // then the current event + if(iPrevEvent.iDownloadState != aEvent.iDownloadState) + { + switch(aEvent.iDownloadState) + { + case EHttpDlCreated: + status = MProgDLSource::EConnecting; + break; + case EHttpDlInprogress: + status = MProgDLSource::EStarted; + break; + case EHttpDlPaused: + status = MProgDLSource::EPaused; + break; + case EHttpDlCompleted: + status = MProgDLSource::ECompleted; + break; + case EHttpDlFailed: + status = MProgDLSource::EFailed; + break; + case EHttpDlDeleting: + status = MProgDLSource::EDeleted; + break; + default: + status = MProgDLSource::EUnknown; + break; + }; + + iDownloadStatus = status; + iObserver->Event(status); + } + + if(iPrevEvent.iProgressState != aEvent.iProgressState) + { + switch(aEvent.iProgressState) + { + + case EHttpProgContentFileMoved: + { + TInt32 value(0); + TInt err = iDownload->GetIntAttribute( EDlAttrErrorId, value ); +#ifdef _DEBUG + RDebug::Print(_L("Delete File Code 2[%d][%d]"),err,value); +#endif + if(!err) + { + iObserver->MoveFileComplete(value); + } + } + break; + case EHttpProgCodLoadEnd: + // Case for COD download complete + iDownloadStatus = MProgDLSource::ECompleted; + iObserver->Event(MProgDLSource::ECompleted); + break; + case EHttpProgContentFileMovedAndDestFNChanged: + { + iObserver->MoveFileComplete(KErrAlreadyExists); + break; + } + }; + } + + iPrevEvent = aEvent; + } + +// End of file