Do not send two 792 numerics when changing a metadata from one non-empty value to another.

This commit is contained in:
Jilles Tjoelker 2009-06-03 20:44:37 +02:00
parent f62bb0776a
commit 104fea6cda
1 changed files with 12 additions and 5 deletions

View File

@ -1747,14 +1747,21 @@ set_metadata(struct Client *client_p, const char *key, const char *value)
{ {
struct MetadataEntry *md; struct MetadataEntry *md;
delete_metadata(client_p, key);
if(client_p->user != NULL) if(client_p->user != NULL)
{ {
md = rb_bh_alloc(metadata_heap); md = irc_dictionary_retrieve(client_p->user->metadata, key);
rb_strlcpy(md->key, key, NICKLEN); if (md == NULL)
rb_strlcpy(md->value, value, TOPICLEN); {
md = rb_bh_alloc(metadata_heap);
rb_strlcpy(md->key, key, NICKLEN);
irc_dictionary_add(client_p->user->metadata, md->key, md);
}
else if (!strcmp(md->key, key) && !strcmp(md->value, value))
return;
else
rb_strlcpy(md->key, key, NICKLEN);
irc_dictionary_add(client_p->user->metadata, md->key, md); rb_strlcpy(md->value, value, TOPICLEN);
} }
sendto_common_channels_local_with_capability(client_p, CLICAP_PRESENCE, form_str(RPL_METADATACHG), me.name, client_p->name, key, value); sendto_common_channels_local_with_capability(client_p, CLICAP_PRESENCE, form_str(RPL_METADATACHG), me.name, client_p->name, key, value);