messagingappbase/mce/src/MceUtilsIdleClass.cpp
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingappbase/mce/src/MceUtilsIdleClass.cpp	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,173 @@
+/*
+* Copyright (c) 2002 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:  
+*   Active object to count messages background for mainview.
+*
+*/
+
+
+
+
+// INCLUDE FILES
+
+
+#include "MceUtilsIdleClass.h"
+
+#include "MceLogText.h"
+
+
+// CONSTANTS
+
+
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+CMceUtilsIdleClass* CMceUtilsIdleClass::NewL(
+    MMceUtilsIdleClassObserver& aObserver )
+    {
+    CMceUtilsIdleClass* self = new (ELeave) CMceUtilsIdleClass( aObserver );
+    return self;
+    }
+
+
+CMceUtilsIdleClass::CMceUtilsIdleClass(
+    MMceUtilsIdleClassObserver& aObserver )
+    :   
+    CActive( CActive::EPriorityIdle ),
+    iObserver( aObserver )
+    {
+    CActiveScheduler::Add(this);
+    }
+
+// destructor
+CMceUtilsIdleClass::~CMceUtilsIdleClass()
+    {
+    Cancel();
+    }
+
+// ---------------------------------------------------------
+// CMceUtilsIdleClass::StartL
+// ---------------------------------------------------------
+//
+void CMceUtilsIdleClass::StartL()
+    {
+    MCELOGGER_ENTERFN("CMceUtilsIdleClass::StartL()");
+    if(!IsActive())
+        {
+        TRequestStatus *s = &iStatus;
+        User::RequestComplete(s, KErrNone);
+        SetActive();
+        MCELOGGER_WRITE_TIMESTAMP("Started at: ");
+        }
+#ifdef _DEBUG
+    else
+        {
+        MCELOGGER_WRITE_TIMESTAMP("Already running, time: ");
+        }        
+#endif
+        MCELOGGER_LEAVEFN("CMceUtilsIdleClass::StartL()");
+    }
+
+
+// ---------------------------------------------------------
+// CMceUtilsIdleClass::FinishL
+// ---------------------------------------------------------
+//
+void CMceUtilsIdleClass::ForceFinishL()
+    {
+    MCELOGGER_ENTERFN("CMceUtilsIdleClass::ForceFinishL()");
+    if(IsActive())
+        {
+        // First consume the outstanding completion.
+        Cancel();
+        // Now try to do remaining steps synchronously.
+        TBool startAgain = EFalse;
+        TInt i = 0;
+        MCELOGGER_WRITE_TIMESTAMP("start time: ");
+        startAgain = iObserver.MMceUtilsIdleClassStepL();
+        while( startAgain && i < 100 /* safety */)
+            {
+            i++;
+            startAgain = iObserver.MMceUtilsIdleClassStepL();
+            }
+        MCELOGGER_WRITE_TIMESTAMP("stop time: ");
+        }
+    MCELOGGER_LEAVEFN("CMceUtilsIdleClass::ForceFinishL()");
+    }
+
+
+// ---------------------------------------------------------
+// CMceUtilsIdleClass::DoCancel
+// ---------------------------------------------------------
+//
+void CMceUtilsIdleClass::DoCancel()
+    {
+    }
+
+
+// ---------------------------------------------------------
+// CMceUtilsIdleClass::RunL
+// ---------------------------------------------------------
+//
+void CMceUtilsIdleClass::RunL()
+    {
+    MCELOGGER_ENTERFN("CMceUtilsIdleClass::RunL()");
+    QueueNextL();
+#ifdef _DEBUG    
+    if(!IsActive())
+        {
+        MCELOGGER_WRITE("CMceUtilsIdleClass: finished");
+        MCELOGGER_WRITE_TIMESTAMP("CMceUtilsIdleClass Time: ");
+        }
+#endif        
+    MCELOGGER_LEAVEFN("CMceUtilsIdleClass::RunL()");
+    }
+
+// ---------------------------------------------------------
+// CMceUtilsIdleClass::RunError
+// ---------------------------------------------------------
+//
+TInt CMceUtilsIdleClass::RunError(TInt /*aError*/)
+    {
+    // ignore all the errors
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------
+// CMceUtilsIdleClass::QueueLoad
+// ---------------------------------------------------------
+//
+void CMceUtilsIdleClass::QueueNextL()
+    {
+    MCELOGGER_ENTERFN("CMceUtilsIdleClass::QueueNextL()");
+    TBool startAgain = EFalse;
+    MCELOGGER_WRITE_TIMESTAMP("About to call MMceUtilsIdleClassStepL: ");
+    startAgain = iObserver.MMceUtilsIdleClassStepL();
+    MCELOGGER_WRITE_TIMESTAMP("<--- MMceUtilsIdleClassStepL done ");
+    // OPEN: should we start again in case of leave?
+    // OPEN: Is there need for some safety counter???
+    if( startAgain )
+        {
+        TRequestStatus *s = &iStatus;
+        User::RequestComplete(s, KErrNone);
+        SetActive();
+        MCELOGGER_WRITE_TIMESTAMP("Started again at: ");
+        }
+    MCELOGGER_LEAVEFN("CMceUtilsIdleClass::QueueNextL()");
+    }
+
+
+//  End of File