--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/logsui/EngineSrc/CLogsSMSEventUpdater.cpp Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,261 @@
+/*
+* 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:
+* Updates SMS events contact name to match one in contact model
+*
+*/
+
+
+// INCLUDE FILES
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <logengevents.h>
+#endif
+#include <logview.h>
+#include <logcli.h>
+#include "CLogsSMSEventUpdater.h"
+#include "MLogsObserver.h"
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES
+
+// CONSTANTS
+const TInt KFieldId = 5;
+
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+
+// MODULE DATA STRUCTURES
+
+// LOCAL FUNCTION PROTOTYPES
+
+// ==================== LOCAL FUNCTIONS ====================
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// ----------------------------------------------------------------------------
+// CLogsSMSEventUpdater::
+// ----------------------------------------------------------------------------
+//
+CLogsSMSEventUpdater::CLogsSMSEventUpdater(
+ RFs& aFsSession,
+ MLogsObserver* aObserver ) :
+ CLogsBaseUpdater( aFsSession, aObserver )
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CLogsSMSEventUpdater::
+// ----------------------------------------------------------------------------
+//
+CLogsSMSEventUpdater* CLogsSMSEventUpdater::NewL(
+ RFs& aFsSession,
+ MLogsObserver* aObserver,
+ CVPbkPhoneNumberMatchStrategy::TVPbkPhoneNumberMatchFlags aMatchFlags )
+ {
+ CLogsSMSEventUpdater* self = new ( ELeave ) CLogsSMSEventUpdater( aFsSession, aObserver );
+ CleanupStack::PushL( self );
+ self->ConstructL( aMatchFlags );
+ CleanupStack::Pop();
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CLogsSMSEventUpdater::ConstructL
+// ----------------------------------------------------------------------------
+//
+void CLogsSMSEventUpdater::ConstructL( CVPbkPhoneNumberMatchStrategy::TVPbkPhoneNumberMatchFlags aMatchFlags )
+ {
+ BaseConstructL( aMatchFlags );
+ iLogViewEvent = CLogViewEvent::NewL( *iLogClient, *this );
+ iFilter->SetEventType( KLogShortMessageEventTypeUid );
+ iFilter->SetFlags( KLogEventContactSearched );
+ iFilter->SetNullFields( ELogFlagsField );
+ CActiveScheduler::Add( this );
+ }
+
+// ----------------------------------------------------------------------------
+// CLogsSMSEventUpdater::~CLogsSMSEventUpdater
+// ----------------------------------------------------------------------------
+//
+CLogsSMSEventUpdater::~CLogsSMSEventUpdater()
+ {
+ }
+
+
+// ----------------------------------------------------------------------------
+// CLogsSMSEventUpdater::StartRunningL
+// ----------------------------------------------------------------------------
+//
+void CLogsSMSEventUpdater::StartRunningL()
+ {
+ Cancel();
+
+ if( iLogViewEvent->SetFilterL( *iFilter, iStatus ) ) //returns true, if found log events
+ {
+ iState = EStateActive;
+ iPhase = EFilter;
+ SetActive();
+ }
+ else if( iObserver )
+ {
+ iState = EStateSMSUpdaterFinished;
+ iObserver->StateChangedL( this );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CLogsSMSEventUpdater::ContinueRunningL
+// ----------------------------------------------------------------------------
+//
+void CLogsSMSEventUpdater::ContinueRunningL( TInt aFieldId )
+ {
+ if( aFieldId != KErrNotFound ) //Set remote party etc only if a contact was found
+ {
+ TBuf<KFieldId> fieldText;
+ fieldText.Append( aFieldId );
+ iEvent->SetRemoteParty( *iName ); //iName set in the base class
+
+ // iEvent->SetSubject( fieldText );
+ }
+
+ //We set ContactSearched flag on, so next time we'll skip this entry and do not
+ //attempt again update remote party (even if we did not find remote party for it).
+ //Also, KLogEventContactSearched events only are accepted to
+ //EventListView (CLogsMainReader::SetOneFilterLC).
+ iEvent->SetFlags( KLogEventContactSearched );
+ iLogClient->ChangeEvent( *iEvent, iStatus );
+ SetActive();
+ }
+
+
+// ----------------------------------------------------------------------------
+// CLogsSMSEventUpdater::RunL
+// ----------------------------------------------------------------------------
+//
+void CLogsSMSEventUpdater::RunL()
+ {
+ if( iStatus == KErrNone )
+ {
+ switch( iPhase )
+ {
+ case EFilter:
+ if( iLogViewEvent->FirstL( iStatus ) ) //If there's at least one entry in view, let's process it
+ {
+ iState = EStateActive;
+ iPhase = ERead;
+ SetActive();
+ }
+ else
+ {
+ iState = EStateFinished;
+ }
+ break;
+
+ case ERead:
+ {
+
+ iEvent->CopyL( iLogViewEvent->Event() );
+ iPhase = EUpdate;
+
+ // SAT sms events are not updated since they do not have number
+ SearchRemotePartyL( iEvent->Number() );
+
+ //SetActive() is called when base class has got the contact and calls ContinueRunningL
+ }
+ break;
+
+ case EUpdate:
+ if( iLogViewEvent->FirstL( iStatus ) ) //If there's still at least one entry in view, let's continue
+ { //processing it (this assumes that the event updated above has
+ iPhase = ERead; //has already disappeared from view and the "next" shows now as "first"
+ SetActive(); //in view).
+ }
+ else
+ {
+ iState = EStateFinished;
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ if( iObserver ) //( <--not waiting here iState = EStateFinished!)
+ {
+ iObserver->StateChangedL( this ); //Inform for each change the observer that there's change in db (Maybe it's
+ } //worthwhile to do it immediately (as here) instead of waiting iState to reach EStateFinished.
+ //This way more rereads are started but we get speedier update of list too.
+ //Note that change of db (above) also invokes call of HandleLogViewChangeEventAddedL (below) too.
+ }
+
+
+// ----------------------------------------------------------------------------
+// CLogsSMSEventUpdater::HandleLogViewChangeEventAddedL
+//
+// When new event added to db, we need to start checking it in case the new event
+// is messaging event (it is not shown before we update it by KLogEventContactSearched)
+// ----------------------------------------------------------------------------
+//
+void CLogsSMSEventUpdater::HandleLogViewChangeEventAddedL(
+ TLogId /*aId*/,
+ TInt /*aViewIndex*/,
+ TInt /*aChangeIndex*/,
+ TInt aTotalChangeCount )
+ {
+ if( aTotalChangeCount > 0 )
+ {
+ StartL();
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CLogsSMSEventUpdater::HandleLogViewChangeEventChangedL
+//
+// is this needed (as we don't know for sure if a messaging event is eventually
+// constructed by changing the db, we cannot only trust to HandleLogViewChangeEventAddedL
+// to take care of it, so let's keep the below too just in case...
+// ----------------------------------------------------------------------------
+//
+void CLogsSMSEventUpdater::HandleLogViewChangeEventChangedL(
+ TLogId /*aId*/,
+ TInt /*aViewIndex*/,
+ TInt /*aChangeIndex*/,
+ TInt aTotalChangeCount )
+ {
+ if( aTotalChangeCount > 0 )
+ {
+ StartL();
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CLogsSMSEventUpdater::HandleLogViewChangeEventDeletedL
+//
+// No need to do anything when delete notification received.
+// ----------------------------------------------------------------------------
+//
+void CLogsSMSEventUpdater::HandleLogViewChangeEventDeletedL(
+ TLogId /*aId*/,
+ TInt /*aViewIndex*/,
+ TInt /*aChangeIndex*/,
+ TInt /*aTotalChangeCount*/ )
+ {
+ }
+
+
+// End of File