From a0747516ce76dda57d4e6bf66af7376784741257 Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 1 Mar 2014 21:20:18 -0500 Subject: Export interface for cs_entrymsg --- modules/commands/cs_entrymsg.cpp | 59 +++++++++++++++++++++------------------- 1 file changed, 31 insertions(+), 28 deletions(-) (limited to 'modules/commands/cs_entrymsg.cpp') diff --git a/modules/commands/cs_entrymsg.cpp b/modules/commands/cs_entrymsg.cpp index 53ba65704..4eec3e07d 100644 --- a/modules/commands/cs_entrymsg.cpp +++ b/modules/commands/cs_entrymsg.cpp @@ -10,27 +10,27 @@ */ #include "module.h" +#include "modules/cs_entrymsg.h" -struct EntryMsg : Serializable +struct EntryMsgImpl : EntryMsg, Serializable { - Serialize::Reference ci; - Anope::string creator; - Anope::string message; - time_t when; + EntryMsgImpl() : Serializable("EntryMsg") + { + } - EntryMsg(ChannelInfo *c, const Anope::string &cname, const Anope::string &cmessage, time_t ct = Anope::CurTime) : Serializable("EntryMsg") + EntryMsgImpl(ChannelInfo *c, const Anope::string &cname, const Anope::string &cmessage, time_t ct = Anope::CurTime) : Serializable("EntryMsg") { - this->ci = c; + this->chan = c->name; this->creator = cname; this->message = cmessage; this->when = ct; } - ~EntryMsg(); + ~EntryMsgImpl(); void Serialize(Serialize::Data &data) const anope_override { - data["ci"] << this->ci->name; + data["ci"] << this->chan; data["creator"] << this->creator; data["message"] << this->message; data.SetType("when", Serialize::Data::DT_INT); data["when"] << this->when; @@ -39,30 +39,33 @@ struct EntryMsg : Serializable static Serializable* Unserialize(Serializable *obj, Serialize::Data &data); }; -struct EntryMessageList : Serialize::Checker > +struct EntryMessageListImpl : EntryMessageList { - EntryMessageList(Extensible *) : Serialize::Checker >("EntryMsg") { } + EntryMessageListImpl(Extensible *) { } - ~EntryMessageList() + EntryMsg* Create() anope_override { - for (unsigned i = (*this)->size(); i > 0; --i) - delete (*this)->at(i - 1); + return new EntryMsgImpl(); } }; -EntryMsg::~EntryMsg() +EntryMsgImpl::~EntryMsgImpl() { + ChannelInfo *ci = ChannelInfo::Find(this->chan); + if (!ci) + return; + EntryMessageList *messages = ci->GetExt("entrymsg"); - if (messages) - { - std::vector::iterator it = std::find((*messages)->begin(), (*messages)->end(), this); - if (it != (*messages)->end()) - (*messages)->erase(it); - } + if (!messages) + return; + + std::vector::iterator it = std::find((*messages)->begin(), (*messages)->end(), this); + if (it != (*messages)->end()) + (*messages)->erase(it); } -Serializable* EntryMsg::Unserialize(Serializable *obj, Serialize::Data &data) +Serializable* EntryMsgImpl::Unserialize(Serializable *obj, Serialize::Data &data) { Anope::string sci, screator, smessage; time_t swhen; @@ -77,8 +80,8 @@ Serializable* EntryMsg::Unserialize(Serializable *obj, Serialize::Data &data) if (obj) { - EntryMsg *msg = anope_dynamic_static_cast(obj); - msg->ci = ci; + EntryMsgImpl *msg = anope_dynamic_static_cast(obj); + msg->chan = ci->name; data["creator"] >> msg->creator; data["message"] >> msg->message; data["when"] >> msg->when; @@ -89,7 +92,7 @@ Serializable* EntryMsg::Unserialize(Serializable *obj, Serialize::Data &data) data["when"] >> swhen; - EntryMsg *m = new EntryMsg(ci, screator, smessage, swhen); + EntryMsgImpl *m = new EntryMsgImpl(ci, screator, smessage, swhen); (*messages)->push_back(m); return m; } @@ -139,7 +142,7 @@ class CommandEntryMessage : public Command source.Reply(_("The entry message list for \002%s\002 is full."), ci->name.c_str()); else { - (*messages)->push_back(new EntryMsg(ci, source.GetNick(), message)); + (*messages)->push_back(new EntryMsgImpl(ci, source.GetNick(), message)); Log(source.IsFounder(ci) ? LOG_COMMAND : LOG_OVERRIDE, source, this, ci) << "to add a message"; source.Reply(_("Entry message added to \002%s\002"), ci->name.c_str()); } @@ -257,13 +260,13 @@ class CommandEntryMessage : public Command class CSEntryMessage : public Module { CommandEntryMessage commandentrymsg; - ExtensibleItem eml; + ExtensibleItem eml; Serialize::Type entrymsg_type; public: CSEntryMessage(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, VENDOR), commandentrymsg(this), - eml(this, "entrymsg"), entrymsg_type("EntryMsg", EntryMsg::Unserialize) + eml(this, "entrymsg"), entrymsg_type("EntryMsg", EntryMsgImpl::Unserialize) { } -- cgit