wvuing/wvuiave/AppSrc/ccasyncchecker.cpp
changeset 0 094583676ce7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wvuing/wvuiave/AppSrc/ccasyncchecker.cpp	Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,219 @@
+/*
+* 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:  Helper class for checking synch state.
+*
+*/
+
+
+
+#include "ccasyncchecker.h"
+#include "ccaappui.h"
+#include "ccauisessionmanager.h"
+#include "MCAGlobalNotificationObserverPC.h"
+#include "MCAProcessManager.h"
+#include "impsbuilddefinitions.h"
+#include "chatdebugprint.h"
+// The Settings have been moved to Cenrep (also retained in the Resource file),
+// so the enums for keys and central repository header is added here
+#include 	"VariantKeys.h"
+
+#include <chatNG.rsg>
+
+// ======== MEMBER FUNCTIONS ========
+
+
+// ---------------------------------------------------------
+// CCASyncChecker::NewLC()
+// Called when a contact is deleted
+// ---------------------------------------------------------
+//
+CCASyncChecker* CCASyncChecker::NewLC()
+    {
+    CCASyncChecker* self = new ( ELeave ) CCASyncChecker();
+    CleanupStack::PushL( self );
+    return self;
+    }
+
+// ---------------------------------------------------------
+// CCASyncChecker::CCASyncChecker()
+// Called when a contact is deleted
+// ---------------------------------------------------------
+//
+CCASyncChecker::CCASyncChecker()
+        : iAppUi( static_cast<CCAAppUi*>( CCoeEnv::Static()->AppUi() ) )
+    {
+    iGlobalNotificationPC = iAppUi->GetProcessManager().GetGlobalNotificationInterface();
+    delete iWaitNote;
+    }
+
+
+// ---------------------------------------------------------
+// CCASyncChecker::~CCASyncChecker()
+// Called when a contact is deleted
+// ---------------------------------------------------------
+//
+CCASyncChecker::~CCASyncChecker()
+    {
+    delete iWaitNote;
+    }
+
+// ---------------------------------------------------------
+// CCASyncChecker::WaitForSyncCompleteL()
+// Called when a contact is deleted
+// ---------------------------------------------------------
+//
+TBool CCASyncChecker::WaitForSyncCompleteL()
+    {
+    if ( !LoggedIn() )
+        {
+        // Not logged in. No reason to wait
+        return EFalse;
+        }
+
+    TBool failed;
+    if ( !iGlobalNotificationPC->StoredContactsIsAllSynchronised( failed ) ||
+         !iGlobalNotificationPC->IsContactListsSyncDoneL() )
+        {
+        iWaitNoteCanceled = EFalse;
+        iGlobalNotificationPC->AddGlobalObserverL( this );
+        iWaitNote = CCAWaitNote::ShowWaitNoteL(
+                        R_QTN_CHAT_FETCHING_LISTS_ONGOING,
+                        ETrue, ETrue, this );
+
+        if ( ! iWait.IsStarted() )
+            {
+            iWait.Start();  // CSI: 10 # iWait is not an active object
+            }
+        delete iWaitNote;
+        iGlobalNotificationPC->RemoveGlobalObserver( this );
+        iWaitNote = NULL;
+        if ( iWaitNoteCanceled )
+            {
+            return EFalse;
+            }
+        }
+    TBool allSync = iGlobalNotificationPC->StoredContactsIsAllSynchronised( failed );
+    TBool syncDone = iGlobalNotificationPC->IsContactListsSyncDoneL();
+    return ( allSync && !failed && syncDone );
+    }
+
+
+// ---------------------------------------------------------
+// CCASyncChecker::LoggedIn()
+// Called when a contact is deleted
+// ---------------------------------------------------------
+//
+TBool CCASyncChecker::LoggedIn()
+    {
+    return iAppUi->UISessionManager().IsLoggedIn();
+    }
+// ---------------------------------------------------------
+// CCASyncChecker::CheckSyncStateL()
+// Called when a contact is deleted
+// ---------------------------------------------------------
+//
+TBool CCASyncChecker::CheckSyncStateL()
+    {
+    TBool retVal = ETrue;
+#ifdef IMPS_CONTACT_FETCH_BACKGROUND
+    //Code scanner warning ignored, since this is a static method
+    CCAAppUi* appUi = static_cast<CCAAppUi*>( CCoeEnv::Static()->AppUi() );
+    MCAGlobalNotificationObserverPC* globalNotificationPC =
+        appUi->GetProcessManager().GetGlobalNotificationInterface();
+    if ( globalNotificationPC->IsValidListInterfaceL() == EFalse )
+        {
+        // not logged in yet, so sync state is ok
+        return ETrue;
+        }
+
+    TBool syncDone = globalNotificationPC->IsContactListsSyncDoneL();
+    TBool ignoreFailed;
+    if ( !globalNotificationPC->StoredContactsIsAllSynchronised( ignoreFailed ) ||
+         !syncDone )
+        {
+        CCASyncChecker* checker = NewLC();
+        retVal = checker->WaitForSyncCompleteL();
+        CleanupStack::PopAndDestroy(); //checker
+        }
+#endif //IMPS_CONTACT_FETCH_BACKGROUND
+    return retVal;
+    }
+
+// ---------------------------------------------------------
+// CCASyncChecker::HandleDelete()
+// Called when a contact is deleted
+// ---------------------------------------------------------
+//
+
+void CCASyncChecker::HandleDelete( const TDesC& /*aContactId*/ , TEnumsPC::TItem /*type*/ )
+    {
+    // Not used
+    }
+
+// ---------------------------------------------------------
+// CCASyncChecker::HandleAddition()
+// Called when a contact is added
+// ---------------------------------------------------------
+//
+void CCASyncChecker::HandleAddition(  TEnumsPC::TItem /*type*/ )
+    {
+    // Not used
+    }
+
+// ---------------------------------------------------------
+// CCASyncChecker::HandleChange()
+// Called when a contact is changed
+// ---------------------------------------------------------
+//
+void CCASyncChecker::HandleChange( TEnumsPC::TItem /*aType*/, TEnumsPC::TChange /*aChangeType*/ )
+    {
+    CHAT_DP_FUNC_ENTER( "CCASyncChecker::HandleChange" );
+
+    if ( !iGlobalNotificationPC->IsValidStoredContactsInterface() )
+        {
+        return;
+        }
+
+    TBool ignoreFailed;
+    TBool syncDone = EFalse;
+    TRAP_IGNORE( syncDone = iGlobalNotificationPC->IsContactListsSyncDoneL() );
+    if ( iWaitNote &&
+         iGlobalNotificationPC->StoredContactsIsAllSynchronised( ignoreFailed ) &&
+         syncDone )
+        {
+        iWaitNote->DismissDialog();
+        iWaitNoteCanceled = EFalse;
+        }
+
+    CHAT_DP_FUNC_DONE( "CCASyncChecker::HandleChange" );
+    }
+
+// ---------------------------------------------------------
+// CCASyncChecker::NoteCanceled
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCASyncChecker::NoteCanceled( TInt aButtonId )
+    {
+    if ( aButtonId == EAknSoftkeyCancel )
+        {
+        iWaitNoteCanceled = ETrue;
+        }
+    if ( iWait.IsStarted() )
+        {
+        iWait.AsyncStop();
+        }
+    }
+
+// end of file