gboolean mu_contacts_add (MuContacts *self, const char *email, const char* name, time_t tstamp) { ContactInfo *cinfo; const char* group; g_return_val_if_fail (self, FALSE); g_return_val_if_fail (email, FALSE); /* add the info, if either there is no info for this email * yet, *OR* the new one is more recent and does not have an * empty name */ group = encode_email_address (email); cinfo = (ContactInfo*) g_hash_table_lookup (self->_hash, group); if (!cinfo || (cinfo->_tstamp < tstamp && !mu_str_is_empty(name))) { ContactInfo *ci; ci = contact_info_new (g_strdup(email), name ? g_strdup(name) : NULL, tstamp); g_hash_table_insert (self->_hash, g_strdup(group), ci); return self->_dirty = TRUE; } return FALSE; }
gboolean mu_contacts_add (MuContacts *self, const char *addr, const char *name, gboolean personal, time_t tstamp) { ContactInfo *cinfo; const char *group; g_return_val_if_fail (self, FALSE); g_return_val_if_fail (addr, FALSE); group = encode_email_address (addr); cinfo = (ContactInfo*) g_hash_table_lookup (self->_hash, group); if (!cinfo) { char *addr_dc; if (!(addr_dc = downcase_domain_maybe (addr))) return FALSE; cinfo = contact_info_new (addr_dc, name ? g_strdup(name) : NULL, personal, tstamp, 1); g_hash_table_insert (self->_hash, g_strdup(group), cinfo); } else { if (cinfo->_tstamp < tstamp) { if (!mu_str_is_empty(name)) { /* update the name to the last one used, unless it's * empty*/ g_free (cinfo->_name); cinfo->_name = g_strdup (name); if (cinfo->_name) mu_str_remove_ctrl_in_place (cinfo->_name); } cinfo->_tstamp = tstamp; } ++cinfo->_freq; } self->_dirty = TRUE; return TRUE; }