wvuing/wvuieng/EngSrc/ccasyncchecker.cpp
changeset 0 094583676ce7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wvuing/wvuieng/EngSrc/ccasyncchecker.cpp	Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,189 @@
+/*
+* 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 "mcastoredcontacts.h"
+#include "mcapresence.h"
+
+#include "ccastoragemanagerfactory.h"
+#include "capresencemanager.h"
+
+#include "impsbuilddefinitions.h"
+#include "chatdebugprint.h"
+
+// ======== 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()
+    {
+    }
+
+// ---------------------------------------------------------
+// CCASyncChecker::WaitForSyncCompleteL()
+// Called when a contact is deleted
+// ---------------------------------------------------------
+//
+TBool CCASyncChecker::WaitForSyncCompleteL()
+    {
+    MCAStoredContacts* contacts = CCAStorageManagerFactory::ContactListInterfaceL();
+
+    TBool failed = EFalse;
+
+    if ( !contacts->IsAllSynchronised( failed ) ||
+         !IsSyncDoneL() )
+        {
+        contacts->AddObserverL( this );
+
+        if ( !iWait.IsStarted() )
+            {
+            iWait.Start();  // CSI: 10 # iWait is not an active object
+            }
+
+        contacts->RemoveObserver( this );
+        }
+    TBool allSync = contacts->IsAllSynchronised( failed );
+    TBool syncDone = IsSyncDoneL();
+    return ( allSync && !failed && syncDone );
+    }
+
+// ---------------------------------------------------------
+// CCASyncChecker::IsSyncDoneL()
+// Called when a contact is deleted
+// ---------------------------------------------------------
+//
+TBool CCASyncChecker::IsSyncDoneL()
+    {
+    MCAContactLists* listInterface =
+        CAPresenceManager::InstanceL()->ContactLists();
+
+    return listInterface->IsSyncDone();
+    }
+
+// ---------------------------------------------------------
+// CCASyncChecker::CheckSyncStateL()
+// Called when a contact is deleted
+// ---------------------------------------------------------
+//
+TBool CCASyncChecker::CheckSyncStateL()
+    {
+    TBool retVal = ETrue;
+#ifdef IMPS_CONTACT_FETCH_BACKGROUND
+
+    MCAStoredContacts* contactList =
+        CCAStorageManagerFactory::ContactListInterfaceL();
+
+    MCAContactLists* listInterface =
+        CAPresenceManager::InstanceL()->ContactLists();
+    if ( !listInterface )
+        {
+        // not logged in yet, so sync state is ok
+        return ETrue;
+        }
+
+    TBool syncDone = listInterface->IsSyncDone();
+
+    TBool ignoreFailed;
+    if ( !contactList->IsAllSynchronised( 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::HandleContactDelete( const TDesC& /* aContact */ )
+    {
+    // Not used
+    }
+
+// ---------------------------------------------------------
+// CCASyncChecker::HandleAddition()
+// Called when a contact is added
+// ---------------------------------------------------------
+//
+void CCASyncChecker::HandleAddition( MCAContactList& /*aList*/,
+                                     MCAStoredContact& /*aContact*/ )
+    {
+    // Not used
+    }
+
+// ---------------------------------------------------------
+// CCASyncChecker::HandleChange()
+// Called when a contact is changed
+// ---------------------------------------------------------
+//
+void CCASyncChecker::HandleChange(
+    MCAContactList* /*aList*/,
+    MCAStoredContact* /*aContact*/,
+    TStorageManagerGlobals::TCAObserverEventType /*aEventType*/,
+    TBool /*aUserIdChanged*/ )
+    {
+    CHAT_DP_FUNC_ENTER( "CCASyncChecker::HandleChange" );
+
+    MCAStoredContacts* storage = NULL;
+    TRAPD( error, storage = CCAStorageManagerFactory::ContactListInterfaceL() );
+
+    if ( error != KErrNone )
+        {
+        return;
+        }
+
+    TBool ignoreFailed = EFalse;
+    TBool syncDone = EFalse;
+    TRAP_IGNORE( syncDone = IsSyncDoneL() );
+    if ( storage->IsAllSynchronised( ignoreFailed ) &&
+         syncDone &&
+         iWait.IsStarted() )
+        {
+        iWait.AsyncStop();
+        }
+
+    CHAT_DP_FUNC_DONE( "CCASyncChecker::HandleChange" );
+    }
+
+// end of file