--- /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