diff options
author | Adam <Adam@anope.org> | 2012-05-20 03:57:22 -0400 |
---|---|---|
committer | Adam <Adam@anope.org> | 2012-05-20 03:57:22 -0400 |
commit | 699087b2bf6d47a871285b7442526a0dfd156d20 (patch) | |
tree | d8daf8876ed5c4224a25ad0a02a6eb35fe0f02ad | |
parent | ccd29085a982651ba344339af2729928973e6b4d (diff) |
Fixed cs_entrymsg loading entries from the database
-rw-r--r-- | modules/commands/cs_entrymsg.cpp | 43 |
1 files changed, 28 insertions, 15 deletions
diff --git a/modules/commands/cs_entrymsg.cpp b/modules/commands/cs_entrymsg.cpp index 3be4d53c7..6ae59862f 100644 --- a/modules/commands/cs_entrymsg.cpp +++ b/modules/commands/cs_entrymsg.cpp @@ -51,8 +51,9 @@ struct EntryMsg : Serializable static unsigned MaxEntries = 0; -struct EntryMessageList : std::vector<EntryMsg>, ExtensibleItem +struct EntryMessageList : serialize_checker<std::vector<EntryMsg> >, ExtensibleItem { + EntryMessageList() : serialize_checker<std::vector<EntryMsg> >("EntryMsg") { } }; Serializable* EntryMsg::unserialize(Serializable *obj, Serialize::Data &data) @@ -78,8 +79,8 @@ Serializable* EntryMsg::unserialize(Serializable *obj, Serialize::Data &data) ci->Extend("cs_entrymsg", messages); } - messages->push_back(EntryMsg(ci, data["creator"].astr(), data["message"].astr())); - return &messages->back(); + (*messages)->push_back(EntryMsg(ci, data["creator"].astr(), data["message"].astr())); + return &(*messages)->back(); } class CommandEntryMessage : public Command @@ -90,6 +91,12 @@ class CommandEntryMessage : public Command EntryMessageList *messages = ci->GetExt<EntryMessageList *>("cs_entrymsg"); if (messages == NULL) { + messages = new EntryMessageList(); + ci->Extend("cs_entrymsg", messages); + } + + if ((*messages)->empty()) + { source.Reply(_("Entry message list for \002%s\002 is empty."), ci->name.c_str()); return; } @@ -98,9 +105,9 @@ class CommandEntryMessage : public Command ListFormatter list; list.addColumn("Number").addColumn("Creator").addColumn("Created").addColumn("Message"); - for (unsigned i = 0; i < messages->size(); ++i) + for (unsigned i = 0; i < (*messages)->size(); ++i) { - EntryMsg &msg = messages->at(i); + EntryMsg &msg = (*messages)->at(i); ListFormatter::ListEntry entry; entry["Number"] = stringify(i + 1); @@ -127,11 +134,11 @@ class CommandEntryMessage : public Command ci->Extend("cs_entrymsg", messages); } - if (MaxEntries && messages->size() >= MaxEntries) + if (MaxEntries && (*messages)->size() >= MaxEntries) source.Reply(_("The entry message list for \002%s\002 is full."), ci->name.c_str()); else { - messages->push_back(EntryMsg(ci, source.u->nick, message)); + (*messages)->push_back(EntryMsg(ci, source.u->nick, message)); source.Reply(_("Entry message added to \002%s\002"), ci->name.c_str()); } } @@ -139,17 +146,25 @@ class CommandEntryMessage : public Command void DoDel(CommandSource &source, ChannelInfo *ci, const Anope::string &message) { EntryMessageList *messages = ci->GetExt<EntryMessageList *>("cs_entrymsg"); + if (messages == NULL) + { + messages = new EntryMessageList(); + ci->Extend("cs_entrymsg", messages); + } + if (!message.is_pos_number_only()) source.Reply(("Entry message \002%s\002 not found on channel \002%s\002."), message.c_str(), ci->name.c_str()); - else if (messages != NULL) + else if ((*messages)->empty()) + source.Reply(_("Entry message list for \002%s\002 is empty."), ci->name.c_str()); + else { try { unsigned i = convertTo<unsigned>(message); - if (i > 0 && i <= messages->size()) + if (i > 0 && i <= (*messages)->size()) { - messages->erase(messages->begin() + i - 1); - if (messages->empty()) + (*messages)->erase((*messages)->begin() + i - 1); + if ((*messages)->empty()) ci->Shrink("cs_entrymsg"); source.Reply(_("Entry message \002%i\002 for \002%s\002 deleted."), i, ci->name.c_str()); } @@ -161,8 +176,6 @@ class CommandEntryMessage : public Command source.Reply(_("Entry message \002%s\002 not found on channel \002%s\002."), message.c_str(), ci->name.c_str()); } } - else - source.Reply(_("Entry message list for \002%s\002 is empty."), ci->name.c_str()); } void DoClear(CommandSource &source, ChannelInfo *ci) @@ -251,8 +264,8 @@ class CSEntryMessage : public Module EntryMessageList *messages = c->ci->GetExt<EntryMessageList *>("cs_entrymsg"); if (messages != NULL) - for (unsigned i = 0; i < messages->size(); ++i) - u->SendMessage(c->ci->WhoSends(), "[%s] %s", c->ci->name.c_str(), (*messages)[i].message.c_str()); + for (unsigned i = 0; i < (*messages)->size(); ++i) + u->SendMessage(c->ci->WhoSends(), "[%s] %s", c->ci->name.c_str(), (*messages)->at(i).message.c_str()); } } |