diff options
author | Adam <Adam@anope.org> | 2012-04-23 05:08:26 -0400 |
---|---|---|
committer | Adam <Adam@anope.org> | 2012-04-23 05:08:26 -0400 |
commit | 573e49a7ead331219eb6f0d3ca9cf83e793a5c9c (patch) | |
tree | e145e04fa3d041cf92ce46da4ac790b63231059c /modules/commands/ns_suspend.cpp | |
parent | 63c639e108a00d7dbb0d7ac9891684fc83a3b207 (diff) |
Reworked live SQL support yet again
Diffstat (limited to 'modules/commands/ns_suspend.cpp')
-rw-r--r-- | modules/commands/ns_suspend.cpp | 45 |
1 files changed, 27 insertions, 18 deletions
diff --git a/modules/commands/ns_suspend.cpp b/modules/commands/ns_suspend.cpp index 40989c84c..dd20e47b8 100644 --- a/modules/commands/ns_suspend.cpp +++ b/modules/commands/ns_suspend.cpp @@ -22,14 +22,14 @@ struct NickSuspend : ExtensibleItem, Serializable { } - Anope::string serialize_name() const + const Anope::string serialize_name() const { return "NickSuspend"; } - serialized_data serialize() anope_override + Serialize::Data serialize() const anope_override { - serialized_data sd; + Serialize::Data sd; sd["nick"] << this->nick; sd["when"] << this->when; @@ -37,18 +37,25 @@ struct NickSuspend : ExtensibleItem, Serializable return sd; } - static void unserialize(serialized_data &sd) + static Serializable* unserialize(Serializable *obj, Serialize::Data &sd) { - NickAlias *na = findnick(sd["nick"].astr()); + const NickAlias *na = findnick(sd["nick"].astr()); if (na == NULL) - return; + return NULL; - NickSuspend *ns = new NickSuspend(); + NickSuspend *ns; + if (obj) + ns = debug_cast<NickSuspend *>(obj); + else + ns = new NickSuspend(); sd["nick"] >> ns->nick; sd["when"] >> ns->when; - na->nc->Extend("ns_suspend_expire", ns); + if (!obj) + na->nc->Extend("ns_suspend_expire", ns); + + return ns; } }; @@ -98,17 +105,19 @@ class CommandNSSuspend : public Command return; } - na->nc->SetFlag(NI_SUSPENDED); - na->nc->SetFlag(NI_SECURE); - na->nc->UnsetFlag(NI_KILLPROTECT); - na->nc->UnsetFlag(NI_KILL_QUICK); - na->nc->UnsetFlag(NI_KILL_IMMED); + NickCore *nc = na->nc; + + nc->SetFlag(NI_SUSPENDED); + nc->SetFlag(NI_SECURE); + nc->UnsetFlag(NI_KILLPROTECT); + nc->UnsetFlag(NI_KILL_QUICK); + nc->UnsetFlag(NI_KILL_IMMED); - for (std::list<NickAlias *>::iterator it = na->nc->aliases.begin(), it_end = na->nc->aliases.end(); it != it_end; ++it) + for (std::list<serialize_obj<NickAlias> >::iterator it = nc->aliases.begin(), it_end = nc->aliases.end(); it != it_end;) { - NickAlias *na2 = *it; + NickAlias *na2 = *it++; - if (na2->nc == na->nc) + if (na2 && *na2->nc == *na->nc) { na2->last_quit = reason; @@ -127,7 +136,7 @@ class CommandNSSuspend : public Command ns->nick = na->nick; ns->when = Anope::CurTime + expiry_secs; - na->nc->Extend("ns_suspend_expire", ns); + nc->Extend("ns_suspend_expire", ns); } Log(LOG_ADMIN, u, this) << "for " << nick << " (" << (!reason.empty() ? reason : "No reason") << "), expires in " << (expiry_secs ? do_strftime(Anope::CurTime + expiry_secs) : "never"); @@ -221,7 +230,7 @@ class NSSuspend : public Module ~NSSuspend() { - for (nickcore_map::const_iterator it = NickCoreList.begin(), it_end = NickCoreList.end(); it != it_end; ++it) + for (nickcore_map::const_iterator it = NickCoreList->begin(), it_end = NickCoreList->end(); it != it_end; ++it) it->second->Shrink("ns_suspend_expire"); } |