3 years agocommon: Don't return a bool from main()
Manuel Nickschas [Thu, 13 Apr 2017 20:01:30 +0000 (22:01 +0200)]
common: Don't return a bool from main()

gcc now warns about this (rightfully).

3 years agoShow timestamp format tooltips when core supports
Shane Synan [Sun, 8 Jan 2017 19:30:38 +0000 (13:30 -0600)]
Show timestamp format tooltips when core supports

Only change tooltip for away messages when supported by the core.
Restore original tooltip and concatenate together to reuse existing
translations (can be split apart if not a good idea).

Add new feature flag "AwayFormatTimestamp" to indicate when the core
supports parsing timestamp formats in away messages.

This isn't strictly required and if needed can be left out.  It just
might be confusing for the UI to say you can do something.. and it
doesn't work.

Resolves GH-270.

3 years agoUse timestamp format for manual away, not restore
Shane Synan [Sun, 8 Jan 2017 22:52:38 +0000 (16:52 -0600)]
Use timestamp format for manual away, not restore

Apply the timestamp formatting to manual /away commands, too.  This
offers consistency between the auto-away settings and manual away.

Add skipFormatting flag to handleAway/issueAway commands to skip
applying timestamp formatting.  This avoids re-processing timestamp
formatting when restarting the core, leaving any '%%' as '%%'.  The
message should already be processed once stored.

More comments!

3 years agoHandle multiple timestamp formats, escape code
Shane Synan [Sun, 8 Jan 2017 22:53:06 +0000 (16:53 -0600)]
Handle multiple timestamp formats, escape code

Move search and replace into a loop to handle multiple timestamp
format strings.  Include a limit on maximum number of iterations to
avoid any potential infinite loops (512 ought be enough for anybody).

Add check for empty %% group to allow using '%%%%' as '%%', two
literal percent signs.

Comments!  Document all the things.

All Quassel clients vanished from the face of the earth... %%hh:mm:ss%%
> All Quassel clients vanished from the face of the earth... 23:20:34
Away since %%hh:mm%% on %%dd.MM%% - %%%% not here %%%%
> Away since 23:20 on 21.05 - %% not here %%

3 years agoOptionally include timestamp when entering away
Marcin Jabrzyk [Sun, 16 Mar 2014 22:10:01 +0000 (23:10 +0100)]
Optionally include timestamp when entering away

- In utils added function to find regexp format
- Added formatting the away message in core
- Tooltip update in client about possible away message format

3 years agoClarify settings migration logic comments
Shane Synan [Sat, 7 Jan 2017 01:16:31 +0000 (19:16 -0600)]
Clarify settings migration logic comments

Add comments clarifying use of VERSION_MINOR_CURRENT in
migrateSettings() and the switch statements in
applySettingsMigration().  It's easy enough to do one and miss the
other as they're not very close by.

(I should've commented this in the first place.  Pardon!)

Resolves GH-269.

3 years agoSort sql.qrc when generating, emphasize script
Shane Synan [Fri, 6 Jan 2017 20:07:20 +0000 (14:07 -0600)]
Sort sql.qrc when generating, emphasize script

Modify the update SQL resource script to version-sort output and
batch append it to the sql.qrc file.  This improves readability in
'git diff' output, and might slightly improve performance, too.

Move UPDATE_SQL_RESOURCE.sh to SQL/updateSQLResource.sh, making it
easier to find, right next to the other SQL management script.  This
required a few changes to the logic.

Document the new behavior in upgradeSchema.sh, keep the manual
instructions in case the script doesn't work.

Comments, comments everywhere.

(I really wish I would've known about this script earlier...)

Resolves GH-268.

3 years agoFix SASL appearing active when Use SASL unchecked
Shane Synan [Sat, 7 Jan 2017 01:52:01 +0000 (19:52 -0600)]
Fix SASL appearing active when Use SASL unchecked

Workaround SASL contents getting enabled irrespective of Use SASL
checkbox whenever sslUpdated() determines the identity does not have
an SSL key.

Simplify SASL EXTERNAL UI hide/show logic by adding an invisible
frame inside sasl QGroupBox containing all child widgets.  Only the
frame is enabled and disabled.

Fixes SASL account and password showing up as enabled when Use SASL
was not checked.

Resolves GH-267.

3 years agoUse label and Details button, check if connected
Shane Synan [Sat, 7 Jan 2017 02:40:22 +0000 (20:40 -0600)]
Use label and Details button, check if connected

Keep "Use SASL Authentication" static, to avoid confusion and
concerns with longer languages.

Add another row with an icon, text, and "Details..." button to show
current SASL availability.

Check if disconnected separately from network existing and capability
negotiation support.  Show a different message when disconnected from
the network.  This should help reduce confusion.

Move SASL status UI updates to separate function to avoid cluttering
general capability updates handling function.

3 years agoEncourage SASL over NickServ when server supports
Shane Synan [Sun, 4 Dec 2016 09:12:02 +0000 (03:12 -0600)]
Encourage SASL over NickServ when server supports

Move Use SASL Authentication above Auto Identify.

Change the label for SASL according to whether or not SASL support
is advertised by the network.  If disconnected or unknown, no change.
Otherwise, set to "Use SASL Authentication (preferred)" when known,
or "Use SASL Authentication (might not work)" when not advertised.

Unfortunately there's no way to be sure, but this seems to do the
right thing.  One can still enable and disable as before.

Add explanatory tooltips to authentication options, including
recommending SASL if you need to identify before joining channels
(this gets asked a lot in #quassel).

3 years agoHide the SASL EXTERNAL notice while loading
Shane Synan [Sun, 4 Dec 2016 05:32:08 +0000 (23:32 -0600)]
Hide the SASL EXTERNAL notice while loading

Update the status of the "SASL EXTERNAL in use" when first loading
the Network settings page.  This avoids briefly showing it when
opening the Networks settings page while loading backlog from the

3 years agoAdd capAvailable to Network akin to capEnabled
Shane Synan [Sun, 4 Dec 2016 05:43:10 +0000 (23:43 -0600)]
Add capAvailable to Network akin to capEnabled

Add capAvailable to Network, checking if the server advertised the
given capability.  This mimics capEnabled, but applies regardless of
whether or not Quassel requested the capability.

This is useful for showing elsewhere whether or not a certain
capability could've been requested.

Use this in Network::saslMaybeSupports to avoid falsely claiming SASL
support when the SASL capability wasn't advertised.  This matches the
behavior of CoreNetwork.

3 years agoMove SASL maybeSupports into Network class
Shane Synan [Sun, 4 Dec 2016 05:40:46 +0000 (23:40 -0600)]
Move SASL maybeSupports into Network class

Move IrcCap::SaslMechs::maybeSupported to the Network class,
simplifying usage.  Now there's no need to specify the capability
value, avoiding hassle for most cases when you already have the
Network object.

Update CoreNetwork to use the moved function.  Tidy!

3 years agoNew default sender colors!
Shane Synan [Fri, 2 Dec 2016 23:35:32 +0000 (17:35 -0600)]
New default sender colors!

Add a full range of 16 sender colors, loosely readable and

This results in less redundant nickname colors and possibly better
readability (subjective).  All changes can be undone, as expected.

Colors generated with an algorithm suggested to to the Pidgin
implementation.  Credit to 'lobais' for the original algorithm.

Bump settings minor version to preserve old sender colors.  This only
affects those who have used the git master branch,  and if desired
can be removed.

Algorithm code:
def genColor (n, startpoint=0):
    assert n >= 1
    # This splits the 0 - 1 segment in the pizza way
    h = (2*n-1)/(2**ceil(log(n)/log(2)))-1
    h = (h + startpoint) % 1
    # We set saturation based on the amount of green, in the range 0.6 to 0.8
    rgb = colorsys.hsv_to_rgb(h, 1, 1)
    rgb = colorsys.hsv_to_rgb(h, 1, (1-rgb[1])*0.2+0.6)
    return rgb

See https://developer.pidgin.im/ticket/4534#comment:4

Resolves GH-266.

3 years agoDetect and label changes from ourself
Shane Synan [Sat, 3 Dec 2016 03:06:41 +0000 (21:06 -0600)]
Detect and label changes from ourself

On the core, detect when changes apply to our own nick and flag the
message as Self.

On the client, work around old nick change messages lacking the Self
flag.  Working around the other messages would be more difficult.

This fixes nick change styling not correctly applying for
"sender=self" in themes.

3 years agoUse new nick for finding hash of Nick messages
Shane Synan [Sat, 3 Dec 2016 00:43:15 +0000 (18:43 -0600)]
Use new nick for finding hash of Nick messages

For nick change messages, use the new nickname for calculating the
sender hash, not the old one.  This more closely matches

Works around a limitation in the Quassel theming engine that doesn't
allow different styling for multiple nicks in one message.
Unfortunately, rewriting the necessary parts of the theme engine to
support multiple styles per nick is above my understanding right now.

3 years agoOptionally color nicknames in all messages
Shane Synan [Sat, 3 Dec 2016 00:40:30 +0000 (18:40 -0600)]
Optionally color nicknames in all messages

Find senderHash for all nickname-relevant messages that don't have
multiple nicknames (e.g. netsplits).

Add new preference "UseNickGeneralColors" to toggle sender coloring
on all available nicknames, not just action messages.  This might be
undesired by some given the level of colors, so it's kept as a
separate preference from ACTION message coloring.

Bump settings minor version to keep nickname coloring disabled for
existing setups.

3 years agoSwitch sender colors to use color palette
Shane Synan [Fri, 2 Dec 2016 22:36:36 +0000 (16:36 -0600)]
Switch sender colors to use color palette

Add "sender-color-[hash]" to the list of valid palette color roles.

Switch QtUiStyle::generateSettingsQss() to make use of the color
palette, rather than redundantly specifying the color.  This cleans
up the output of settings.qss, and (more importantly) allows custom
themes to do the same.

There's trade-offs involved with using the color palette directly
(similar to MarkerLine).  It would make the GUI capable of toggling
sender coloring in themes, which would be nice.  However, themes
would no longer be able to set sender colors independently for
different message types.

Though untested, there might be performance trade-offs with querying
the settings provider on each render, too.

This can be revisited in the future.

3 years agoAllow palette names with digits 0-9
Shane Synan [Fri, 2 Dec 2016 21:50:38 +0000 (15:50 -0600)]
Allow palette names with digits 0-9

Modify the regular expression for palette matching to allow digits
(e.g. 0-9) in the name.  There seems to be no reason to block them.

Document the palette-matching regex.

3 years agoOptionally use system locale for chat timestamp
Shane Synan [Sat, 3 Dec 2016 02:05:20 +0000 (20:05 -0600)]
Optionally use system locale for chat timestamp

Using QLocale::system().timeFormat(), check if the AM/PM designator
exists; if so, assume a 12-hour style timestamp, otherwise assume the
previous 24-hour style timestamp.

Generate a timestamp of either " hh:mm:ss" or " h:mm:ss ap" in order
to include seconds (QLocale::ShortFormat does not specify seconds).

Add new setting UseCustomTimestampFormat to switch between system
or user timestamp string.  Bump settings version minor to keep old
behavior for upgrades.

3 years agoChange ChannelMsg default to match system default
Shane Synan [Fri, 2 Dec 2016 23:04:41 +0000 (17:04 -0600)]
Change ChannelMsg default to match system default

Change ChannelMsg default to match the system text color palette.

On systems tested, "palette(text)" doesn't refer to pure black, but
instead a very dark gray (60, 60, 60).  Use that as default instead.

This won't affect existing installs as ChannelMsg is stored as
non-default if non-default colors are chosen.

3 years agoMake ErrorMsg color distinct from ServerMsg
Shane Synan [Sun, 4 Dec 2016 20:44:48 +0000 (14:44 -0600)]
Make ErrorMsg color distinct from ServerMsg

Switch ErrorMsg to a reddish color rather than the golden hues of
ServerMsg, matching the behavior of Quasseldroid.

This helps with discovering if Auto Identify fails now that SASL
authentication errors are reported in the server buffer.  It also
points out any messages Quassel doesn't handle correctly, which might
be unexpected, but should help with discovering them.

No settings migration logic included as custom colors are an
all-or-nothing approach.  Due to 'default.qss' using a system
palette color, there's no easy way to upgrade without changing
existing colors or loading all of Qt's color palettes in startup.
For example, palette(text) is dependent upon the system theme:
ChatLine {
  foreground: palette(text);

3 years agoChange CommandMsg color from purple to gray
Shane Synan [Fri, 2 Dec 2016 23:02:33 +0000 (17:02 -0600)]
Change CommandMsg color from purple to gray

The intense purple stands out a lot more than it probably needs to.
Let's switch that to a gray color.

No settings migration logic included as custom colors are an
all-or-nothing approach.  Due to 'default.qss' using a system
palette color, there's no easy way to upgrade without changing
existing colors or loading all of Qt's color palettes in startup.
For example, palette(text) is dependent upon the system theme:
ChatLine {
  foreground: palette(text);

3 years agoSwitch from kdelibs4 sounds to Plasma 5 sound files
Jonathan Riddell [Fri, 21 Oct 2016 16:07:52 +0000 (17:07 +0100)]
Switch from kdelibs4 sounds to Plasma 5 sound files

Resolves GH-260.

3 years agoMerge pull request #277 from mamarley/psqlleast
Marcus Eggenberger [Wed, 15 Mar 2017 21:38:07 +0000 (22:38 +0100)]
Merge pull request #277 from mamarley/psqlleast

Fix lastseenmsgid updates in PostgreSQL

3 years agoFix lastseenmsgid updates in PostgreSQL 277/head
Michael Marley [Thu, 9 Mar 2017 15:46:14 +0000 (10:46 -0500)]
Fix lastseenmsgid updates in PostgreSQL

GH-273 introduced a workaround for the issue where sometimes the
lastseenmsgid for a buffer was set to a msgid not in that buffer.
However, the workaround was incorrect as the "min()" function in
PostgreSQL is an aggregate function for use on a column, not a
function to return the least of a list of values passed in.  The
correct function for use here is "least()".

3 years agoMerge pull request #276 from digitalcircuit/fix-sql-postgres-newerthan
Marcus Eggenberger [Mon, 6 Mar 2017 09:01:26 +0000 (10:01 +0100)]
Merge pull request #276 from digitalcircuit/fix-sql-postgres-newerthan

core: Fix Postgres messagesNewerThan wrong buffer

3 years agocore: Fix Postgres messagesNewerThan wrong buffer 276/head
Shane Synan [Sun, 5 Mar 2017 19:39:38 +0000 (13:39 -0600)]
core: Fix Postgres messagesNewerThan wrong buffer

Make the inner SELECT statement use the buffer ID for bufferid, NOT
the messageid.

This fixes select_messagesNewerThan using the wrong variable for the
buffer ID, causing more recent messages to not show up when fetching
backlog with the "Unread messages" method.

Fixes regression in pull request #273, missed by pull request #274.

NOTE: The client still needs fixed to stop sending invalid IDs.  That
should be addressed with another set of commits.

See https://github.com/quassel/quassel/pull/274#issuecomment-284205802

3 years agoMerge pull request #274 from digitalcircuit/fix-sql-inconsistencies
Marcus Eggenberger [Sun, 5 Mar 2017 11:24:57 +0000 (12:24 +0100)]
Merge pull request #274 from digitalcircuit/fix-sql-inconsistencies

Fix SQLite setup, PostgreSQL migrate, cleanup SQL

3 years agoFix SQLite buffer setup, fix PostgreSQL migration 274/head
Shane Synan [Sat, 4 Mar 2017 22:15:13 +0000 (16:15 -0600)]
Fix SQLite buffer setup, fix PostgreSQL migration

Remove the ALTER TABLE command, this isn't needed during setup as the
buffer's getting created for the first time.

Add the CHECK constraint as seen in the upgrade script, limiting the
value of lastseenmsgid.

Add handling for lastmsgid when migrating from SQLite to PostgreSQL.

Fix 'SELECT populate_lastmsgid()' call by first resetting the query.

This fixes breakages caused by incomplete work in pull request #273.

3 years agoAdd lastmsgid limit on fetching backlog to SQLite
Shane Synan [Sat, 4 Mar 2017 21:09:14 +0000 (15:09 -0600)]
Add lastmsgid limit on fetching backlog to SQLite

Copy lastmsgid fetch limit improvements from PostgreSQL to SQLite,
improving performance by not requiring scanning from the start of the
backlog table to the present.

This builds upon pull request #273, including the original intent of
improving performance for unread backlog fetching.  The original pull
request left out these lines when applying the PostgreSQL changes to

NOTE:  The client-side generating these invalid values should be
fixed in future commits.

3 years agoUnify SQL filenames, sort sql.qrc
Shane Synan [Sun, 5 Mar 2017 04:58:00 +0000 (22:58 -0600)]
Unify SQL filenames, sort sql.qrc

Unify SQL filenames, renaming PostgreSQL 'select_messages' to
'select_messagesNewestK', and renaming SQLite 'select_messages' to

Sort sql.qrc alphabetically.

This makes it easier to see which functionality is related, e.g. when
making future schema changes.  Sorting improves 'git diff' output.

3 years agoAdd documentation, clean up whitespace
Shane Synan [Sun, 5 Mar 2017 04:57:51 +0000 (22:57 -0600)]
Add documentation, clean up whitespace

Maintain tabs in .sql files, remove extra newline.

Add documentation to the setLastMsg function.

This helps maintain consistency with the other files.

3 years agoMerge pull request #273 from ReimuHakurei/master
Marcus Eggenberger [Sat, 4 Mar 2017 14:37:15 +0000 (15:37 +0100)]
Merge pull request #273 from ReimuHakurei/master

Improve performance of PostgreSQL database in instances where buffers exist with no recent activity

3 years agoPort the previous PostgreSQL improvements to SQLite3. 273/head
Alex Ingram [Sat, 4 Mar 2017 02:34:20 +0000 (20:34 -0600)]
Port the previous PostgreSQL improvements to SQLite3.

3 years agoPostgreSQL: Improve performance and squish bug.
Alex Ingram [Fri, 3 Mar 2017 20:05:30 +0000 (14:05 -0600)]
PostgreSQL: Improve performance and squish bug.

Improve performance of the unread messages backlog fetcher by using a normal JOIN instead of a LEFT JOIN.

Correct for bug in which buffer.lastseenmsgid was set to a value higher than buffer.lastmsgid. This is a client bug, but this prevents it from screwing up the database.

3 years agoImprove PostgreSQL performance for unread message fetch method, too.
Alex Ingram [Fri, 3 Mar 2017 16:34:23 +0000 (10:34 -0600)]
Improve PostgreSQL performance for unread message fetch method, too.

3 years agoImprove performance of PostgreSQL for large databases.
Alex Ingram [Fri, 3 Mar 2017 05:40:23 +0000 (23:40 -0600)]
Improve performance of PostgreSQL for large databases.

This change requires a change to the database schema.

Currently, in cases where buffers exist that have not had any activity for an extended period of time, during initial backlog fetching, Quassel will have to scan backwards through all activity in all buffers until it reaches activity for the buffer in question.

This adds an additional field to the buffer table, "lastmsgid", which is the messageid of the most recent message added for that buffer. This improves performance by allowing Quassel to skip straight to where the most recent activity was, instead of scanning millions of rows (in large databases) in futility.

4 years agoSplit messages on newlines as per IRC protocol
Shane Synan [Tue, 27 Dec 2016 13:26:03 +0000 (08:26 -0500)]
Split messages on newlines as per IRC protocol

When handling user input sent over the protocol, split apart messages
on QChar::LineFeed, processing and displaying each as individual
messages sent one after the other.  This applies to /query, /say,
/notice, and /me.  Otherwise, the IRC protocol interprets anything
after each line break as a new message.

Fixes inability to send multi-line content via copy-paste on
Quasseldroid.  Quassel desktop currently works around this issue by
sending multiple individual messages for every line break.

Test case:
1.  Install Quasseldroid (stable or alpha), connect to a core
2.  Copy some text to the Android clipboard that has a line break in
    it (not just word-wrap).
3.  Paste into Quasseldroid
4.  Send message

Before: Message shows up with line break (LF character on desktop),
        IRC server treats all lines after first as raw commands.

After:  Message gets split into multiple smaller messages at each
        line break.

This should also work for /query, /say, /notice, and /me.

See: https://tools.ietf.org/html/rfc1459#page-8

Closes GH-263.

4 years agoMake reloadCerts also handle the IPv6 server
Willem Jan Palenstijn [Sun, 27 Nov 2016 13:34:07 +0000 (14:34 +0100)]
Make reloadCerts also handle the IPv6 server

Closes GH-264.

4 years agoDo a full install by default
Hannah von Reth [Sat, 22 Oct 2016 13:37:55 +0000 (15:37 +0200)]
Do a full install by default

Closes GH-261.

4 years agoFix AppVeyor Chocolatey failures by retrying
Daniel Albers [Mon, 28 Nov 2016 18:20:45 +0000 (19:20 +0100)]
Fix AppVeyor Chocolatey failures by retrying

Merges pull request #265 from digitalcircuit/fix-ci-retry-chocolatey

4 years agoFix typo Chocolately -> Chocolatey 265/head
Shane Synan [Mon, 28 Nov 2016 11:46:31 +0000 (05:46 -0600)]
Fix typo Chocolately -> Chocolatey

Official name is Chocolatey, e.g. https://chocolatey.org/ .

(The number of times I've mistyped this myself...)

4 years agoRetry Chocolatey install to workaround failures
Shane Synan [Mon, 28 Nov 2016 11:39:49 +0000 (05:39 -0600)]
Retry Chocolatey install to workaround failures

Automatically retry up to 3 times on failure when installing
Chocolatey modules, using the 'appveyor-retry' script.  This can be
removed later if needed.

Sometimes Chocolatey returns a 404 for a package that exists.  This
happens a lot.  The official fix is to get the Business edition for
the more-stable private CDN, but since we're an open-source community
effort, sometimes a little kludgery goes a long way.

See http://help.appveyor.com/discussions/suggestions/816-generic-wrapper-for-retry#comment_40579488
And https://github.com/appveyor/ci/issues/418

4 years agoFix hang for single result search after others
Shane Synan [Thu, 13 Oct 2016 08:39:14 +0000 (03:39 -0500)]
Fix hang for single result search after others

Add check for equal start and end indices in updateHighlights, stop
the search loop when this happens.  Regular search still seems to
work fine (if you found this via 'git blame', whoops).

Unfortunately, this seems specific to the contents of a buffer.
First, find a buffer that you've encountered freezing, and keep track
of what was loaded, where it was, and the two most recent search

For example...
1.  Load some backlog to a buffer
2.  Search for term with any number of matches
3.  Making sure to -type over existing words without first
    backspacing-, search for another term with only one match

Expected: Search results found, no freezing
Actual:   Quassel hangs.  startPos and endPos = same place,
          start = 0, end = 0, _currentHighlight appears to retain
          values from the previous search.

Resolves GH-259.

4 years agoRe-add execute permissions to bundled inxi
Shane Synan [Tue, 4 Oct 2016 06:54:42 +0000 (01:54 -0500)]
Re-add execute permissions to bundled inxi

Re-add execute permissions to bundled copy of inxi, letting Quassel
run it via /exec (including /sysinfo and /inxi).

Finishes up upgrade started in 83923d7c121dbcf514d4ff5b0ac2abb6eb08c6b9

Resolves GH-258.

4 years agoFix CoreNetwork::updateRateLimiting comments
Shane Synan [Fri, 30 Sep 2016 22:42:13 +0000 (17:42 -0500)]
Fix CoreNetwork::updateRateLimiting comments

Expand and fix opening summary comment, also remarking that the token
bucket should -not- be reset in this function.

Fix description of logic for _skipMessageRates.

Fix alignment of indented comments describing variables.

Resolves GH-257.

4 years agoHide AutoWHO for nicks without IrcUser objects
Shane Synan [Thu, 29 Sep 2016 00:28:28 +0000 (19:28 -0500)]
Hide AutoWHO for nicks without IrcUser objects

Don't require an IrcUser to exist when checking if WHO replies should
be hidden.  The nickname is enough for checking.

This mimics CoreSessionEventProcessor::processIrcEvent403, where
ERR_NOSUCHCHANNEL replies are hidden if nickname is in the list
regardless of whether or not an IrcUser object exists.

Potentially fixes AutoWHO replies showing in the server buffer when
nicks quickly join and leave channels, resulting in the IrcUser
object getting destroyed before the server replies to the AutoWHO

It's difficult to recreate the issue on demand, so it's quite
possible there's more to fix.

Resolves GH-256.

4 years agoDisable high DPI scaling on anything but Windows
Martin T. H. Sandsmark [Sun, 25 Sep 2016 14:18:35 +0000 (16:18 +0200)]
Disable high DPI scaling on anything but Windows

The automatic scaling only works well on Windows.

See e. g. e33532e048fa12ee32429ca83ee31aa8f065147d in qttools,
QTBUG-50698 and QTBUG-52318.

Resolves GH-254.

4 years agoEnable per-chat history, line wrap by default
Shane Synan [Sat, 24 Sep 2016 06:59:05 +0000 (01:59 -0500)]
Enable per-chat history, line wrap by default

Enable input widget per-chat history and line wrapping by default,
following the behavior of Quassel Web and most Messaging/SMS apps
(HexChat does per-chat history by default, but not line wrapping).

Bump settings minor version to 3, preserve old defaults for upgrades.

This shows the minimum necessary to change default settings while
preserving previous defaults for existing installs.

Resolves GH-253.

4 years agoKeep old clients from removing message rate delay
Shane Synan [Thu, 22 Sep 2016 01:24:48 +0000 (20:24 -0500)]
Keep old clients from removing message rate delay

Add a guard against zero message delay in setMessageRateDelay,
following the error-checking of setMessageRateBurstSize.  This blocks
old clients from setting message rate delay to 0 seconds for newly-
created networks, improperly overriding the default of 2.2 seconds.

This affects creating a network in an old client, switching to a new
client, then enabling custom rate-limits.

The supported method for removing rate limits by setting Unlimited to
true still works.

Resolves GH-252.

4 years agoDefault to sqlite backend in core creation wizard
Ben Rosser [Mon, 19 Sep 2016 04:41:21 +0000 (00:41 -0400)]
Default to sqlite backend in core creation wizard

This introduces the notion of a "default" storage backend into
the core by adding a function (Core::isStorageBackendDefault),
which returns true if a given Storage object is 'default' and
false if not. This information is then added to the BackendInfo
dictionary passed through the protocol to the user interface,
which ensures the backend that is default will always be the
one displayed by default.

This change was prompted by conversation in IRC with [Saint]
and @digitalcircuit about making core creation slightly more

This allows us to, potentially, change the default storage
backend shown at core creation time should at some point
another backend be introduced, without having to modify
the interface.

It is a little weird having "isDefault" be an attribute of
*each* storage backend, but this was the simplest way to do
it without modifying the handshake. (Whichever is the last
storage backend to claim to be the default will win).

(As an aside, should this be merged and should #170 be merged
I'll implement something similar for authenticators in a
separate PR).

Resolves GH-250.

4 years agodcc: Add settings page for DCC configuration dcc
Manuel Nickschas [Sat, 8 Oct 2016 15:06:13 +0000 (17:06 +0200)]
dcc: Add settings page for DCC configuration

4 years agodcc: Add persistent settings for core-side DCC
Manuel Nickschas [Fri, 7 Oct 2016 22:40:46 +0000 (00:40 +0200)]
dcc: Add persistent settings for core-side DCC

This introduces a new syncable object DccConfig that holds core-side
DCC settings, such as the network configuration. The configuration
is persisted as a per-user setting in the database.

The CoreSession's DccConfig instance is synced to connected clients
and accessible via the Client singleton.

4 years agodcc: Clean up TransferManager a bit
Manuel Nickschas [Fri, 7 Oct 2016 22:30:03 +0000 (00:30 +0200)]
dcc: Clean up TransferManager a bit

4 years agocommon: Work around SFINAE issues in MSVC
Manuel Nickschas [Thu, 6 Oct 2016 17:42:38 +0000 (19:42 +0200)]
common: Work around SFINAE issues in MSVC

MSVC 2015 still has... issues with SFINAE, so the usual way to use
std::enable_if doesn't compile. So let's try and SFINAE this in a
different way until MS fixes their compiler.

4 years agodcc: Name TransferManager object for syncing
Manuel Nickschas [Wed, 5 Oct 2016 17:29:19 +0000 (19:29 +0200)]
dcc: Name TransferManager object for syncing

This magically fixes older clients who try to sync an unnamed
TransferManager with unknown data types.

4 years agocommon: Remove unused Exception type
Manuel Nickschas [Tue, 4 Oct 2016 21:01:40 +0000 (23:01 +0200)]
common: Remove unused Exception type

Also fix a typo in docs.

4 years agocommon: Add generic stream operators for enum types
Manuel Nickschas [Tue, 4 Oct 2016 20:53:01 +0000 (22:53 +0200)]
common: Add generic stream operators for enum types

These operators use the underlying type of a given enum to
(de)serialize to and from QDataStream.

4 years agodcc: Retrieve transfer list on TransferManager change
Manuel Nickschas [Mon, 3 Oct 2016 23:25:18 +0000 (01:25 +0200)]
dcc: Retrieve transfer list on TransferManager change

If TransferModel is given a new manager, it should retrieve the
list of transfers just in case (even though, in practice, the manager
should not hold any transfers right after sync).

4 years agodcc: Always clean up if a transfer completed or failed
Manuel Nickschas [Thu, 29 Sep 2016 19:23:03 +0000 (21:23 +0200)]
dcc: Always clean up if a transfer completed or failed

4 years agodcc: Properly sync TransferManager
Manuel Nickschas [Wed, 28 Sep 2016 21:04:17 +0000 (23:04 +0200)]
dcc: Properly sync TransferManager

Existing transfers were not synced to the client. With this commit,
the list of transfer IDs is marked as a Q_PROPERTY and thus synced
Also provides the necessary serialization support.

4 years agodcc: Only show file receive dialog for new transfers
Manuel Nickschas [Wed, 28 Sep 2016 21:03:27 +0000 (23:03 +0200)]
dcc: Only show file receive dialog for new transfers

... and not for ones that have been around on the core already
prior to syncing.

4 years agodcc: Protect DCC file transfer support by a feature flag
Manuel Nickschas [Wed, 28 Sep 2016 21:02:50 +0000 (23:02 +0200)]
dcc: Protect DCC file transfer support by a feature flag

4 years agodcc: Add rudimentary view for file transfers
Manuel Nickschas [Fri, 10 Jun 2016 22:10:33 +0000 (00:10 +0200)]
dcc: Add rudimentary view for file transfers

For now this is just a stock QTableView for visualizing the
TransferModel. Will be replaced by a proper view later.

4 years agodcc: Introduce TransferModel for DCC file transfers
Manuel Nickschas [Wed, 8 Jun 2016 20:18:14 +0000 (22:18 +0200)]
dcc: Introduce TransferModel for DCC file transfers

This model serves as input for a yet-to-come widget for displaying
the current list of transfers.

4 years agoUse override in a few more places to avoid compiler warnings
Manuel Nickschas [Tue, 27 Sep 2016 21:03:30 +0000 (23:03 +0200)]
Use override in a few more places to avoid compiler warnings

Clang complains about inconsistent use of virtual and override, and
for some reason the only offender when building against Qt 5 was
multilineedit.h. This commit fixes the ungodly amount of warnings that
that one header produced.

When building against Qt 4 we still get warnings from the various
application classes; however fixing them triggers a million new
warnings related to Q_OBJECT which is beyond our control, so we'll
just have to wait until we can finally deprecate support for Qt 4
for good...

4 years agoAvoid deprecation warnings with Qt 5.7
Manuel Nickschas [Tue, 27 Sep 2016 20:28:46 +0000 (22:28 +0200)]
Avoid deprecation warnings with Qt 5.7

The versioned QStyleOption derivatives are deprecated in Qt 5,
and Qt 5.7 actually gets noisy about that. So remove these by
the unversioned class names.

4 years agoFix my AboutData entry
Michael Marley [Mon, 19 Sep 2016 21:59:21 +0000 (17:59 -0400)]
Fix my AboutData entry

My PPAs only work for Ubuntu, not Debian.

Resolves GH-251.

4 years agoUpdate ThanksTo in the AboutDlg
Manuel Nickschas [Tue, 20 Sep 2016 21:06:10 +0000 (23:06 +0200)]
Update ThanksTo in the AboutDlg

This was pretty outdated and mentioned companies that no longer exist.
Bring the content of that tab into the present. Add new icons, remove

Also modernize the code a tiny bit, and ease the life of translators
by factoring out most of the RichText stuff.

4 years agoUpdates old links/urls in the about dialog
Bernhard Scheirle [Thu, 15 Sep 2016 11:11:34 +0000 (13:11 +0200)]
Updates old links/urls in the about dialog

4 years agoUpdate ChangeLog
Manuel Nickschas [Mon, 19 Sep 2016 21:18:39 +0000 (23:18 +0200)]
Update ChangeLog

4 years agoUpdate AboutData
Manuel Nickschas [Mon, 19 Sep 2016 21:17:50 +0000 (23:17 +0200)]
Update AboutData

New contributors, and one new author!

4 years agoUse Qt::AA_UseHighDpiPixmaps
Hannah von Reth [Thu, 8 Sep 2016 11:30:26 +0000 (13:30 +0200)]
Use Qt::AA_UseHighDpiPixmaps

This will fix some issues... and introduce new ones:

* Some pixmaps are now cut
* Old banner pixmap still pixelated
* Overall looks much less pixelated

Resolves GH-248.

4 years agoBuild with Qt5 by default
Michael Marley [Wed, 7 Sep 2016 21:34:20 +0000 (17:34 -0400)]
Build with Qt5 by default

This basically reverses the old default behavior.  Now, Qt5 is used
by default if neither USE_QT4 nor USE_QT5 is set or if they are
both set.

Resolves GH-246.

4 years agoUse case-insensitive match for buffer search
Shane Synan [Tue, 6 Sep 2016 09:49:16 +0000 (04:49 -0500)]
Use case-insensitive match for buffer search

When filtering buffers via the quick search bar (Ctrl-S), use
case-insensitive matching.  This allows typing lowercase to find
proper names, makes randomly hitting shift not matter, etc.  This
mimics the default behavior of the Ctrl-F find bar.

Resolves GH-245.

4 years agoEnable Nick Toolbar
romibi [Thu, 19 Nov 2015 17:55:00 +0000 (18:55 +0100)]
Enable Nick Toolbar

Nick Toolbar not visible by default.

Resolves GH-243.

4 years agoOnly load the `EnableSpellCheck` setting for KDE4 users.
Bernhard Scheirle [Fri, 19 Aug 2016 06:06:40 +0000 (08:06 +0200)]
Only load the `EnableSpellCheck` setting for KDE4 users.

Others either have no spell checking at all or use KF5 Sonnet with
its own settings / settings page.

Resolves GH-242.

4 years agoPrevent the spelling highlighter from disabling itself
Bernhard Scheirle [Fri, 19 Aug 2016 06:15:03 +0000 (08:15 +0200)]
Prevent the spelling highlighter from disabling itself

Resolves GH-241.

4 years agoFix multiline textedit not expanding on OS X
A. V. Lukyanov [Thu, 11 Aug 2016 07:57:27 +0000 (10:57 +0300)]
Fix multiline textedit not expanding on OS X

Fixes #1212. Resolves GH-240.

4 years agoOn OS X restore from both dock and tray
A. V. Lukyanov [Wed, 3 Aug 2016 18:47:26 +0000 (21:47 +0300)]
On OS X restore from both dock and tray

4 years agoOn OS X restore from dock
A. V. Lukyanov [Wed, 3 Aug 2016 02:16:29 +0000 (05:16 +0300)]
On OS X restore from dock

4 years agoOn OS X allow minimize on close
A. V. Lukyanov [Tue, 2 Aug 2016 18:34:56 +0000 (21:34 +0300)]
On OS X allow minimize on close

4 years agoQueryBufferItem disconnect IrcUser when removing
Shane Synan [Wed, 27 Jul 2016 06:53:53 +0000 (02:53 -0400)]
QueryBufferItem disconnect IrcUser when removing

Add call to disconnect() when removing IrcUser from QueryBufferItem,
preventing _ircUser from triggering removeIrcUser() again when it's
destroyed by going out of scope.  Additionally, limit dataChanged()
to when IrcUser is removed.  May offer slight speed benefits.

Fixes at least one case of the client showing some nicknames as
offline when they're actually available (e.g. restarting the client
without restarting the core reveals them as online).

Test case from Bitlbee - receive following (no delay between AWAYs):
:nick!name@gmail.com JOIN :&bitlbee
:nick!name@gmail.com AWAY :Away (Testing)
:nick!name@gmail.com QUIT :Leaving...
:nick!name@gmail.com AWAY :User is offline

Before, 'nick' was wrongly shown as not available.  After, 'nick' is
shown as away with the message "User is offline".

(Bitlbee does this as GTalk/XMPP allow for messaging offline users)

Resolves GH-239.

4 years agoShow IRC server error messages when unexpected
Shane Synan [Tue, 6 Sep 2016 21:33:58 +0000 (16:33 -0500)]
Show IRC server error messages when unexpected

Handle ERROR replies from IRC servers, displaying the error message
in the status buffer.

Add method 'disconnectExpected' to CoreNetwork to expose when a
disconnect is expected.  As we're expecting a server error message
when issuing QUIT, hide it to avoid showing redundant information.

This fixes users getting disconnected by the server without any way
to find out why.

Resolves GH-238.

4 years agoFix disconnected networks not collapsing on login
Shane Synan [Tue, 26 Jul 2016 21:42:45 +0000 (17:42 -0400)]
Fix disconnected networks not collapsing on login

Remove call to expandAll() - later calls to setExpandedState() should
automatically expand connected networks.

Before, Qt4 would collapse disconnected networks and expand connected
networks, but Qt5 would always expand both.  After, both collapse
disconnected and expand connected.

Resolves GH-237.

4 years agoUse Qt5.7 for appveyor.
Hannah von Reth [Sat, 9 Jul 2016 18:04:59 +0000 (20:04 +0200)]
Use Qt5.7 for appveyor.

Also use gcc 5.3 shipped by Qt.

Resolves GH-231.

4 years agoAdd popup to "(Dis-)Connect from/to IRC" to prevent unwanted action
romibi [Sun, 28 Aug 2016 12:05:38 +0000 (14:05 +0200)]
Add popup to "(Dis-)Connect from/to IRC" to prevent unwanted action

Resolves GH-160.

4 years agoAdd function to "(Dis-)Connect from/to all" in connection dropdown
romibi [Sun, 14 Feb 2016 10:50:44 +0000 (11:50 +0100)]
Add function to "(Dis-)Connect from/to all" in connection dropdown

If I'm not mistaken there needs to be one ActionType per different
button layout (with icon/text only)...

4 years agoChange Icons
romibi [Thu, 19 Nov 2015 13:06:01 +0000 (14:06 +0100)]
Change Icons

4 years agoAdd "Connect to Core" and "Disconnect from Core" buttons to main toolbar
romibi [Thu, 19 Nov 2015 13:04:56 +0000 (14:04 +0100)]
Add "Connect to Core" and "Disconnect from Core" buttons to main toolbar

4 years agoRemove CoreInfo from the ClientRegistered handshake message
Manuel Nickschas [Tue, 13 Sep 2016 22:46:07 +0000 (00:46 +0200)]
Remove CoreInfo from the ClientRegistered handshake message

This string was only used by pre-0.5 clients, and even then only
for displaying information on the connection dialog during the
handshake phase, so it is safe to remove. This prevents the core
from leaking information about itself before a successful login.

4 years agoSkip rate limit for login, capability negotiation
Shane Synan [Wed, 7 Sep 2016 05:35:48 +0000 (00:35 -0500)]
Skip rate limit for login, capability negotiation

Disable message rate limit during nick registration and capability
negotiation (Network::Initializing).  Once network initialization
is complete (Network::Initialized), re-apply configured rate limits.

Helps fix connection timeouts during login on servers with SASL
enabled, multiple capabilities negotiated, and a strict 10s login

Add flag 'forceUnlimited' to updateRateLimiting() which temporarily
overrides user preferences to skip all rate limiting.  User
preferences can be applied afterwards by calling updateRateLimiting()
without setting 'forceUnlimited'.

Resolves GH-236.

4 years agoImplement custom rate limits
Shane Synan [Mon, 5 Sep 2016 21:26:44 +0000 (16:26 -0500)]
Implement custom rate limits

Add custom rate limits flag and settings.
> In database, add 'usecustommessagerate', 'messagerateburstsize',
'messageratedelay', and 'unlimitedmessagerate' to 'network' table,
defaulting to the values already used.  This modifies schema,
requiring a version bump, changes to migration scripts, etc.
Use 4 upgrade scripts as SQLite does not support adding multiple
columns at once.
> In protocol, add 'useCustomMessageRate', 'msgRateBurstSize',
'msgRateMessageDelay', and 'unlimitedMessageRate' to Network,
configuring custom rate limits.

Add 'CustomRateLimits' feature flag so the client can tell users
about needing to upgrade their core to get this feature.

If rate limits set to unlimited, disable the token bucket timer and
send messages immediately.  Otherwise, modify the existing token
bucket variables according to the new limits.  The defaults are

Add "Use Custom Rate Limits" checkbox to network "Connection" tab
with an explanatory tooltip warning against setting too low of rate
limits.  Tooltip is modified and checkbox disabled if the core does
not support the feature.

> Database schema handling
SQLite new install - works
SQLite upgrade - works
SQLite migrate to Postgres - works
Postgres new install - works
Postgres upgrade - works

> Client/core connections
New client, new core - works
New client, old core - works, custom rates grayed out
Old client, new core - works, custom rates reset + disabled on edit
(Unfortunately there's no way to use a boolean and tell if the client
 is old, or actually disabling custom rate limits.  Would need the
 work-in-progress ClientFeature system 'esainane' designed)

4 years agoFix snapcraft version
Manuel Nickschas [Tue, 13 Sep 2016 21:44:46 +0000 (23:44 +0200)]
Fix snapcraft version

The previous commit was originally destined for the 0.12 branch, so
the version needs to be adapted.

4 years agoSnapcraft packaging for quasselcore
Christian [Sat, 16 Jul 2016 14:48:10 +0000 (16:48 +0200)]
Snapcraft packaging for quasselcore

Resolves GH-235.

4 years agoUpdate INSTALL for WebEngine/WebKit
Manuel Nickschas [Wed, 7 Sep 2016 23:40:09 +0000 (01:40 +0200)]
Update INSTALL for WebEngine/WebKit

WebEngine is a new feature, and WebKit is deprecated and unmaintained.
Update INSTALL to reflect the changes.

4 years agoMake Breeze the default icon theme
Manuel Nickschas [Wed, 7 Sep 2016 23:31:19 +0000 (01:31 +0200)]
Make Breeze the default icon theme

Also fix some related UI issues.

4 years agoAdapt macosx_makePackage.sh for svg icon support
romibi [Sat, 16 Jul 2016 13:02:12 +0000 (15:02 +0200)]
Adapt macosx_makePackage.sh for svg icon support

Resolves GH-234.

4 years agoEnable Breeze on Appveyor
romibi [Fri, 15 Jul 2016 20:24:32 +0000 (22:24 +0200)]
Enable Breeze on Appveyor