src: Yearly copyright bump This time on time!
client: Group SASL EXTERNAL under SASL, test cap Move the "SASL EXTERNAL" notice into the "Use SASL Authentication" group box. This makes it more clear that "SASL EXTERNAL" is only used when SASL is enabled. Change the SASL IRCv3 capability check to look for SASL PLAIN for username/password authentication, and SASL EXTERNAL for SSL certificate authentication. Update the Details... dialog box info to match. This should hopefully address some confusion about when SASL is actually in use, versus things like NickServ certificate fingerprint sign-in. Change the wording for SASL EXTERNAL from "Supported by network" to "May be supported by network", as SASL v3.1 does not provide in the capability negotiation message which SASL variants are supported. SASL EXTERNAL seems less common than SASL PLAIN.
settings: Add Features tab to Network for skipCaps Add new "Features" tab to the Network settings page, allowing configuring which IRCv3 capabilities to skip during negotiation. This initial list is empty; individual IRCv3 capabilities will be added in future commits. When the core doesn't support skipping capabilities, show an upgrade warning banner at the top. When skipping capabilities is supported, show an info banner noting that the network must support these features. The details button tries to explain IRCv3 capabilities and shows the currently enabled features. Add an "Advanced..." button which directly configures the "skipCaps" list as a space-separated list of IRCv3 capabilities. This provides an escape hatch in case misbehaving servers are found or if Quassel's implementation of an IRCv3 feature is faulty. It also allows older clients (with this change) to clear the capability skip list set by newer clients. A "Defaults" button makes it clear how to restore the list to Quassel's normal behavior. Clean up the settings page UI, including fixing the Commands tab "perform" list of commands to fill the available space.
client: Switch infobar dialog-* icons to emblem-* Switch the icons representing whether a feature is supported or not from the "dialog-*" set of icons, which can be hard to distinguish at small sizes, to the "emblem-*" set of icons, which are much more distinguishable, and actually designed as emblems. This means older icon sets such as Ubuntu's Humanity will no longer have a custom icon available, but the Breeze icons aren't too far out of place. Oxygen does not provide these icons, so include a fallback to the previous icon names.
ssl: Remove fallback code for missing SSL support
src: Yearly copyright bump Let's welcome 2020.
src: Yearly copyright bump ... and it's still January!
modernize: Reformat ALL the source... again! It's been more than six years since we last used an autoformatter on the codebase. Tooling has progressed, so has the language and of course our personal preferences. Use clang-format this time to reformat the whole codebase, following the rules laid out in .clang-format (which one can use for configuring an IDE, too, if it supports autoformatting). Overall, the new style is not too different from what we used before, with one significant change: We now attach pointer/reference indicators (*&) to the type rather than the name, i.e. we left-align. While this is a major deviation from the Qt style which we use for almost everything else, it aligns more closely with many other projects, as well as the C++ documentation and STL. It also makes more sense semantically, because */& are really part of the type. Other changes include (but are not limited to): - Use only one blank line between function definitions - Categorize includes from generic/system to local, sorting each category alphabetically. The generic-to-local sort order seems to be more common than the other way round, so we use that. - In .cpp files, the corresponding header is always included first. This is a general recommendation, because it makes it harder to accidentally introduce a reliance on transitive includes in headers. - Consistently break initializers in ctors before the comma, so the commas are left-aligned together with the colon. - Use two spaces between code and trailing comments. Note that sometimes even clang-format gets things wrong. In a few places, formatting was manually fixed; however, reviewing a diff of almost 80k lines is a rather boring task, so we didn't thoroughly go through all the changes. Wrong formatting can always be fixed in follow-up commits, anyway. Note also that we don't intend to re-run clang-format on a regular basis, nor do we want to religiously follow a hardcoded set of rules for new code in the future. Where it makes sense, the rules may be bent in favor of better readability or more pleasing code.
uisupport: Provide helpers for dealing with widget changes In many places, we want to connect to a widget's changed signal, i.e. a signal that is emitted whenever the widget changes. This requires a great deal of boilerplate especially in settingspages, since the signal to listen to varies between widget types. Provide helpers that automate most of this by matching the given widget against a static list of supported widgets' changed signals, and connecting automatically. A sprinkle of template magic makes it very easy to support a bunch of different widget types in a generic way. Make use of this feature to get rid of the remaining old-style connects in SettingsPage. Also migrate a couple of specific settingspages as proof-of-concept and API validation; others can follow over time.
modernize: Prefer default member init over ctor init Where appropriate, initialize class members in the header rather than in the constructor.
modernize: Pass arguments by value and move in constructors If a method (or constructor) wants to store an argument in a local variable or attribute, one should prefer passing it in by value and moving it into the final location, rather than taking a const reference and copying it over. In the best case, this saves one copy, if the method is called with an rvalue. This pattern is most frequent in constructors initializing class members, so let clang-tidy fix this for argument types that have move constructors.
modernize: Use override instead of virtual Let clang-tidy fix all occurrences where override should be used instead of virtual. Also, let it annotate member functions where virtual was missing in the first place.
modernize: Use nullptr Let clang-tidy fix all occurrences where nullptr should be used instead of 0.
settings: Reset Network SASL status on load Explicitly reset IRCv3 capability-based network settings whenever loading network IDs. This should help guard against situations where setNetworkCapStates() does not get called with a NetworkId when loading, resulting in the template text being left visible.
Add a Configure menu item to Networks in the buffer list Add 'Configure' above 'Disconnect' in the right-click menu from a network in the buffer list. Clicking 'Configure' will open the Configure Networks dialog to the selected network. Fixes #607
Semi-yearly copyright bump It's no longer 2016.
Use label and Details button, check if connected Keep "Use SASL Authentication" static, to avoid confusion and concerns with longer languages. Add another row with an icon, text, and "Details..." button to show current SASL availability. Check if disconnected separately from network existing and capability negotiation support. Show a different message when disconnected from the network. This should help reduce confusion. Move SASL status UI updates to separate function to avoid cluttering general capability updates handling function.
Encourage SASL over NickServ when server supports Move Use SASL Authentication above Auto Identify. Change the label for SASL according to whether or not SASL support is advertised by the network. If disconnected or unknown, no change. Otherwise, set to "Use SASL Authentication (preferred)" when known, or "Use SASL Authentication (might not work)" when not advertised. Unfortunately there's no way to be sure, but this seems to do the right thing. One can still enable and disable as before. Add explanatory tooltips to authentication options, including recommending SASL if you need to identify before joining channels (this gets asked a lot in #quassel).
Sync default port with Use encrypted connection Change the preselected port from 6667 to 6697 when enabling "Use encrypted connection" and change back from 6697 to 6667 when disabling "Use encrypted connection". The port number can be manually changed, stopping the link between checkbox and port. Existing networks are unmodified. Add loosely-standardized default IRC server ports to network.h to provide a central place to manage it. This should only be used when first adding a server. See https://freenode.net/news/port-6697-irc-via-tlsssl
Bring copyright headers into 2016 That took some time...