logsui/EngineSrc/CLogsCntLinkChecker.cpp
changeset 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/logsui/EngineSrc/CLogsCntLinkChecker.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,284 @@
+/*
+* 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: 
+*     Check if a Contact Link is valid
+*
+*/
+
+// INCLUDE FILES
+#include "CLogsCntLinkChecker.h"
+#include "MLogsObserver.h"
+#include "MLogsReaderConfig.h"
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES  
+
+// CONSTANTS
+
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+
+// MODULE DATA STRUCTURES
+
+// LOCAL FUNCTION PROTOTYPES
+
+// ==================== LOCAL FUNCTIONS ====================
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// ----------------------------------------------------------------------------
+// CLogsCntLinkChecker::CLogsCntLinkChecker
+// ----------------------------------------------------------------------------
+//
+CLogsCntLinkChecker::CLogsCntLinkChecker( 
+    RFs& aFsSession,
+    MLogsObserver* aObserver ) :
+        CLogsBaseUpdater( aFsSession, aObserver),
+        iContactLinkValid( EFalse )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CLogsCntLinkChecker::NewL
+// ----------------------------------------------------------------------------
+//
+CLogsCntLinkChecker* CLogsCntLinkChecker::NewL( 
+    RFs& aFsSession,
+    MLogsObserver* aObserver )
+    {
+    CLogsCntLinkChecker* self = new ( ELeave ) CLogsCntLinkChecker( aFsSession, aObserver );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+  
+// ----------------------------------------------------------------------------
+// CLogsCntLinkChecker::ConstructL
+// ----------------------------------------------------------------------------
+//
+void CLogsCntLinkChecker::ConstructL()
+    {
+    BaseConstructL(CVPbkPhoneNumberMatchStrategy::EVPbkExactMatchFlag);
+    iWait = new( ELeave )CActiveSchedulerWait();
+    }
+
+// ----------------------------------------------------------------------------
+// CLogsCntLinkChecker::~CLogsEventUpdater
+// ----------------------------------------------------------------------------
+//
+CLogsCntLinkChecker::~CLogsCntLinkChecker()
+    {
+    delete iContactLink;
+    
+    if ( iWait )
+        {
+        if( iWait->IsStarted() )
+            {
+            iWait->AsyncStop();
+            }
+            delete iWait;
+            iWait = NULL;
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// CLogsCntLinkChecker::StartRunningL
+//
+// Called from base class 
+// ----------------------------------------------------------------------------
+//
+void CLogsCntLinkChecker::StartRunningL()   
+    {
+    //Important that ConfigureL is called before we start here 
+    if( iContactLink )
+        {
+        //We first try to search corresponding contact for this phonenumber from Phonebook
+        SearchContactLinkL( *iContactLink );   
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// CLogsCntLinkChecker::ContinueRunningL
+// ----------------------------------------------------------------------------
+//
+void CLogsCntLinkChecker::ContinueRunningL( TInt aFieldId )
+    {
+    iContactLinkValid = EFalse;
+    
+    if( aFieldId != KErrNotFound )    
+        {
+        iContactLinkValid = ETrue;
+        }
+    
+    iState = EStateCheckContactLinkFinished;
+    iPhase = EDone;
+
+    if( iWait->IsStarted() )
+        {
+        iWait->AsyncStop();
+        }
+   
+    if ( iObserver )
+        {
+        iObserver->StateChangedL( this );
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// CLogsCntLinkChecker::CntLinkDeletedL
+// ----------------------------------------------------------------------------
+//
+void CLogsCntLinkChecker::CntLinkDeletedL()
+    {
+    if( iContactLink )
+        {
+        delete iContactLink;
+        iContactLink = NULL;
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// CLogsCntLinkChecker::ConfigureL
+//
+// Sets the contact link which is used to retrieve the contact.
+// ----------------------------------------------------------------------------
+//
+void CLogsCntLinkChecker::ConfigureL( const MLogsReaderConfig* aConfig )   //Implemented from MLogsReader
+    {
+    if( iContactLink )
+        {
+        delete iContactLink;
+        iContactLink = NULL;
+        }
+    iState = EStateUndefined;
+    iContactLink = aConfig->ContactLink().AllocL();
+    }
+
+// ----------------------------------------------------------------------------
+// CLogsCntLinkChecker::IsSameContactLink
+//
+// Check if contact link is the same one, if same, no need to reconfig it.
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool CLogsCntLinkChecker::IsSameContactLink( const TDesC8& aContactLink ) const
+    {
+    TBool flag = EFalse;
+    
+    if ( iContactLink 
+            && 0 == iContactLink->Compare( aContactLink )
+            && ( iState == EStateCheckContactLinkFinished 
+                    || iState == EStateInitializing ) )
+        {
+        flag = ETrue;
+        }
+    return flag;
+    }
+
+// ----------------------------------------------------------------------------
+// CLogsCntLinkChecker::IsCntLinkValidSync
+//
+// Check if contact link is valid.
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TBool CLogsCntLinkChecker::IsCntLinkValidSync ( const TDesC8& aContactLink )
+    {
+    TBool flag = EFalse;
+    
+    if ( !iContactLink || 0 != iContactLink->Compare(aContactLink) )
+        {
+        return flag;
+        }
+    
+    if ( iState == EStateInitializing )
+        {
+        if( !(iWait->IsStarted()) ) 
+            {
+            iWait->Start();                     
+            }
+        }
+    if ( iState == EStateCheckContactLinkFinished ) 
+        {
+        if( iContactLinkValid )
+            {
+            flag = ETrue;
+            }
+            else
+            {
+            flag = EFalse;
+            }
+        }
+    
+    return flag;
+    }
+
+// ----------------------------------------------------------------------------
+// CLogsCntLinkChecker::RunL
+// ----------------------------------------------------------------------------
+//
+void CLogsCntLinkChecker::RunL()
+    {
+    
+    }
+
+// ----------------------------------------------------------------------------
+// CLogsCntLinkChecker::Stop
+// ----------------------------------------------------------------------------
+//
+void CLogsCntLinkChecker::Stop()
+    {
+    if ( iOperation )
+        {
+        delete iOperation;
+        iOperation = NULL;
+        iPbkOperationsOngoing = EFalse;
+        iState = EStateInterrupted;
+        }
+    
+    if ( iWait->IsStarted() )
+        {
+        iWait->AsyncStop();
+        }
+    return;
+    }
+
+// ----------------------------------------------------------------------------
+// CLogsCntLinkChecker::ProcessVPbkSingleContactOperationCompleteImplL
+// ----------------------------------------------------------------------------
+//
+void CLogsCntLinkChecker::ProcessVPbkSingleContactOperationCompleteImplL(
+    MVPbkContactOperationBase& /* aOperation */,
+    MVPbkStoreContact* /*aContact)*/ )
+    {
+    
+    }
+
+// ----------------------------------------------------------------------------
+// CLogsCntLinkChecker::HandleStoreEventL
+// ----------------------------------------------------------------------------
+//
+void CLogsCntLinkChecker::HandleStoreEventL( MVPbkContactStore&     /*aContactStore */, 
+                                          TVPbkContactStoreEvent aStoreEvent )
+    {
+    if(aStoreEvent.iEventType == TVPbkContactStoreEvent::EContactDeleted)
+        { 
+        CntLinkDeletedL();
+        }
+    }
+// End of File
+
+