mmfenh/enhancedmediaclient/Client/src/Components/ClientProgDLSource/DownloadGateway.cpp
changeset 0 71ca22bcf22a
--- /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 <e32std.h>
+
+#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