X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fcommon%2Fnetwork.h;h=da2956913b9a5e64749568ba64d8a43766dbf655;hb=6fd69e84e6c395a108e6b2620c6428907b7d7efd;hp=addb1d5f42e11e6ff7001317ad8e816bcd848272;hpb=dba66762993507168b1a3de25cfd2d7bff0ff969;p=quassel.git diff --git a/src/common/network.h b/src/common/network.h index addb1d5f..da295691 100644 --- a/src/common/network.h +++ b/src/common/network.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2016 by the Quassel Project * + * Copyright (C) 2005-2018 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -180,11 +180,11 @@ public : QString prefixToMode(const QString &prefix) const; inline QString prefixToMode(const QCharRef &prefix) const { return prefixToMode(QString(prefix)); } inline QString prefixesToModes(const QString &prefix) const { - QString mode = ""; + QString modes; for (QChar c : prefix) { - mode += prefixToMode(c); + modes += prefixToMode(c); } - return mode; + return modes; } /**@}*/ @@ -196,11 +196,46 @@ public : QString modeToPrefix(const QString &mode) const; inline QString modeToPrefix(const QCharRef &mode) const { return modeToPrefix(QString(mode)); } inline QString modesToPrefixes(const QString &mode) const { - QString prefix = ""; + QString prefixes; for (QChar c : mode) { - prefix += modeToPrefix(c); + prefixes += modeToPrefix(c); } - return prefix; + return prefixes; + } + /**@}*/ + + /** + * Sorts the user channelmodes according to priority set by PREFIX + * + * Given a list of channel modes, sorts according to the order of PREFIX, putting the highest + * modes first. Any unknown modes are moved to the end in no given order. + * + * If prefix modes cannot be determined from the network, no changes will be made. + * + * @param modes User channelmodes + * @return Priority-sorted user channelmodes + */ + QString sortPrefixModes(const QString &modes) const; + + /**@{*/ + /** + * Sorts the list of users' channelmodes according to priority set by PREFIX + * + * Maintains order of the modes list. + * + * @seealso Network::sortPrefixModes() + * + * @param modesList List of users' channel modes + * @return Priority-sorted list of users' channel modes + */ + inline QStringList sortPrefixModes(const QStringList &modesList) const { + QStringList sortedModesList; + // Sort each individual mode string, appending back + // Must maintain the order received! + for (QString modes : modesList) { + sortedModesList << sortPrefixModes(modes); + } + return sortedModesList; } /**@}*/ @@ -295,7 +330,7 @@ public : * * These results aren't valid if the network is disconnected or capability negotiation hasn't * happened, and some servers might not correctly advertise capabilities. Don't treat this as - * a guarentee. + * a guarantee. * * @param[in] capability Name of capability * @returns True if connected and advertised by the server, otherwise false