We were calling upsert in the Annotations collection for the same annotation in all frontend instances, this could lead to the same annotation being inserted
multiple times with different ids due to concurrency.
Added the html5InstanceId of the original request to the redis message so we can use it to only call upsert in one instance.
- Return to the ResizeAndMoveSlide event to do pan&zoom, respecting the viewed width and height ratio
- Defaults zoom in toolbar to 100% like before to be more consistent
- Fit to width and Reset Zoom is back (fit tho width still has some sync problems)
- Fix to not change to first page when presenter reloads page
Parse the audio transcript before broadcasting it's content back to the
client and the recording actor. Limiting by 8 words per line and max of
2 lines to avoid CPU intensive operations over this recurring event.
Replace Calibri font family with Verdana to improve character spacing,
add relative sizing to the text content and a background padding.
Add a server-side app for the audio captions feature and record proto-events
for this data.
As it is, only behaves as a pass-through module. The idea is to include all
the business intelligence in this app.
The UserJoinedVoice* event handler checks whether the caller is banned
and ejects them. That's valid for both SIP.js and SFU-based audio
flows, but for the latter there's a specific pre-flight permission check
as well.
This adds that same ban check to the pre-flight permission probe so that
calls are rejected earlier.
Changed the names of tldraw record events to differentiate from before.
Publish tldraw.json file with all shape information during the meeting to be used in playback.
Adapted cursor.xml and panzoom.xml to store tldraw data.
Publish slides svgs to be used by playback's tldraw component (otherwise we have different image sizes in pngs and thus messing the coordinates).
Retro-compatible with old recordings.
If the user is in akka-apps' user cache (which means they are still
visible in the user list) and triggers a screenshare re-connect, the
re-connect should be allowed to minimize outages.
If the user indeeds fails to be reconnected to the whole system, then
the screen sharing sessions will be ejected when the user is
completely ejected from the system.
If the user is in akka-apps' user cache (which means they are still
visible in the user list) and triggers a camera re-connect, the
re-connect should be allowed to minimize outages.
If the user indeeds fails to be reconnected to the whole system, then
the camera sessions will be ejected when the user is completely ejected
from the system.
The SFU microphone module was using global audio authentication RPCs in
akka-apps to determine whether a mic connection is valid.
Fixes an issue where SFU microphone connections wouldn't take lock
settings in account in the permission checks.
In detail: decouple them by adding GetMicrophonePermissionReqMsg and
RespMsg. Allows flexibility on which conditionals to use in both. IMO it
is also better than renaming+adding a boolean to GetGlobalAudioPermission*
due to the fact that it gets easier to guarantee backwards compatibility
between SFU and BBB (ie SFU 2.9 keeps working on 2.4, 2.5).
If the user is in akka-apps' user cache (which means they are still
visible in the user list) and triggers an audio re-connect, the
re-connect should be allowed.
If the user indeeds fails to be reconnected to the whole system, then
the audio session will be ejected when the user is completely ejected
from the system.