quassel.git
6 weeks agocore: Clarify name of capsPendingNegotiation flag master
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.

6 weeks 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)"

2 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

2 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

2 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

2 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

2 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.

4 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.

4 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

4 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

4 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

4 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

4 months agoqa: Use QProcess::errorOccurred instead of QProcess::error if possible
Manuel Nickschas [Tue, 7 Jan 2020 19:40:01 +0000 (20:40 +0100)]
qa: Use QProcess::errorOccurred instead of QProcess::error if possible

To avoid an overloaded signal name, Qt 5.6 introduced the signal
QProcess::errorOccurred() to replace QProcess::error(). The latter one
is deprecated since Qt 5.14, so avoid using it if possible.

4 months agoqa: Replace deprecated QString::sprintf() by QString::asprintf()
Manuel Nickschas [Tue, 7 Jan 2020 19:39:38 +0000 (20:39 +0100)]
qa: Replace deprecated QString::sprintf() by QString::asprintf()

4 months agoqa: Avoid deprecation warnings for QList/QSet conversions
Manuel Nickschas [Tue, 7 Jan 2020 19:31:31 +0000 (20:31 +0100)]
qa: Avoid deprecation warnings for QList/QSet conversions

Qt 5.14 deprecated the explicit functions for converting between
QSet and QList, preferring instead the use of range-based ctors.
Unfortunately, those ctors were only added in Qt 5.14, so we can't
use them when compiling against older versions.

Add a util function for QList->QSet to keep the version check in
a single place. Replace the other direction by using QSet::values().
In some cases, conversions could be avoided altogether, or an STL
container be used easily, so do that.

4 months agoqa: Replace deprecated qVariantFromValue() by QVariant::fromValue()
Manuel Nickschas [Tue, 7 Jan 2020 18:25:38 +0000 (19:25 +0100)]
qa: Replace deprecated qVariantFromValue() by QVariant::fromValue()

Deprecated since Qt 5.14.

4 months agocommon: Always let QVariant::fromValue() deduce the type
Manuel Nickschas [Tue, 7 Jan 2020 17:39:48 +0000 (18:39 +0100)]
common: Always let QVariant::fromValue() deduce the type

In some places, we would explicitly give the type to
QVariant::fromValue(), forgoing automatic type deduction. This is
almost always redundant, and in the cases where it is not, the
input type should be explicitly cast.

Additionally, the implementation of QVariant::fromValue() subtly changed
in Qt 5.14, leading to compile errors when giving a non-decayed type
(as we did in SignalProxy::attachSignal()).

4 months agocommon: Disable enum type stream operators for Qt >= 5.14
Manuel Nickschas [Tue, 7 Jan 2020 17:34:54 +0000 (18:34 +0100)]
common: Disable enum type stream operators for Qt >= 5.14

Starting from version 5.14, Qt provides stream operators for enum
types, which collide with the ones we ship in types.h. Disable
Quassel's stream operators when compiling against Qt 5.14 or later.

Add a unit test that ensures that enum serialization honors the width
of the underlying type.

4 months agoRemove broken 32 bit Windows builds
Hannah von Reth [Fri, 6 Dec 2019 08:29:44 +0000 (09:29 +0100)]
Remove broken 32 bit Windows builds

5 months agoFix deprecation warning, to fix Werror build
Hannah von Reth [Fri, 6 Sep 2019 13:10:11 +0000 (15:10 +0200)]
Fix deprecation warning, to fix Werror build

5 months agoFix builds for cosmic/disco/eoan
Janne Mareike Koschinski [Thu, 5 Dec 2019 17:18:35 +0000 (18:18 +0100)]
Fix builds for cosmic/disco/eoan

Issue:
quassel builds for ubuntu cosmic, disco and eoan fail if running in docker on a xenial host

Reason:
cosmic, disco and eoan use Qt 5.11 and 5.12 respectively, which makes use of the new syscall statx (introduced in Qt 5.10, bionic and xenial are still on 5.9 and 5.5 respectively).
xenial supports statx, as does docker, which is up to date on these distros. but sadly libseccomp, which is used to filter syscalls, is too old on these distros.
so code sees that statx is available, tries to run it, and it returns with an error, which is considered file not existing

Solution:
update the host for our build to at least bionic, where this issue doesn’t exist

8 months agocommon: Remove the copy assignment operator from DccConfig
Manuel Nickschas [Fri, 30 Aug 2019 19:54:47 +0000 (21:54 +0200)]
common: Remove the copy assignment operator from DccConfig

Since C++11 the standard no longer mandates the existence of an
implicit copy constructor if there is a user-supplied copy assignment
operator, and GCC 9 warns about that:

src/qtui/settingspages/dccsettingspage.cpp: In member function ‘virtual void DccSettingsPage::load()’:
src/qtui/settingspages/dccsettingspage.cpp:91:71: warning: implicitly-declared ‘DccConfig::DccConfig(const DccConfig&)’ is deprecated [-Wdeprecated-copy]

Remove the copy assignment operator altogether and rely on the
implicitly generated one, which does the same thing.

8 months agocore: Don't store a reference in CoreCertManager
Manuel Nickschas [Fri, 30 Aug 2019 19:48:32 +0000 (21:48 +0200)]
core: Don't store a reference in CoreCertManager

Storing references violates all sorts of Best Practices, and also
prevents the compiler from implicitly declaring a copy assignment
operator. Store a pointer instead, and clean up the API a bit.

8 months agocore: Remove copy assignment operator from CoreIdentity
Manuel Nickschas [Fri, 30 Aug 2019 19:43:21 +0000 (21:43 +0200)]
core: Remove copy assignment operator from CoreIdentity

The operator is no longer needed due to the switch from QList
to std::vector that was done in the previous commit.

This avoids a warning in GCC 9:

    src/core/coreidentity.cpp: In member function ‘CoreIdentity& CoreIdentity::operator=(const CoreIdentity&)’:
    src/core/coreidentity.cpp:91:23: warning: implicitly-declared ‘Identity& Identity::operator=(const Identity&)’ is deprecated [-Wdeprecated-copy]

The warning is caused by relying on the implicit copy assignment
operator in the base class, which is no longer required by the
standard since C++11, and may be removed in the future.

8 months agocore: Replace QList by std::vector in the storage API
Manuel Nickschas [Fri, 30 Aug 2019 19:36:09 +0000 (21:36 +0200)]
core: Replace QList by std::vector in the storage API

QList is inefficient and deprecated; also Qt containers have
issues with ranged-for and STL algorithms. Use std::vector instead in
the storage API and fix affected code.

Modernize some affected bits by replacing weird loops with STL
algorithms.

8 months agoqa: Replace Qt module includes by class ones
Manuel Nickschas [Fri, 30 Aug 2019 18:28:10 +0000 (20:28 +0200)]
qa: Replace Qt module includes by class ones

Including whole Qt modules is less efficient than including only
the classes that are needed. Remove module includes and add class
ones as needed.

8 months agocmake: Don't needlessly sync translations
Manuel Nickschas [Wed, 28 Aug 2019 18:24:48 +0000 (20:24 +0200)]
cmake: Don't needlessly sync translations

A mismatch in the stamp file name for syncing translations caused
the sync to be run for every make. Fix the naming so we don't
re-run the syncing needlessly.

8 months agoRemove debug console and QtScript, which was deprecated with Qt5
Janne Koschinski [Sun, 4 Aug 2019 20:46:26 +0000 (22:46 +0200)]
Remove debug console and QtScript, which was deprecated with Qt5

- reduces dependencies, allows building quasselcore on most distros
  without pulling in X11
- removes unused code and dependencies, reduces size

9 months agocore: Use QLatin1String in a few places
Manuel Nickschas [Wed, 28 Aug 2019 18:13:43 +0000 (20:13 +0200)]
core: Use QLatin1String in a few places

It is recommended to use QLatin1String as an efficient wrapper
around const char*. Use this in the places recently touched.

9 months agoAdd missing includes
Manuel Nickschas [Wed, 28 Aug 2019 18:06:17 +0000 (20:06 +0200)]
Add missing includes

For std::sort we should include <algorithm>.

9 months agoAdd a flag to enable Qt deprecation warnings on Qt < 5.13
Janne Koschinski [Mon, 5 Aug 2019 10:44:27 +0000 (12:44 +0200)]
Add a flag to enable Qt deprecation warnings on Qt < 5.13

9 months agoReplace deprecated additionalFormats with formats
Janne Koschinski [Mon, 5 Aug 2019 10:34:46 +0000 (12:34 +0200)]
Replace deprecated additionalFormats with formats

9 months agoReplace deprecated QComboBox::currentIndexChanged with currentTextChanged
Janne Koschinski [Mon, 5 Aug 2019 11:44:45 +0000 (13:44 +0200)]
Replace deprecated QComboBox::currentIndexChanged with currentTextChanged

9 months agoReplace usage of deprecated QDir::operator=
Janne Koschinski [Mon, 5 Aug 2019 11:22:02 +0000 (13:22 +0200)]
Replace usage of deprecated QDir::operator=

9 months agoReplace deprecated QSqlError::number with ::nativeErrorCode
Janne Koschinski [Mon, 5 Aug 2019 10:42:32 +0000 (12:42 +0200)]
Replace deprecated QSqlError::number with ::nativeErrorCode

9 months agoReplace deprecated QModelIndex::child with QAbstractItemModel::index
Janne Koschinski [Mon, 5 Aug 2019 10:37:13 +0000 (12:37 +0200)]
Replace deprecated QModelIndex::child with QAbstractItemModel::index

9 months agoReplace QSignalMapper with new-style lambda signals
Janne Koschinski [Mon, 5 Aug 2019 10:33:47 +0000 (12:33 +0200)]
Replace QSignalMapper with new-style lambda signals

9 months agoReplace deprecated qSort with std::sort
Janne Koschinski [Mon, 5 Aug 2019 10:30:19 +0000 (12:30 +0200)]
Replace deprecated qSort with std::sort

9 months agoqtui: Set desktop file name
Jan Alexander Steffens (heftig) [Fri, 22 Mar 2019 21:37:22 +0000 (22:37 +0100)]
qtui: Set desktop file name

The XCB platform plugin defaults the WM class to the executable name,
which already matches our desktop file name. Unfortunately, the Wayland
platform plugin prepends the inverted organization domain, resulting in
an app ID of "org.quassel-irc.quasselclient", thus breaking the
association.

Set the desktop file name explicitly so the Wayland platform doesn't get
confused.

9 months agocmake: fix build on MSYS2
Rafael Kitover [Sat, 1 Jun 2019 09:48:02 +0000 (09:48 +0000)]
cmake: fix build on MSYS2

Some minor changes to allow building easily on MSYS2:

- don't check for snorenotify on MSYS2 because it segfaults on startup

- don't use -fstack-protector-strong (libssp) on MinGW because it
currently causes segfaults during static initialization

https://sourceforge.net/p/mingw-w64/bugs/755/

- use the `cat` command to read files when using the 'MSYS Makefiles'
generator, and not the cmd.exe `type` command

- update doc for the quassel_add_module function wrt. 7d0879ab

Tested to build correctly on MSYS2 with both the 'MSYS Makefiles'
generator and the Ninja generator using a native ninja.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
9 months agoCheck for KNotifications version
Kai Uwe Broulik [Tue, 30 Apr 2019 12:28:21 +0000 (14:28 +0200)]
Check for KNotifications version

setDefaultAction was introduced in KDE Frameworks version 5.31

9 months agoSet default action on notification
Kai Uwe Broulik [Tue, 30 Apr 2019 12:28:21 +0000 (14:28 +0200)]
Set default action on notification

This makes the entire notification popup clickable.
Also, mark the text for translation.

9 months agoImplement a metrics daemon to expose Prometheus metrics
Janne Koschinski [Tue, 19 Mar 2019 11:53:46 +0000 (12:53 +0100)]
Implement a metrics daemon to expose Prometheus metrics

- logs IRC and client sessions, IRC traffic in/out, login attempts per user
- logs certificate expiry time

9 months agotests: Fix include order
Manuel Nickschas [Sun, 4 Aug 2019 18:53:07 +0000 (20:53 +0200)]
tests: Fix include order

9 months agoMerge branch 'simplify-time-formatting' of https://github.com/justjanne/quassel
Daniel Albers [Fri, 2 Aug 2019 10:48:39 +0000 (12:48 +0200)]
Merge branch 'simplify-time-formatting' of https://github.com/justjanne/quassel

Closes #504.

9 months agoMerge branch 'select-account-from-cli' of https://github.com/justjanne/quassel
Daniel Albers [Fri, 2 Aug 2019 09:57:15 +0000 (11:57 +0200)]
Merge branch 'select-account-from-cli' of https://github.com/justjanne/quassel

Closes #503.

9 months agoSimplify the time formatting used in formatDateTimeToISO 504/head
Janne Koschinski [Fri, 26 Jul 2019 13:28:11 +0000 (15:28 +0200)]
Simplify the time formatting used in formatDateTimeToISO

- Previously, a convoluted workaround using deprecated functionality was
  used to ensure we would format all types of QDateTime objects
  correctly
- A new workaround has been found which ensures this works reliably
  without using deprecated functionality

10 months agoAllow selecting the core account to connect to from CLI 503/head
Janne Koschinski [Fri, 26 Jul 2019 12:19:48 +0000 (14:19 +0200)]
Allow selecting the core account to connect to from CLI

- adds new --account option
- if an account id is specified, connects to that account instead of
  asking or using any other defaults

11 months agoSend icon name instead of pixmap
Kai Uwe Broulik [Tue, 30 Apr 2019 12:27:08 +0000 (14:27 +0200)]
Send icon name instead of pixmap

Lets the notification server load an appropriate crisp pixmap depending on the size it wants to display it at

11 months agoAdd DesktopEntry to notifyrc
Kai Uwe Broulik [Tue, 30 Apr 2019 12:19:18 +0000 (14:19 +0200)]
Add DesktopEntry to notifyrc

This allows the new notification KCM to identify Quassel as an application

11 months agocmake: Lower Boost dep version 1.56 -> 1.54
Rafael Kitover [Thu, 24 Jan 2019 09:29:59 +0000 (01:29 -0800)]
cmake: Lower Boost dep version 1.56 -> 1.54

Require Boost 1.54 instead of 1.56.

Tested to compile and work correctly on OpenSUSE Leap 42.3.

Fixes #1510.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
11 months agocmake: Add ENABLE_SHARED option, default ON
Rafael Kitover [Thu, 24 Jan 2019 09:31:02 +0000 (01:31 -0800)]
cmake: Add ENABLE_SHARED option, default ON

Add an ENABLE_SHARED option, defaults to ON, when set to OFF
quassel_add_module() will build modules as static (does not affect
platforms where modules would be built as static anyway.)

The option name ENABLE_SHARED is frequently used for this purpose in
cmake.

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
11 months agoCore: in LDAP authenticator, don't try database auth with blank password
Ben Rosser [Thu, 14 Feb 2019 16:28:02 +0000 (11:28 -0500)]
Core: in LDAP authenticator, don't try database auth with blank password

In the LDAP authenticator, we were trying to do database auth against
the core with a blank password (QString()), after LDAP auth has succeeded.
This was done because there was not another way to retrieve a quassel
UserId object for a given string username.

However, if we want to support migrating a user from Database to LDAP
auth, this causes problems-- we'd need to set the password column to
whatever an empty QString() maps to in the hashing algorithm.

It seems much simpler to just add a new method to core.h to look up
a UserId object in the current storage provider when we pass it
a string username. Then we can just call that method in the LDAP
authenticator.

11 months agoCore: only try local auth if a user has the "database" auth provider set
Ben Rosser [Thu, 7 Feb 2019 19:47:50 +0000 (14:47 -0500)]
Core: only try local auth if a user has the "database" auth provider set

This commit attempts to resolve issue #1501; currently, quassel will
always attempt to do local authentication, and *then* try LDAP auth. This
makes it difficult to migrate a core from local auth to LDAP auth; users
who have local passwords can always use those passwords to log in, and there
is not a simple way to migrate them to non-local auth.

There is an "authenticator" column in the database for each user, but it
is currently only used to stop passwords from being changed for LDAP users.
This commit modifies the login flow to first check that database field--
if authenticator is not "Database", we don't try local authentication and
proceed directly to non-local authentication.

This is a bit clumsy-- I added a method to the core to look up a user's
authenticator by string. But there's no way to map that to the actual
authenticator object, because we only store one configured authenticator
per core-- so we then just check if that authenticator is "Database" or
not. I think this is something that should be improved in the future,
but as a quick fix to #1501 this is probably good enough.

11 months agotests: Verify ExpressionMatch test data won't OOB
Shane Synan [Thu, 30 May 2019 20:19:18 +0000 (16:19 -0400)]
tests: Verify ExpressionMatch test data won't OOB

Verify that the ExpressionMatch test data for test
trimMultiWildcardWhitespace won't try to access out of bounds data by
changing EXPECT to ASSERT for patternPair.size() == 2.

If the test data is wrong, the results will be undefined, so there's
no point in continuing the test.

Alternative: use std::vector's .at() function, which will raise a
runtime error if out of bounds.

11 months agotests: Verify ExpressionMatch with invalid regex
Shane Synan [Thu, 3 Jan 2019 03:54:02 +0000 (22:54 -0500)]
tests: Verify ExpressionMatch with invalid regex

Verify that ExpressionMatch behaves reasonably with an invalid
regular expression passed in, rejecting all matches and being labeled
as not valid.

This matches the test devised by justJanne in the process of
resolving a crash in Quasseldroid-NG.  We should make sure Quassel
desktop never regresses into crashing, too.

See https://git.kuschku.de/justJanne/QuasselDroid-ng/commit/f1f320782cb0bca3fb7974e7688ce33af19456cf

11 months agoImplement IRCv3 Server-Time
Janne Koschinski [Tue, 12 Feb 2019 11:00:12 +0000 (12:00 +0100)]
Implement IRCv3 Server-Time

11 months agoCleanup allowing for tags to be available at later points, adds TAGMSG
Janne Koschinski [Fri, 15 Feb 2019 13:32:31 +0000 (14:32 +0100)]
Cleanup allowing for tags to be available at later points, adds TAGMSG

11 months agoDon't server-encode twice
Janne Koschinski [Fri, 15 Feb 2019 08:24:52 +0000 (09:24 +0100)]
Don't server-encode twice

11 months agoImprove debugging for new IRCv3 functionality
Janne Koschinski [Thu, 14 Feb 2019 13:31:13 +0000 (14:31 +0100)]
Improve debugging for new IRCv3 functionality

11 months agoMinor cleanup of messages handling
Janne Koschinski [Fri, 15 Feb 2019 08:24:26 +0000 (09:24 +0100)]
Minor cleanup of messages handling

11 months agoCode cleanup
Janne Koschinski [Tue, 12 Feb 2019 11:36:53 +0000 (12:36 +0100)]
Code cleanup

11 months agoImplement IRCv3 tag parsing and sending
Janne Koschinski [Tue, 12 Feb 2019 10:54:06 +0000 (11:54 +0100)]
Implement IRCv3 tag parsing and sending

15 months agologger: export LogEntry symbols
Wolfgang Müller [Thu, 14 Feb 2019 17:54:07 +0000 (18:54 +0100)]
logger: export LogEntry symbols

15 months agologger: Dedup code, fix client Debug Log loglevel
Shane Synan [Thu, 14 Feb 2019 13:58:46 +0000 (14:58 +0100)]
logger: Dedup code, fix client Debug Log loglevel

Deduplicate code by moving LogEntry formatting into a separate
function, LogEntry::toString(), which applies timestamps and the log
level string.

Fix client Debug Log dialog to print log level using this new function.

Modify msgWithTime() to use this new function, too.

15 months agologger: resolve program name using RunMode and BuildInfo
Wolfgang Müller [Wed, 13 Feb 2019 13:48:19 +0000 (14:48 +0100)]
logger: resolve program name using RunMode and BuildInfo

15 months agologger: resolve level string in msgWithTime
Wolfgang Müller [Sat, 12 Jan 2019 18:14:28 +0000 (19:14 +0100)]
logger: resolve level string in msgWithTime

This means that the log level string is included in logs to files
and stdout even if syslog output is enabled.

15 months agologger: Make output to syslog nicer
Wolfgang Müller [Fri, 11 Jan 2019 16:45:52 +0000 (16:45 +0000)]
logger: Make output to syslog nicer

15 months agoUpdate Help>About Qt to use modern Qt logo and remove old Qt logo from repo
phuzion [Wed, 13 Feb 2019 14:28:13 +0000 (14:28 +0000)]
Update Help>About Qt to use modern Qt logo and remove old Qt logo from repo

15 months agocore: Remove updateSQLResource.sh, cleanup docs
Shane Synan [Wed, 13 Feb 2019 05:00:48 +0000 (00:00 -0500)]
core: Remove updateSQLResource.sh, cleanup docs

Remove updateSQLResource.sh as it's no longer needed.  `sql.qrc` is
now generated automatically as of commit
1a45f16a9734820fba42fe1db3f38dd1eee49df6

Update the README.md documentation in `src/core` to match.

Hooray!

15 months agocore: Remove redundant updateSchemaVersion() call
Shane Synan [Tue, 29 Jan 2019 07:52:25 +0000 (02:52 -0500)]
core: Remove redundant updateSchemaVersion() call

Remove the redundant updateSchemaVersion() call at the end of schema
migrations.  This is already called within the final iteration of the
loop.

Cleans up a leftover from f10304a35af0a7a4f8b812e467e69287d358ce7c

15 months agocore: Display problem step if storage setup fails
Shane Synan [Tue, 29 Jan 2019 04:08:30 +0000 (23:08 -0500)]
core: Display problem step if storage setup fails

Print the problematic setup step (e.g. 'setup_070_coreinfo') if
storage backend initialization fails.  This may help with debugging.

Modify setupQueries() to return a list of query strings and
resource filenames, used for the above.

15 months agocore: Track upgrade step within schema version
Shane Synan [Tue, 29 Jan 2019 04:08:03 +0000 (23:08 -0500)]
core: Track upgrade step within schema version

Track the last successful upgrade step (upgrade_###_XXX.sql) within
each schema version, storing it within 'coreinfo' table as
'schemaupgradestep'. When a schema upgrade finishes, clear
'schemaupgradestep' and set 'schemaversion'.

This allows for resuming multi-step schema upgrades that were
interrupted in the middle.

Whenever starting a schema upgrade, also check the value of
'schemaupgradestep'.  One of two states exist:
1.  Empty ('') or nonexistent
    No interrupted schema upgrade, start the next schema version
    upgrade from the first query.
2.  Contains text, e.g. 'upgrade_010_alter_sender_64bit_ids'
    The schema upgrade was interrupted, skip schema upgrade steps
    including the specified successful step, and resume from the next
    step.

For case 2, if the schema upgrade step cannot be found, warn and bail
out.  This should only happen if:
1.  The storage of successful query glitched, or the database was
    manually changed
2.  Quassel changed the filenames of upgrade queries, and the local
    Quassel core version was replaced during an interrupted schema
    upgrade

Modify SqliteStorage and PostgreSqlStorage to fetch/save the
'schemaupgradestep' key.  Clearing this key is done atomically within
updateSchemaVersion().

(Ideally, the whole upgrade would be wrapped in a transaction, but
 that doesn't seem to be easily possible.)

Modify upgradeQueries() to return a list of query strings and
resource filenames, used for tracking the upgrade step and providing
clearer feedback on what steps fail.

15 months agocommon: Don't add quotes to exit exceptions
Shane Synan [Sun, 27 Jan 2019 07:42:40 +0000 (02:42 -0500)]
common: Don't add quotes to exit exceptions

When logging exit exceptions, wrap the QString in qPrintable(),
removing the extra quotes added by the debug logger.

15 months agobuild: Add Boost 1.0 license for CMake script
Shane Synan [Sat, 26 Jan 2019 04:16:40 +0000 (23:16 -0500)]
build: Add Boost 1.0 license for CMake script

Add copy of Boost 1.0 license for the included CMake script
GetGitRevisionDescription.  This addresses licensing concerns for
Debian and derivatives.

Rename the license file according to existing licenses GPLv2 and v3.

See https://www.boost.org/LICENSE_1_0.txt

Fixes #1504

15 months agoFixes misalignment of buttons in inputwidget
Janne Koschinski [Tue, 15 Jan 2019 16:32:43 +0000 (17:32 +0100)]
Fixes misalignment of buttons in inputwidget

15 months agoFixes bug where nicklist was broken on first start
Janne Koschinski [Tue, 15 Jan 2019 16:32:08 +0000 (17:32 +0100)]
Fixes bug where nicklist was broken on first start

Starting with commit 66e6d26 the nicklist gets hidden in
setDisconnectedState, but only unhidden in loadLayout.

As loadLayout skips the setVisible(true) if the state is empty, the
actual widget gets never shown, and the nicklist dock remains empty.

This was fixed by moving the setVisible call above the conditional
return.

15 months agoApply suggested info change
Shane Synan [Wed, 13 Feb 2019 08:35:36 +0000 (09:35 +0100)]
Apply suggested info change

Co-Authored-By: justjanne <janne@kuschku.de>
15 months agoAllow configuring listen address
Janne Koschinski [Tue, 12 Feb 2019 21:42:26 +0000 (22:42 +0100)]
Allow configuring listen address

15 months agoProperly handle options if core has just now been configured
Janne Koschinski [Wed, 2 Jan 2019 18:35:43 +0000 (19:35 +0100)]
Properly handle options if core has just now been configured

15 months agoMake the identd listen on all adresses
Janne Koschinski [Wed, 2 Jan 2019 18:35:00 +0000 (19:35 +0100)]
Make the identd listen on all adresses

16 months agosrc: Yearly copyright bump
Manuel Nickschas [Thu, 24 Jan 2019 22:57:15 +0000 (23:57 +0100)]
src: Yearly copyright bump

... and it's still January!

17 months agocmake: Remove left-over debug message
Manuel Nickschas [Thu, 13 Dec 2018 20:05:04 +0000 (21:05 +0100)]
cmake: Remove left-over debug message

18 months agocmake: Add missing Boost dependency
Manuel Nickschas [Tue, 20 Nov 2018 21:29:58 +0000 (22:29 +0100)]
cmake: Add missing Boost dependency

Add a dependency to Boost in the modules that use Boost already,
so Boost headers installed in a non-standard location are found.

18 months agocmake: Create imported target for Boost, if it doesn't exist yet
Manuel Nickschas [Tue, 20 Nov 2018 22:33:56 +0000 (23:33 +0100)]
cmake: Create imported target for Boost, if it doesn't exist yet

Older versions of CMake's FindBoost.cmake don't create imported
targets for the library. Create it ourselves if necessary.

18 months agocmake: Fix OSX post-build if not all targets are requested
Manuel Nickschas [Tue, 20 Nov 2018 21:10:27 +0000 (22:10 +0100)]
cmake: Fix OSX post-build if not all targets are requested

The post-build actions for OSX were not conditional on the selected
Quassel variants, so add_custom_command would be added to an undefined
target in that case.

This bug has been there since literally forever; however, CMake < 3.0
silently ignored the custom commands in that case, and thus this
issue was not visible.

With cmake_minimum_required now set to 3.5, the new behavior is
enabled and causes an error at configure time. Fix this by adding
the missing conditions.

18 months agoserializers: Fix quint16 deserialization, remove code duplication
Manuel Nickschas [Sun, 18 Nov 2018 22:18:47 +0000 (23:18 +0100)]
serializers: Fix quint16 deserialization, remove code duplication

Fix a bug where a quint16 would be deserialized into a QVariant
of type Int (instead of UShort). This broke the sync of
autoReconnectRetries in the network settings, because the slot's
signature didn't match the type of the QVariant.

The issue was caused by QVariant not having a constructor for
quint16, thus casting it into an int. Fix this by using
QVariant::fromValue(), which handles the type correctly.

Use the opportunity to remove much of the code duplication in the
deserialization code by providing and using a template function,
avoiding potential other issues with using QVariant's constructor.

18 months agocmake: Allow to make compile warnings fatal
Manuel Nickschas [Sun, 18 Nov 2018 20:02:12 +0000 (21:02 +0100)]
cmake: Allow to make compile warnings fatal

Failing on any compile warning is very useful in CI builds,
so add an option for enabling this. The option defaults to OFF,
because we don't want to annoy users that don't want this.

Enable fatal warnings in Travis CI.

18 months agoqa: Remove dead code
Manuel Nickschas [Sun, 18 Nov 2018 19:51:01 +0000 (20:51 +0100)]
qa: Remove dead code

18 months agoqa: Simplify main window activation logic
Manuel Nickschas [Sun, 18 Nov 2018 19:50:25 +0000 (20:50 +0100)]
qa: Simplify main window activation logic

Remove code duplication, avoid a warning about unreachable code.

18 months agoqa: Don't import whole Protocol namespace
Manuel Nickschas [Sun, 18 Nov 2018 19:49:05 +0000 (20:49 +0100)]
qa: Don't import whole Protocol namespace

Explicitly specify the Protocol namespace where needed. This avoids
warnings about hidden global symbols.

18 months agocmake: Increase warning level on MSVC
Manuel Nickschas [Sun, 18 Nov 2018 18:12:10 +0000 (19:12 +0100)]
cmake: Increase warning level on MSVC

By default, CMake sets /W3, which basically outputs nothing.
The next level /W4 is more useful, but causes lots of false positives.
So let's use /W4 and silence stuff that is annoying and useless.

18 months agocmake: Set proper install paths for Windows
Manuel Nickschas [Sun, 18 Nov 2018 17:31:07 +0000 (18:31 +0100)]
cmake: Set proper install paths for Windows

Instead of dumping everything into the install prefix, set
separate paths for runtime and library artifacts.

The paths chosen match the expectations of Craft packaging, so
we can subsequently remove the overrides in the craft blueprint.

18 months agotravis: Add Ubuntu 18.10 "Cosmic" to the list of CI distros
Manuel Nickschas [Fri, 16 Nov 2018 22:29:56 +0000 (23:29 +0100)]
travis: Add Ubuntu 18.10 "Cosmic" to the list of CI distros

Add Ubuntu 18.10 to the build matrix, so we ensure we can build
on the newest Ubuntu release.

Rework the combination of build options; it's probably enough to
test building without KDE only on the baseline, since the non-KDE
code does not change between distro versions (while the installed
version of KDE Frameworks does). This keeps the number of build
jobs reasonably low.

18 months agocmake: Move version setup into a separate .cmake file
Manuel Nickschas [Fri, 16 Nov 2018 22:09:50 +0000 (23:09 +0100)]
cmake: Move version setup into a separate .cmake file

Introduce a new QuasselVersion.cmake that contains the hard-coded
version, as well as the code for retrieving version information from
git (if available). This file also sets up version.h with the given
information. Remove the corresponding code from the main
CMakeLists.txt.

Output the git revision at configure time if available, which helps
when analyzing build logs.

18 months agocmake: Consolidate compile settings
Manuel Nickschas [Thu, 15 Nov 2018 21:41:26 +0000 (22:41 +0100)]
cmake: Consolidate compile settings

Consolidate the various places where we were setting compiler options
in QuasselCompileSettings.cmake. No longer include KDE's settings;
instead, take some inspiration from their setup and incorporate this
in our own, so we not only benefit when building against KDE
Frameworks.

Properly handle CMAKE_CXX_FLAGS and friends; append the flags to the
end of our own list of flags, so one can override what we define.
Clear the variables afterwards to avoid duplication.

Get rid of some MinGW options that have been around for a decade
and are most likely no longer required.

18 months agofunchelpers: Provide overload for invoking a member function
Manuel Nickschas [Wed, 7 Nov 2018 23:09:33 +0000 (00:09 +0100)]
funchelpers: Provide overload for invoking a member function

To avoid having to write boilerplate code for invoking a member
function pointer on an object, provide an appropriate overload
for invokeWithArgsList().

Extend the test case accordingly.

18 months agofunchelpers: Support the invocation of non-void callables
Manuel Nickschas [Wed, 31 Oct 2018 23:39:21 +0000 (00:39 +0100)]
funchelpers: Support the invocation of non-void callables

Let invokeWithArgsList() handle and return the return value of
non-void callables wrapped in a QVariant. To avoid special-casing,
the invocation of a void callable also returns a (default-constructed,
thus invalid) QVariant.

To indicate failure, wrap the QVariant in a boost::optional that is
empty if the callable could not be invoked.

18 months agotravis: Use ctest to execute unit tests
Manuel Nickschas [Thu, 18 Oct 2018 22:20:30 +0000 (00:20 +0200)]
travis: Use ctest to execute unit tests

ctest gives us more options than make/ninja, for example verbose
output.

18 months agocleanup: Clean up BufferViewConfig
Manuel Nickschas [Thu, 18 Oct 2018 22:00:58 +0000 (00:00 +0200)]
cleanup: Clean up BufferViewConfig

Only mark methods as slots that need to be slots. Don't return const
refs. Un-inline everything. Rename the overload of initSetBufferList()
that isn't actually used as an init setter to simply setBufferList()
to avoid confusion.