Fix typos
src: Yearly copyright bump This time on time!
This commit changes the official Quassel IRC channel, (#quassel) from the Freenode IRC network to the Libera IRC network in response to recent issues which resulted in the entire volunteer staff of Freenode stepping down. For more information about this situation, please read this: https://gist.github.com/joepie91/df80d8d36cd9d1bde46ba018af497409
qa: Resolve Qt deprecation warnings - use sslHandshakeErrors Qt 5.15 introduced a new and improved signal name for accessing SSL handshake errors, and at the same time started issuing a deprecation warning for the old one, so we need some ifdefs for clean compilation.
qa: Resolve Qt deprecation warnings - default-construct QFlags Empty QFlags should not be created by giving a nullptr to the ctor, but by simply using the default ctor instead. Resolves a deprecation warning that was introduced in Qt 5.15.
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.
qtui: Keep editing topic while someone talks Without this change, it's almost impossible to edit the topic with the topic widget in busy channels because every message would trigger the dataChanged signal which would reset the topic and switch the topic widget out of editing mode. Fixes #1485.
client: Fix settings crash on missing net identity When fetching the client identity in Network settings, make sure the identity exists before trying to convert it into a CertIdentity. This resolves a crash if an identity is deleted improperly or if no identities are specified. Test case: 1. Clear the configuration for Quassel monolithic 2. Start Quassel monolithic 3. Cancel the setup wizard (before creating any identity) 4. Go to Settings -> Configure Quassel... (F7) 5. Navigate to IRC -> Identities, confirm that no identity exists 6. Navigate to IRC -> Networks 7. Add a new network (details don't matter) 8. Observe results NOTE: This fix was contributed by "kater" on the Quassel IRC bug tracker. I'm not sure of a better way to provide attribution, as I don't know if they want their email address part of Quassel's public record. See the original patch here: https://bugs.quassel-irc.org/issues/1409 Fixes #1409
qtui: Add keyboard/mouse access to version links Enable the use of mouse and keyboard for accessing Quassel version information links, including mouse selection (for copy-paste). This fixes having to right-click -> Copy Link Location to open commit information. Note that untrusted clients/cores can set their version information to open ANY external link, including disguised/phishing links. However, this requires manual interaction and I suspect there's bigger problems if one is connecting to untrusted Quassel clients/cores and clicking the links in File -> Core Info... Update About to also allow keyboard access to the version link. All the other links were keyboard accessible already.
settings: Add server-time to Network Features tab Add the IRCv3 "server-time" capability to the Features UI to make it simple to disable. Reasoning: IRC networks with improperly configured time may result in the wrong time showing in Quassel. This.. really shouldn't happen in Year 2020, but it's come up in the freenode/#kiwiirc support channel. (In the future, Quassel should add intelligent detection of time-sync issues, mimicking Kiwi IRC's timedelta feature.)
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.
client: Workaround initial backlog fetch scrolling Workaround ChatView scrolling somewhere into the middle when first fetching enough backlog for the vertical scrollbar to become visible. This happened before when fetching backlog by scrolling, but due to initial backlog fetching was less noticeable. A proper fix would be nicer, but this workaround seems to work for now. Feel free to tear this out later!
client: Default to AsNeeded backlog fetching Default to the AsNeeded backlog requester for better performance with modern (v0.13.0 or newer) Quassel cores. Legacy cores are handled as well. This modifies new installs and existing configurations if the prior default value wasn't changed. Might be worth a mention in the release notes given the potential performance improvement.
client: Add AsNeededBacklogRequester, faster login Add AsNeededBacklogRequester, which behaves exactly like the FixedBacklogRequester for legacy cores older than v0.13.0 (lacking Feature::BufferActivitySync). For modern cores, no backlog is initially fetched. This should speed up logging in with no loss of buffer activity signaling. This breaks the "Show messages from backlog" feature as no backlog is fetched. The original always-fetch backlog requesters remain available for those who prefer having the backlog in the Chat Monitor. Add a warning to the Chat Monitor settings page when "Only fetch when needed" Backlog Fetching is enabled. Don't allow BacklogSettings to return the GlobalUnread backlog requester type. The UI for choosing it has been disabled, but it could have accidentally been selected in the past. If this had happened before this change, AsNeeded will be selected instead.
client: Optionally ensure backlog on buffer show Add a default-enabled option to ensure backlog is available when showing a buffer, using the same logic as scrolling up in a buffer whenever switching to a buffer. No additional messages will be fetched if the scrollbar is already visible. This makes using Quassel without any initial backlog fetching more convenient, as you don't need to scroll upon clicking every buffer. Note: if all loaded messages are filtered out, nothing will appear to be visible on the first showing, and more backlog will be fetched the next time the buffer is shown (or if scrolled, like before). This happens with Quassel today already, anyways, but implementing "fetch until visible" be a good future improvement, mirroring what Quasseldroid does.
uisupport: Fix invalid model segfault from index The Qt implementation of QModelIndex::child(...) automatically checks if the QAbstractItemModel is valid, and if not, it returns an invalid QModelIndex. Quassel relied upon this in several places, checking if the QModelIndex was valid without checking the QAbstractItemModel itself, which introduced crashes upon migrating away from the deprecated QModelIndex::child(...) function. Specifically... #if QT_DEPRECATED_SINCE(5, 8) inline QModelIndex QModelIndex::child(int arow, int acolumn) const { return m ? m->index(arow, acolumn, *this) : QModelIndex(); } #endif To address this, check the QModelIndex's model to verify it's valid wherever Quassel had previously relied upon a check to QModelIndex::isValid() to ensure validity. Places without a validity check aren't adjusted under the assumption it won't ever be an issue. Follow-up to the Qt deprecation fixes in a453c963cf1872e14c83adf1d40a31821c166805 (It's unfortunate that Qt's deprecation warning mentioned this, but only in the detailed documentation and not as clearly as expected: https://doc.qt.io/qt-5/qmodelindex-obsolete.html ) Special thanks to oprypin for reporting this with a detailed, reproducible test case! Fixes #1583