quassel.git
3 weeks agoSet parent for new windows dialog master
Nicolas Cornu [Fri, 19 Mar 2021 11:34:01 +0000 (12:34 +0100)]
Set parent for new windows dialog

This way wayland creates floating windows.

3 weeks agostylesheet: add more stylesheets in the repository
Nicolas Cornu [Tue, 23 Mar 2021 12:34:52 +0000 (13:34 +0100)]
stylesheet: add more stylesheets in the repository

4 weeks agoqa: Modernize invocation of QProcess in ExecWrapper
Manuel Nickschas [Fri, 12 Mar 2021 14:26:56 +0000 (15:26 +0100)]
qa: Modernize invocation of QProcess in ExecWrapper

Don't use deprecated API for QProcess in ExecWrapper for starting
a script; arguments should be given as a QStringList instead of
a QString. Modernize and improve the parsing of the command line
by switching to QRegularExpression from QRegExp.

Resolves a deprecation warning that was introduced in Qt 5.15.

4 weeks agoqa: Resolve Qt deprecation warnings - use sslHandshakeErrors
Manuel Nickschas [Fri, 12 Mar 2021 14:25:34 +0000 (15:25 +0100)]
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.

4 weeks agoqa: Resolve Qt deprecation warnings - default-construct QFlags
Manuel Nickschas [Fri, 12 Mar 2021 14:23:17 +0000 (15:23 +0100)]
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.

4 weeks agoqa: Resolve deprecation warnings in newer Qt versions
Janne Koschinski [Sat, 13 Feb 2021 16:31:19 +0000 (17:31 +0100)]
qa: Resolve deprecation warnings in newer Qt versions

- Use QSslConfiguration instead of modifying QSslSocket directly
- Use default constructors instead of nullptr for empty QFlags

5 weeks agoircv3: Add support for weird tag names, per the spec
Janne Mareike Koschinski [Tue, 23 Feb 2021 20:25:03 +0000 (21:25 +0100)]
ircv3: Add support for weird tag names, per the spec

IRCv3 currently does not specify (or recommend specifying) any tag
names which would contain multiple slashes, but IRCv3 does recommend
clients should gracefully handle any possible tag, ideally treating
it as opaque string.

We’d like to avoid that, but also want to ensure even after a roundtrip
through our core, tags we don’t support are still in identical
condition.

5 weeks agoci: Find Qt5 again on macOS
Manuel Nickschas [Fri, 12 Mar 2021 11:09:24 +0000 (12:09 +0100)]
ci: Find Qt5 again on macOS

With the introduction of Qt6 to homebrew, the install location of Qt5
has changed from /usr/local/opt/qt to the version-specific .../opt/qt@5.

Adapt CMAKE_PREFIX_PATH accordingly. No longer hardcode the brew
prefix. Also use the recommended, versioned package name "qt@5" instead
of the "qt5" alias.

2 months agoicons: Update application icons for Quassel
Manuel Nickschas [Fri, 12 Feb 2021 14:38:50 +0000 (15:38 +0100)]
icons: Update application icons for Quassel

Modern macOS versions love squircles, so justJanne updated the
application icons accordingly.

Import icons from https://github.com/justjanne/quassel-icons.git.

2 months agoicons: Update bundled Breeze Dark iconset
Manuel Nickschas [Fri, 12 Feb 2021 14:19:07 +0000 (15:19 +0100)]
icons: Update bundled Breeze Dark iconset

2 months agoicons: Update bundled Breeze iconset
Manuel Nickschas [Fri, 12 Feb 2021 14:14:31 +0000 (15:14 +0100)]
icons: Update bundled Breeze iconset

2 months agoUpdate upgrade_000_create_buffer_idx.sql
Michał Sochoń [Thu, 14 Jan 2021 19:53:54 +0000 (20:53 +0100)]
Update upgrade_000_create_buffer_idx.sql

Create index if it does not exist already, some people have it applied prior doing upgrades.

3 months agocmake: Modernize (and fix) deployment on macOS
Manuel Nickschas [Sun, 3 Jan 2021 13:48:36 +0000 (14:48 +0100)]
cmake: Modernize (and fix) deployment on macOS

For the past decade or so, we have used a bunch of self-written python
and bash scripts for creating packages for macOS. These have not aged
well, and recently several workarounds had to be hacked in to keep
the machinery somewhat working at all. Still, invoking the scripts at
build time rather than install time caused a race condition where
sometimes not all the packages would be created in CI. To break the
camel's back, deploying dependencies no longer worked correctly and
broke the packages completely in 0.14-rc1.

Fix this by modernizing the whole deployment process and related
parts of the build system, replacing the custom scripts by relying
on Qt's and CMake's own tooling instead. Some workarounds still need
to be added to that to make everything work correctly (neither tool
can deal correctly with QtWebEngine, for some reason, and CMake's
Info.plist template lacks functionality), but the main part of the
work is now delegated to official tooling, everything properly
happend at install time avoiding race conditions in the build process,
and we can remove a bunch of decade-old and hardly maintained custom
code.

Also adapt the CI configuration to use -DBUNDLE instead of the
old -DDEPLOY, and remove the explicit setting of qmake's path too,
as it is no longer needed now.

3 months agocmake: Determine minimum deployment target for Qt
Manuel Nickschas [Sun, 3 Jan 2021 13:39:28 +0000 (14:39 +0100)]
cmake: Determine minimum deployment target for Qt

The minimum version of macOS supported by Qt may differ from the one
provided by the Xcode SDK in use. If started on a macOS that is older
than the minimum version indicated by Qt, the application might crash.

Qt's minimum deployment target is not available directly as a define,
variable or CMake/qmake property, but can be extracted from qmake
using a rather stupid hack. Use this to set a cache variable that
will be used in subsequent commits when generating the package's
Info.plist file.

3 months agopics: Provide custom target for generating the macOS iconset
Manuel Nickschas [Sun, 3 Jan 2021 13:43:41 +0000 (14:43 +0100)]
pics: Provide custom target for generating the macOS iconset

In preparation for modernizing package generation on macOS that will
replace our custom scripts currently used, provide a custom CMake
target for generating the iconset on demand.

Rename the iconset directory to 'quassel.iconset', otherwise iconutil
refuses to work.

3 months agoci: Select explicit Xcode version on macOS
Manuel Nickschas [Sun, 3 Jan 2021 13:13:25 +0000 (14:13 +0100)]
ci: Select explicit Xcode version on macOS

Github has bumped the default version for Xcode to one that is not
officially supported by the current version of Qt, and thus causes
warnings (and potentially other issues down the line).

Avoid this by explicitly selecting Xcode 10.3, which is currently the
oldest version provided by Github actions.

4 months agoBump version for release 0.14-rc1
Manuel Nickschas [Wed, 16 Dec 2020 18:29:04 +0000 (19:29 +0100)]
Bump version for release

4 months agoUpdate ChangeLog
Manuel Nickschas [Wed, 16 Dec 2020 18:24:46 +0000 (19:24 +0100)]
Update ChangeLog

4 months agoUpdate contributors
Manuel Nickschas [Wed, 16 Dec 2020 16:55:16 +0000 (17:55 +0100)]
Update contributors

Some new people have contributed to Quassel since the last release,
so credit them!

As always, if I overlooked your contribution, or you want to have
the data about you changed or removed, do not hesitate to contact
me or (even better!) open a PR with the requested changes.

4 months agoci: Add ubuntu-groovy (20.10), remove ubuntu-eoan (19.10)
Manuel Nickschas [Tue, 15 Dec 2020 17:20:55 +0000 (18:20 +0100)]
ci: Add ubuntu-groovy (20.10), remove ubuntu-eoan (19.10)

Update the list of relevant Ubuntu releases.

4 months agoci: Actually use Clang in the Clang builds
Manuel Nickschas [Wed, 16 Dec 2020 08:30:22 +0000 (09:30 +0100)]
ci: Actually use Clang in the Clang builds

Turns out that I forgot to actually enable the Clang compiler in
the relevant CI build jobs...

4 months agoci: Don't fail fast in matrix builds
Manuel Nickschas [Wed, 16 Dec 2020 12:30:33 +0000 (13:30 +0100)]
ci: Don't fail fast in matrix builds

We'd like to see the build results for all CI platforms, and not bail
out if a single one fails. This is particular useful when debugging
build issues that only happen for specific configurations.

4 months agocmake: Ignore -Wdeprecated-declarations instead of -Wdeprecated
Manuel Nickschas [Wed, 16 Dec 2020 13:11:03 +0000 (14:11 +0100)]
cmake: Ignore -Wdeprecated-declarations instead of -Wdeprecated

Qt 5.15 introduced a bunch of deprecation warnings that are hard
to fix due to our long-term support of old Qt versions. For this
reason, we added -Wno-error=deprecated to compile flags, which
should make deprecation warnings non-fatal.

However, for some reason, GCC 10.2.1 on Debian Testing thinks that
-Wno-error=deprecated should not include -Wdeprecated-declarations,
thus failing the build with fatal warnings on. I could not reproduce
this behavior on other distros with the same compiler and Qt versions,
so maybe this is a distro-specific issue. However, we only care about
-Wdeprecated-declarations, so making only this specific warning
non-fatal makes more sense anyway.

4 months agogit: Add VSCode workspace config to gitignore
Manuel Nickschas [Wed, 16 Dec 2020 08:42:21 +0000 (09:42 +0100)]
git: Add VSCode workspace config to gitignore

Add the .vscode and .cache directories to gitignore. These are used
by VisualStudio Code.

4 months agodocs: Add nightly.link CI download URLs to README
Shane Synan [Thu, 3 Dec 2020 05:36:14 +0000 (00:36 -0500)]
docs: Add nightly.link CI download URLs to README

Add nightly.link CI download URLs for Windows and macOS to the README
file.  This provides a convenient way for anonymous access to the
latest builds, getting around the requirement of being signed in.

NOTE: To avoid future rate-limiting by GitHub, nightly.link should be
given an access token (installed as a GitHub app) so artifact URL
fetches won't share the default API token rate limits.

See https://nightly.link/ and use the option to install and select
one's repositories.  Or go directly to...
https://github.com/apps/nightly-link

If you wish to provide direct download links to your fork of Quassel,
you may want to do the same.

4 months agoclient: Group SASL EXTERNAL under SASL, test cap
Shane Synan [Sat, 25 Jul 2020 01:49:21 +0000 (21:49 -0400)]
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.

4 months agoqtui: Keep editing topic while someone talks
Lee Starnes [Sun, 6 Sep 2020 09:33:27 +0000 (04:33 -0500)]
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.

4 months agoci: Skip macOS 'brew update' to save a lot of time
Shane Synan [Wed, 2 Dec 2020 00:21:24 +0000 (19:21 -0500)]
ci: Skip macOS 'brew update' to save a lot of time

Skip macOS 'brew update' before 'brew install' to save up to an hour
of time with Homebrew updates, as per GitHub's recommendations.

See https://github.com/actions/virtual-environments/issues/2173
And https://github.com/microsoft/appcenter/issues/293

This could potentially introduce issues if Homebrew makes a breaking
change in between the 1-2 week window that GitHub Actions updates
their macOS CI images, but it seems unlikely and 'brew update' can be
re-added if needed.

4 months agobuild: Set macOS minimum version to Qt min version
Shane Synan [Wed, 25 Nov 2020 08:19:17 +0000 (03:19 -0500)]
build: Set macOS minimum version to Qt min version

Set the macOS Info.plist minimum version to the minimum version
supported by Qt for macOS.

Determine the minimum macOS version for Qt through querying qmake.
Unfortunately, this involves a somewhat roundabout process of a fake
project file and searching qmake's output.

See https://code.qt.io/cgit/pyside/pyside-setup.git/tree/qtinfo.py?h=5.6

Switch to HFS+ (from APFS) so older macOS versions can parse the app
bundle and display the "OS version too old" warning, instead of just
warning about a corrupt image file.

Credit to freenode/Deas for point this out and providing screenshots!

See https://doc.qt.io/qt-5/macos.html
And https://doc.qt.io/qt-5/macos-deployment.html

4 months agoclient: Fix settings crash on missing net identity
Shane Synan [Wed, 23 Sep 2020 04:17:47 +0000 (00:17 -0400)]
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

4 months agoqtui: Add keyboard/mouse access to version links
Shane Synan [Wed, 22 Jul 2020 22:46:16 +0000 (18:46 -0400)]
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.

4 months agocore: Implement echo-message, disabled by default
Janne Koschinski [Mon, 20 Jul 2020 23:45:42 +0000 (19:45 -0400)]
core: Implement echo-message, disabled by default

Implement the IRCv3 "echo-message" capability, allowing Quassel to
show how the network displayed sent messages, including any added
latency.

As this introduces additional latency, don't request this by default.
It can be manually activated with "/CAP REQ echo-message", e.g. in the
list of commands to perform on connect.  There may be other issues as
well, such as with CTCP handling.  Here be danger!

This will serve as the building block for communicating when a message
is pending being sent, vs. being delivered.  This requires support for
IRCv3 "batch" and "labeled-response", alongside protocol changes to
allow updating the status of existing Message objects.

Also add missing sources of setting the "::Self" flag on messages,
ensuring that echoed messages will be properly handled, e.g. with CTCP
events.

[Original commit by justJanne, made opt-in by digitalcircuit]

See https://ircv3.net/specs/extensions/echo-message-3.2.html
And https://ircv3.net/specs/extensions/labeled-response

[Addendum]
If "echo-message" was to be made enabled by default as-is, the
Features tab in the Network settings page can offer a way to opt out.

Here's how it might look:
Checkbox with widget name of "enableCapEchoMessage":
[x] Show outgoing messages after delivery

Tooltip:
<p>Wait until the IRC network has received the message to show it in Quassel, and show any changes the network has made to the message (e.g. removing formatting).</p>
<p>It may take longer for outgoing messages to appear.</p>
<p><i>Toggles the IRCv3 'echo-message' capability.<i></p>

"echo-message" should not be enabled by default yet, I just spent a
fair bit of time thinking on how to phrase this and wanted to preserve
it in the unlikely case it is useful in the future.

And here's the reasoning to go with this now-theoretical commit:
Reasoning:
This will unavoidably add latency to showing messages you've sent, and
if a network incorrectly echoes messages back, this could result in
losing message history.  Some may prefer the lower-latency of having
Quassel locally show messages, and we're a fair distance away from
implementing message labels in order to provide a "sending"/"sent"
message feedback (or any form of message editing at all) - messages
are assumed to be immutable once received.

4 months agocore: Implement invite-notify
Shane Synan [Tue, 21 Jul 2020 02:12:30 +0000 (22:12 -0400)]
core: Implement invite-notify

Implement the "invite-notify" capability, making use of Quassel's
existing "invite" handling to display an invite message.  Update the
Invite stringification to distinguish between an invite targeting the
current user vs. targeting some other nickname.

In the future, Quassel should make some sort of fancy invite
notification interface.  This still provides a benefit through
standardization of existing notices.

See https://ircv3.net/specs/extensions/invite-notify-3.2

4 months agocore: Implement account-tag
Shane Synan [Tue, 21 Jul 2020 01:56:39 +0000 (21:56 -0400)]
core: Implement account-tag

Implement the "account-tag" capability, updating IrcUser account
status with information from the "account" tag when available.
According to the specification, "account" will be sent with all
user-initiated commands when logged in, and will NOT be sent when
logged out.

Quassel takes a conservative approach combining the approaches taken
by other clients.  For PRIVMSG and NOTICE, "account" tag is used to
set whether the IrcUser is logged in if present, AND logged out if NOT
present.  For all other messages, if the "account" tag is present and
the prefix refers to an EXISTING IrcUser, the IrcUser will be set as
logged in, but will NOT be set as logged out if the tag is missing.

Server/client details as of 2020-7-20
* Oragono (server)
Sends account tag with any client-initiated command
https://github.com/oragono/oragono/blob/b5855e61941e4dc33b64f6d61996a23686136166/irc/client.go#L1474

* InspIRCd (server)
Sends account tag with any client-initiated command
https://github.com/inspircd/inspircd/blob/4a6fedd9324d87349a806c9c1d0ae6e7d3c1fd38/src/modules/m_ircv3_accounttag.cpp

* BitBot (client/bot)
Marks as logged in, does not handle logging out
https://github.com/jesopo/bitbot/blob/9dfbe3723c8af97c9fbd35a3391298bf6f641043/src/core_modules/permissions/__init__.py#L117-L121

* PIRC.pl web client (client)
Marks as logged in, does not handle logging out
https://github.com/pirc-pl/pirc-gateway/blob/63d7be177568e99cada61cb53f1176b857bfca72/js/gateway_def.js#L2605-L2607

* KiwiIRC (client)
Marks as logged in AND logged out via PRIVMSG, NOTICE, WALLOPS, ignores other commands
https://github.com/kiwiirc/irc-framework/blob/11e9e8141dbbff68d730d2d840454949d2b2b5f5/src/commands/handlers/messaging.js#L9-L139

See https://ircv3.net/specs/extensions/account-tag-3.2

4 months agocore: Finish implementing message-tags
Shane Synan [Tue, 21 Jul 2020 00:50:05 +0000 (20:50 -0400)]
core: Finish implementing message-tags

Request "message-tags" during capability negotiation.

All the hard work has been done in previous commits by justJanne!

This just conveys to IRC servers that Quassel can handle any
well-formed tag, including client-only tags.

See https://ircv3.net/specs/extensions/message-tags

4 months agocore: Don't use "time" tag without "server-time"
Shane Synan [Tue, 21 Jul 2020 00:48:28 +0000 (20:48 -0400)]
core: Don't use "time" tag without "server-time"

Don't use the "time" IrcTagKey without "server-time" being enabled.
This ensures that if "server-time" isn't negotiated, e.g. due to
skipping the capability, message timestamps won't be adjusted.

According to the IRCv3 specifications, servers must not send the
"time" tag without "server-time" being acknowledged, however it's
probably better to handle the case where a server might send it
unprompted.

See https://ircv3.net/specs/extensions/server-time-3.2

4 months agocore: Implement setname
Janne Koschinski [Tue, 21 Jul 2020 00:02:04 +0000 (20:02 -0400)]
core: Implement setname

Implement the IRCv3 "setname" capability, allowing Quassel to receive
updates to other nicknames' realnames, similar to "away-notify".

Add the "/setname" command to allow setting one's own realname without
reconnecting.  This requires the server to support "setname".

[Original commit by justJanne, tweaked by digitalcircuit - setname is
now ratified and official, hooray!]

See https://ircv3.net/specs/extensions/setname

4 months agosettings: Add server-time to Network Features tab
Shane Synan [Wed, 26 Aug 2020 22:28:56 +0000 (18:28 -0400)]
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.)

4 months agosettings: Add Features tab to Network for skipCaps
Shane Synan [Mon, 20 Jul 2020 05:33:35 +0000 (01:33 -0400)]
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.

4 months agocore: In CoreNetwork, check Network::useSasl()
Shane Synan [Sun, 8 Nov 2020 03:11:39 +0000 (22:11 -0500)]
core: In CoreNetwork, check Network::useSasl()

In CoreNetwork, directly check the Network::useSasl() function instead
of reaching into networkInfo().  All the other code within CoreNetwork
checks the properties on Network, and useSasl() is already updated
within Network::setNetworkInfo().  This provides consistency with
atomic network information updates.

4 months agocommon: Allow skipping negotiation of IRCv3 caps
Shane Synan [Sun, 19 Jul 2020 20:28:21 +0000 (16:28 -0400)]
common: Allow skipping negotiation of IRCv3 caps

Add "skipCaps" to Network, storing a list of IRCv3 capabilities to
skip during capability negotiation.  This allows selectively disabling
capabilities on specific IRC networks.  Some networks might not behave
as expected, and some IRC features (e.g. "echo-message" support) are
enough of a departure from traditional IRC behavior that users may
want to turn it off.

Add the necessary migrations and setup to SQLite and PostgreSQL.

Add the "SkipIrcCaps" feature flag to signal protocol support.

Fix up a comment in CoreNetwork referring to an old variable name.

Update the SQL README to mention the Serializers protocol checks.
Missing this caused me a few hours of confusion over why the protocol
change wasn't being received :)

4 months agocore: Use IrcTags::SERVER_TIME for server-time tag
Shane Synan [Tue, 21 Jul 2020 00:06:32 +0000 (20:06 -0400)]
core: Use IrcTags::SERVER_TIME for server-time tag

Fixup IRCv3 "server-time" support to use the provided
IrcTags::SERVER_TIME tag, rather than creating a bespoke IrcTagKey
during parsing.  This shouldn't result in any functionality changes,
but it helps avoid typos with any future changes.

This cleans up changes in the past commit
e38846f054ad1766f2e91992a57bbaffd33c7c06

4 months agoclient: Switch infobar dialog-* icons to emblem-*
Shane Synan [Mon, 20 Jul 2020 05:27:30 +0000 (01:27 -0400)]
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.

4 months agosql: Remove PostgreSQL text limits, fixes hangs
Jay Colson [Sun, 19 Jul 2020 20:18:01 +0000 (16:18 -0400)]
sql: Remove PostgreSQL text limits, fixes hangs

Modify all PostgreSQL text column limits to the unlimited TEXT type
instead of VARCHAR.  Modern PostgreSQL versions (year 2000 onward) do
not store text any differently depending on whether or not it's TEXT
or VARCHAR.
https://www.postgresql.org/message-id/20667.971213689%40sss.pgh.pa.us

This avoids having the core fail to save values or hang entirely, and
also addresses migration issues from SQLite where text limits aren't
applied.

See https://bugs.quassel-irc.org/issues/1526

This shouldn't introduce any noticeable performance impact:
https://stackoverflow.com/questions/1067061/does-a-varchar-fields-declared-size-have-any-impact-in-postgresql

Fix up a spurious length-limited field for SQLite in case length
limits are applied in newer SQLite versions.

The proper long-term fix is to implement length checks throughout the
Quassel core (sanitizing data) and client (to warn of length issues),
rather than relying on the database to enforce limits.

Sponsored by Postgres Phone Plans.  UNLIMITED TEXT, TALK, and DATA for
$9.99 a month!  Some restrictions apply.  This is not serious.

[Commit squashed from "jcolson", thanks!]
See https://github.com/quassel/quassel/pull/478

Fixes GH-478
Fixes #1526

4 months agoci: Workaround macOS hdiutil out of space errors
Shane Synan [Mon, 9 Nov 2020 04:21:49 +0000 (23:21 -0500)]
ci: Workaround macOS hdiutil out of space errors

Workaround "hdiutil: create failed - No space left on device" by
letting hdiutil auto-detect the required disk space.  Keep the old
method around via documentation in case this issue arises again.

https://stackoverflow.com/questions/18621467/error-creating-disk-image-using-hdutil
https://apple.stackexchange.com/questions/156994/yosemite-hdiutil-create-failed-error-5341
https://asmaloney.com/2013/07/howto/packaging-a-mac-os-x-application-using-a-dmg/
https://github.com/autopkg/jps3-recipes/issues/57

Make this issue easier to detect by changing the build script
macosx_makePackage.sh to fail early if any individual command fails.
This includes fixing up optional parameters to use default values.

Re-enable the "Check artifacts" step of the "Post-Build" process now
that macOS builds are hopefully more reliable.

5 months agocore: Improve setkey usage output
alturiak [Tue, 4 Sep 2018 19:10:37 +0000 (21:10 +0200)]
core: Improve setkey usage output

Provide information about available encryption modes and prefixes
in /setkey's usage output.

6 months agoqtui: Fix missing default value for backlog fetching
Manuel Nickschas [Sun, 4 Oct 2020 15:44:33 +0000 (17:44 +0200)]
qtui: Fix missing default value for backlog fetching

If EnsureBacklogOnBufferShow is not configured in the settings, it
should be defaulted to true. Otherwise, Quassel will show empty
buffers until manually scrolled.

6 months agoclient: Workaround initial backlog fetch scrolling
Shane Synan [Sun, 28 Jun 2020 08:41:44 +0000 (04:41 -0400)]
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!

6 months agoclient: Default to AsNeeded backlog fetching
Shane Synan [Sun, 28 Jun 2020 05:54:36 +0000 (01:54 -0400)]
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.

6 months agoclient: Add AsNeededBacklogRequester, faster login
Shane Synan [Sun, 28 Jun 2020 05:49:43 +0000 (01:49 -0400)]
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.

6 months agoclient: Optionally ensure backlog on buffer show
Shane Synan [Sun, 28 Jun 2020 05:41:00 +0000 (01:41 -0400)]
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.

6 months agoclient: Fix backlog requests with 0 initial fetch
Shane Synan [Thu, 25 Jun 2020 19:37:24 +0000 (15:37 -0400)]
client: Fix backlog requests with 0 initial fetch

If no available messages in a buffer exist, try fetching the newest
messages.  This fixes requesting additional backlog for a buffer when
the initial backlog fetching has been disabled (set to zero).

6 months agouisupport: Fix invalid model segfault from index
Shane Synan [Wed, 15 Jul 2020 23:08:41 +0000 (19:08 -0400)]
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

6 months agocommon: Fix IrcUser::quitInternal not syncing quit
Shane Synan [Sat, 11 Jul 2020 21:51:45 +0000 (17:51 -0400)]
common: Fix IrcUser::quitInternal not syncing quit

Fix the new IrcUser::quitInternal() function to call IrcUser::quit()
over the network, restoring compatibility with both old and new
Quassel clients.

Only the core needs upgraded to fix this; the client does not sync
calls to IrcUser::quit().

> Before, core + client latest
<-- kiwipre-68 ([...]) has quit (Client Quit)
2020-07-11 17:53:26 [Warn ] "no matching slot for sync call: IrcUser::quitInternal (objectName=\"2/kiwipre-68\"). Params are:" ()

> After, core + client latest
IrcUser is successfully marked as having quit, removed from nick list.

Fixes the fix in 7298446b3e86140c4bbbfe7aeeb959c16c53363c

6 months agocore: Fix SQL defaults for filtered backlog fetch
Shane Synan [Fri, 10 Jul 2020 21:50:59 +0000 (17:50 -0400)]
core: Fix SQL defaults for filtered backlog fetch

Modify the SQL queries for *_filtered.sql backlog fetching to allow
specifying an invalid type of "0" or "-1" to match any message type.
This allows filtering backlog fetching by flag without restricting by
type.

Also modify the "= 0" check for :flag to "<= 0".  This matches the
function definitions and fixes specifying "-1" instead of "0".
Without this change, specifying "-1" will result in missing messages!

Committed separately from the new forward backlog fetching in case
issues are found, making reverting easier.

6 months agocore: Fix/unify SQL for forward message fetch
Shane Synan [Fri, 10 Jul 2020 21:23:18 +0000 (17:23 -0400)]
core: Fix/unify SQL for forward message fetch

NOTE: This commit should be squashed into the previous commit from
justJanne.  It's committed separately just to make it easier to see
what I changed.

Fixup the SQLite and PostgreSQL queries to treat "<= 0" as any
type/flag instead of just "= 0".  This matches the function
definitions and fixes specifying "-1" instead of "0".  Without this
change, specifying "-1" will result in missing messages!

6 months agoApply suggestions from code review
Janne Mareike Koschinski [Thu, 2 Jul 2020 20:01:26 +0000 (22:01 +0200)]
Apply suggestions from code review

Co-authored-by: Shane Synan <digitalcircuit36939@gmail.com>
6 months ago[PR-540] Add a new feature flag
Janne Koschinski [Sun, 28 Jun 2020 09:32:39 +0000 (11:32 +0200)]
[PR-540] Add a new feature flag

6 months ago[PR-540] Allow loading backlog in reverse direction
Janne Koschinski [Sun, 28 Jun 2020 09:29:37 +0000 (11:29 +0200)]
[PR-540] Allow loading backlog in reverse direction

6 months agocommon: Use /quote by default for aliases
Vitor Luis [Sat, 1 Feb 2020 11:36:02 +0000 (12:36 +0100)]
common: Use /quote by default for aliases

Sending `/quote` instead of `/msg` is probably the most widely used
method by other IRC clients and will also make them work out of the
box with DALnet that requires that commands to NickServ (as example)
to be sent explicitly as `/msg NickServ@services.dal.net` to work.

I've tested this myself in DALnet, Freenode and some other networks
with different IRCd flavours and all worked without any problems.

6 months agoclient: Deprecate local highlight, migrate cleanup
Shane Synan [Sat, 20 Jun 2020 03:04:59 +0000 (23:04 -0400)]
client: Deprecate local highlight, migrate cleanup

Deprecate "Local Highlights" for client and core setups, adapting the
name "Legacy Highlights" as used with monolithic installs.  Make the
legacy nature more prominent, but keep support enabled.  In the
future, legacy highlights should be disabled and invisible except when
connected to older cores.

Rename "Remote Highlights" to "Highlights" and place first in the
settings list.

When using the "Import Legacy" button, migrate nickname highlight
settings and offer to remove the old local highlight rules, avoiding
redundant highlight rules.

This should help reduce the cases where Highlight Ignore Rules are
configured, but don't seem to respond due to client highlights
overriding the core-side highlight ignore rules.

6 months agoRevert "settings: Local Highlights, default Current nick"
Shane Synan [Sat, 20 Jun 2020 00:14:17 +0000 (20:14 -0400)]
Revert "settings: Local Highlights, default Current nick"

This reverts commit 8fb51dcb129db8399209e9d07b518063d1a910f1.

Quassel 0.13 with core-side highlight support ("Remote Highlights")
has been out for roughly 1.5 years (2018-11-17).  Users have gotten
confused by why highlight ignore rules don't work, only to find out
client-side ("Local Highlights") were enabled instead.  Disable local
highlights by default to avoid this issue.  Those using old cores can
re-enable this.

6 months agocommon: Exclude ignored messages in buffer activity
Shane Synan [Sun, 21 Jun 2020 23:36:38 +0000 (19:36 -0400)]
common: Exclude ignored messages in buffer activity

Add a new message flag, 'Ignored', tracking if the message matched an
ignore rule when received.  In practice, this refers to dynamic ignore
rules (SoftStrictness), as permanent ignore rules (HardStrictness)
will drop the message entirely.  Simple clients/bots may use this to
apply ignore rules without having to implement the entire regular
expression rules.

Exclude messages that match an ignore rule when updating
bufferActivity and highlightCount, fixing the appearance of new
activity/highlights from ignored messages.

Fixes #1511

NOTE: Using the 'Ignored' flag is not recommended for full clients as
they will need to locally reveal hidden messages when specific dynamic
ignore rules are disabled.

Clean up leftover comment on serializing sender prefixes.

Co-authored-by: Janne Koschinski <janne@kuschku.de>
6 months agoInclude XDG search dirs on mac
Hannah von Reth [Tue, 9 Jun 2020 20:02:44 +0000 (22:02 +0200)]
Include XDG search dirs on mac

6 months agoci: Make artifact sanity checks non-fatal for now
Manuel Nickschas [Sat, 3 Oct 2020 15:01:30 +0000 (17:01 +0200)]
ci: Make artifact sanity checks non-fatal for now

Currently, macOS packaging is unreliable due to a race condition in
the ancient scripts, sporadically leading to a missing QuasselCore
package. A proper fix would require a modernization of the packaging
process.

Mark the artifact sanity check non-fatal for now, until a proper
solution can be implemented.

6 months agocommon: Default Away on Detach for new identities
Shane Synan [Fri, 19 Jun 2020 23:18:18 +0000 (19:18 -0400)]
common: Default Away on Detach for new identities

Change default for newly created identities to enable Detach on Away.
This more closely follows other modern chat networks, and can always
be disabled.

6 months agoAdd button and bindings for striking through text
Alex McGrath [Thu, 1 Aug 2019 16:07:46 +0000 (17:07 +0100)]
Add button and bindings for striking through text

This includes icons and a small regex fix from @digitalcircuit

7 months agodocs: README.md note login to download auto-builds
Shane Synan [Mon, 22 Jun 2020 01:48:29 +0000 (21:48 -0400)]
docs: README.md note login to download auto-builds

Add note to README.md explaining that one must log into GitHub to
download artifacts, i.e. the automated Windows and macOS builds.  This
does not impact full releases.

This commit can be reverted once the GitHub issue is addressed.

See https://github.com/actions/upload-artifact/issues/51

7 months agodocs: Update README.md badge, download for Actions
Shane Synan [Fri, 19 Jun 2020 20:52:02 +0000 (16:52 -0400)]
docs: Update README.md badge, download for Actions

Update the badges in README.md to point to the new GitHub Actions CI
integration, removing the old Travis and AppVeyor badges.

Update the "Downloading" text to point to the new Windows and macOS
build artifacts provided by GH Actions.  Now we can limit shown builds
to the 'master' branch, hooray!

See: https://help.github.com/en/actions/configuring-and-managing-workflows/configuring-a-workflow#adding-a-workflow-status-badge-to-your-repository
And: https://stackoverflow.com/questions/57719605/official-badge-for-github-actions

7 months agodocs: Inline important URLs in README.md
Shane Synan [Fri, 19 Jun 2020 20:48:53 +0000 (16:48 -0400)]
docs: Inline important URLs in README.md

Move all single-use, important URLs in README.md from the bottom index
to where the link is used.  This makes the document easier to navigate
when reading it as a plain text file.  There's no differences to the
rendered Markdown view.

7 months agoUpdate custom time format tooltip
Steve Groesz [Sat, 23 Mar 2019 23:56:57 +0000 (18:56 -0500)]
Update custom time format tooltip

Provide reference to Qt::QDateTime::toString method used to convert
timestamp in the custom timestamp format ToolTip text.

9 months agoAdd rough instructions for synchronizing the i18n repository
Daniel Albers [Thu, 25 Jun 2020 20:46:32 +0000 (22:46 +0200)]
Add rough instructions for synchronizing the i18n repository

9 months agoUpdate translations from Transifex
Daniel Albers [Thu, 25 Jun 2020 20:31:58 +0000 (22:31 +0200)]
Update translations from Transifex

28868 translated messages

Many thanks to:
 - cs: Jaroslav Lichtblau <jlichtblau@seznam.cz>
 - da: Joe Hansen <joedalton2@yahoo.dk>
 - de: Hightension <Jonathanfriedrich@live.de>
 - el: differentreality <differentreality@gmail.com>,
       Theofilos Intzoglou <int.teo@gmail.com>
 - en_US: Chris <chris@chrisegeland.com>
 - eo: Tinjo Kohen <tiffypet@yahoo.com>
 - es: Chris <chris@chrisegeland.com>, Javier Llorente <javier@opensuse.org>
 - fi: Lasse Liehu <larso@gmx.com>
 - fr: Olivier Caron <crn.olivier@gmail.com>
 - hi: Raju Devidas Vindane <rajuvindane@gmail.com>
 - it: Francesco <rbrfnc@ymail.com>
 - ko: Tae-Hoon KWON <zerolaunch@naver.com>,
       Thomas Sungjin Kang <potopro@gmail.com>
 - lt: Liudas Alisauskas <liudas.alisauskas@gmail.com>
 - mr: Raju Devidas Vindane <rajuvindane@gmail.com>
 - nb: Chris <chris@chrisegeland.com>,
       sandsmark <inactive+sandsmark@transifex.com>
 - pa: A S Alam <alam.yellow@gmail.com>
 - pl: derpella <matwa@poczta.pl>, Miłosz Rachwał <transifex@milek7.pl>
 - pt: Vitor Luis <droider.pc@gmail.com>
 - ro: Sergiu Bivol <sergiu@cip.md>, Arthur Țițeică <arthur.titeica@gmail.com>
 - ru: Andrei Stepanov <adem4ik@gmail.com>
 - sl: Andrej Mernik <andrejm@ubuntu.si>
 - sr: Jovan Jojkić <jovanjojkic@gmail.com>
 - uk: Yuri Chornoivan <yurchor@ukr.net>
 - zh_CN: Feng Chao <chaofeng111@qq.com>

10 months agoci: Add sanity check for artifacts to post-build job
Manuel Nickschas [Thu, 18 Jun 2020 19:50:55 +0000 (21:50 +0200)]
ci: Add sanity check for artifacts to post-build job

Check if expected artifacts have been created for every workflow run,
not only for tagged commits. While this is just a rudimentary
sanity check, it would at least cause a CI failure if one of the
build jobs didn't produce artifacts for some reason.

A nice side effect is that unlike the former create-release job,
the new post-build job is not completely skipped for non-tagged
commits, and thus shows up as successful for every good CI run
(even though the individual steps required for creating a draft
release are skipped, of course).
This causes the GitHub UI to automatically collapse the (giant)
list of checks after they are all complete.

10 months agoci: Replace Travis and Appveyor CIs by a GitHub Workflow
Manuel Nickschas [Thu, 18 Jun 2020 17:28:27 +0000 (19:28 +0200)]
ci: Replace Travis and Appveyor CIs by a GitHub Workflow

Replace the previous CI systems by a GitHub Workflow for all supported
platforms. This unifies the full CI setup in a single place, and
provides better integration into GitHub itself via the checks API.

Additionally, GitHub provides us with more resources than the other
systems, enabling more parallel and faster build jobs. As a result,
we can afford a larger build matrix than before, and now cover
additional Linux baselines. Unlike Appveyor, GitHub also parallelizes
Windows build jobs, which resolves the huge bottleneck we had
when pushing multiple PRs or branches.

The total turnaround time is still dominated by the Windows build,
but at around 15 minutes it is much faster than before.

GitHub also has a sane retention policy that keeps temporary artifacts
around for several months, and won't run out of space during active
development times like Appyevor did.

For tagged commits, a draft release is automatically created and the
source archive as well as packages for Windows and macOS are attached.
The tag annotation is used for the release notes. Releasing as a
draft allows for final, manual changes before publishing the release.

Note that this change should also enable CI runs in forks, so
contributors can enjoy CI feedback while developing, prior to creating
a pull request.

10 months agocmake: Allow deprecation warnings
Manuel Nickschas [Mon, 15 Jun 2020 23:51:34 +0000 (01:51 +0200)]
cmake: Allow deprecation warnings

In recent releases, Qt deprecated a whole bunch of APIs, probably
in preparation of the advent of Qt 6. Unfortunately, avoiding those
is not straightforward, since Quassel has to support a broad range
of older Qt releases, and not all deprecated APIs are easy to replace
in those older versions. Some APIs, such as bearer management, don't
even have a replacement yet.

Since Qt 5.13, deprecation warnings cannot be disabled at all. To
avoid breaking the CI builds, make deprecation warnings non-fatal
even if FATAL_WARNINGS is enabled. This allows us to remove the
WARN_QT_DEPRECATION option, which only had an effect when building
against Qt < 5.13 anyway, and unconditionally enable the warnings
when compiling with GCC or Clang.

For MSVC, disable deprecation warnings completely, since there
seems to be no way to selectively make warnings non-fatal, and we
still want to fail for anything other than deprecations.

Disable the use of APIs completely that were deprecated in Qt 5.5
(our current baseline) or earlier to prevent accidental use.
This threshold can be raised in the future as we can rely on newer
Qt versions and modernize affected code.

10 months agotravis: Add Debian Stable and Testing to the list of CI distros
Manuel Nickschas [Sat, 30 May 2020 13:18:59 +0000 (15:18 +0200)]
travis: Add Debian Stable and Testing to the list of CI distros

In addition to have a recent Ubuntu LTS as a baseline (we'll
switch to Bionic after the next Quassel release), supporting Debian
Stable also seems prudent. Add this distro to the CI system to
ensure that we don't break the build on Debian Stable.

Also enable Debian Testing, which should provide us with an early
warning system in case toolchain or dependency changes are about
to break Quassel.

10 months agotravis: Remove Ubuntu Cosmic, add Eoan and Focal
Manuel Nickschas [Tue, 26 May 2020 16:57:08 +0000 (18:57 +0200)]
travis: Remove Ubuntu Cosmic, add Eoan and Focal

Remove the EOL'd Ubuntu 18.10 "Cosmic Cattlefish" release, add
Ubuntu 19.10 "Eoan Ermine" and Ubuntu 20.04 LTS "Focal Fossa".

Reflect the change of naming scheme in the quassel-build-env
repository, where branches (and docker tags) are now prefixed
with distro name to prepare for adding additional distros to CI.

10 months agossl: Remove legacy useSsl account setting
Manuel Nickschas [Sun, 15 Mar 2020 19:26:53 +0000 (20:26 +0100)]
ssl: Remove legacy useSsl account setting

The UI for disabling client-side SSL support has been removed a long
time ago, but the setting still existed in CoreAccount and related
classes.

Since SSL is now always support in the client, remove the remnants
of the legacy setting.

Note that cores still must be able to cope with legacy clients that
have SSL disabled.

10 months agossl: Use QSslSocket directly to avoid redundant qobject_casts
Manuel Nickschas [Sun, 15 Mar 2020 19:24:59 +0000 (20:24 +0100)]
ssl: Use QSslSocket directly to avoid redundant qobject_casts

Use QSslSocket in the AuthHandler API to avoid having to cast
QTcpSocket to the SSL version in several places.

10 months agossl: Use Pending Connections mechanism for SslServer
Manuel Nickschas [Sun, 15 Mar 2020 19:18:20 +0000 (20:18 +0100)]
ssl: Use Pending Connections mechanism for SslServer

Since Qt 4.7, it is no longer necessary to manage incoming connections
manually in specializations of QTcpServer. Instead, newly created
sockets can be added to the internal queue.

10 months agossl: Remove HAVE_SSL define
Manuel Nickschas [Sun, 15 Mar 2020 17:59:20 +0000 (18:59 +0100)]
ssl: Remove HAVE_SSL define

With fallback code for missing SSL support removed from the code base,
the HAVE_SSL define is no longer needed.

10 months agossl: Remove fallback code for missing SSL support
Janne Koschinski [Mon, 5 Aug 2019 17:34:45 +0000 (19:34 +0200)]
ssl: Remove fallback code for missing SSL support

10 months agossl: Require SSL support in Qt
Manuel Nickschas [Sun, 15 Mar 2020 17:55:01 +0000 (18:55 +0100)]
ssl: Require SSL support in Qt

There is no sane reason for not using SSL in the year 2020, plus
every distro should be shipping the Qt libraries with SSL support
enabled. Thus, make it mandatory for Quassel, too.

Going forward, this allows us to remove lots of fallback code paths
that make the code much more complex in many places, and that have
not been tested (or even been built) in a long time.

10 months agoRemoved mozilla IRC network from networks.ini
Svetlana T [Sat, 7 Mar 2020 20:46:19 +0000 (07:46 +1100)]
Removed mozilla IRC network from networks.ini

Mozilla IRC has shut down this month. Mozilla moved their chat services to matrix. I am removing it from the default preset now.

10 months ago[Followup PR-495] Fixes backwards compatibility issues
Janne Koschinski [Thu, 11 Jun 2020 09:09:49 +0000 (11:09 +0200)]
[Followup PR-495] Fixes backwards compatibility issues

- Moves functionality to an internal function
- Restores original sync slots

10 months agocore: Remove slots from storage APIs 501/head
Manuel Nickschas [Thu, 28 May 2020 14:39:37 +0000 (16:39 +0200)]
core: Remove slots from storage APIs

Remove the deprecated slots declaratiosn from the storage APIs. This
avoids problems with the now non-copyable SyncableObject with ancient
versions of Qt, where the MOC generated code for slots that required
arguments to be copyable.

10 months agocommon: Make SyncableObject non-copyable
Manuel Nickschas [Wed, 27 May 2020 21:21:20 +0000 (23:21 +0200)]
common: Make SyncableObject non-copyable

QObjects are non-copyable for good reasons. SyncableObject, although
deriving from QObject, was made sort-of copyable by adding custom copy
ctor and copy assignment operator that did not make a full copy of the
underlying QObject, but just copied (most) properties. Several classes
deriving from SyncableObject then implemented their own versions of
those special member functions on top of that. This was not only
rather unexpected and intransparent behavior due to the incomplete
copy functionality, but also a most fragile hack since one had to
remember to update those functions when adding or modifying
properties.

In addition, newer compilers apply a somewhat stricter interpretation
of the C++ standard, basically enforcing the Rule of Three by omitting
implicit generation of copy ctor and/or copy assignment operating
in case certain user-defined special member functions exist. In
particular, Clang 10 started to emit several warnings (and we already
worked around a similar warning from GCC 9+ in cc21148).

Instead of adding more workarounds further obfuscating matters, remove
the relevant special member functions altogether and thus make
SyncableObject and its derivatives non-copyable as they should be.
Modify affected code to cope with this cleanly, and without abusing
unexpected behavior.

12 months agocore: Clarify name of capsPendingNegotiation flag
Shane Synan [Mon, 27 Jan 2020 06:53:16 +0000 (01:53 -0500)]
core: Clarify name of capsPendingNegotiation flag

Rename "capNegotiationInProgress()" to "capsPendingNegotiation()"
to better clarify the meaning of the function.  This checks if any
capabilities are queued for an ongoing negotiation; it does not
represent whether or not "CAP LS" has been sent.

12 months agocore: Fix capability messages for repeat CAP LS
Shane Synan [Mon, 27 Jan 2020 06:24:06 +0000 (01:24 -0500)]
core: Fix capability messages for repeat CAP LS

Fix capability negotiation messages for manually running "/CAP LS",
and for when the server provides capabilities but Quassel does not
support any of them.

Before, running "/CAP LS" after negotiation would erroneously print
"* No capabilities available"
Now, running "/CAP LS" provides a summary of the current situation,
"* No additional capabilities are supported (found: a-aa, b-bb, c-cc;
   currently enabled: a-aa, b-bb)"

13 months agoSync last message id per buffer
Janne Koschinski [Thu, 30 May 2019 06:39:06 +0000 (08:39 +0200)]
Sync last message id per buffer

13 months agoFix buffersyncer state when merging buffers
Janne Koschinski [Thu, 30 May 2019 06:36:55 +0000 (08:36 +0200)]
Fix buffersyncer state when merging buffers

13 months agoImplement support for the HAProxy proxy protocol
Janne Mareike Koschinski [Fri, 6 Dec 2019 09:44:50 +0000 (10:44 +0100)]
Implement support for the HAProxy proxy protocol

13 months agoMinor cleanup of metrics server
Janne Koschinski [Tue, 3 Sep 2019 17:35:17 +0000 (19:35 +0200)]
Minor cleanup of metrics server

- Remove unused raw login metric
- We won't ever have more than 4 billion sessions at a time per user

13 months agosrc: Yearly copyright bump
Manuel Nickschas [Sun, 15 Mar 2020 15:24:01 +0000 (16:24 +0100)]
src: Yearly copyright bump

Let's welcome 2020.

15 months agomultilineedit: handle unterminated mIRC codes
A. Wilcox [Mon, 3 Jun 2019 05:16:30 +0000 (00:16 -0500)]
multilineedit: handle unterminated mIRC codes

Currently, if an unterminated mIRC code is pasted into Quassel, trying to
go through input line history will cause a deadlock.  This breaks the loop
at the cost of possibly mangling the formatting of the line somewhat.
This is seen as more acceptable than locking up, and the line is invalid
anyway.

Reproducer:

```sh
printf '\00303,08HONK' | xclip -selection clipboard
```

Paste into Quassel, send, press Up arrow key.

Bug originally found by @sroracle, reported to Adélie Linux, patched by
yours truly.

15 months agoFix protocol spam on part/quit/disconnect
Janne Koschinski [Tue, 28 May 2019 11:04:06 +0000 (13:04 +0200)]
Fix protocol spam on part/quit/disconnect

15 months agoImprove identd
Janne Koschinski [Mon, 26 Aug 2019 14:51:18 +0000 (16:51 +0200)]
Improve identd

- add debug output
- improve formatting of identd responses

15 months agoUse correct data Path on Windows
Hannah von Reth [Sat, 19 Oct 2019 17:34:48 +0000 (19:34 +0200)]
Use correct data Path on Windows

15 months agoInstall notifyrc on all platforms if WITH_KF5 is True
Hannah von Reth [Sat, 19 Oct 2019 17:32:58 +0000 (19:32 +0200)]
Install notifyrc on all platforms if WITH_KF5 is True