Due to RNNoise being unmaintained and the library's code being in very
poor shape, this commit excludes the RNNoise feature from Mumble by
default and discourages its use.
The library contains Opus and CELT symbols (probably due to copy&paste
of code) that can end up being called from Opus instead of its own
versions of these functions. This can lead to completely unforeseen
behavior, including crashes.
An example of this is as of writing this, enabling RNNoise on macOS
leads to a crash of Mumble pretty much as soon as it starts up with an
"invalid instruction" error. The reason being that part of RNNoise's
implementation of one of Opus's symbols contains a code path that
produces an invalid instruction in optimized builds (and a segfault in
debug builds) and this code path is taken when Opus (wrongly) uses this
function instead of its own.
Fixes#6041
This commit extends the quit behavior setting from being a binary toggle
between ask or don't ask, when quitting while connected to a server, to
give the user the options for Mumble to ask, minimize or quit straight
away, either always or only while connected to a server.
Fixes#5282
Previously the default values for the member fields in the Settings
struct (and related structs) have been performed explicitly in the
corresponding constructor (if there even was one).
Besides the constructors not using initialization lists but instead
assigning a value in the constructor body (supposedly slower than member
initialization lists), this also blew up the constructor's size and
required to duplicate all variables in there (and not forget any, which
could in turn cause UB due to uninitialized memory).
For these reasons, this commit refactors these structs to us in-class
initialization of all member variables. Some of these values might get
overwritten in the corresponding constructor (e.g. if the value depends
on a preprocessor flag) but for most variables, this is not the case.
The script for generating the Settings JSON serialization was adapted
accordingly.