X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Fu_listmode.h;h=4b8ffe9e07f6d0685141b016a3e6d81cc473bd81;hb=01c23b31f7d0ea87052cd22814af826ecb11f0f3;hp=773ca421f3d30c6fbc9e835d68124b75172a82a6;hpb=3d8ec5dbd9cfde34fcbc63ad7b9b1369866f0a33;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/u_listmode.h b/include/u_listmode.h index 773ca421f..4b8ffe9e0 100644 --- a/include/u_listmode.h +++ b/include/u_listmode.h @@ -107,9 +107,6 @@ class ListModeRequest : public Request class ListModeBase : public ModeHandler { protected: - /** Storage key - */ - std::string infokey; /** Numeric to use when outputting the list */ unsigned int listnumeric; @@ -131,6 +128,10 @@ class ListModeBase : public ModeHandler limitlist chanlimits; public: + /** Storage key + */ + SimpleExtItem extItem; + /** Constructor. * @param Instance The creator of this class * @param modechar Mode character @@ -141,18 +142,20 @@ class ListModeBase : public ModeHandler * @param ctag Configuration tag to get limits from */ ListModeBase(InspIRCd* Instance, Module* Creator, char modechar, const std::string &eolstr, unsigned int lnum, unsigned int eolnum, bool autotidy, const std::string &ctag = "banlist") - : ModeHandler(Instance, Creator, modechar, 1, 1, true, MODETYPE_CHANNEL, false), listnumeric(lnum), endoflistnumeric(eolnum), endofliststring(eolstr), tidy(autotidy), configtag(ctag) + : ModeHandler(Creator, modechar, PARAM_ALWAYS, MODETYPE_CHANNEL), + listnumeric(lnum), endoflistnumeric(eolnum), endofliststring(eolstr), tidy(autotidy), + configtag(ctag), extItem("listbase_mode_" + std::string(1, mode) + "_list", Creator) { + list = true; this->DoRehash(); - infokey = "listbase_mode_" + std::string(1, mode) + "_list"; + Extensible::Register(&extItem); } /** See mode.h */ std::pair ModeSet(User*, User*, Channel* channel, const std::string ¶meter) { - modelist* el; - channel->GetExt(infokey, el); + modelist* el = extItem.get(channel); if (el) { for (modelist::iterator it = el->begin(); it != el->end(); it++) @@ -172,8 +175,7 @@ class ListModeBase : public ModeHandler */ virtual void DisplayList(User* user, Channel* channel) { - modelist* el; - channel->GetExt(infokey, el); + modelist* el = extItem.get(channel); if (el) { for (modelist::reverse_iterator it = el->rbegin(); it != el->rend(); ++it) @@ -195,8 +197,7 @@ class ListModeBase : public ModeHandler */ virtual void RemoveMode(Channel* channel, irc::modestacker* stack) { - modelist* el; - channel->GetExt(infokey, el); + modelist* el = extItem.get(channel); if (el) { irc::modestacker modestack(ServerInstance, false); @@ -271,8 +272,7 @@ class ListModeBase : public ModeHandler virtual ModeAction OnModeChange(User* source, User*, Channel* channel, std::string ¶meter, bool adding) { // Try and grab the list - modelist* el; - channel->GetExt(infokey, el); + modelist* el = extItem.get(channel); if (adding) { @@ -281,7 +281,7 @@ class ListModeBase : public ModeHandler { // Make one el = new modelist; - channel->Extend(infokey, el); + extItem.set(channel, el); } // Clean the mask up @@ -362,8 +362,7 @@ class ListModeBase : public ModeHandler el->erase(it); if (el->size() == 0) { - channel->Shrink(infokey); - delete el; + extItem.unset(channel); } return MODEACTION_ALLOW; } @@ -384,29 +383,6 @@ class ListModeBase : public ModeHandler return MODEACTION_DENY; } - /** Get Extensible key for this mode - */ - virtual std::string& GetInfoKey() - { - return infokey; - } - - /** Handle channel deletion. - * See modules.h. - * @param chan Channel being deleted - */ - virtual void DoChannelDelete(Channel* chan) - { - modelist* mlist; - chan->GetExt(infokey, mlist); - - if (mlist) - { - chan->Shrink(infokey); - delete mlist; - } - } - /** Syncronize channel item list with another server. * See modules.h * @param chan Channel to syncronize @@ -415,8 +391,7 @@ class ListModeBase : public ModeHandler */ virtual void DoSyncChannel(Channel* chan, Module* proto, void* opaque) { - modelist* mlist; - chan->GetExt(infokey, mlist); + modelist* mlist = extItem.get(chan); irc::modestacker modestack(ServerInstance, true); std::vector stackresult; std::vector types; @@ -493,8 +468,7 @@ class ListModeBase : public ModeHandler ListModeRequest* LM = (ListModeRequest*)request; if (strcmp("LM_CHECKLIST", request->GetId()) == 0) { - modelist* mlist; - LM->chan->GetExt(GetInfoKey(), mlist); + modelist* mlist = extItem.get(LM->chan); if (mlist) { std::string mask = LM->user->nick + "!" + LM->user->ident + "@" + LM->user->GetIPString(); @@ -508,8 +482,7 @@ class ListModeBase : public ModeHandler } else if (strcmp("LM_CHECKLIST_EX", request->GetId()) == 0) { - modelist* mlist; - LM->chan->GetExt(GetInfoKey(), mlist); + modelist* mlist = extItem.get(LM->chan); if (mlist) {