From 5327becf41beda4487f077a3f0157f7013ec6f13 Mon Sep 17 00:00:00 2001 From: Adam Date: Fri, 7 Feb 2014 13:02:20 -0500 Subject: Allow other modules to be able to view and modify cs and ns set_misc data --- modules/commands/cs_set_misc.cpp | 55 +++++++++++++++++++++------------------- 1 file changed, 29 insertions(+), 26 deletions(-) (limited to 'modules/commands/cs_set_misc.cpp') diff --git a/modules/commands/cs_set_misc.cpp b/modules/commands/cs_set_misc.cpp index 6c3caa120..2c51b58b7 100644 --- a/modules/commands/cs_set_misc.cpp +++ b/modules/commands/cs_set_misc.cpp @@ -9,6 +9,7 @@ */ #include "module.h" +#include "modules/set_misc.h" static Module *me; @@ -16,25 +17,33 @@ static std::map descriptions; struct CSMiscData; static Anope::map *> items; -static ExtensibleItem *GetItem(const Anope::string &name); -struct CSMiscData : Serializable +static ExtensibleItem *GetItem(const Anope::string &name) anope_override { - Serialize::Reference ci; - Anope::string name; - Anope::string data; + ExtensibleItem* &it = items[name]; + if (!it) + try + { + it = new ExtensibleItem(me, name); + } + catch (const ModuleException &) { } + return it; +} - CSMiscData(Extensible *obj) : Serializable("CSMiscData"), ci(anope_dynamic_static_cast(obj)) - { - } +struct CSMiscData : MiscData, Serializable +{ + CSMiscData(Extensible *obj) : Serializable("CSMiscData") { } - CSMiscData(ChannelInfo *c, const Anope::string &n, const Anope::string &d) : Serializable("CSMiscData"), ci(c), name(n), data(d) + CSMiscData(ChannelInfo *c, const Anope::string &n, const Anope::string &d) : Serializable("CSMiscData") { + object = c->name; + name = n; + data = d; } void Serialize(Serialize::Data &sdata) const anope_override { - sdata["ci"] << this->ci->name; + sdata["ci"] << this->object; sdata["name"] << this->name; sdata["data"] << this->data; } @@ -55,7 +64,7 @@ struct CSMiscData : Serializable if (obj) { d = anope_dynamic_static_cast(obj); - d->ci = ci; + d->object = ci->name; data["name"] >> d->name; data["data"] >> d->data; } @@ -70,18 +79,6 @@ struct CSMiscData : Serializable } }; -static ExtensibleItem *GetItem(const Anope::string &name) -{ - ExtensibleItem* &it = items[name]; - if (!it) - try - { - it = new ExtensibleItem(me, name); - } - catch (const ModuleException &) { } - return it; -} - static Anope::string GetAttribute(const Anope::string &command) { size_t sp = command.rfind(' '); @@ -165,16 +162,22 @@ class CommandCSSetMisc : public Command class CSSetMisc : public Module { - Serialize::Type csmiscdata_type; CommandCSSetMisc commandcssetmisc; + Serialize::Type csmiscdata_type; public: CSSetMisc(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, VENDOR), - csmiscdata_type("CSMiscData", CSMiscData::Unserialize), commandcssetmisc(this) + commandcssetmisc(this), csmiscdata_type("CSMiscData", CSMiscData::Unserialize) { me = this; } + ~CSSetMisc() + { + for (Anope::map *>::iterator it = items.begin(); it != items.end(); ++it) + delete it->second; + } + void OnReload(Configuration::Conf *conf) anope_override { descriptions.clear(); @@ -201,7 +204,7 @@ class CSSetMisc : public Module for (Anope::map *>::iterator it = items.begin(); it != items.end(); ++it) { ExtensibleItem *e = it->second; - CSMiscData *data = e->Get(ci); + MiscData *data = e->Get(ci); if (data != NULL) info[e->name.substr(12).replace_all_cs("_", " ")] = data->data; -- cgit