X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fcoremods%2Fcore_channel%2Finvite.h;h=2a99ec2df805c1bb566263bcfa00620ba1131594;hb=dcd3438011d59aa4de4df64abf06bca1cbf36859;hp=f11ff9043d9bfceb46639c4138cfd4b65fdc232c;hpb=30fc51c6ddca487a1b89da9ab0ab59da003aee36;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/coremods/core_channel/invite.h b/src/coremods/core_channel/invite.h index f11ff9043..2a99ec2df 100644 --- a/src/coremods/core_channel/invite.h +++ b/src/coremods/core_channel/invite.h @@ -40,6 +40,7 @@ namespace Invite } extern void RemoveInvite(Invite::Invite* inv, bool remove_user, bool remove_chan); +extern void UnserializeInvite(LocalUser* user, const std::string& value); template class Invite::ExtItem : public ExtensionItem @@ -84,11 +85,25 @@ class Invite::ExtItem : public ExtensionItem std::string serialize(SerializeFormat format, const Extensible* container, void* item) const CXX11_OVERRIDE { - return std::string(); + if (format == FORMAT_NETWORK) + return std::string(); + + std::string ret; + Store* store = static_cast*>(item); + for (typename insp::intrusive_list::iterator i = store->invites.begin(); i != store->invites.end(); ++i) + { + Invite* inv = *i; + inv->Serialize(format, (ExtType == ExtensionItem::EXT_USER), ret); + } + if (!ret.empty()) + ret.erase(ret.length()-1); + return ret; } void unserialize(SerializeFormat format, Extensible* container, const std::string& value) CXX11_OVERRIDE { + if ((ExtType != ExtensionItem::EXT_CHANNEL) && (format != FORMAT_NETWORK)) + UnserializeInvite(static_cast(container), value); } }; @@ -108,4 +123,5 @@ class Invite::APIImpl : public APIBase void RemoveAll(LocalUser* user) { userext.unset(user); } void RemoveAll(Channel* chan) { chanext.unset(chan); } void Destruct(Invite* inv, bool remove_chan = true, bool remove_user = true); + void Unserialize(LocalUser* user, const std::string& value); };