- QStringList _capsQueued; /// Capabilities to be checked
- bool _capNegotiationActive; /// Whether or not full capability negotiation was started
+ QStringList _capsQueuedIndividual; /// Capabilities to check that require one at a time requests
+ QStringList _capsQueuedBundled; /// Capabilities to check that can be grouped together
+ QStringList _capsQueuedLastBundle; /// Most recent capability bundle requested (no individuals)
+ // Some capabilities, such as SASL, require follow-up messages to be fully enabled. These
+ // capabilities should not be grouped with others to avoid requesting new capabilities while the
+ // previous capability is still being set up.
+ // Additionally, IRC servers can choose to send a 'NAK' to any set of requested capabilities.
+ // If this happens, we need a way to retry each capability individually in order to avoid having
+ // one failing capability (e.g. SASL) block all other capabilities.
+
+ bool _capNegotiationActive; /// Whether or not full capability negotiation was started