#include "atheme.h" #include "account/chanacs.h" #include "account/mychan.h" #include "account/mymemo.h" #include "account/mynick.h" #include "account/myuser.h" #include "account/metadata.h" /******************* * M E T A D A T A * *******************/ has_metadata::callbacks has_metadata::callback; metadata * has_metadata::add_metadata (char const * const name, char const * const value) { bool is_private = false; callback.metadata_change (*this, name, value); if (mdmap.find (name) != mdmap.end ()) { metadata *md = mdmap[name]; free (md->key); free (md->value); md->key = sstrdup (name); md->value = sstrdup (value); return mdmap[name]; } if (!strncmp ("private:", name, 8)) is_private = true; return mdmap[name] = new metadata (name, value, is_private); } bool has_metadata::del_metadata (char const * const name) { metadata *md; callback.metadata_change (*this, name, NULL); if ((md = find_metadata (name)) != NULL) { delete md; mdmap.erase (name); return true; } return false; } metadata * has_metadata::find_metadata (char const * const name) { metadata_map::iterator mdit; if ((mdit = mdmap.find (name)) != mdmap.end ()) return mdit->second; return NULL; } void has_metadata::clear_metadata (void) { metadata_map::iterator it, it_end = mdmap.end (); for (it = mdmap.begin (); it != it_end; ++it) { callback.metadata_change (*this, it->second->key, NULL); delete it->second; } mdmap.clear (); }