A client application of the Contacts Server can be set to observe changes in the contacts database. When a change in the database occurs, the application gets an event. The event carries information about the type of the event, the contact ID, and the connection ID.
struct TContactDbObserverEvent { TContactDbObserverEventType iType; TContactItemId iContactId; TUint iConnectionId; };
The following event types are defined in the cntdbobs.h
header:
enum TContactDbObserverEventType { EContactDbObserverEventNull, EContactDbObserverEventUnused, EContactDbObserverEventContactChanged, EContactDbObserverEventContactDeleted, EContactDbObserverEventContactAdded, EContactDbObserverEventUnknownChanges, EContactDbObserverEventRecover, EContactDbObserverEventRollback, EContactDbObserverEventTablesClosed, EContactDbObserverEventTablesOpened, EContactDbObserverEventTemplateChanged, EContactDbObserverEventTemplateDeleted, EContactDbObserverEventTemplateAdded, EContactDbObserverEventCurrentItemDeleted, EContactDbObserverEventCurrentItemChanged, EContactDbObserverEventOwnCardChanged, EContactDbObserverEventPreferredTemplateChanged, EContactDbObserverEventOwnCardDeleted, EContactDbObserverEventGroupAdded, EContactDbObserverEventGroupChanged, EContactDbObserverEventGroupDeleted, EContactDbObserverEventCurrentDatabaseChanged, EContactDbObserverEventSpeedDialsChanged EContactDbObserverEventSortOrderChanged, EContactDbObserverEventBackupBeginning, EContactDbObserverEventRestoreBeginning, EContactDbObserverEventBackupRestoreCompleted, EContactDbObserverEventRestoreBadDatabase, };
In order to make an application receive events about contact database
changes, the MContactDbObserver
base class must be inherited and cuHandleDatabaseEventL()
virtual function
must be implemented. The function is called by the system when a contact database
event occurs.
class CMyContactObserver : public CBase, public MContactDbObserver { public: // any public data and functions CMyContactObserver (); // override the virtual function from the base class virtual void HandleDatabaseEventL( TContactDbObserverEvent aEvent ); }; // handling contact database events void CMyContactObserver::HandleDatabaseEventL(TContactDbObserverEvent aEvent) { // Event handling code }
In addition, the application must create the CContactChangeNotifier
object to register itself to receive events.
CContactDatabase* contactDb = CContactDatabase::OpenL(); //iContactDbObserver is a CMyContactObserver pointer CContactChangeNotifier* notifier = CContactChangeNotifier::NewL(*contactDb, iContactDbObserver);