From 8bdc2313a66bc200e7067e01159367f48571fef9 Mon Sep 17 00:00:00 2001 From: Attila Molnar Date: Fri, 14 Feb 2014 12:16:31 +0100 Subject: [PATCH] Move GetAllPrefixChars() from Channel to Membership --- include/channels.h | 8 -------- include/membership.h | 7 +++++++ src/channels.cpp | 14 +++++--------- src/modules/m_check.cpp | 2 +- src/modules/m_deaf.cpp | 2 +- src/modules/m_httpd_stats.cpp | 2 +- src/modules/m_namesx.cpp | 4 ++-- 7 files changed, 17 insertions(+), 22 deletions(-) diff --git a/include/channels.h b/include/channels.h index daf8be9e2..9b018b23e 100644 --- a/include/channels.h +++ b/include/channels.h @@ -304,14 +304,6 @@ class CoreExport Channel : public Extensible, public InviteBase */ void UserList(User *user); - /** Return all of a users mode prefixes into a char* string. - * @param user The user to look up - * @return A list of all prefix characters. The prefixes will always - * be in rank order, greatest first, as certain IRC clients require - * this when multiple prefixes are used names lists. - */ - const char* GetAllPrefixChars(User* user); - /** Get the value of a users prefix on this channel. * @param user The user to look up * @return The module or core-defined value of the users prefix. diff --git a/include/membership.h b/include/membership.h index c6b0bf14a..44eaf1eb6 100644 --- a/include/membership.h +++ b/include/membership.h @@ -52,6 +52,13 @@ class CoreExport Membership : public Extensible, public intrusive_list_node diff --git a/src/channels.cpp b/src/channels.cpp index c47bcb119..a8f8db43c 100644 --- a/src/channels.cpp +++ b/src/channels.cpp @@ -756,20 +756,16 @@ unsigned int Membership::getRank() return rv; } -const char* Channel::GetAllPrefixChars(User* user) +const char* Membership::GetAllPrefixChars() const { static char prefix[64]; int ctr = 0; - UserMembIter m = userlist.find(user); - if (m != userlist.end()) + for (std::string::const_iterator i = modes.begin(); i != modes.end(); ++i) { - for(unsigned int i=0; i < m->second->modes.length(); i++) - { - PrefixMode* mh = ServerInstance->Modes->FindPrefixMode(m->second->modes[i]); - if (mh && mh->GetPrefix()) - prefix[ctr++] = mh->GetPrefix(); - } + PrefixMode* mh = ServerInstance->Modes->FindPrefixMode(*i); + if (mh && mh->GetPrefix()) + prefix[ctr++] = mh->GetPrefix(); } prefix[ctr] = 0; diff --git a/src/modules/m_check.cpp b/src/modules/m_check.cpp index 1fa7aa3e2..ba20f9445 100644 --- a/src/modules/m_check.cpp +++ b/src/modules/m_check.cpp @@ -232,7 +232,7 @@ class CommandCheck : public Command */ user->SendText("%s member %-3lu %s%s (%s@%s) %s ", checkstr.c_str(), ServerInstance->Users->GlobalCloneCount(i->first), - targchan->GetAllPrefixChars(i->first), i->first->nick.c_str(), + i->second->GetAllPrefixChars(), i->first->nick.c_str(), i->first->ident.c_str(), i->first->dhost.c_str(), i->first->fullname.c_str()); } diff --git a/src/modules/m_deaf.cpp b/src/modules/m_deaf.cpp index ce6571b8c..9800b32a9 100644 --- a/src/modules/m_deaf.cpp +++ b/src/modules/m_deaf.cpp @@ -94,7 +94,7 @@ class ModuleDeaf : public Module if (is_bypasschar && !is_a_uline) continue; /* deliver message */ - if (status && !strchr(chan->GetAllPrefixChars(i->first), status)) + if (status && !strchr(i->second->GetAllPrefixChars(), status)) continue; /* don't deliver message! */ diff --git a/src/modules/m_httpd_stats.cpp b/src/modules/m_httpd_stats.cpp index 065ba0bce..8a90074a9 100644 --- a/src/modules/m_httpd_stats.cpp +++ b/src/modules/m_httpd_stats.cpp @@ -168,7 +168,7 @@ class ModuleHttpStats : public Module { Membership* memb = x->second; data << "" << memb->user->uuid << "" - << Sanitize(c->GetAllPrefixChars(x->first)) << "" + << Sanitize(memb->GetAllPrefixChars()) << "" << memb->modes << ""; DumpMeta(data, memb); data << ""; diff --git a/src/modules/m_namesx.cpp b/src/modules/m_namesx.cpp index 820963d5b..4dc5ff468 100644 --- a/src/modules/m_namesx.cpp +++ b/src/modules/m_namesx.cpp @@ -68,7 +68,7 @@ class ModuleNamesX : public Module if (nick.empty()) return; - prefixes = memb->chan->GetAllPrefixChars(memb->user); + prefixes = memb->GetAllPrefixChars(); } void OnSendWhoLine(User* source, const std::vector& params, User* user, Membership* memb, std::string& line) CXX11_OVERRIDE @@ -91,7 +91,7 @@ class ModuleNamesX : public Module // pos // Don't do anything if the user has only one prefix - std::string prefixes = memb->chan->GetAllPrefixChars(memb->user); + std::string prefixes = memb->GetAllPrefixChars(); if (prefixes.length() <= 1) return;