Before this commit it is impossible to tell whether a client is talking
or not once that client is locally muted.
This commit changes this by introducing a new talking state
"MutedTalking" for these special cases. In order for this talking state
to come in existence, the audio code was altered so that audio packets
are no longer dropped if the associated user is locally muted. Instead
the audio frame will pass the normal processing chain until it comes to
actually decoding it.
For Opus packets only the sample count is read out without actually
doing the work of decoding. For all other codecs the packet is decoded
as usual. In a final step the sample buffer is filled/overwritten with
zeros in order to mute the stream.
With this commit in place, the UI will indicate a user that is talking
but is muted with a special icon. Note that this is only the case in the
modern themes (Light and Dark) but not for the Classic theme as I wasn't
able to alter the talking icon accordingly. There is an altered version
of the icon added with this commit but that one doesn't render properly
within Qt (it does render everywhere else though). Making this feature
work for the classic theme is a simple matter of getting the icon to
work and then editing ClassicTheme.qrc which currently points to the
same icon as for passive users for the MutedTalking state.
With tiling window managers (e.g. i3) the TalkingUI was seen as any
other regular window and thus it was assigned its own screen space.
This is however unfitting for the TalkingUI as it is meant to take the
least amount of possible screen space.
The solution is thus to mark the TalkingUI as floatable in order to
bypass the WM's tiling logic. In order to do so, the TalkingUI is now
marked as a dialog. Dialogs however also show the "?" button in the
title bar by default, which had to explicitly be disabled as it is
absolutely useless for the TalkingUI anyways.
Fixes#4324
With tiling window managers (e.g. i3) the TalkingUI was seen as any
other regular window and thus it was assigned its own screen space.
This is however unfitting for the TalkingUI as it is meant to take the
least amount of possible screen space.
The solution is thus to mark the TalkingUI as floatable in order to
bypass the WM's tiling logic. In order to do so, the TalkingUI is now
marked as a dialog. Dialogs however also show the "?" button in the
title bar by default, which had to explicitly be disabled as it is
absolutely useless for the TalkingUI anyways.
Fixes#4324
This changes all occurances of NULL in the plugins and overlay source dir to nullptr. Additionally explicit comparisons with NULL were removed.
Implements #3763 (partly)
In #4306 a glitch in the TalkingUI was fixed that was associated with
session reuse by the server. As an additional fail-safe the respective
commit (bbfe736) also implemented a
quick check for whether the name of the user with a given ID is still
the same as the stored one for that user.
In #4325 however it was pointed out that this leads to the local user
being added to the TalkingUI every time it starts speaking. This is due
to the local user's name being written in bold meaning that it contains
HTML tag in the TalkingUI which are obviously not part of the actual
user name.
This commit fixes this issue by first stripping out any HTML tags from
the stored name before comparing it to the actual username.
Fixes#4325
In #4306 a glitch in the TalkingUI was fixed that was associated with
session reuse by the server. As an additional fail-safe the respective
commit (bbfe736b13) also implemented a
quick check for whether the name of the user with a given ID is still
the same as the stored one for that user.
In #4325 however it was pointed out that this leads to the local user
being added to the TalkingUI every time it starts speaking. This is due
to the local user's name being written in bold meaning that it contains
HTML tag in the TalkingUI which are obviously not part of the actual
user name.
This commit fixes this issue by first stripping out any HTML tags from
the stored name before comparing it to the actual username.
Fixes#4325
This changes all occurances of NULL and Q_NULLPTR in the mumble source dir to nullptr. Additionally comparisons with NULL were changed to if(pointer) if it would not be confusing. (e.g. booleans as parameters setEnabled(pointer != nullptr)).
I plan to do the rest of the code, however it is probably best not to do everything at once.
Obviously I couldn't check everything for regressions. It compiles and I did not experience any problems though.
Implements #3763 (partly)
This changes all occurances of NULL and Q_NULLPTR in the mumble source
dir to nullptr. Additionally comparisons with NULL were changed to `if
(pointer)` if it would not be confusing. (e.g. booleans as parameters `
setEnabled(pointer != nullptr)`)
Until now the TalkingUI assumed that session IDs of users are unique
throughout the server's lifetime. This turned out to be wrong as the
server reuses session IDs of disconnected users.
This could lead to a new user being shown with the name of an old user
in the TalkingUI as that new user was reusing the old's session ID.
With this commit a user gets deleted from the TalkingUI if it
disconnects from the server.
The new features "Omit Message Scope" and "Omit Message Author" were
somewhat broken.
The problems are adressed by transforming the message from HTML to
plaintext and creating a new TTS string that either contains no prefix
or just the scope or the author.
Fixes#4309
The new features "Omit Message Scope" and "Omit Message Author" where
somewhat broken.
The problems are adressed by transforming the message from HTML to
plaintext and creating a new TTS string that either contains no prefix
or just the scope or the author.
Fixes#4309
The location subtree for the public servers is now gone.
All public servers are now child elements of "Public Internet" regardless
of location. A flag Icon has been added to each public server to
indicate its location.
A search bar for the public servers is added. It is only visible when the
public servers are expanded. Searching for a server name and filtering
by location is possible. The "server status filters"
(Show Reachable etc...) have been moved from the context menu of the
server browser to the search dialog.
This also adds a window that is shown once the user expands the public
server list for the first time. The user is asked for consent to
transmit the IP address to each of the public servers.
If the user does not consent, the public server list is disabled.
Implements #3532
1a4d134 (part of #4287) introduced the ability to
disable TTS for specific users. The change however didn't account for
messages that are sent from the server. In these cases pSrc is nullptr
but that commit introduced code that access it without checking for
null. This lead to a SegFault as soon as a text message from the server
is received.
This commit fixes this by simply adding a null-check before accessing
the variable.
1a4d134a35 introduced the ability to
disable TTS for specific users. The change however didn't account for
messages that are sent from the server. In these cases pSrc is nullptr
but that commit introduced code that access it without checking for
null. This lead to a SegFault as soon as a text message from the server
is received.
This commit fixes this by simply adding a null-check before accessing
the variable.
Until now the TalkingUI assumed that session IDs of users are unique
throughout the server's lifetime. This turned out to be wrong as the
server reuses session IDs of disconnected users.
This could lead to a new user being shown with the name of an old user
in the TalkingUI as that new user was reusing the old's session ID.
With this commit a user gets deleted from the TalkingUI if it
disconnects from the server.
Before this PR, if the MainWindow was set to be always on top of
other windows, it could happen that the UserLocalVolumeDialog got hidden
behind the MainWindow (it wanted to open on top of it but since the
MainWindow is set to be on top of all other windows, it couldn't). This
could be especially annoying on Windows where you can't move the
MainWindow away as long as the UserLocalVolumeDialog is open (luckily
you can close it via Esc though).
In order to avoid this kind of situation, this commit make the
UserLocalVolumeDialog "inherit" the AlwaysOnTop flag from the
MainWindow. This way it can open on top of it again and won't be hidden.
These changes make it possible to disable Text-To-Speech for specific
users while still receiving the messages as normal text.
A use case for this would be muting text to speech for a music bot.
These changes make it possible to turn of TTS for a specific user while
still receiving their messages.
This setting can be managed from the context menu of a user that is
connected to the server and is only visible when TTS is enabled
globally.
A new DB table called 'ignored_tts' had to be created to persist this
setting.
This fixes a regression introduced in
b691108. In there it was thought that
there is no need to explicitly add the system CaCertificates to the SSL
configuration. This turned out to be wrong.
It was brought up that by removing this line, properly signed
certificates would also be shown as self-signed.
Fixes#4289
This fixes a regression introduced in
b691108d38. In there it was thought that
there is no need to explicitly add the system CaCertificates to the SSL
configuration. This turned out to be wrong.
It was brought up that by removing this line, properly signed
certificates would also be shown as self-signed.
Fixes#4289
Implements functionality to send an image by copy and paste into the chat bar of mumble.
This is a commonly expected behavior of any chat app. Can't see why mumble should not have one.
Furthermore it also implements Drag&Drop for images to the chatbar.