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:
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,
};
To receive events on contact database changes, the application
must derive MContactDbObserver base class and implement MContactDbObserver::HandleDatabaseEventL() virtual function.
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 );