browserutilities/downloadmgr/DownloadMgrClntSrv/src/DownloadMgrEventQueue.cpp
changeset 0 dd21522fd290
child 37 cb62a4f66ebe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/browserutilities/downloadmgr/DownloadMgrClntSrv/src/DownloadMgrEventQueue.cpp	Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,286 @@
+/*
+* Copyright (c) 2002-2004 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:  ?Description
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "DownloadMgrEventQueue.h"
+#include "DownloadMgrLogger.h"
+#include <HttpDownload.h>
+
+#ifdef __DOWNLOADMGR_LOG__
+//#define __DUMP_EVENT_QUEUE
+#ifdef __DUMP_EVENT_QUEUE
+#pragma message ("Dump event queue!!!")
+#endif /* __DUMP_EVENT_QUEUE */
+#endif /*__DOWNLOADMGR_LOG__*/
+// ============================= LOCAL FUNCTIONS ===============================
+
+// ---------------------------------------------------------
+// CDownloadMgrEventQueue::CDownloadMgrEventQueue
+// ---------------------------------------------------------
+//
+CDownloadMgrEventQueue::CDownloadMgrEventQueue()
+	{
+	__DECLARE_NAME( _S( "CDownloadMgrEventQueue" ) );
+	CLOG_CREATE;
+	}
+
+// ---------------------------------------------------------
+// CDownloadMgrEventQueue::~CDownloadMgrEventQueue
+// ---------------------------------------------------------
+//
+CDownloadMgrEventQueue::~CDownloadMgrEventQueue()
+	{
+	iEventQueue.ResetAndDestroy();
+	CLOG_CLOSE;
+	}
+
+// ---------------------------------------------------------
+// CDownloadMgrEventQueue::In
+// ---------------------------------------------------------
+//
+TBool CDownloadMgrEventQueue::In( CHttpDownload* aDownload, 
+                                  THttpDownloadState aDlState,
+                                  THttpProgressState aProgState,
+                                  TInt32 aMoIndex )
+	{
+    CLOG_ENTERFN( "CDownloadMgrEventQueue::In" );
+
+    if( aDlState == EHttpDlInprogress && 
+        aProgState == EHttpProgResponseBodyReceived && 
+        iEventQueue.Count() )
+        // If EHttpDlInprogress-EHttpProgResponseBodyReceived is last
+        // event in the queue, it doesn't need to be appended again.
+        {
+        CLOG_WRITE( "In-progress filter" );
+        TInt count = iEventQueue.Count();
+        TInt32 dlState;
+        TInt32 progState;
+        TInt32 moIndex;
+
+        CEventRecord* record = iEventQueue[count-1];
+        record->States( dlState, progState, moIndex );
+
+        if( aDlState == dlState &&
+            aProgState == progState &&
+            aMoIndex == moIndex &&
+            aDownload == record->Download())
+            {
+            CLOG_WRITE( "Event filtered" );
+            return ETrue;
+            }
+        }
+
+    CEventRecord* record = new CEventRecord( aDownload, aDlState, aProgState, aMoIndex );
+    if( record == NULL )
+        {
+        return EFalse;
+        }
+        
+    CLOG_WRITE_FORMAT( "CDownloadMgrEventQueue::In: 0x%x", record );
+        
+    TInt err = iEventQueue.Append( record );
+    if( KErrNone != err )
+        {
+        delete record;
+        return EFalse;
+        }
+#ifdef __DUMP_EVENT_QUEUE
+    CLOG_WRITE( "=====================>>>>" );
+    CLOG_WRITE_FORMAT( "CDownloadMgrEventQueue::In Download: 0x%x", aDownload )
+    CLOG_WRITE_FORMAT( "CDownloadMgrEventQueue::In State: %d", aDlState )
+    CLOG_WRITE_FORMAT( "CDownloadMgrEventQueue::In Progress: %d",aProgState )
+    CLOG_WRITE_FORMAT( "CDownloadMgrEventQueue::In Media Index: %d",aMoIndex )
+    CLOG_WRITE( "Dump event queue---------" );
+    for( TInt i = 0; i < iEventQueue.Count(); i++ )
+        {
+        CLOG_WRITE_FORMAT( "i= %d", i )
+        CEventRecord* r = iEventQueue[i];
+        CLOG_WRITE_FORMAT( "Download: 0x%x", r->Download() )
+        TInt32 state;
+        TInt32 progress;
+        TInt32 mediaIndex;
+        r->States( state, progress, mediaIndex );
+        CLOG_WRITE_FORMAT( "Download: 0x%x", r->Download() )
+        CLOG_WRITE_FORMAT( "State: %d", state )
+        CLOG_WRITE_FORMAT( "Progress: %d", progress )        
+        CLOG_WRITE_FORMAT( "Media Index: %d", mediaIndex ) 
+        }
+    CLOG_WRITE( "=====================>>>>" );
+#endif /* __DUMP_EVENT_QUEUE */
+
+    return ETrue;
+	}
+
+// ---------------------------------------------------------
+// CDownloadMgrEventQueue::Next
+// ---------------------------------------------------------
+//
+CHttpDownload* CDownloadMgrEventQueue::Next( TInt32& aDownloadState,
+                                             TInt32& aProgressState,
+                                             TInt32& aMoIndex )
+	{
+    CLOG_ENTERFN( "CDownloadMgrEventQueue::Next" );
+    CEventRecord* record = iEventQueue[ 0 ];
+    record->States( aDownloadState, aProgressState, aMoIndex );
+    CLOG_WRITE( "Next=====================" );
+    CLOG_WRITE_FORMAT( "CDownloadMgrEventQueue::Next Download: 0x%x", record->Download() )
+    CLOG_WRITE_FORMAT( "CDownloadMgrEventQueue::Next State: %d", aDownloadState )
+    CLOG_WRITE_FORMAT( "CDownloadMgrEventQueue::Next Progress: %d",aProgressState ) 
+    CLOG_WRITE_FORMAT( "CDownloadMgrEventQueue::Next Media Index: %d",aMoIndex ) 
+#ifdef __DUMP_EVENT_QUEUE
+   
+    CLOG_WRITE( "Dump event queue---------" );
+    for( TInt i = 0; i < iEventQueue.Count(); i++ )
+        {
+        CLOG_WRITE_FORMAT( "i= %d", i )
+        CEventRecord* r = iEventQueue[i];
+        TInt32 dlState;
+        TInt32 progState;
+        TInt32 mediaIndex;
+        r->States( dlState, progState, mediaIndex );
+        CLOG_WRITE_FORMAT( "Download: 0x%x", r->Download() )
+        CLOG_WRITE_FORMAT( "State: %d", dlState )
+        CLOG_WRITE_FORMAT( "Progress: %d", progState )
+        CLOG_WRITE_FORMAT( "Media Index: %d", mediaIndex )
+        }
+    CLOG_WRITE( "Next=====================" );    
+#endif /* __DUMP_EVENT_QUEUE */
+    
+	return record->Download();
+	}
+
+// ---------------------------------------------------------
+// CDownloadMgrEventQueue::Out
+// ---------------------------------------------------------
+//
+void CDownloadMgrEventQueue::Out()
+	{
+    CLOG_ENTERFN( "CDownloadMgrEventQueue::Out" );
+
+    CEventRecord* record = iEventQueue[ 0 ];
+    iEventQueue.Remove( 0 );
+    CLOG_WRITE_FORMAT( "CDownloadMgrEventQueue::Out Download: 0x%x", record->Download() )
+    delete record;
+    iEventQueue.Compress();
+
+#ifdef __DUMP_EVENT_QUEUE
+    CLOG_WRITE( "<<<<=====================" );
+    CLOG_WRITE( "Dump event queue---------" );
+    for( TInt i = 0; i < iEventQueue.Count(); i++ )
+        {
+        CLOG_WRITE_FORMAT( "i= %d", i )
+        CEventRecord* r = iEventQueue[i];
+        TInt32 dlState;
+        TInt32 progState;
+        r->States( dlState, progState );        
+        CLOG_WRITE_FORMAT( "Download: 0x%x", r->Download() )
+        CLOG_WRITE_FORMAT( "State: %d", dlState )
+        CLOG_WRITE_FORMAT( "Progress: %d", progState )
+        }
+    CLOG_WRITE( "<<<<=====================" );
+#endif /* __DUMP_EVENT_QUEUE */
+	}
+
+// ---------------------------------------------------------
+// CDownloadMgrEventQueue::IsEmpty
+// ---------------------------------------------------------
+//	
+TBool CDownloadMgrEventQueue::IsEmpty() const
+	{
+    CLOG_WRITE( "CDownloadMgrEventQueue::IsEmpty" );
+    return ( iEventQueue.Count() ? EFalse : ETrue );
+	}
+
+// ---------------------------------------------------------
+// CDownloadMgrEventQueue::Remove
+// ---------------------------------------------------------
+//	
+void CDownloadMgrEventQueue::Remove( CHttpDownload* aDownload )
+	{
+    CLOG_WRITE( "CDownloadMgrEventQueue::Remove" );
+    for( TInt i = 0; i < iEventQueue.Count(); i++ )
+        {
+        if( iEventQueue[i]->IsDownload( aDownload ) )
+            {
+            CEventRecord* record = iEventQueue[i];
+            CLOG_WRITE_FORMAT( "CDownloadMgrEventQueue::Remove Download: 0x%x", record->Download() )
+            iEventQueue.Remove( i );
+            delete record;
+            record = NULL;
+            iEventQueue.Compress();
+            i--;
+            }
+        }
+	}
+
+// ---------------------------------------------------------
+// CEventRecord::CEventRecord
+// ---------------------------------------------------------
+//
+CEventRecord::CEventRecord( CHttpDownload* aDownload, 
+                            TInt32 aDownloadState,
+                            TInt32 aProgressState,
+                            TInt32 aMoIndex )
+:iDownloadState( aDownloadState )
+,iProgressState( aProgressState )
+,iMoIndex( aMoIndex )
+    {
+    iDownload = aDownload;
+    }
+
+// ---------------------------------------------------------
+// CEventRecord::~CEventRecord
+// ---------------------------------------------------------
+//
+CEventRecord::~CEventRecord()
+    {
+    }
+
+// ---------------------------------------------------------
+// CEventRecord::States
+// ---------------------------------------------------------
+//
+void CEventRecord::States( TInt32& aDownloadState,
+                           TInt32& aProgressState,
+                           TInt32& aMoIndex )
+    {
+    aDownloadState = iDownloadState;
+    aProgressState = iProgressState;
+    aMoIndex = iMoIndex;
+    }
+
+// ---------------------------------------------------------
+// CEventRecord::Download
+// ---------------------------------------------------------
+//
+CHttpDownload* CEventRecord::Download()
+    {
+    return iDownload;
+    }
+
+// ---------------------------------------------------------
+// CEventRecord::IsDownload
+// ---------------------------------------------------------
+//
+TBool CEventRecord::IsDownload( CHttpDownload* aDownload )
+    {
+    return (iDownload == aDownload) ? ETrue : EFalse;
+    }
+
+//  End of File