+ CallerIDExtInfo(Module* parent)
+ : ExtensionItem("callerid_data", ExtensionItem::EXT_USER, parent)
+ {
+ }
+
+ std::string ToHuman(const Extensible* container, void* item) const CXX11_OVERRIDE
+ {
+ callerid_data* dat = static_cast<callerid_data*>(item);
+ return dat->ToString(true);
+ }
+
+ std::string ToInternal(const Extensible* container, void* item) const CXX11_OVERRIDE
+ {
+ callerid_data* dat = static_cast<callerid_data*>(item);
+ return dat->ToString(false);
+ }
+
+ void FromInternal(Extensible* container, const std::string& value) CXX11_OVERRIDE
+ {
+ void* old = get_raw(container);
+ if (old)
+ this->free(NULL, old);
+ callerid_data* dat = new callerid_data;
+ set_raw(container, dat);
+
+ irc::commasepstream s(value);
+ std::string tok;
+ if (s.GetToken(tok))
+ dat->lastnotify = ConvToNum<time_t>(tok);
+
+ while (s.GetToken(tok))
+ {
+ User *u = ServerInstance->FindNick(tok);
+ if ((u) && (u->registered == REG_ALL) && (!u->quitting))
+ {
+ if (dat->accepting.insert(u).second)
+ {
+ callerid_data* other = this->get(u, true);
+ other->wholistsme.push_back(dat);
+ }
+ }
+ }
+ }
+
+ callerid_data* get(User* user, bool create)