* Initial implementation; Happy flow
* Maybe revert this
* Functional prototype
* feat(facial-expressions): get stream when changing background effect and use presenter effect with camera
* add(facial-expressions): array that stores the expressions durin the meeting
* refactor(facial-expressions): capture imagebitmap from stream with imagecapture api
* add(speaker-stats): expression label
* fix(facial-expression): expression store
* revert: expression leabel on speaker stats
* add(facial-expressions): broadcast of expression when it changes
* feat: facial expression handling on prosody
* fix(facial-expressions): get the right track when opening and closing camera
* add(speaker-stats): facial expression column
* fix(facial-expressions): allow to start facial recognition only after joining conference
* fix(mod_speakerstats_component): storing last emotion in speaker stats component and sending it
* chore(facial-expressions): change detection from 2000ms to 1000ms
* add(facial-expressions): send expression to server when there is only one participant
* feat(facial-expressions): store expresions as a timeline
* feat(mod_speakerstats_component): store facial expresions as a timeline
* fix(facial-expressions): stop facial recognition only when muting video track
* fix(facial-expressions): presenter mode get right track to detect face
* add: polyfils for image capture for firefox and safari
* refactor(facial-expressions): store expressions by counting them in a map
* chore(facial-expressions): remove manually assigning the backend for tenserflowjs
* feat(facial-expressions): move face-api from main thread to web worker
* fix(facial-expressions): make feature work on firefox and safari
* feat(facial-expressions): camera time tracker
* feat(facial-expressions): camera time tracker in prosody
* add(facial-expressions): expressions time as TimeElapsed object in speaker stats
* fix(facial-expresions): lower the frequency of detection when tf uses cpu backend
* add(facial-expressions): duration to the expression and send it with durantion when it is done
* fix(facial-expressions): prosody speaker stats covert fro string to number and bool values set by xmpp
* refactor(facial-expressions): change expressions labels from text to emoji
* refactor(facial-expressions): remove camera time tracker
* add(facial-expressions): detection time interval
* chore(facial-expressions): add docs and minor refactor of the code
* refactor(facial-expressions): put timeout in worker and remove set interval in main thread
* feat(facial-expressions): disable feature in the config
* add(facial-expressions): tooltips of labels in speaker stats
* refactor(facial-expressions): send facial expressions function and remove some unused functions and console logs
* refactor(facial-expressions): rename action type when a change is done to the track by the virtual backgrounds to be used in facial expressions middleware
* chore(facial-expressions): order imports and format some code
* fix(facial-expressions): rebase issues with newer master
* fix(facial-expressions): package-lock.json
* fix(facial-expression): add commented default value of disableFacialRecognition flag and short description
* fix(facial-expressions): change disableFacialRecognition to enableFacialRecognition flag in config
* fix: resources load-test package-lock.json
* fix(facial-expressions): set and get facial expressions only if facial recognition enabled
* add: facial recognition resources folder in .eslintignore
* chore: package-lock update
* fix: package-lock.json
* fix(facial-expressions): gpu memory leak in the web worker
* fix(facial-expressions): set cpu time interval for detection to 6000ms
* chore(speaker-stats): fix indentation
* chore(facial-expressions): remove empty lines between comments and type declarations
* fix(facial-expressions): remove camera timetracker
* fix(facial-expressions): remove facialRecognitionAllowed flag
* fix(facial-expressions): remove sending interval time to worker
* refactor(facial-expression): middleware
* fix(facial-expression): end tensor scope after setting backend
* fix(facial-expressions): sending info back to worker only on facial expression message
* fix: lint errors
* refactor(facial-expressions): bundle web worker using webpack
* fix: deploy-facial-expressions command in makefile
* chore: fix load test package-lock.json and package.json
* chore: sync package-lock.json
Co-authored-by: Mihai-Andrei Uscat <mihai.uscat@8x8.com>
Fixed analytics where event names had duplicated words (eg. calendar.calendar.selected.selected)
Group reaction buttons analytics into one event
Removed unused code
Clicking on an item when the popup drawer is displayed would keep it open.
Now clicking on any item should automatically close the drawer.
Popup was also refactored and no longer uses refs.
Created Reusable components for:
- ListItem - used by participants list and lobby participants list
- ContextMenu - used by participant context menu and advanced moderation context menu
- Quick action button - used by quick action buttons on participant list items
Moved participants custom theme to base/components/themes
Created reusable button component for all participants pane buttons (Invite, Mute All, More)
Moved web components to web folder
Moved all styles from Styled Components to JSS
Fixed accessibility labels for some buttons
Removed unused code
Updated all styles to use theme tokens
Don't cleanup URL params when jitsi is in iframe
Fixes an issue where the user right-clicks on the iframe and Reload frame. This causes a refresh of the iframe, not the whole page, but without the parameters (jwt, configOverwrite etc are all lost). The parameters are part of the URL, so by not cleaning them up we make sure that on reload we still have all params
* In order to be able to customize the background of the chat
it had not be displayed inside of a dialog. This also removes
the need to extensively use 'TouchmoveHack' component.
* Adds the ability to change panes (Chat vs Polls) using the keyboard.
* Adds accessibility attributes to panes.
* feat: (video-thumbnail) add permanent participant name to video thumbnail
* feat: (video-thumbnail) add permanent participant name to video thumbnail
* # Conflicts:
# react/features/filmstrip/components/web/Thumbnail.js
* feat: (video-thumbnail) add permanent participant name to video thumbnail fix display
* fix(translation) Reverted changes to translation parameter
Reverted param name change on translation
* feat: (video-thumbnail) add permanent participant name to video thumbnail fix display
* feat: (video-thumbnail) add permanent participant name to video thumbnail fix display
* fix(lang): update German translation (#10188)
Signed-off-by: Christoph Settgast <csett86@web.de>
* Update Virtual Background Model (#9867)
* update virtual background
* remove comments
* remove general model
* fix(lang): update French translation (#10239)
* feat: (video-thumbnail) add permanent participant name to video thumbnail fix display
* Update Occitan (#10240)
* feat: (video-thumbnail) add permanent participant name to video thumbnail
* feat: (video-thumbnail) add permanent participant name to video thumbnail
* feat: (video-thumbnail) add permanent participant name to video thumbnail fix display
* feat: (video-thumbnail) add permanent participant name to video thumbnail fix display
* feat(reactions) Added metrics for disable reaction sounds
Reordered reactions middleware alphabetically
* feat: (video-thumbnail) add permanent participant name to video thumbnail
* feat: (video-thumbnail) add permanent participant name to video thumbnail
Co-authored-by: robertpin <robert.pin9@gmail.com>
Co-authored-by: csett86 <csett86@web.de>
Co-authored-by: Roshan Pulapura <81193065+rpulapura@users.noreply.github.com>
Co-authored-by: gpatel-fr <44170243+gpatel-fr@users.noreply.github.com>
Co-authored-by: Mejans <61360811+Mejans@users.noreply.github.com>
- created `ClearableInpu`t component on web & native
- added `ClearableInput` component to participants pane and used it for search in participants list
- update `AddPeopleDialog` to use `ClearableInput`
Video quality label now becomes "performance settings".
All CSS for labels is moved to JS.
Overflow menu button is also changed to "performance settings".
* feat: Hides prejoin screen on conference in progress event.
We enter the conference view as early as possible on conference in progress as the joined event can be late in a big conference.
Also, we show conference view only when joining is in progress, for example, the with the lobby enabled where we try to join but fail, we do not want to show the conference view for a fraction of a second before showing lobby screen.
* squash: Drops CONFERENCE_JOIN_IN_PROGRESS.
* squash: Updates ljm with the new JitsiConference event.
* squash: Adds some debugs to the github action.
Easier to catch problems with package-lock.json file.
This is a stop-gap approach to remove the AtlasKit notifications stack.
Instead of using a AK FlagGroup to render our notifications (Flag components)
in, create our own container and use a fake FlagGroupContext provider, which is
what FlagGroup uses to control what flags can be dismissed.
Since we now render all notifications, the web part has been refactored to make
sure all notifications get a timer.
Added animations
Renamed DrawerPortal to JitsiPortal
Redesigned notifications
Changed notification text and icons color and added collared ribbon
We make the request for dynamic branding as soon as possible so
at the time of the request the config is not yet added to the store.
In order to fix this we get the jass brandingDataUrl &
dynamicBrandingUrl directly from the config.
Changed screen capture to non effect. Effects are used to alter the stream, this feature does not need to alter the stream, it just needs access to it
Changed image diff library. Previous library diff’ed the whole image, the new one has en early return threshold
Use ImageCaptureAPI to take the screenshot. Added polyfill for it and polyfill for createImageBitmap
Added analytics
Since iOS 15 we really need the audio stream to exist, so make sure we don't
destroy it even when "everyone starts muted" is set, we'll just mute it.
Fixes: https://github.com/jitsi/jitsi-meet/issues/10053
Signals that the bridge channel is open. It may take a few ms to get established
after the conference join, so applications might be interested in using it once
ready.
* feat(av-moderation) Ask to Unmute and remove from Whitelist
Make Ask to Unmute work without moderation
Add remove from moderation whitelist functionality
* chore(deps) lib-jitsi-meet@latest
* feat(av-moderation) Remove from moderation whitelist functionality (#1729)
* fix(chore) corrected typo in log message
* fix(e2ee) replace nullish coalescing with or
* fix(e2ee) restore initial key when RATCHET_WINDOW_SIZE reached
3b8baa9d3b...0646bc3403
Co-authored-by: Дамян Минков <damencho@jitsi.org>
* fix(av-moderation) Improve advanced moderation
Hide moderator label on disasbleModeratorIndicator
- On disasbleModeratorIndicator config hide moderator label from participants pane
Add Ask to Unmute button to mobile web
* Fix lint error
In iOS 15 we observe that not creating the audio track early may result in not
getting audio after unmuting for the first time.
Creating the audio track early means the first unmute doesn't need to add the
track to the conference, resulting in a much faster operation.
Note that creating the track early doesn't mean we will start unmuted, the track
will be muted.
Fixes: https://github.com/jitsi/jitsi-meet/issues/9996
On iOS 15 Bluetooth devices are reported twice for some reason, one with the
normal type "Bluetooth" but another type without a know (to me) type, and the
uid ends in "-reference".
While we send those unkwno devices to JS, we were not filtering them properly.
This patch skips them altogether.
Updated participants list to:
- show Moderator label
- show correct status icons (red for force muted)
- show participants in the right order
Updated moderation to:
- show moderation menu at all times
- make moderation options functional
Updated notifications:
- fixed raise hand to show name
- display moderator rights granted
Updated mute/ stop video for all dialogs to include moderation toggles
Added ask to unmute button
Fix comments on ask to unmute
Co-authored-by: robertpin <robert.pin9@gmail.com>
* Register shortcuts on mount
* Changed icon for reactions menu
* Enable reactions by default
* Fix unreadCount bug
When having unread messages and sending a reaction the unread count now shows the correct count
* Fix overflow menu bottom color when reactions are enabled
* Revert raise hand icon
* Update raise hand functionality
On desktop show raise button with arrow for reactions. Only show raise hand in the reactions menu on mobile
* Fix lint error
Add required prop to ToolboxButtonWithIcon
* Legacy support for enable reactions
If disableReactions is undefined treat it as true
* Remove unnecessary code
* Fix unread counter showing negative count
* Fix unreadCount with reactions
UnreadCount ignores all reactions messages
* Fixed typo
* Fix background color
In the case of the recorder we were not taking into account that the
local thumbnail is not visible. This was braking the rendering and
positioning of the thumbnails in tile view.
Jibri was hitting a problem where it reloads and in certain cases (remote user is screensharing) we hit this participant undefined, which stops reload and stops recording.
It is still not obvious why we try to render this on leaving the conference and for a participant that is not in the conference ... this re-render should not happen as this component should be removed from its parent when the participant is not existing.
* Update moderation in effect notifications
Only display one notification for each media type. Display notification for keyboard shortcuts as well
* Update muted remotely notification
Display name of moderator in the notification
* Fix indentation on moderation menu
* Update text for video moderation
* Added moderator label in participant pane
* Update microphone icon in participant list
For participants that speak, or are noisy, but aren't dominant speaker, the icon in the participant list will look the same as the dominant speaker icon but will not change their position in the list
* Added sound for asked to unmute notification
* Code review changes
* Code review changes
Use simple var instead of function for audio media state
* Move constants to constants file
* Moved constants from notifications to av-moderation
- on ipads, long touch open dialog now opens the context menu to the left of the thumbnail as expected
- on ipads, now we close context menus on tap out
- fix case when participant context menu's height > tileview videos' height causing scroll on videos pane
- keep toolbox open while the overflow menu is shown
- keep remote participant video thumbnail in filmstrip visible even if toolbox is hidden, if context menu is opened
- Fix bug where toolbox could be completely disabled
* fix(participant-pane) Use the sorted participant list from redux instead of sorting it on every render making it better performant. Match the participant order with that of the order in the filmstrip. Also move the participants with raised hand to the top of the list.
* ref(filmstrip) Move enableThumbnailReordering flag to testing section.
* fix(participants) Add new selectors for getting sorted participants.
* Add configuration to disable removing raised hand on dominant speaker change
* Fix lint problem
* Avoid dispatching unnecessary action
* Fix lint problem
Creating a preview of the same audio/video track kills the tracks that is already being shared in the conference. Therefore, disable camera/mic selection in the settings dialog while the user is in the call. The devices are selectable from the prejoin screen settings dialog.
* feat(responsive-ui): Keep aspect ratio for filmstrip self view on mobile web
Right now filmstrip displays self view in landscape mode.
With these changes the aspect ratio of the self view will be maintained
so on portrait mode the thumbnail will be displayed vertically.
Of course this makes sense only on mobile web.
* Code review
* Fix height
viewableItems always comes in order and indexes are always ascending. In
addition, if the array comes empty (I saw it happen on Android at least, when
scrolling like a maniac) we'd calculate the right value, instead of Infinity.