Compare commits

..

785 Commits

Author SHA1 Message Date
Saúl Ibarra Corretgé
dbabdf3351 chore(rn,versions) bump app versions 2022-03-29 15:25:27 +02:00
Saúl Ibarra Corretgé
3bcde982ac chore(rn,versions) bump SDK versions 2022-03-29 15:24:08 +02:00
Saúl Ibarra Corretgé
beb301e691 fix(android,back-button) rework back button handling on Android
We used to have a registry which registered a single handlerwith RN.
THis was registered really early in the app.

When React Navigation was introduced we ddidn't realize it interacts
with the back button. In a stack nagigator it will navigate to the
previous screen. This meant our back button handling was broken.

This commit removes our previous registry and uses the RN back button
handler directly in the 2 components that use it: the conference and
bottom sheets.

Since these handlers are registered after navigation, our handlers are
going to run first so we cna implement the behavior we need, namely to
dismiss an open botom sheet or set the conference in PiP mode.
2022-03-29 15:21:40 +02:00
Calin Chitu
d0836ff651 feat(participants/native) - fix joining breakout room 2022-03-29 15:19:45 +02:00
Saúl Ibarra Corretgé
c028511aaf fix(rn,lobby) fix lobby not showing up on subsequent tries
We need to make sure to hide it explicitly so the Redux state is in sync
with reality.
2022-03-29 15:19:44 +02:00
Saúl Ibarra Corretgé
664552bc05 chore(rn,versions) bump SDK versions 2022-03-28 11:22:36 +02:00
Saúl Ibarra Corretgé
ac35eea08e feat(ios) enable Dropbox recording 2022-03-25 17:24:06 +01:00
Saúl Ibarra Corretgé
172683d645 fix(rn,recording) fix recording dialog state not updating 2022-03-25 17:23:30 +01:00
Calinteodor
858e83b09e fix(rn,recording) fix start button not being enabled 2022-03-25 11:53:30 +02:00
Calin Chitu
e2750ee58e feat(participants/native) - updated container styles 2022-03-25 11:51:01 +02:00
Calin Chitu
fe132581d4 fix(mobile/navigation) - fixed bottom color glitch 2022-03-23 19:09:52 +02:00
Saúl Ibarra Corretgé
21083e6777 fix(mobile,navigation) remove end meeting page
It will just flash for a split second and all it does is dispatch
readyToClose, so do it directly instead.
2022-03-22 12:10:38 +01:00
Calin Chitu
a3c60d5943 fix(mobile/navigation/sdk) - simplified check for sdk 2022-03-22 12:10:38 +01:00
Robert Pintilii
28556e030c fix(settings-dialog) Fix crash (#11191)
Fixes crash when the participant becomes moderator while the dialog is open
2022-03-22 13:10:08 +02:00
Shahab
e54685a566 refactor(premeeting): remove redundant styles from prejoin.scss (#11151)
"prejoin-preview-dropdown-btn" and "prejoin-preview-dropdown-icon" styles are already declared using jss in DropdownButton component.
2022-03-22 09:29:31 +02:00
Hristo Terezov
9ffb3eddb0 fix(shared-video): Can't click controls issue
The Dominant speaker name badge was overlaping the shared video
controls  (audio level, play/pause, etc).
2022-03-21 16:00:24 -05:00
Jaya Allamsetty
d064f607ec chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1399.0.0+1a98d919...v1401.0.0+584a8680
2022-03-21 14:57:59 -04:00
Aaron van Meerten
be454137f9 task: mod_muc_password_whitelist prosody module (#11184) 2022-03-21 11:38:21 -05:00
zygisS22
530369613a fix: removed platformColor from styles 2022-03-21 16:03:59 +02:00
Avram Tudor
6b0b575bd4 fix(highlight) fix notifications not disappearing (#11183) 2022-03-21 15:14:26 +02:00
Calin Chitu
aa5dd92846 patch(react-native-dialog)- replaced PlatformColor with hardcoded colors on Android 2022-03-18 16:14:26 +01:00
Gabriel Borlea
85c505a29d add(highlights): mobile flow (#11168)
* add(highlight): mobile initial flow

* fix(hightlight): get meeting fqn on mobile

* fix(dynamic-branding): extract fqn on mobile

* fix(highlights): remove local fqn extraction and grounp dispatches in batch

* fix(dynamic-branding): check if state is defined in extract fqn
2022-03-18 16:16:56 +02:00
Avram Tudor
b8e12e581f fix(recording) fix incorrect condition for recording notification message (#11167) 2022-03-18 13:21:10 +02:00
Avram Tudor
8456a63a23 fix(highlight) display option to start recording (#11146)
Fix incorrect handling of error case when highlighting moments
Allow users to start recording when trying to highlight while recording not started
2022-03-18 10:19:20 +02:00
Mihaela Dumitru
89394e69b6 fix(config): add missing toolbar button config (#11165) 2022-03-17 18:58:25 +02:00
Saúl Ibarra Corretgé
3ae50c1701 fix(css) remove no longer used AUI classes 2022-03-17 17:28:36 +01:00
Calinteodor
5da40a5fb0 fix(mobile/navigations) added LoadConfigOverlay to RootNavigator (#11067)
Converted LoadConfigOverlay to a JitsiScreen component that right now is part of navigation as ConnectingPage, plus I
separated appNative and other actions into web and native.
2022-03-17 16:13:58 +02:00
Saúl Ibarra Corretgé
f04a01ee3a fix(ios,build) use epoch seconds for build number
Avoids conflicts when a build is rejected by Apple since Fastlane cannot
detect it.
2022-03-17 14:03:24 +01:00
Christoph Settgast
9ad57127d4 feat: Use same recommendedBrowsers page for IE and browsers marked in interface_config.js (#10923)
Reason:
- This is easier overridable than then embedded react page
- Consistenty between IE and other unsupported browsers
2022-03-17 14:56:43 +02:00
Robert Pintilii
a131644dfb fix(video-constraints) Fix calculations (#11161)
Only calculate for Large Video on the web (otherwise native breaks)
Take preferred max into calculations
2022-03-17 14:18:49 +02:00
Mihaela Dumitru
649c1b0669 fix(salesforce): send link notes and default to empty string (#11160) 2022-03-17 12:58:12 +02:00
Robert Pintilii
7bcf7bb686 fix(resziable-filmstrip) Update video constraints on filmstrip resize (#11150)
Update video quality of large video as well
2022-03-16 16:57:30 +02:00
Shahab
8e035b03b0 fix(premeeting): fix undefined breakpoint in media query (#11148) 2022-03-16 15:16:01 +02:00
Saúl Ibarra Corretgé
3b05fd70a3 Revert "deps(rn) react-native-webrtc@1.98.0"
This reverts commit 4fa377c12a.
2022-03-16 12:05:06 +01:00
Shahab
64d32a5005 fix(premeeting): call hooks before any conditional block in ConnectionStatus (#11136) 2022-03-16 10:59:24 +02:00
Aaron van Meerten
fbe15aaa47 feature: patch for muc_owner_allow_kick in prosody 0.12 (#11142) 2022-03-15 21:15:14 -05:00
Hristo Terezov
16bcb1b217 feat(filmstrip): Don't reorder in small meetings. 2022-03-15 14:56:46 -05:00
Jaya Allamsetty
d4c314deb3 chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1398.0.0+aed1fa44...v1399.0.0+1a98d919
2022-03-15 15:27:25 -04:00
JohannesPertl
e8e9e24f77 fix(config) add missing notify.hostAskedUnmute 2022-03-15 19:16:56 +01:00
Jaya Allamsetty
9f72c318d6 feat(multi-stream-support) Add screenshare as a second video track to the call.
* feat(multi-stream-support) Add screenshare as a second video track to the call.
This feature is behind a sendMultipleVideoStreams config.js flag. sourceNameSignaling flag also needs to enabled. Sending multiple tracks is currently supported only on endpoints running in unified plan mode. However, clients with source-name signaling enabled and running in plan-b can still receive multiple streams .

* squash: check if there is an existing track before adding camera/desktop

* squash: enable multi-stream only on unified plan endpoints.
2022-03-15 13:24:49 -04:00
Jaya Allamsetty
5f1a4f189c chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1389.0.0+313e0dd3...v1398.0.0+aed1fa44
2022-03-15 11:18:22 -04:00
Hristo Terezov
cb9511ef2c fix(resizable-filmstrip): grid view paddings. 2022-03-15 07:48:51 -05:00
Hristo Terezov
e7c4a55add feat(tile-view): Optimize grid dimnsions.
Now the algorithm that calculates the
rows/columns/thumbnail-width/thumbnail-height configuration will
go trough all possible configurations and will choose the one
that covers with thumbnails the biggest area of the window.
2022-03-15 07:48:51 -05:00
Gabriel Borlea
3884862996 add(screenshot-capture): local participants id to participants array in metadata (#11134) 2022-03-15 14:42:26 +02:00
gpatel-fr
8f1c693c3e fix(lang) update french translation 2022-03-15 13:35:45 +01:00
Gabriel Borlea
4d2000a7a4 fix(screenshot-capture): send remote participant id instead of jid (#11132)
* fix(screenshot-capture): send remote participant id instead of jid

* fix: lint errors
2022-03-15 14:05:01 +02:00
Shahab
f6a79860f2 refactor(prejoin) use jss instead of sass in DialInDialog (#11122) 2022-03-15 13:30:38 +02:00
Shahab
4ed2d55cae refactor(participnats-pane) move participant-avatar to commmonStyles (#11120) 2022-03-15 13:29:42 +02:00
Shahab
2dad8163bb refactor(premeeting): use jss instead of sass in ConnectionStatus (#11115) 2022-03-15 13:28:16 +02:00
Shahab
985b37195c refactor(prejoin) use jss instead of sass in CallingDialog (#11117) 2022-03-15 13:16:01 +02:00
Ali Alhaidary
052b588b33 fix(lang) update Arabic translation 2022-03-15 12:13:48 +01:00
Shahab
320aeaa4df refactor(speaker-stats) use jss instead of sass in SpeakerStats (#11121) 2022-03-15 13:02:50 +02:00
Shahab
8c9c1a29be refactor(prejoin) use jss instead of sass in DeviceStatus (#11116) 2022-03-15 12:48:05 +02:00
Shahab
c25fb702c2 refactor(avatar) use jss instead of scss (#11037) 2022-03-15 12:27:40 +02:00
Shahab
a6b55b676c chore: remove unused modal ids constants (#11036) 2022-03-15 11:28:25 +02:00
Shahab
0ce6fce58d refactor(keyboard-shortcuts) use jss instead of scss 2022-03-15 09:27:07 +01:00
Avram Tudor
c5fbe14de2 fix(highlight) fix allowing disabled button to execute handler (#11128) 2022-03-14 17:18:54 +02:00
Horatiu Muresan
506f72d43e feat(remote-participant-menu) Enhance remote participant menu:
- option to hide the context menu
- option to hide private chat button
2022-03-14 16:46:19 +02:00
Дамян Минков
3d5f838870 fix: Hides ask to unmute when participant is audio unmuted. 2022-03-14 08:00:29 -05:00
Дамян Минков
e18173adc9 fix: Hides ask to unmute when av mod is disabled. Fixes #11057. 2022-03-14 08:00:29 -05:00
Robert Pintilii
096ba054db fix(filmstrip) Fix resizable filmstrip with shared video (#11124)
Calculate shared video width with the filmstrip width
Make resizable filmstrip mouseup event work with shared video iframe
2022-03-14 13:11:22 +02:00
Avram Tudor
d651ecb166 feat(recording) allow highlighting meeting recording moments (#10981) 2022-03-14 10:31:08 +02:00
Avram Tudor
faac45b5bc feat(toolbar) add flag for autohiding while chat open (#11104) 2022-03-14 10:30:31 +02:00
José Luís Andrade
14ee7e247b fix(lang) update Portuguese translation 2022-03-14 09:29:52 +01:00
Randolf Richardson
8604b1f64d Fix broken link in README.md to the handbook
Fixed the broken link to the handbook for the self-hosting installation guide.
2022-03-11 18:51:59 -06:00
Robert Pintilii
190041fc5a feat(gif) Added GIF support (GIPHY integration) (#11021)
Show GIF menu in reactions menu
Search GIFs using the GIPHY API
Show GIFs as images in chat
Show GIFs on the thumbnail of the participant that sent it
Move GIF focus using up/ down arrows and send with Enter
Added analytics
2022-03-11 15:00:49 +02:00
Ali Alhaidary
b6d55571ba fix(lang) update Arabic translation 2022-03-11 13:15:32 +01:00
Oliver Schneider
ec96acac71 fix(letsencrypt) avoid using hardcoded path
This introduces a variable which holds the path to the detected `certbot`
binary and reuses that to fix the inconsistency which arose from looking for
`certbot` but then later using the hardcoded path `/usr/bin/certbot` in
invocations. This broke snap installations of certbot.

Fixes: https://github.com/jitsi/jitsi-meet/issues/11072

Co-authored-by: Oliver Schneider <oliver@assarbad.net>
2022-03-11 13:14:42 +01:00
Horatiu Muresan
26f21e5eb9 fix(prejoin) Fix layout on reduced height 2022-03-11 11:24:05 +02:00
Robert Pintilii
6820f48fd2 fix(screensharing) Fix screensharing container width (#11089)
Fix width when the filmstrip is resized
2022-03-11 09:21:56 +02:00
Дамян Минков
14cad060cb fix: Updates token verification hooks priority. (#11105)
* fix: Updates token verification hooks priority.

Set it as the highest priorities, if denying access, better do it earlier.

* squash: Updates values.
2022-03-10 14:28:58 -06:00
Avram Tudor
f0f135ac7d fix(dynamic-branding) fix permissions screen not accounting for custom backgrounds (#11097) 2022-03-10 15:31:27 +02:00
Calinteodor
c60a51e671 feat(recording) mobile and web ui updates 2022-03-08 17:08:36 +01:00
Horatiu Muresan
4b95a5d6cb fix(language) Add lang API option
- jwt from API overwrites any jwt sent as queryparam
- `defaultLanguage` from configOverwrite converts to `lang` query param
2022-03-08 16:57:53 +02:00
Saúl Ibarra Corretgé
8b149f9138 chore(rn,versions) bump app versions 2022-03-08 15:36:41 +01:00
Saúl Ibarra Corretgé
4fa377c12a deps(rn) react-native-webrtc@1.98.0 2022-03-08 15:19:53 +01:00
Calin Chitu
371f3ee199 feat(display-name) remove DisplayNameLabel web 2022-03-08 16:15:23 +02:00
Mihaela Dumitru
98256a8d5b feat(salesforce) - link resources to the current session (#10992) 2022-03-08 11:10:30 +02:00
Jaya Allamsetty
9d8ae922a9 fix(conference) Disable audio-only mode when user switches to screenshare.
Make the behavior consistent with enabling camera when the user is audio-only mode. Also fixes an issue where the screenshare preview doesn't appear if it is enabled while the user is in audio-only mode.
2022-03-07 16:31:22 -05:00
Christoph Settgast
981e96fb6a fix(lang) update German translation
Signed-off-by: Christoph Settgast <csett86@web.de>
2022-03-05 12:06:22 +01:00
Hristo Terezov
74384bfa66 fix(video-layout):Screenshares not updated on time 2022-03-04 18:13:36 -06:00
Tudor-Ovidiu Avram
d718d9d8fb feat(face-centering) implement centering of faces in a video
Config options:

faceCoordinatesSharing.enabled
faceCoordinatesSharig.threshold
faceCoordinatesSharing.captureInterval
2022-03-04 18:13:36 -06:00
Robert Pintilii
2863b05f37 fix(dominant-label) Fix dominant speaker stage view label (#11071)
Move label to LargeVideo so that's it's centred in the view instead of the whole screen
Move vertical filmstrip max width calculation to a function and use it to set the large video width
2022-03-04 15:10:57 +02:00
Saúl Ibarra Corretgé
fca9a249dc fix(rn,dialogs,auth) fix not showing authentication dialogs
1) Fix not being able to show multiple dialogs at once in iOS
2) Fix cancelling the login dialog when XMPP auth is enabled without
   guest support
2022-03-04 13:56:56 +01:00
Doganbros
7522de033a feat: Lobby chat (#10847)
* feat(lobby): lobby chat

lobby chat support
knocking participants list updates
knocking participants conditonal checks to show message button
handle lobby chat message events
lobby messages from or to moderators only

Co-authored-by: Fecri Kaan Ulubey <f.kaan93@gmail.com>

* squash: Drop typos.

Co-authored-by: Kusi Musah Hussein <kusimusah@gmail.com>
Co-authored-by: Fecri Kaan Ulubey <f.kaan93@gmail.com>
Co-authored-by: Дамян Минков <damencho@jitsi.org>
2022-03-03 11:29:38 -06:00
humanamburu
7a4a234f8e fix(premeeting): Improve pre-meeting responsiveness for screens less than 1000px
Use 720 (HD) width as breakpoint to change screen layout
Reduce join panel size to be able to see video camera pic
2022-03-03 16:35:23 +01:00
Shahab
bc5e9e2258 fix(popper): resolve @atlaskit/popper to an unbuggy version 2022-03-03 16:19:57 +01:00
Gabriel Borlea
a65ab1c029 fix(dynamic-branding): Extract fqn from public meeting 2022-03-03 10:08:08 +02:00
Дамян Минков
5d41da9358 fix: Fixes recording dialog web rendering.
[features/base/app] <APP.componentDidCatch>:  TypeError: Failed to set an indexed property on 'CSSStyleDeclaration': Indexed property setter is not supported.
2022-03-02 13:19:34 -06:00
Pawel Domas
0936a64d3f fix(receiver constraints): source name not found
...when new participant joins.

Repro steps:

1. With p2p disabled and source name signaling enabled.
2. Start a call with 2 tabs.
3. Reload the 2nd tab.
4. The receiver constraints should be updated when the 2nd
   user rejoins. They were not updated, because
   getTrackSourceNameByMediaTypeAndParticipant doesn't have
   the track yet at the time when visibleRemoteParticipants
   are updated. This is fixed by also checking on
   the remote tracks state.
2022-03-02 11:30:38 -05:00
Дамян Минков
c6eccb1a5a Enable polls for breakout rooms by default. 2022-03-02 10:13:10 -06:00
Saúl Ibarra Corretgé
0c042ca720 fix(WaitForOwnerDialog) simplify code
Don't print the room name, which could be long and nondescriptive.
2022-03-02 09:59:55 -06:00
Jaya Allamsetty
feb1b93ce6 chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1387.0.0+6ddc054c...v1389.0.0+313e0dd3
2022-03-02 10:37:18 -05:00
Дамян Минков
75d80ad879 fix: Fixes loading web on mobile browser.
Adds missing url prop to DialInSummary and safeguard the URL creation.
2022-03-02 08:53:57 -06:00
Robert Pintilii
8bb5c114f8 fix(filmstrip) Fix resizable filmstrip (#11025)
Re-calculate tile sizes after config loaded
Make local tile always respect the ratio in interface_config
Merge calculate size for vertical view functions into one function
2022-03-02 16:46:20 +02:00
Mihaela Dumitru
936d9b41f1 feat(external-api): expose config for breakout rooms (#11055) 2022-03-02 16:15:18 +02:00
Tudor D. Pop
5d68a53f79 fix(lobby-notifications): Prevent lobby notification to remain on scr… (#11054) 2022-03-01 20:48:05 +01:00
Jaya Allamsetty
7f8c43d477 chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1376.0.0+f881b3c7...v1387.0.0+6ddc054c
2022-03-01 12:11:32 -05:00
Jaya Allamsetty
c30038236a fix(screenshare) Add and then mute the camera track after SS stops instead of not adding the track.
This is a follow up for https://github.com/jitsi/lib-jitsi-meet/pull/1944. This is needed to avoid sending a soure-remove followed by a source-add for the same ssrc. This happens when a users mutes camera->starts SS->stops SS->turns on camera on a p2p connection in Unified plan mode. Chrome fails to render the media if the same SSRC is removed and added back to the same m-line.
2022-03-01 10:54:42 -05:00
Calinteodor
577d62ea53 feat(filmstrip/toolbox) mobile ui updates (#11051) 2022-03-01 17:41:45 +02:00
Mihaela Dumitru
c35473d5e4 fix(external-api): dismiss lobby notification after handling the knocking participant (#11049) 2022-03-01 14:17:06 +02:00
hmuresan
c69fdd766c fix(video-devices) Fix video devices not scrollable 2022-03-01 13:22:39 +02:00
Дамян Минков
389d455daa feat: Passing the url to conference mapper (#11013)
* fix: Moves getDialInConferenceID, so we can reuse conf mapper url generation.

* fix: Moves getDialInNumbers, so we can reuse url generation.

* squash: Moves dialInInfo page path to constants.

* feat: Adds the location address as a param to the conf mapper request.

* feat: Adds option conf mapper and numbers urls to contain parameters (?).

* squash: Adds more doc comments.

* squash: Makes sure we strip url params if any, and they do not reach fetch.
2022-02-28 14:03:42 -06:00
Calin Chitu
1ab086247b feat(filmstrip/toolbox) mobile ui undo changes 2022-02-28 17:54:50 +02:00
Shahab
f62dc44f3e feat(screenshare) Allow desktop sharing in audioOnly mode on web.
This is already supported on mobile. The user is allowed to enable their video in audioOnly mode so it doesn't make sense to block screenshare.
2022-02-28 10:45:24 -05:00
Robert Pintilii
06800f88bf fix(thumbnail) Fix pinned participant in the resizable filmstrip (#11042)
Show border on the pinned participant in the vertical filmstrip grid view
2022-02-28 17:03:47 +02:00
Saúl Ibarra Corretgé
c9ea193d04 fix(i18n) fix some country names 2022-02-28 15:29:33 +01:00
Doug
c8895b2d04 feat(ios) Add support to the iOS SDK for the Simulator on M1 2022-02-25 22:20:34 +01:00
ulflunqvist
a1337dff38 Update main-sv.json 2022-02-25 11:50:03 -06:00
Izak Glasencnik
ebe16af809 Fix initial volume value if value is 0 2022-02-25 11:08:34 -06:00
Saúl Ibarra Corretgé
d018d19874 fix(ios) fix for building for simulator on M1
Backport of: a1c445a39c
2022-02-25 15:15:40 +01:00
Calin Chitu
be152b12d7 fix(filmstrip/toolbox) mobile ui adjustments 2022-02-25 14:26:56 +02:00
Saúl Ibarra Corretgé
c2a3d29353 fix(facial-recognition) avoid image data conversion
TF 3.0 supports getting an ImageBitmap in fromPixels: https://js.tensorflow.org/api/3.0.0/#browser.fromPixels
2022-02-25 13:00:53 +01:00
Saúl Ibarra Corretgé
1d275e1976 fix(lint) don't check for Flow types on files without the annotation 2022-02-25 11:25:17 +01:00
Jaya Allamsetty
fea59e472a chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1375.0.0+a8e3a574...v1376.0.0+f881b3c7
2022-02-24 13:45:34 -05:00
Saúl Ibarra Corretgé
c16c6688b8 chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1373.0.0+21337c75...v1375.0.0+a8e3a574
2022-02-24 11:58:26 -05:00
Robert Pintilii
2dda749b1f feat(filmstrip) Make filmstrip user resizable (#10884)
Make conference info and toolbar appear on top of the filmstrip
After a breakpoint, filmstrip pushes over the stage view instead of appearing on top
On user resize make tiles wider; after a breakpoint show grid view in the filmstrip
On filmstrip visibility toggle animate stage view resize
Added config for filmstrip with disableResizableFilmstrip
2022-02-24 14:20:37 +02:00
Robert Pintilii
fde33b72d0 fix(thumbnails, rn) Hide empty indicators container on native (#11019) 2022-02-24 14:17:02 +02:00
Saúl Ibarra Corretgé
011fe40853 fix(rn,filmstrip) fix local participant location
This applies to android only, where we don't separate the local
thumbnail.

In portrait mode the local thumbnail needs to be on the right, aka the
last one. In landscape mode it needs to be on top, aka the first.
2022-02-24 13:13:08 +01:00
Calin Chitu
34d8843a35 fix(mobile-ui) ui fixes 2022-02-23 16:56:41 +02:00
William Liang
05dc018671 feat(multi-stream-support) Replace participant connection status logic with track streaming status (#10934) 2022-02-23 07:30:10 -06:00
Peter Krantz
fa65a54f50 fix(lang) update sv translation 2022-02-23 08:58:39 +01:00
Calin Chitu
20fd671b68 fix(mobile-ui) patch for native dialog container, fixed switch track color 2022-02-23 08:57:51 +01:00
Robert Pintilii
fd9d19a951 fix(thumbnails) Revert local tile ratio (#11009) 2022-02-23 09:07:26 +02:00
Saúl Ibarra Corretgé
f9384fdc87 chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1371.0.0+cb3b0db3...v1373.0.0+21337c75
2022-02-22 17:26:23 +01:00
Saúl Ibarra Corretgé
0945d373b6 chore(deps) make sure no SSH URLs get generated in package-lock.json
They create installation problems on systems without an SSH key.

Ref: https://github.com/npm/cli/issues/2610#issuecomment-914610832
2022-02-22 09:24:53 -06:00
Calin Chitu
9651229a17 fix(calendar-sync) fixed pull to refresh on Calendar List mobile 2022-02-22 17:09:38 +02:00
Saúl Ibarra Corretgé
0826ec16c2 fix(rn,display-name) don't show display name for local user
In large view. This aligns the behavior with the web.
2022-02-22 15:57:11 +01:00
Calin Chitu
e0881502d3 fix(toolbox) fixed toolbox safeareaview on mobile 2022-02-22 15:05:20 +02:00
Saúl Ibarra Corretgé
c84e6eecdd feat(rn) drop incoming call handling
This "feature" has been dead (and most likely buggy) for years. The
recommended way is for apps to implement their own incoming call
handling and then call into the JitsiMeetActivity. We did not have those
APIs back then.
2022-02-22 13:54:21 +01:00
Saúl Ibarra Corretgé
e61ccc956f feat(android) make application more akin to a greenfield RN app
Few (but some) RN modules rely on the main Application implementing
ReactApplication.

For Detox to actually work on Android we need the app to be a greenfield
app. Specifically, the main Application must implement ReactApplication.

In order to satisfy this requirement we are introducing a helper
ReactNativeHost implementation which encapsulates our RN integration,
which is what the ReactApplication needs to expose.

While we don't really need this ourselves (except if we end up adopting
Detox) we have known people who fork our app and add dependencies that have
this requirement to it, so this change will help them too.
2022-02-22 13:46:28 +01:00
Saúl Ibarra Corretgé
6aa0e3902a fix(android) initialize the fatal exception handler early 2022-02-22 13:46:28 +01:00
Saúl Ibarra Corretgé
eaba4798db chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1361.0.0+9e98e989...v1371.0.0+cb3b0db3
2022-02-21 22:35:22 -05:00
Saúl Ibarra Corretgé
08f388e17a chore(deps) react-native-webrtc@1.94.2 2022-02-21 15:57:59 +01:00
Saúl Ibarra Corretgé
2c68817f4c fix(ios) make sure arm64 sim is not excluded
Also update native dependencies.
2022-02-21 15:37:58 +01:00
Calin Chitu
e8e62a0213 feat(welcome) updated mobile ui styles 2022-02-21 16:37:37 +02:00
Gabriel Borlea
85581266e4 fix(speaker-stats): labels spearator line fixed and remove footer space 2022-02-21 15:23:00 +01:00
Saúl Ibarra Corretgé
a2155aad7f fix(ios) rework RN build workaround
This is what upstream RN does now.
2022-02-21 11:47:10 +01:00
Дамян Минков
59e51f107e feat: Handles hidden-from-recorder from jwt. (#10973)
* feat: Handles hidden-from-recorder from jwt.

Hides the participant that has this flag in jwt from the recorder. A hidden meeting moderator.
Makes sure follows me works and no tracks are being added.

* squash: Skips showing notification when disabling
local audio and video.

* squash: Fixes comments.

* squash: Updates with ljm changes.
2022-02-17 16:25:31 -06:00
nosmicek
40353cf762 fix: Fixes nil error while processing wrong jwt value. Fixes #10970
Co-authored-by: David Mišurec <david.misurec@icewarp.com>
2022-02-17 12:05:39 -06:00
Jaya Allamsetty
a1d0111c1b chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1359.0.0+55131be9...v1360.0.0+9eb93e0e
2022-02-17 10:33:48 -05:00
Calinteodor
b1be511d67 Mobile UI polish (#10982)
Updated screens with new ui on mobile
2022-02-17 16:51:00 +02:00
Jaya Allamsetty
c4ddaa8b87 chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1357.0.0+61265e3b...v1359.0.0+55131be9
2022-02-16 11:31:26 -05:00
Дамян Минков
2d61b564a1 fix: Fixes param in spanish translation. 2022-02-15 10:49:35 -06:00
Robert Pintilii
9062c91d77 fix(context-menu) Add max height (#10965) 2022-02-15 13:23:40 +02:00
Jaya Allamsetty
387af2db20 chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1353.0.0+f23372dd...v1357.0.0+61265e3b
2022-02-14 12:25:39 -05:00
Calinteodor
75fd61eed6 chore(deps) update react-native-dialog
Allows us to drop a custom patch, yay!
2022-02-14 17:28:52 +01:00
Robert Pintilii
d655acdc30 fix(breakout-rooms) Hide non-working options inside breakout rooms (#10959)
When the local participant is a moderator and is in a breakout room hide the following:
- advanced moderation
- Ask to Unmute
- Grant Moderator
2022-02-14 16:47:14 +02:00
Robert Pintilii
4340d5b7fc fix(video-quality-label) Open dialog also on audio-only mode (#10957) 2022-02-14 12:43:04 +02:00
Mihaela Dumitru
79877e56f0 fix(breakout-rooms) close room before removing it (#10956) 2022-02-14 12:40:44 +02:00
Robert Pintilii
59065d10f8 feat(thumbnails, rn) Native thumbnails redesign (#10954) 2022-02-14 12:13:18 +02:00
dependabot[bot]
ac8ae50cf0 chore(deps): bump follow-redirects from 1.14.7 to 1.14.8
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.7 to 1.14.8.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.7...v1.14.8)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-13 08:30:24 +01:00
Calin Chitu
eb720d5ddc feat(navigation) two actions screen header buttons ui updates 2022-02-11 12:06:56 +02:00
Christoph Settgast
6ab46186e2 fix(lang) update German translation
Signed-off-by: Christoph Settgast <csett86@web.de>
2022-02-11 07:00:14 +01:00
Дамян Минков
f9fd60a4ea fix: Fixes reconnecting on pre-join screen in case of max users error. 2022-02-10 13:00:25 -06:00
Дамян Минков
d23cd7f77d fix: Fixes script with correct commit message.
Comparing releases as we may skip few releases.
2022-02-10 13:00:25 -06:00
Дамян Минков
035944b4a4 chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1350.0.0+c3ab13d3...v1353.0.0+f23372dd
2022-02-10 13:00:25 -06:00
gpatel-fr
cd7243935f fix(lang) update french translation 2022-02-10 09:49:15 -06:00
Jaya Allamsetty
fd4c1ce9a0 chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/releases/tag/v1350.0.0+c3ab13d3
2022-02-09 15:12:26 -05:00
Calin Chitu
e76adb2e1d fix(dialog) fixed translations 2022-02-09 13:27:56 +02:00
Calin Chitu
06bd279f22 feat(dialog) refinaments 2022-02-08 17:38:14 +02:00
Calin Chitu
8a6b6f2942 feat(dialog) start recording/live stream screens, new AlertDialog 2022-02-08 14:41:34 +02:00
dependabot[bot]
f38702bb65 chore(deps): bump simple-get from 3.1.0 to 3.1.1
Bumps [simple-get](https://github.com/feross/simple-get) from 3.1.0 to 3.1.1.
- [Release notes](https://github.com/feross/simple-get/releases)
- [Commits](https://github.com/feross/simple-get/compare/v3.1.0...v3.1.1)

---
updated-dependencies:
- dependency-name: simple-get
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-08 13:08:52 +01:00
Calin Chitu
625a4cf42f feat(dialog) change description text color 2022-02-08 12:05:14 +02:00
JohnProv
271e2217b2 fix(lang) update Dutch translation 2022-02-08 10:42:26 +01:00
Christoph Settgast
b34a3aee04 fix(load-test) update package-lock.json to npm8
Fixes

npm WARN old lockfile
npm WARN old lockfile The package-lock.json file was created with an old version of npm,
npm WARN old lockfile so supplemental metadata must be fetched from the registry.
npm WARN old lockfile
npm WARN old lockfile This is a one-time fix-up, please be patient...
npm WARN old lockfile
2022-02-08 09:57:00 +01:00
Calin Chitu
744bcc3b66 feat(toolbox) removed unused BetaTag component and styles 2022-02-07 21:28:39 +02:00
Jaya Allamsetty
04794e9fdb chore(deps) lib-jitsi-meet@latest.
fix(ProxyConnection) set signaling layer by @saghul in #1862
fix: Fixes version while building. by @damencho in #1866
feat(multi-stream-support)Add support for multiple local and remote tracks/mediaType. by @jallamsetty1 in #1861
fix: Add private message handler for breakout_rooms by @steve-vsee in #1867
fix(JingleSessionPC) Do not force track removal at pc level on user leave. by @jallamsetty1 in #1869
feat(multi-stream-support) Handle SDP munging for multiple local/remote streams per ep. by @jallamsetty1 in #1868
2022-02-07 11:25:28 -05:00
Saúl Ibarra Corretgé
15cc956ed4 fix(shared-video) use more space on recorders
They don't render the toolbar so there is more space available.

The reason this commit does that is because getToolboxHeight will now
always be 0 for recorders.
2022-02-07 11:04:25 +01:00
Saúl Ibarra Corretgé
aaa26f8c7d fix(toolbox) never show the toolbox for recorders 2022-02-07 11:04:25 +01:00
Gabriel Borlea
8ccd7e92e0 chore: update face-api (#10912)
* chore: update face-api

* fix: remove caret from face-api dependecy and update models
2022-02-07 11:42:48 +02:00
Calinteodor
f282dbb5dc feat(dialog) updated LoginDialog 2022-02-04 16:58:33 +02:00
Mihaela Dumitru
2e8a635373 feat(external-api) add commands to open/close the participants pane 2022-02-04 16:11:08 +02:00
Mihaela Dumitru
01ab415941 feat(external-api) expose breakout rooms actions 2022-02-04 12:51:33 +02:00
Calinteodor
66b4c0cab0 feat(dialog) new native InputDialog 2022-02-04 12:20:47 +02:00
Saúl Ibarra Corretgé
78b117cec6 fix(app) fix member count to filter out hidden participants
When Jibri counts the participants in the meeting other Jibris should
not be accounted for.
2022-02-04 11:18:20 +01:00
Calin Chitu
b5c68c2b6a feat(dialog) removed native CustomDialog 2022-02-04 10:48:39 +02:00
Gabriel Borlea
fa9f4588c2 fix(facial-expressions): set screen size in worker and add constants for worker message types (#10678)
* fix(facial-expressions): set window screen size from worker with the value from main thread

* fix(facial-expressions): refactor worker and add constants for message types
2022-02-04 09:14:52 +02:00
Besnik Bleta
df6eff8804 fix(lang) update sq translation 2022-02-03 20:14:18 +01:00
Mihaela Dumitru
63a4b106ac feat(external-api) notify conference joined with room type flag 2022-02-03 18:12:03 +02:00
Calinteodor
debb63d3d6 feat(dialog) added react-native-dialog dep and updated ConfirmDialog 2022-02-03 17:45:02 +02:00
Tudor D. Pop
b9f3448379 feat(notifications) reset same type notification timeout 2022-02-03 14:17:34 +01:00
Hristo Terezov
2a8d0b6e33 fix(thumbnail): mouse enter is not triggered
Workaround for the issue when the mouse enter event is not triggered in
the use case where the layout changes and the mouse appears onn top of the
thumbnail. Example: Closing the participant pane.
2022-02-02 17:37:08 -06:00
Hristo Terezov
8cb1e1e233 feat(tileView): Display 3 participants in 1 row 2022-02-02 17:37:08 -06:00
Gabriel Borlea
eb70c611c2 feat(speaker-stats) new design for web and mobile 2022-02-01 15:57:30 +01:00
Calin Chitu
40f5f4cd0d feat(welcome) blur room name input onListContainerPress 2022-02-01 16:12:55 +02:00
Calin Chitu
96c977a8ed feat(app) fix navigation from external link 2022-02-01 13:12:09 +01:00
Ali Alhaidary
80d1088645 fix(lang) update Arabic translation 2022-02-01 11:50:59 +01:00
Дамян Минков
5bcdd5173c fix: Restarts jvb after prosody on initial install.
Fixes an issue where on clean install we see:
WARNING: [25] [hostname=localhost id=shard] MucClient.lambda$getConnectAndLoginCallable$7#622: [MucClient id=shard hostname=localhost] error connecting
org.jivesoftware.smack.SmackException$SmackWrappedException: javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
2022-01-31 21:51:40 -06:00
Robert Pintilii
b21beecbea fix(title-bar) Fix native titlebar (#10882) 2022-01-31 11:47:53 +02:00
Freddie
beea4b5b62 fix(config) document missing notification
This notification is missing in the array. If array is selectively defined, no pop-up notification is received when participant requests to join the meeting.
2022-01-29 21:02:22 +01:00
JohnProv
0940659070 fix(lang) update Dutch translation 2022-01-29 14:02:03 +01:00
JohnProv
609e4d646d fix(lang) update Dutch translation 2022-01-29 10:48:38 +01:00
Saúl Ibarra Corretgé
9d829003b4 fix(calendar-sync) remove unneeded function
A GUID is just a UUID v4, so let's use that.
2022-01-28 08:47:31 -06:00
Saúl Ibarra Corretgé
fe2c5f6447 chore(deps) microsoft-graph-client@3.0.1 2022-01-28 08:47:31 -06:00
Дамян Минков
43ab8e3ca8 fix: Fixes #10796 authentication in conference. (#10848)
* fix: Fixes #10796 authentication in conference.

* fixup!

* fixup2!

Co-authored-by: Saúl Ibarra Corretgé <saghul@jitsi.org>
2022-01-28 08:14:54 -06:00
Saúl Ibarra Corretgé
332feefa36 fix(util) never mark UUID room names as insecure
Except the NIL UUID, that is.
2022-01-28 14:53:51 +01:00
Shawn Chin
23b4e93ed9 feat(config) add ability to hide dominant speaker badge 2022-01-28 14:35:01 +01:00
Santiago Vila
5baa2f839f fix(lang) update Spanish translation 2022-01-28 12:08:23 +01:00
Robert Pintilii
7e5c283e3c feat(disableSelfView) Toggle self view on native (#10871)
Added toggle button in overflow menu
Created video menu with connection info and self view toggle buttons for local participant
2022-01-28 12:47:54 +02:00
JohnProv
4b483f7ec8 fix(lang) update Dutch translation 2022-01-28 11:30:32 +01:00
Robert Pintilii
f0118c0fb5 fix(screenshot-capture) Updated feature (#10865)
Added config to choose between recording and always mode
Created function to check if feature should be used
Removed check from stop feature as it now checks if the feature was previously on
Only get video track on feature start
2022-01-28 11:11:35 +02:00
Hristo Terezov
ae5723406d fix(iAmRecorder): middleware bug 2022-01-27 18:11:37 -06:00
Robert Pintilii
02721c0c3d fix(thumbnails) Change local thumbnail aspect ratio (#10861) 2022-01-27 12:55:49 +02:00
Robert Pintilii
c58ebd9792 fix(screenshot-capture) Add initial call for region selection (#10818) 2022-01-27 11:14:48 +02:00
ONO Yoshio
35e97450f9 fix(lang) update Japanese translation 2022-01-27 09:23:59 +01:00
Shawn Chin
a2425f71dd fix(overflow-menu) hide "more moderation controls" option if moderator settings tab disabled 2022-01-27 09:22:26 +01:00
Mihaela Dumitru
c9941dedb9 fix(notifications): support html descriptions 2022-01-26 11:25:04 -06:00
Saúl Ibarra Corretgé
4e8d962027 chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/releases/tag/1343-2d21eb5b
2022-01-26 17:27:15 +01:00
Saúl Ibarra Corretgé
6331f8caa0 fix(tools) adapt update-ljm.sh to new ljm release mode 2022-01-26 17:27:15 +01:00
Saúl Ibarra Corretgé
45b8ce8afb feat(build) use lib-jitsi-meet release tarballs
This has 2 benefits:

a) it no longer needs to be built at install time, thus making builds faster

before:

real	0m46.865s
user	1m3.938s
sys	0m22.478s

after:

real	0m27.828s
user	0m25.582s
sys	0m21.699s

b) integrity errors go away since they are not computed over a locally
generated tarball
2022-01-26 15:55:10 +01:00
wfleischer
076b823ea2 fix(lang, shared-video): Reference to YouTube 2022-01-26 10:12:28 +01:00
Shawn
2ac410df00 fix lint errors 2022-01-25 17:14:28 -06:00
Shawn
f5c0d7da5e fix: broken redirect for url with params when welcome page disable 2022-01-25 17:14:28 -06:00
Jaya Allamsetty
64322db56a fix(media) Deprecate startScreenSharing config option for web browsers.
This is no longer supported as per the w3c spec for getDisplayMedia.
2022-01-25 15:05:15 -05:00
tudordan7
b3c4fb6287 feat(notification-button-testid): Add testid to notification buttons. 2022-01-25 09:53:42 -06:00
tudordan7
8258490873 feat(notification-button-testid): Add testid to notification buttons. 2022-01-25 09:53:42 -06:00
Saúl Ibarra Corretgé
95d4c8ffb8 fix(rn,navigation) fix navigating back to the welcome page
The CONFERENCE_WILL_LEAVE reducer in base/conference wipes the state so
we cannot rely on the old room value.

We may want to revisit this in the future.
2022-01-25 16:22:24 +01:00
Saúl Ibarra Corretgé
55aca37eb6 chore(deps) run npm audit fix 2022-01-25 15:08:12 +01:00
Saúl Ibarra Corretgé
19e510a762 fix(rn,settings-drawer) allow for more width 2022-01-25 14:36:59 +01:00
Calinteodor
b9433368ee feat(rn,app) unified navigators 2022-01-25 13:55:57 +01:00
Mihaela Dumitru
49dd007167 fix(config): use hide display name flag for dominant speaker (#10839) 2022-01-25 13:17:27 +02:00
Saúl Ibarra Corretgé
931ef75b4f feat(rn) use the TSC generated lib-jitsi-meet bundle
This way we'll have proper tracebacks now.
2022-01-25 12:15:35 +01:00
Saúl Ibarra Corretgé
a7529aca7f fix(build) remove double slashes 2022-01-25 12:15:35 +01:00
Saúl Ibarra Corretgé
d5f0e3c062 feat(ts) introduce TypeScript
This is the stepping stone for TypeScript support across Jitsi Meet. Currently
it makes it possible for lib-jitsi-meet to use TypeScript without adding any TS
code here yet.
2022-01-25 12:15:35 +01:00
Calin Chitu
bc4553bdc0 feat(lobby) removed native lobby enable/disable dialogs 2022-01-25 12:15:05 +02:00
Hristo Terezov
b5551880f7 feat(shared-video): show invalid URL error. 2022-01-24 17:23:58 -06:00
Mejans
c34d2de519 fix(lang) update Occitan translation 2022-01-21 16:29:35 +01:00
Saúl Ibarra Corretgé
a96fc2fc17 chore(cleanup) delete dead code 2022-01-21 16:21:06 +01:00
gpatel-fr
9eca9e2243 fix(lang) update french translation 2022-01-21 09:04:42 -06:00
Saúl Ibarra Corretgé
fb3a39e743 fix(security-dialog) fix form event propagation after migrating to React 17
In addition, replace the from with a div because they shouldn't be
nested.

Since we are no longer in a form, manually validate the password. This
was necessary regardless, because it was possible to bypass the digits
rule by pressing "add".
2022-01-21 08:26:02 -06:00
Robert Pintilii
676d7f2b93 fix(screenshot-capture) Add initial state (#10827) 2022-01-21 12:25:23 +02:00
Saúl Ibarra Corretgé
70b8bb7cbd fix(android) drop jcenter 2022-01-21 10:41:19 +01:00
Saúl Ibarra Corretgé
8f26046e37 chore(deps) drop jsonlint
It triggers a security update alert, and use it through npx, so it
doesn't need to be in our package.json.
2022-01-21 10:40:57 +01:00
Saúl Ibarra Corretgé
f2a1a2cca9 chore(deps) webpack-dev-server@4.7.3 2022-01-21 10:40:57 +01:00
Saúl Ibarra Corretgé
3da8f4a25d chore(deps) npm audit fix 2022-01-21 10:40:57 +01:00
Saúl Ibarra Corretgé
8f1a7d52d2 fix(rn,build) fix use of "bare" relative path
The Metro bundler gets confused and the result of such import statements
is `undefined`.
2022-01-21 10:20:20 +01:00
Gabriel Borlea
f4bd40dcfe fix(raised-hand) lower raised hand by local audio level changes when participant is dominant 2022-01-21 09:07:55 +01:00
Hristo Terezov
be27464b08 fix(screen-capture): disable. 2022-01-21 07:47:46 +01:00
Saúl Ibarra Corretgé
0b4c172c9c fix(ios) fix build with Xcode 13 2022-01-20 19:28:45 +01:00
Tudor D. Pop
28f5ddc81d feat(lobby,notifications) refactor lobby notifications 2022-01-20 15:26:03 +01:00
Christoph Settgast
a84130d67d ci: ensure that lang files stay sorted 2022-01-20 13:06:56 +01:00
Saúl Ibarra Corretgé
bd38df5d61 fix(lang) fix default language selection
[0] introduced sorted language keys, but we had the assumption that the
first one meant to indicate the default language.

Break that assumption and be explicit about English being the default
language.

[0]: 7fe319d965
2022-01-20 12:01:12 +01:00
Saúl Ibarra Corretgé
842d715723 feat(rn,build) drop confusing commands
We don't recommend using the RN CLI due to the changes we make to the
standard RN project layout. Xcode and Android Studio should be used to
compile the app instead.
2022-01-20 11:43:17 +01:00
Saúl Ibarra Corretgé
dc8d769d5b feat(lint) drop Flow
Keeping up with it has become untenable. With the last update (required
due to the RN bump) we have around 5k errors due to a major change in
how Flow operates: https://flow.org/en/docs/lang/types-first/

Fixing it is absolutely non-trivial, and at this point we better spend
that effort migrating to TypeScript instead.

If that alone wasn't a good enough reason, Facebook made it abundantly
clear they only care about Flow for themselves, not for the larger
community:
https://medium.com/flow-type/clarity-on-flows-direction-and-open-source-engagement-e721a4eb4d8b.
TypeScript has won the community.
2022-01-20 11:43:17 +01:00
Saúl Ibarra Corretgé
d121a63341 feat(rn) update React Native to version 0.66 2022-01-20 11:43:17 +01:00
Saúl Ibarra Corretgé
53158410dc fix(video-quality) fix not registering reducer on mobile 2022-01-20 11:43:17 +01:00
Saúl Ibarra Corretgé
0e545ef253 fix(rn) remove no longer needed hack 2022-01-20 11:43:17 +01:00
Werner Fleischer
cce4c1ba9d fix(rn, conference): dispatch auth status changed in base/conference 2022-01-20 11:41:18 +01:00
Horimoto Yasuhiro
c29bfc8b8a lang: fix(lang) update Japanese translation
"lookGood" represents a good condition.
However, "マイクが正常に動作していないようです" represents a bad
condition in Japanese.

In Japanese, "マイクは正常に動作しています" represents a good
condition.
2022-01-19 18:33:15 -06:00
Akira Ouchi
a1cc212786 Fix Japanese translations 2022-01-19 18:32:48 -06:00
Jaya Allamsetty
b80531c235 chore(deps) lib-jitsi-meet@latest
* fix(RTC) skip DtlsTransport init if getSenders is missing
* feat(RTC) added DTLS transport monitoring
* fix(TPC) Do not change the tranceiver dir when the connection is not active. Fixes https://github.com/jitsi/jitsi-meet/issues/10754.

b088347043...4baeb98964
2022-01-19 14:07:28 -05:00
Shawn Chin
d60fdf1b98 fix: Add min width to volume slider (#10808) 2022-01-19 16:01:51 +02:00
Jaya Allamsetty
88c7bab9b8 chore(deps) lib-jitsi-meet@latest
* ref(JitsiConference) Add audio level handlers only for audio tracks. Other minor formatting changes.
* ref(TPC) Remove an unused method.
* ref(RTC) fix format and alpha sort the functions in JitsiLocalTrack.js.
* Fire settings error event
* feat(misc) add stalebot
* fix: use correct jsdoc types for params and methods

502aaf15b3...b088347043
2022-01-18 14:50:50 -05:00
Christoph Settgast
7fe319d965 lang: sort json keys
This is the result of

    find lang -name "*.json" | while read file; do
      echo "Standardizing ${file}"
      t=$(mktemp)
      jq --indent 4 -S "." ${file} > ${t}
      mv ${t} ${file}
    done
2022-01-18 20:14:55 +01:00
Hristo Terezov
2c2b2c0bec fix(iframeAPI): startShareVideo command. 2022-01-18 12:43:14 -06:00
Christoph Settgast
43f554295e ci: check language jsons if valid json 2022-01-18 15:37:06 +01:00
tudordan7
5de6ef4a1b fix(virtual-background): Prevent buttons repositioning on click action. 2022-01-18 15:18:30 +01:00
Mateusz
a3b88c5a4e lang: Typo in lang pl 2022-01-18 07:59:27 -06:00
Christoph Settgast
2dfd164d51 lang fix syntax errors
Closes: #10787
2022-01-17 14:29:35 -06:00
Robert Pintilii
820ff8473c feat(filmstrip) Updated filmstrip design (#10791)
Added background on hover
Updated toggle button
Made vertical filmstrip full height on desktop
2022-01-14 14:13:13 +02:00
Horatiu Muresan
7e9e5e258f chore(translates) Merge main-es.json into main-esUS.json 2022-01-14 14:08:38 +02:00
nbeck.indy
477d47c10d fix(breakout-rooms) joining room with hand raised bug
Joining a room while hand is raised caused the local raised hand total to be wrong.
This is because when the local participant id changes, the old id is not cleared from the raisedHandQueue.
2022-01-14 12:19:37 +02:00
Saúl Ibarra Corretgé
7aac634a7d chore(rn,versions) bump app and sdk versions 2022-01-13 15:58:54 +01:00
Saúl Ibarra Corretgé
9c5b5e5b75 feat(rn,overflow-menu) remove duplicated buttons from overflow menu
The audio route selector is how in the header.

The mute options are in the participants pane, with the rest of the
moderation controls.
2022-01-13 15:47:32 +01:00
hmuresan
8236764501 fix(raised-hand) Preserve raised hand order for active speaker
- fixes: https://github.com/jitsi/jitsi-meet/issues/10609
2022-01-13 13:58:57 +01:00
Robert Pintilii
eb010061e0 feat(title-bar) Updated title bar (#10752)
Only display Picture-in-Picture button when feature is available
Moved conference timer before title
Created new always-on container for labels
Moved recording labels to always-on
Updated expanded label to support new always-on labels
Added raised hands counter label
Added speaker - earpiece toggle button
Lifted state up
2022-01-13 14:15:53 +02:00
Calin Chitu
1c360ce5b7 feat(participants-pane) added style comments 2022-01-13 12:09:14 +02:00
Calin Chitu
73f3409f0d feat(participants-pane) separated participants into collapsible lists 2022-01-13 12:09:14 +02:00
Christoph Settgast
b1a2ac66b0 fix(lang) update German translation 2022-01-12 22:50:46 +01:00
Avram Tudor
b3e1c5446c Revert "fix(Polls): Calculate vote percentage based on total number of votes" (#10781)
This reverts commit 69cbb7e103.
2022-01-12 18:28:24 +02:00
Saúl Ibarra Corretgé
30f2fe3577 fix(filmstrip) don't display filmstrip toggle in Jibri 2022-01-12 16:32:44 +01:00
Robert Pintilii
0b836acad9 fix(thumbnail) Fixed screensharing indicator tooltip (#10780) 2022-01-12 15:32:30 +02:00
Robert Pintilii
38dfb47bf1 fix(config) Update comment for disableTileEnlargement (#10779) 2022-01-12 14:22:34 +02:00
Robert Pintilii
44c2a6ce93 fix(thumbnail) Fix screenshare indicator (#10774) 2022-01-12 11:31:31 +02:00
Saúl Ibarra Corretgé
b65eb7d01a fix(build) exit with error if any CSS step fails
Before:

~~~
$ make deploy-css
./node_modules/.bin/sass css/main.scss css/all.bundle.css && \
        ./node_modules/.bin/cleancss --skip-rebase css/all.bundle.css > css/all.css ; \
        rm css/all.bundle.css
Error: Can't find stylesheet to import.
   ╷
78 │ @import 'filmstrip/vertical_filmstrip_overrides2';
   │         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   ╵
  css/main.scss 78:9  root stylesheet
$
(exitcode is 0)
~~~

After:

~~~
$ make deploy-css
./node_modules/.bin/sass css/main.scss css/all.bundle.css && \
        ./node_modules/.bin/cleancss --skip-rebase css/all.bundle.css > css/all.css && \
        rm css/all.bundle.css
Error: Can't find stylesheet to import.
   ╷
78 │ @import 'filmstrip/vertical_filmstrip_overrides2';
   │         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   ╵
  css/main.scss 78:9  root stylesheet
make: *** [deploy-css] Error 65
$
(exitcode is != 0)
~~~
2022-01-12 10:31:04 +01:00
Jaya Allamsetty
2f0d0527b6 chore(deps) lib-jitsi-meet@latest
* fix(logging) Log all the ssrcs present in the source signaling. Since the order of the ssrcs in the json-encoded message is not guaranteed to be in the correct SIM/FID order, log all the ssrcs.
* fix: ensure mucNickname
* ref(JingleSession) Recycle m-lines by rejecting them on source removal.

adf2f15d00...502aaf15b3
2022-01-11 13:57:09 -05:00
Дамян Минков
52840c55fa feat: Updates reload reason.
When there is no reload reason defined, try to extract something from the errors that caused it.
2022-01-11 11:22:53 -06:00
Akshay Raje
8d8cc9c8bd fix(toolbox) hide volume meter when audio levels are disabled 2022-01-11 17:08:36 +01:00
tmoldovan8x8
26a6c336e3 fix(rn) await for the promise in the _init object 2022-01-11 17:03:42 +02:00
micahmills
1d3d6a32a6 Persian translations (#10765)
* Persian Translations

* fixed typo in English text

* removes extra spaces in main translation file

* Farsi Translation update

* Finished Farsi translations
2022-01-11 08:39:39 -06:00
Saúl Ibarra Corretgé
31b5f7bbda fix(android) restore executable flag on gradlew 2022-01-11 07:50:31 -06:00
tmoldovan8x8
f8ca80bf8e fix(android) disables windows preview
Avoid white flash when starting the app.

Fixes: https://github.com/jitsi/jitsi-meet/issues/8237
2022-01-11 14:47:20 +01:00
tmoldovan8x8
b04677f3ea chore(deps, rn) update react-native-webview 2022-01-11 15:16:50 +02:00
abora8x8
74d7e4fde7 fix(jaas) log settings error 2022-01-11 11:26:05 +01:00
Saúl Ibarra Corretgé
61ae909ed5 chore(deps,rn) update navigation librarries to their latest versions
React Navigation v6.
2022-01-10 19:21:51 +01:00
Saúl Ibarra Corretgé
55e6cc027b fix(rn,welcome) use native driver for opacity animation 2022-01-10 19:21:51 +01:00
Saúl Ibarra Corretgé
ab3d2160c9 fix(lint) tame Flow 2022-01-10 19:21:51 +01:00
Saúl Ibarra Corretgé
90321ca016 feat(rn) update React Native to version 0.63
I'm updating to RN 0.63 instead of the latest (0.66 at the time of this writing)
so we can update the navigation related libraries to their latest versions, and
then proceed with the larger leap towards the latest RN.
2022-01-10 19:21:51 +01:00
Jaya Allamsetty
fe2f97b15d chore(deps) lib-jitsi-meet@latest
* fix(TPC): Implode the simulcast group only after toUnifiedPlan conversion. This fixes a regression introduced by the previous commit.

53b9601689...adf2f15d00
2022-01-10 12:04:58 -05:00
Shawn Chin
97fbfd21af fix: still show menu to toggle self view if disableLocalVideoFlip (#10751)
* fix: still show menu to toggle self view if disableLocalVideoFlip

* fixed lint issues
2022-01-10 08:34:01 -06:00
Robert Pintilii
b8778c4e0b fix(disableSelfView) Config overwrites settings (#10750) 2022-01-10 12:46:33 +02:00
Avram Tudor
22ffcf922a fix(thresholds) adjust thresholds for smaller width integrations (#10749)
allows chat button to be displayed when there should be enough space for it
2022-01-10 12:45:46 +02:00
Jaya Allamsetty
7c8692902c chore(deps) lib-jitsi-meet@latest
* ref(TPC) Cleanup and fix formating.
* ref(TPC) Remove an unnecessary toUnified sdp conversion. sLD is called immediately after createOffer/createAnswer, therefore the desc provided by createOffer/createAnswer can be directly passed to sLD without the need for converting it to unified plan format. This also fixes a warning seen on the browser console that says 'The description does not look like plan-b'.
* fix(tpc) extend ulpfec workaround to all versions
* fix: check if chrome version > 95 instead
* Fix issue number for rtx ulpfec workaround
* fix(tpc) disable ulpfec on chrome 97

55a03ac1b5...53b9601689
2022-01-07 17:43:09 -05:00
Дамян Минков
d91e7c3d31 fix: Fixes start A/V muted received by focus in case of slow gUM.
In case of slow resolving gUM, we can join the call (quickly joining from pre-join screen) and the gUM will be resolved after we receive the start A/V muted from jicofo and will produce a source-add, joining unmuted ignoring jicofo.
2022-01-07 14:53:45 -05:00
Дамян Минков
c5821d7a5f fix: Fixes startWithAudioMuted on quickly moving away from pre-join screen.
When gUM is slow, and we quickly join the conference, then startWithAudioMuted was not respected.
2022-01-07 14:53:45 -05:00
Calin Chitu
4878a00014 feat(participants-pane) updated styles for add breakout and invite buttons 2022-01-07 17:42:38 +02:00
Calin Chitu
db37cd37c8 feat(conference) centered header navigation button 2022-01-07 17:42:38 +02:00
Calin Chitu
cce27baaf4 feat(filmstrip) fixed context menus for thumbnail 2022-01-07 17:42:38 +02:00
tmoldovan8x8
307e253276 fix(rn, web) await initialisation before dispatching appWillMount 2022-01-07 15:18:24 +02:00
Calin Chitu
8de024a699 feat(participants-pane) hide admit all if knocking part < 2 2022-01-07 14:32:46 +02:00
Calin Chitu
f4c91374bf update react-native-paper to 4.11.1 2022-01-07 14:09:46 +02:00
Saúl Ibarra Corretgé
90f836040f fix(rn,audio) fix playback after API change
Upstream now skips the callback, so we need to provide one.
2022-01-07 09:29:32 +01:00
Jaya Allamsetty
29eb9452c0 fix(toolbox) Disable screensharing button on mobile for video sender limit.
Also, ignore the toggle screenshare shortcut when the video sender limit is reached.
2022-01-06 12:23:39 -05:00
Saúl Ibarra Corretgé
b8469545f3 fix(rn,android) adjust changed package names 2022-01-06 14:39:34 +01:00
Saúl Ibarra Corretgé
ba50ecec78 chore(deps) react-native-youtube-iframe @ 2.2.1 2022-01-06 13:10:32 +01:00
Saúl Ibarra Corretgé
c88ac2f3bd chore(deps) react-native-webview @ 11.15.0 2022-01-06 13:10:32 +01:00
Saúl Ibarra Corretgé
b6501412c4 chore(deps) react-native-watch-connectivity @ 1.0.4 2022-01-06 13:10:32 +01:00
Saúl Ibarra Corretgé
188aff5aff chore(deps) react-native-video @ 5.2.0 2022-01-06 13:10:32 +01:00
Saúl Ibarra Corretgé
2d683e4d41 chore(deps) react-native-url-polyfill @ 1.3.0 2022-01-06 13:10:32 +01:00
Saúl Ibarra Corretgé
1c4a500c1c chore(deps) react-native-svg-transformer @ 1.0.0 2022-01-06 13:10:32 +01:00
Saúl Ibarra Corretgé
29eb3c5347 chore(deps) react-native-splash-screen @ 3.3.0 2022-01-06 13:10:32 +01:00
Saúl Ibarra Corretgé
656e0ba1e9 chore(deps) react-native-sound @ 0.11.1 2022-01-06 13:10:32 +01:00
Saúl Ibarra Corretgé
50eb6563e3 chore(deps) react-native-performance @ 2.1.0 2022-01-06 13:10:32 +01:00
Saúl Ibarra Corretgé
d290c1d11a chore(deps) react-native-get-random-values @ 1.7.2 2022-01-06 13:10:32 +01:00
Saúl Ibarra Corretgé
5cbb526c04 chore(deps) react-native-device-info @ 8.4.8 2022-01-06 13:10:32 +01:00
Saúl Ibarra Corretgé
06384b452b chore(deps) react-native-default-preference @ latest 2022-01-06 13:10:32 +01:00
Saúl Ibarra Corretgé
36956810b1 chore(deps) react-native-collapsible @ 1.6.0 2022-01-06 13:10:32 +01:00
Saúl Ibarra Corretgé
d161816972 chore(deps) react-native-callstats @ 3.73.7 2022-01-06 13:10:32 +01:00
Saúl Ibarra Corretgé
50d33d068b chore(deps) react-native-calendar-events @ 2.2.0 2022-01-06 13:10:32 +01:00
Saúl Ibarra Corretgé
e8939ba949 chore(deps) react-native-background-timer @ 2.4.1 2022-01-06 13:10:32 +01:00
Saúl Ibarra Corretgé
bfc556f4df chore(deps) @react-native-community/slider @ 4.1.12 2022-01-06 13:10:32 +01:00
Saúl Ibarra Corretgé
bac4afcdb4 chore(deps) @react-native-community/netinfo @ 7.1.7 2022-01-06 13:10:32 +01:00
Saúl Ibarra Corretgé
8fd353f5f1 chore(deps) @react-native-google-signin/google-signin @ 7.0.4 2022-01-06 13:10:32 +01:00
Saúl Ibarra Corretgé
f0b475e2bc chore(deps) @amplitude/react-native @ 2.7.0 2022-01-06 13:10:32 +01:00
Saúl Ibarra Corretgé
1d77c52f91 chore(deps) @react-native-async-storage/async-storage @ 1.15.14 2022-01-06 13:10:32 +01:00
José Luís Andrade
44e07cd7e2 fix(lang) update Portuguese translation 2022-01-06 12:59:32 +01:00
Roshan Pulapura
09441c2632 feat(virtual-backgrounds) use new Open Source model
https://google.github.io/mediapipe/solutions/models.html#selfie-segmentation
2022-01-06 10:16:55 +01:00
Joan Montané
e3d38b197f fix(lang) update Catalan translation 2022-01-06 09:57:57 +01:00
Saúl Ibarra Corretgé
50d37bf8a7 fix(polls) use medium timeout for poll notifications 2022-01-06 09:47:58 +01:00
tmoldovan8x8
7dd9785e48 fix(rn, recording) adds _toggleScreenshotCapture function to AbstractStopRecordingDialog 2022-01-05 16:52:20 +02:00
Hamza KHAIT
315c884f0d fix(lang) update French translation 2022-01-05 11:33:36 +01:00
José Luís Andrade
8590315244 fix(lang) update Portuguese Translation 2022-01-05 11:20:39 +01:00
Horatiu Muresan
6b260c27a5 fix(aot) Let jitsi-meet-electron-sdk do the close (#10679) 2022-01-04 13:21:30 +02:00
Horatiu Muresan
197dbfbbcb feat(toolbar-button-clicked) Enhance toolbar buttons with notify click
- add possibility to allow execution of the button's routine besides triggering
`toolbarButtonClicked` API event
- keep backwards compatibility
- get rid of `ToolbarButton`
2022-01-04 13:21:00 +02:00
Calin Chitu
847dc2a7bb fix(participants-pane) fix search value clear when closing pane 2022-01-04 10:52:42 +02:00
Christoph Settgast
7f26e7f927 fix(lang) update German translation 2021-12-28 07:15:37 +01:00
Mejans
6247d45b9e fix(lang) update Occitan translation 2021-12-24 17:30:52 +01:00
Дамян Минков
04f9ad32e1 fix(breakout-rooms): Adds few nil checks in lua code. 2021-12-23 14:40:39 -06:00
Дамян Минков
348414cc84 fix: Fixes muted state for moderators when login (secure-domain). 2021-12-23 13:47:25 -06:00
Robert Pintilii
804573e9aa fix(title-bar) Updated animation duration (#10688) 2021-12-23 15:06:14 +02:00
gpatel-fr
9dd3941388 fix(lang) make fr language file format consistent 2021-12-23 13:15:28 +01:00
Boris Grozev
f341a4e4eb fix: Add ipv6 networks to coturn's deny list. 2021-12-22 17:35:06 -06:00
Palych56
1c462996f5 Added translation of toolbar icons (#10563)
* Added translation of toolbar icons

* fix the indentation
2021-12-22 17:34:36 -06:00
Дамян Минков
1316c48964 chore(deps) lib-jitsi-meet@latest
* fix: Drop unused region info from presence.
* fix: Reads lobby jid from correct location in the error. (#1830)
* feat: Adjust setReceiverConstraints to use new format (#1813)

63c3e1f869...55a03ac1b5
2021-12-22 17:33:48 -06:00
Björn Broer
1080404de9 Add Dutch translations Participants Pane and Chat/Polls 2021-12-22 17:33:41 -06:00
Mariusz Krzaczkowski
55ef73875e [i18n] Update for Polish (#10643)
* [i18n] Update for Polish

* [i18n] Update for Polish

* [i18n] Update for Polish

* [i18n] Update for Polish

* [i18n] Update for Polish
2021-12-22 17:33:28 -06:00
Ali Alhaidary
afeb3e0e69 Update main-ar.json 2021-12-22 17:33:18 -06:00
gpatel-fr
ca227df7ec fix(lang) update french translation 2021-12-22 17:33:10 -06:00
Alexey Matveev
fb843a7ecf fix(lang) updated Russian translation 2021-12-22 17:32:53 -06:00
JohnProv
af985d8fd8 Update main-nl.json
Fix wrong change (e-mail > email)
2021-12-22 17:32:45 -06:00
Дамян Минков
8d62e010e0 feat: Skips notifications for messages from history (the messages on join). 2021-12-22 16:13:12 -06:00
Дамян Минков
1c4283eeca feat: Edits messages display name on breakout info received. Fixes #10671. 2021-12-22 16:13:12 -06:00
Дамян Минков
c64d1a97c1 feat: Adds internal action for editing chat messages. 2021-12-22 16:13:12 -06:00
Дамян Минков
6159504478 feat: Adds id to chat messages internal state. 2021-12-22 16:13:12 -06:00
Дамян Минков
f2efdfcbc1 feat: Drop unused constants. 2021-12-22 16:13:12 -06:00
Дамян Минков
6682167800 fix: Fixes showing user region. 2021-12-22 15:39:33 -06:00
Дамян Минков
b084aae212 fix: Generates correct join error for lobby. (#10673)
* fix: Drops wrong x tag.

* fix: Generates correct join error for lobby.

We were adding lobbyroom element in a location that violates the rfc and xmpp errors.
We add now and the correct one and will drop the wrong node when all clients are updated.
https://datatracker.ietf.org/doc/html/draft-ietf-xmpp-3920bis#section-8.3.2

* squash: Add todo comment.

* squash: Updates namespace.
2021-12-22 14:40:20 -06:00
Calin Chitu
a436a889a9 fix(base) fixed text going out of share meeting container 2021-12-21 15:24:38 +02:00
Robert Pintilii
9816be4745 fix(participants-pane) Make search work with breakout rooms (#10668)
Web and native
2021-12-21 14:51:39 +02:00
Gabriel Borlea
b9e182b7cc feat(facial-expressions): send facial expressions to webhook endpoint (#10585) 2021-12-21 13:46:54 +02:00
Robert Pintilii
da2b920dbe feat(conference-info) Updated title bar (#10670)
Updated animations
Added raised hands counter
Added max width to title bar
2021-12-21 12:22:30 +02:00
Horatiu Muresan
d22d95e8a5 fix(prejoin) Consider user selection for prejoin only on mount 2021-12-20 11:34:40 +02:00
Robert Pintilii
d44660527b fix(thumbnail) Update tile resizing constraints (#10645)
disableTileEnlargement config now uses old behaviour (small tiles, not just small video in the tiles)
Update Firefox scrollbar style to match webkit
Show more rows when height allows it instead of stretching a fixed number of rows, but make sure we always try to fill the whole viewport
Added constraints for how narrow portrait tiles can be and how wide landscape tiles can be
Video should cover whole tile in tile view unless disableTileEnlargement is set or video is portrait
Added min height in px for tiles
2021-12-20 11:32:31 +02:00
Mihaela Dumitru
5cc3fade8f feat(config): add flag to hide the participant display name (#10650) 2021-12-20 10:46:47 +02:00
Gabriel Borlea
f8340bfd41 fix(speaker-stats): responsiveness of facial expressions (#10664) 2021-12-20 10:45:54 +02:00
Robert Pintilii
a7bf037363 feat(raise-hand) Update raised hand design (#10651)
Updated indicator color and background color
Added border on thumbnails
Web and Native
2021-12-20 10:44:22 +02:00
Robert Pintilii
a42483c84b fix(rn, tileview) Add SafeAreaView to Tile View (#10642) 2021-12-20 10:27:55 +02:00
tmoldovan8x8
476ddeac41 fix(rn, recording) adds _toggleScreenshotCapture function to AbstractStartRecordingDialog 2021-12-20 08:41:29 +02:00
Hristo Terezov
12bc054386 feat(Avatar): CORS mode support. 2021-12-17 14:41:11 -06:00
Дамян Минков
32aa40b396 fix(breakout-rooms): Fix polls usage. 2021-12-17 13:53:00 -06:00
Ali Alhaidary
11bbedf9ac fix(lang) updated Arabic translation 2021-12-17 17:57:06 +01:00
Robert Pintilii
56883f0a65 fix(theme) Update colors (#10649) 2021-12-17 15:05:12 +02:00
Mihaela Dumitru
8e9034601d feat(chat/settings) - add ephemeral chat notifications with user settings support (#10617) 2021-12-17 14:39:15 +02:00
wfleischer
ce0a044742 fix(breakout-rooms): close option shown to non-moderators (#10648)
Co-authored-by: Werner Fleischer <70745309+wernf@users.noreply.github.com>
2021-12-17 14:11:01 +02:00
Mihaela Dumitru
39e0dc84e0 feat(external-api): add local subject command (#10636)
* feat(external-api): add local subject command

* add to whitelist

* apply config value
2021-12-17 09:38:15 +02:00
Дамян Минков
09613167a6 fix(breakout-rooms): Adds a check for missing room. 2021-12-16 12:04:53 -06:00
William Liang
5461bb52c8 feat: Update video receiver constraints to use source names (#10527)
* feat: Use source name based receiver constraints

* add sourceNameSignaling feature flag to config

* move source name specific variables into if block

* ensure sourceName is defined in constraints

* use source name for selectedSources

* use selector to find video track by participant id

* add selector to encapsulate logic to get track source name

* refactor getTrackSourceNameByMediaTypeAndParticipant selector

* rename variable

* move flags config into Feature Flags section

* do not set constraints for local large video

* rename prioritizedSources to onStageSources

* fix flow error

* refactor visibleRemoteTrackSourceNames to a constant

* use selector to get feature flags

* rename selector function

* fix flow error

* add selector for sourceNameSignaling feature flag
2021-12-16 11:49:36 -06:00
Дамян Минков
5dee37dd82 Self view refactor (#10620)
* feat: Drops hide self-view setting from profile tab.

* feat: Moves function for disableSelfView value in base/settings.

* squash: Drops notification.

* feat: Move hide self view option in more tab.

* feat: Move hide self view option in more tab.

* feat: Adds option to disable self view UI settings.

* squash: Disable settings when controlled from config.
2021-12-16 10:55:45 -06:00
Luis Guzman
2a236b9327 fix(lang) update Spanish translation 2021-12-16 17:40:44 +01:00
Дамян Минков
e7bac3ad44 fix: Fixes emitting conference left event in iframeAPI.
Moving to breakout room and back in main room do not fire videoConferenceLeft events.
And the videoConferenceJoined was reporting wrong conference name on join.
2021-12-16 09:40:14 -06:00
Avram Tudor
ffe74ca68b fix(tile-view) fix screensharing size in self view (#10634)
clean-up overriden css for tileview video tags
2021-12-16 15:33:30 +02:00
Дамян Минков
c8b5043d6b fix: Fixes destroying main room when breakout rooms are enabled.
By the time the timer is fired the room maybe recreated (destroyed and created again) and we do not want to destroy it again. The timer was keeping a reference to the old room and is destroying it without notifying the future occupants(jicofo).
Drop save, as we do not need it before destroying, check lobby.
2021-12-15 21:59:23 -06:00
Shawn
8fa22ce059 fix: participant join notifications 2021-12-15 21:59:14 -06:00
jan-di-cgm
a6ec9e9f5d Fix default values for hideConferenceSubject/-Timer 2021-12-15 20:06:21 -06:00
Jaya Allamsetty
ea2407191a chore(deps) lib-jitsi-meet@latest
* fix(xmpp): fix race in p2p set codecs

d630bc32a1...63c3e1f869
2021-12-15 16:28:30 -05:00
José Luís Andrade
ea485f9974 fix(lang) update Portuguese translation 2021-12-15 16:12:47 +01:00
Robert Pintilii
91437c50e3 feat(thumbnail) Video thumbnails redesign and refactor (#10351)
Update video thumbnail design
Update design of indicators
In filmstrip view move Screen Sharing indicator to the top
Removed dominant speaker indicator
Use ContextMenu component for the connection stats popover
Combine Remove video menu and Meeting participant context menu into one component
Moved some styles from SCSS to JSS
Fix mobile avatars too big
Fix mobile horizontal scroll
Created button for Send to breakout room action
2021-12-15 15:18:41 +02:00
Jasper
0503a83667 fix(lang) update Dutch translations 2021-12-15 08:18:50 +01:00
Дамян Минков
648b22bb6d fix: Use default remote display name in speaker stats when one is missing. 2021-12-14 09:29:41 -06:00
Дамян Минков
715b22bfb5 fix: Respects disable reactions moderation flag for popups. 2021-12-14 09:29:41 -06:00
Robert Pintilii
913945e820 fix(overflow-menu) Use fixed height only on drawer (#10612) 2021-12-14 13:39:01 +02:00
Ashiq Hassan
0e717d8388 fix(config.js) Added missing participant left notification key. 2021-12-14 12:07:10 +01:00
Vlad Piersec
d2619b4dd3 fix(Prejoin): Allow changing 'Enable pre meeting screen' option while prejoin screen visible 2021-12-14 10:52:28 +02:00
Vlad Piersec
35b76a2f7c fix(Avatar): Fix initials when avatar contains multiple special characters 2021-12-14 10:47:05 +02:00
Дамян Минков
f620d101ba fix: Fixes disable moderation sounds in meeting. (#10604)
* fix: Fixes disable moderation sounds in meeting.

Moderators in the meeting were sending presence update after one moderator turn it on, which even my result a inconsistent state and flipping the state between moderators several times.

* squash: Adds option to disable reaction moderation.
2021-12-13 13:46:05 -06:00
Horatiu Muresan
70d8a46c05 feat(profile-settings): Hide email field under profile settings 2021-12-13 17:17:38 +02:00
Gabriel Borlea
40844afb60 fix(speaker-stats): prevent search from closing when enter pressed and from keeping previous state (#10597)
* fix(speaker-stats): prevent search from closing when enter pressed and from keeping previous state

* fix(speaker-stats): remove unnecessary blank lines

* fix(speaker-stats): add empty dependencies to prevent dismiss callback

* add(speaker-stats): reset search criteria action
2021-12-13 16:11:07 +02:00
Robert Pintilii
a6a24fa973 fix(overflow-menu) Pin reactions on menu bottom on mobile web (#10599)
Move some styles from SCSS to JSS
2021-12-13 15:51:05 +02:00
Vlad Piersec
69cbb7e103 fix(Polls): Calculate vote percentage based on total number of votes
Percentage was previously calculated based on number of voters
2021-12-13 12:54:36 +02:00
Vlad Piersec
f20a50d8a6 feat(i18n): Allow label rewrite via advanced branding 2021-12-13 12:02:34 +02:00
Saúl Ibarra Corretgé
df3545d287 fix(rn) fix broken mobile build
Importing the entire feature triggers web UI imports.
2021-12-11 16:55:46 +01:00
Christoph Settgast
22d782f61f fix(lang) update German translation 2021-12-11 12:44:09 +01:00
Дамян Минков
ce195d82d6 chore(deps) lib-jitsi-meet@latest
* fix: Fixes set effect and correct presence state.

8a95fda259...d630bc32a1
2021-12-10 15:39:51 -06:00
Jaya Allamsetty
229e65133c feat(media) Disable desktopshare when the video sender limit is reached. 2021-12-10 14:58:55 -05:00
Jaya Allamsetty
11eb6689dc chore(deps) lib-jitsi-meet@latest
* fix(presence): Do not sent presence if there is no active media session.
* fix: server-side callstats is never enabled (#1823)
* fix(JitsiConference) squelch bogus p2p session end error

8aa35dae40...8a95fda259
2021-12-10 12:23:43 -05:00
Calinteodor
bf3cc65f4c feat(security) created SecurityOptions React Navigation screen (#10509)
* feat(security) Security Options screen
2021-12-10 18:23:27 +02:00
Hristo Terezov
75e6dd389f feat(index.html): Add fonts.html SSI. 2021-12-10 10:20:54 -06:00
Rokixy
076113940b typo fix
dekstopAudioStream --> desktopAudioStream
2021-12-10 09:03:18 -06:00
Saúl Ibarra Corretgé
e6accd40e1 fix(breakout-rooms) ensure we use the same media types when joining
Only audio and video are considered. Screen sharing won't be preserved.
2021-12-10 15:51:06 +01:00
Saúl Ibarra Corretgé
7f0cfed981 fix(rn,breakout-rooms) create desired local tracks when joining rooms 2021-12-10 15:50:11 +01:00
Saúl Ibarra Corretgé
9279586e8c fix(tracks) fix disposing of local tracks
Don't just clear the storage for them, local tracks must be disposed, in order
for RN capturer to be freed for example.
2021-12-10 15:49:44 +01:00
Robert Pintilii
f8908c143e fix(disableSelfView) Fix issue with remote participant video (#10582)
Fix issue where last participant is shown as inactive when the self view is hidden
2021-12-10 15:16:02 +02:00
Saúl Ibarra Corretgé
c705dbaa2f fix(rn,breakout-rooms) fix not rendering display names 2021-12-10 13:37:59 +01:00
Saúl Ibarra Corretgé
1fa43ca4e7 chore(rn,versions) bump app and sdk versions 2021-12-10 10:05:34 +01:00
Jaya Allamsetty
9528cbad0e fix(notifications) Adjust the timeout for unmute blocked notifications. 2021-12-09 14:03:16 -06:00
Jaya Allamsetty
a23d57b5ff fix(shortcuts) Ignore keyboard shortcuts when the button are disabled. 2021-12-09 14:03:16 -06:00
Дамян Минков
ae5c364333 fix(breakout-rooms) cleanup local tracks when a conference is left. 2021-12-09 12:13:59 -06:00
Jaya Allamsetty
700c7c523d feat(tracks) Clean up the track if a source addition is rejected. (#10562)
* feat(tracks) Clean up the track if a source addition is rejected.
When jicofo rejects a source-add because of sendder limits, dispose and remove the local track from the conference.

* chore(deps) update LJM to latest.
2021-12-09 07:48:55 -06:00
Calin Chitu
5dbf4845fb feat(chat) keyboard covering input on android fix 2021-12-09 14:51:27 +02:00
Payetus
661a3d34be fix(lang) update Catalan translation
Co-authored-by: Payetus <payet91@gmail.xom>
2021-12-09 13:27:21 +01:00
Robert Pintilii
0e9b40c410 fix(notifications) Create web middleware (#10568)
Fixes broken native
2021-12-09 13:31:43 +02:00
Avram Tudor
51b827ebb0 fix(browser-compatibility) hide launch in web for unsupported mobile browsers (#10569) 2021-12-09 13:16:08 +02:00
Avram Tudor
16a2c729e0 chore(deps) lib-jitsi-meet@latest (#10566)
* fix(browser-capabilities) expose supported mobile browsers

e9e37099a1...161da84ac0
2021-12-09 12:36:11 +02:00
Saúl Ibarra Corretgé
ed5bb871f4 fix(android) fix NoClassDefFoundError for Landroid/graphics/ColorSpace
Fixes: https://github.com/jitsi/jitsi-meet/issues/10182
2021-12-09 10:51:42 +01:00
robertpin
d96ecc5b65 fix(screenshot-capture) Use feature on web only
Fixes broken native
2021-12-09 10:02:23 +01:00
robertpin
41f11e5adb feat(self-view) Added ability to hide self view
Added config option disableSelfView. This disables it on web and native

Added button on local video menu and toggle in settings on web to change the setting
2021-12-09 08:45:16 +01:00
Saúl Ibarra Corretgé
c48aa44af3 fix(breakout-rooms) cleanup remote tracks when a conference is left 2021-12-08 16:52:38 -06:00
Christoph Settgast
085b07efcd fix(rn) join conference if started by moderator
Issue was that APP is not defined at this place on mobile,
thus this raising ReferenceError which caused the waitForOwner to break

Closes: #10211
2021-12-08 16:52:23 -06:00
Saúl Ibarra Corretgé
60dcac96a6 fix(breakout-rooms) fix non-functional context menu
Close the menu after sending a participant to a breakout room, that will detach
the context menu from the current participant and it will work properly when
they join back.
2021-12-08 15:11:18 -06:00
robertpin
2e22eb5169 fix(overflow-drawer) Only use overflow drawer on mobile 2021-12-08 19:55:16 +01:00
Дамян Минков
e2beb2f3b1 chore(deps) lib-jitsi-meet@latest
* fix(tpc) disable ulpfec on chrome 96 (jitsi/lib-jitsi-meet#1816)
* fix: Fixes call to _setTrackMuteStatus.
* Refactor presence update (jitsi/lib-jitsi-meet#1814)

9e5d83f4ac...e9e37099a1
2021-12-08 12:41:47 -05:00
tmoldovan8x8
664f23a395 chore(rn) updates react-native-webrtc 2021-12-08 18:00:04 +02:00
Robert Pintilii
dc20b2fafe fix(screenshot-capture) Update screenshot capture feature (#10443)
* fix(screenshot-capture) Update screenshot capture feature

Add participants jid list to request

Enable screenshot capture only when recording is also on

Updated interval
2021-12-08 16:15:59 +02:00
Saúl Ibarra Corretgé
00ae2dc6a9 fix(virtual-backgrounds) make error message translatable 2021-12-08 15:12:32 +01:00
Saúl Ibarra Corretgé
a182f53cdc fix(virtual-backgrounds) fix error if we failed to load the model
If another try is made, show an error notification instead of failing with an
exception.
2021-12-08 15:12:32 +01:00
Horatiu Muresan
9b3f254c6b feat(end-meet-for-all) Trigger notifyReadyToClose event on end meetin… (#10549) 2021-12-08 16:11:31 +02:00
Vlad Piersec
0188086dde fix(participants-list): Avoid ui moving on input focus 2021-12-08 15:32:51 +02:00
JH
340698a546 fix(lang) update sv translation 2021-12-08 14:05:45 +01:00
SiderealArt
0920bda7b8 fix(lang) update Traditional Chinese (Taiwan) translation 2021-12-08 09:14:11 +01:00
Horatiu Muresan
10e5b2f572 feat(prejoin) Add possibility to hide extra join options buttons (#10434) 2021-12-08 09:53:19 +02:00
José Luís Andrade
81e9d01921 fix(lang) update Portuguese translation 2021-12-08 08:33:21 +01:00
Gabriel Borlea
0d5beb0c4e fix(facial-expressions) load worker as a blob 2021-12-08 08:27:17 +01:00
Ali Alhaidary
b890f34a53 fix(lang) update Arabic translation 2021-12-08 08:25:38 +01:00
Jaya Allamsetty
b19e4d76b5 fix(media) dispatch the unmute blocked action irrepective of the muted state.
This fixes an issue where the user muted by focus is able to unmute themselves even when the sender limit has been reached.
2021-12-07 17:13:29 -06:00
Christoph Settgast
65589937ea fix(breakout,av-moderation): support non-ascii tenant names
Same applies to tenant names as it applies to room names, as the
tenants/subdomains are prefixed to the room names in prosody.

Signed-off-by: Christoph Settgast <csett86@web.de>
2021-12-07 18:31:36 +01:00
Christoph Settgast
a6bc51cff1 fix(breakout,av-moderation): support non-ascii room names
rooms are created in prosody in their urlencoded form, eg täst
becomes t%c3%a4st@conference.jitsi.example.org

As local params = formdecode(query) contains an urldecode, we
need to reencode the room name so that the room can be found in
prosody.

Closes: #10525
Signed-off-by: Christoph Settgast <csett86@web.de>
2021-12-07 18:31:36 +01:00
Saúl Ibarra Corretgé
ae3fb20d65 fix(breakout-rooms) fix not waiting to leave the room
We need to wait for it before we start joining.
2021-12-07 16:40:13 +01:00
Vlad Piersec
bfc0567e32 fix(rn,chat): Fix chat and polls title 2021-12-07 11:13:25 +01:00
Mihaela Dumitru
0fb29a0c7a feat(external-api): enhance recordingLinkAvailable to provide ttl info 2021-12-07 10:57:04 +01:00
gpatel-fr
822850d888 fix(lang) update french translation 2021-12-04 13:18:24 +01:00
Christoph Settgast
64e6c5f461 fix(lang) update German translation 2021-12-04 07:20:26 +01:00
Andrei Oltean
a077043f1b feat: (moderate-reaction-sounds) enable moderator to mute reaction sounds 2021-12-03 18:36:57 +02:00
tmoldovan8x8
646fdef6bb fix(screen-sharing, picture-in-picture) re-enables PIP after stopping screen-share 2021-12-03 15:44:19 +02:00
Saúl Ibarra Corretgé
da0cb2b837 feat(breakout-rooms) add notification when joining rooms 2021-12-03 10:48:31 +01:00
Saúl Ibarra Corretgé
4401ea8818 fix(rn,navbar) fix invalid boolean check
`startTimestamp` is not a boolean, so make sure we return one.
2021-12-03 08:38:58 +01:00
Saúl Ibarra Corretgé
449e226e23 chore(deps) lib-jitsi-meet@latest
* fix(JitsiConference) properly handle leave() errors

61aef90835...9e5d83f4ac
2021-12-02 22:49:34 +01:00
Jasper Hugo
ed6f6cf766 feat(tile-view): allow disabling thumbnail enlargement 2021-12-02 21:21:12 +01:00
Saúl Ibarra Corretgé
79b0360d2e chore(deps) lib-jitsi-meet@latest
* fix(ChatRoom) make sure we wait for all promises on leave()
* fix(ChatRoom) make sure EMUC is destroyed
* fix(JitsiConference) make sure RTC is always destroyed
* fix(log) don't log full stanzas
* fix(avmoderation,breakout-rooms) dispose handlers when leaving

6b3d3d2783...61aef90835
2021-12-02 17:09:02 +01:00
Saúl Ibarra Corretgé
322ec107cd fix(rn,conference) hide timer until it has started
It may never start if the component is not deployed.
2021-12-02 16:04:45 +01:00
Saúl Ibarra Corretgé
3cbddb9d6a fix(breakout-rooms) mark function as async
Not all code paths return a Promise, make sure it does.
2021-12-02 15:49:36 +01:00
gpatel-fr
76667066e2 fix(lang) update french translation + fix 2 existing translations 2021-12-02 15:06:21 +01:00
Tudor D. Pop
c172a27f24 feat(notifications) coalesce participant left and raised hand notifications 2021-12-02 14:17:07 +01:00
Saúl Ibarra Corretgé
40a76940ac fix(rn,external-api) remove dead code 2021-12-02 13:26:15 +01:00
Saúl Ibarra Corretgé
be53c4c522 fix(rn,breakout-rooms) wait for the room to be left
Just like on web, we wait for the current room to be left in order to avoid all
kinds of problems.
2021-12-02 13:26:15 +01:00
Andrei Oltean
8ef48a8a1d feat: (speaker-stats) fix refresh and minor refactoring 2021-12-02 14:11:08 +02:00
Hristo Terezov
827e8201d4 fix(dropbox): OAuth to use postMessage. 2021-12-01 13:44:47 -06:00
Saúl Ibarra Corretgé
591eab7c97 fix(breakout-rooms) make sure participants in breakout rooms have a display name 2021-12-01 18:52:36 +01:00
Saúl Ibarra Corretgé
d9f71ee238 fix(etherpad) fix Etherpad closing when dominant speaker changes
Fixes: https://github.com/jitsi/jitsi-meet/issues/8109
2021-12-01 16:08:38 +01:00
Mejans
054564ab0a New strings translated
So to be up to date
2021-12-01 15:53:45 +01:00
Saúl Ibarra Corretgé
3548485e84 fix(participants) fix unpinning when switching conferences 2021-12-01 15:36:49 +01:00
Saúl Ibarra Corretgé
8393118330 fix(etherpad) fix loading Etherpad on web
Fixes: https://github.com/jitsi/jitsi-meet/issues/10486
2021-12-01 15:02:36 +01:00
Saúl Ibarra Corretgé
991a0e22a8 fix(conference) fix broken dispatch on mobile 2021-12-01 15:02:36 +01:00
Saúl Ibarra Corretgé
7a479b967c fix(modal) remove dead code 2021-12-01 15:02:36 +01:00
Saúl Ibarra Corretgé
0be0d6a76e fix(breakout-rooms) fix when using tenants 2021-12-01 13:50:36 +01:00
Christoph Settgast
60b551a339 fix(lang) update German translation 2021-12-01 06:57:17 +01:00
Hristo Terezov
208586cead fix(gravatar): Add crossOrigin attribute.
In cross origin issolated mode we need to explicitly add crossOrigin
attribute for all resources that are loaded with CORS headers.
2021-11-30 16:15:20 -06:00
Jaya Allamsetty
c7765cc1b7 feat(conference) Implement audio/video mute disable when sender limit is reached.
* feat(conference) Impl audio/video mute disable when sender limit is reached.
Jicofo sends a presence when the audio/video sender limit is reached in the conference. The client can then proceed to disable the audio and video mute buttons when this occurs.

* squash: use a different action type and show notification.
2021-11-30 15:08:25 -05:00
Дамян Минков
d8487c25b2 Revert "fix(Prejoin): Make prejoin name noneditable only when taken from jwt"
This reverts commit af7c316827.
2021-11-30 11:39:16 -06:00
Дамян Минков
2adb5dc7d6 fix: Fixes correct state in lobby screen on wrong password.
Fixes #9869.
2021-11-30 11:39:07 -06:00
Saúl Ibarra Corretgé
cc931986f6 fix(breakout-rooms) fix no video when coming back to main room
Re-create local tracks so we have a clean state.
2021-11-30 11:38:54 -06:00
Saúl Ibarra Corretgé
ce35a88299 fix(breakout-rooms) disable recording and live-streaming
There is currently no way to directly join a breakout room, so Jibri won't know
what to do. This shall be revisited in the future.
2021-11-30 11:38:54 -06:00
Saúl Ibarra Corretgé
58ef2974c9 fix(breakout-rooms) disable lobby in breakout rooms
The main room lobby gets diverted to the rooms, things can get confusing. We
might need to revisit this in the future.
2021-11-30 11:38:54 -06:00
Saúl Ibarra Corretgé
43647f1302 fix(conference) simplify code
Unify the 2 functions used to leave the room into a single one.
2021-11-30 11:38:54 -06:00
Saúl Ibarra Corretgé
599ed10325 fix(conference) remove dead code
Went for a different approach, this code is dead now.
2021-11-30 11:38:54 -06:00
Hristo Terezov
fb9d28a667 chore(deps) lib-jitsi-meet@latest
* feat: Handle disableBeforeUnloadHandlers option.
* feat(conference) Implement audio/video mute disable when sender limit is reached. Jicofo sends a presence when the audio/video sender limit is reaced in the conference. The client can then proceed to disable the audio and video mute buttons when this occurs.

f4f7db2e5f...6b3d3d2783
2021-11-30 07:11:42 +01:00
Hristo Terezov
b2d6054e1c feat: Add disableBeforeUnloadHandlers option 2021-11-29 19:49:51 -06:00
Дамян Минков
2097d77666 feat: Enables muc rate limit for lobby and breakout muc components. 2021-11-29 18:33:48 -06:00
Mihaela Dumitru
4ed7211286 fix(share-video): stop video from the participant list 2021-11-29 13:03:41 +02:00
Calin Chitu
5c67e8b4ce feat(config) defaultLocalDisplayName and defaultRemoteDisplayName 2021-11-26 18:52:43 +02:00
Saúl Ibarra Corretgé
00a74ca47a fix(breakout-rooms) fix checking if a user is in a room
Breakout rooms are just reserved UUIDs, they need not exist as actual MUCs,
until a participant joins. Thus, take this into account when checking if a
participant is in a room.
2021-11-26 16:18:54 +01:00
Saúl Ibarra Corretgé
4a88ad098a fix(rn,settings) only show "disable call integration" on Android
It;';s not implemented on iOS.
2021-11-26 15:30:27 +01:00
Saúl Ibarra Corretgé
dd20e8626e fix(breakout-rooms) fix operations when inside a breakout room
Fix not being able to create / remove breakout rooms when the moderator is
inside a breakout room.
2021-11-26 12:51:11 +01:00
Andrei Gavrilescu
0fc381fc6f feat(rtcstats): send facial expressions to rtcstats-server (#10461)
* send facial expressions to rtcstats

* remove comment

* remove extra line
2021-11-26 12:24:28 +02:00
tmoldovan8x8
73fb586d59 fix(external-api) send AUDIO_MUTED_CHANGED event only when value changed 2021-11-26 12:09:21 +02:00
Alex Bumbu
6cd6c0a043 fix(ios) avoid creating CXProvider objects when CallKit is disabled
Co-authored-by: Saúl Ibarra Corretgé <saghul@jitsi.org>
2021-11-26 10:47:03 +01:00
Saúl Ibarra Corretgé
896e752113 feat(lint) treat warnings as errors 2021-11-26 10:18:31 +01:00
Saúl Ibarra Corretgé
c5920bb8a5 fix(lint) fix all eslint warnings 2021-11-26 10:18:31 +01:00
Calin Chitu
1623dc4989 feat(branding) added native extension to updateTheme helper 2021-11-26 08:46:42 +01:00
Szymon Ruciński
41db8711f0 fix(lang) update Polish translation 2021-11-26 08:45:54 +01:00
Szymon Ruciński
a0edf329ae fix(lang) update Polish translation 2021-11-26 08:45:32 +01:00
robertpin
c2ab8935c1 fix(breakout-rooms) Improve breakout rooms
Don't show more menu on the main room

Fix join room on mobile web

When moving to room reset breakout rooms state to avoid showing incorrect data before response from prosody is received
2021-11-26 08:40:42 +01:00
Andrei Oltean
70b8ccc097 feat: (speaker-stats) add speaker stats feature to native 2021-11-25 20:17:49 +02:00
Calinteodor
cc63ff1c3c feat(conference) UI updates for mobile navigation bar (#10437)
* feat(conference) updated native navigation bar and toolbox styles
2021-11-25 18:41:03 +02:00
Saúl Ibarra Corretgé
4a5982da1f fix(breakout-rooms) make sure the default name is monotonically increasing 2021-11-25 16:50:33 +01:00
Saúl Ibarra Corretgé
fc16bfa6cb chore(deps) lib-jitsi-meet@latest
* fix(breakout-rooms) send whole payload on update event

0261073faf...f4f7db2e5f
2021-11-25 16:03:15 +01:00
Saúl Ibarra Corretgé
9a2aa3848c fix(config) add transcribingEnabled to whitelist
Fixes: https://github.com/jitsi/jitsi-meet/issues/10326
2021-11-25 15:27:59 +01:00
tmoldovan8x8
0a65ec1dfa fix(android) set facebook groupId for all react-native dependencies 2021-11-25 14:55:24 +02:00
Saúl Ibarra Corretgé
7bbc3bcf9e chore(rn,deps) react-native-webrtc@1.94.0 2021-11-25 12:15:56 +01:00
Christoph Settgast
48b12b4e00 fix(lang) update German translation 2021-11-25 07:18:05 +01:00
Hristo Terezov
91413fbd96 feat(load-test): Unmute video. 2021-11-24 14:37:05 -06:00
George Politis
03848fb3f8 chore(deps) lib-jitsi-meet@latest (#10436)
feat: Enables the moderator to {dis/en}able bridge-side rtcstats.

https://github.com/jitsi/lib-jitsi-meet/pull/1789
0261073faf
2021-11-24 15:57:32 +00:00
Payetus
e8cf932abb fix(lang) update translations for Catalan 2021-11-24 16:55:02 +01:00
Saúl Ibarra Corretgé
1a93da8c35 fix(breakout-rooms) cleanup code 2021-11-24 16:27:05 +01:00
Saúl Ibarra Corretgé
73e8f5703c fix(breakout-rooms) avoid accessing invalid room objects 2021-11-24 16:27:05 +01:00
Saúl Ibarra Corretgé
a203a92060 fix(breakout-rooms) simplify code 2021-11-24 16:27:05 +01:00
Saúl Ibarra Corretgé
ef93584c2b fix(breakout-rooms) fix error in case main room is no longer available 2021-11-24 16:27:05 +01:00
Tudor D. Pop
a618697e34 feat(notifications) revisit timeouts and make them configurable 2021-11-24 12:05:27 +01:00
titus.moldovan
64e504f349 fix(android) fixes error in BroadcastEvent 2021-11-24 11:29:56 +01:00
Saúl Ibarra Corretgé
994f6307b9 fix(TileViewButton) fix on mobile
`setOverflowMenuVisible` doesn't exist on mobile.
2021-11-24 11:05:38 +01:00
Saúl Ibarra Corretgé
d7b581e338 feat)rn,sdk) introduce a "ready to close" event
This event is the event host applications need to listen to for knowing when to
dispose the SDK from now on.

Since the introduction of breakout rooms it's possible that we navigate from one
meeting to another, so there will be several conference join / terminations.

In addition, local track destruction is now moved to SET_ROOM when there is no
room, aka, we are going back to the welcome page or to the black page.
2021-11-24 09:58:48 +01:00
Robert Pintilii
763d975445 fix(rn, participants-pane) Show raised hand indicator (#10424)
Make name container limited width and add ellipsis text overflow

Show raise hand status live in participants pane
2021-11-24 09:46:01 +02:00
Avram Tudor
42e62e013d fix(filmstrip) remove border from filmstrip (#10367) 2021-11-24 05:26:22 +02:00
George Politis
04b085e062 fix: Updates the default value of rtcstatsEnabled to match the code. (#10425) 2021-11-23 21:38:20 +00:00
Jaya Allamsetty
83e22524bc chore(deps) lib-jitsi-meet@latest
* fix(TPC): Select 1 as the default scale factor for p2p. This fixes an issue where a user is not able to unmute their video if the MediaStreamTrack associated with the camera stream returns a null value for the track height.
* Save track source name to JitsiRemoteTrack

bdfbb82087...a1c966058c
2021-11-23 15:10:41 -05:00
Calin Chitu
909173cdb5 feat(ui) reverted tokens updates 2021-11-23 16:58:40 +02:00
Calin Chitu
5d1bf9e649 feat(ui) updateTheme helper for client branding 2021-11-23 16:58:40 +02:00
hmuresan
14a422ba83 fix(linguistics) Use 'email' instead of 'e-mail' 2021-11-23 16:00:08 +02:00
Robert Pintilii
0106e68728 chore(breakout-rooms) Added analytics (#10421) 2021-11-23 15:14:59 +02:00
Saúl Ibarra Corretgé
c843744df1 fix(rn,sdk) drop deprecated option enableWelcomePage
It got replaced by a feature flag.
2021-11-23 13:49:14 +01:00
Saúl Ibarra Corretgé
f6f7406d24 fix(rn,sdk) remove deprecated color scheme prop
It has been non-functional for a while.
2021-11-23 13:49:14 +01:00
Vlad Piersec
76a976b5d1 fix(Avatar): Display correctly any emoji/special character in a avatar initials 2021-11-23 13:56:45 +02:00
Saúl Ibarra Corretgé
2e7c06d045 fix(rn,welcome-page) don't create video track unnecessarily
We are no longer rendering it, so skip creating it altogether and make sure it's
destroyed on meeting end.
2021-11-23 12:25:39 +01:00
hmuresan
9fbbcbbd31 fix(prejoin) Fix prejoin app 2021-11-23 11:40:50 +02:00
Greg Galperin
6101cd2c1a fix(lang) update Russian translation 2021-11-22 07:52:44 +01:00
Mejans
41d654b2dc fix(lang) update Occitan translation 2021-11-22 07:52:14 +01:00
Ali Alhaidary
c381a3eed4 fix(lang) update Arabic translation 2021-11-22 07:48:40 +01:00
csett86
f42fe0ce17 fix(lang) update German translation
Signed-off-by: Christoph Settgast <csett86@web.de>
2021-11-22 07:46:13 +01:00
gpatel-fr
b277812e8e fix(lang) update french translation 2021-11-20 11:51:55 +01:00
Jaya Allamsetty
fad5ac9048 feat(video-quality): Always prioritize SS in tile view. 2021-11-19 13:28:13 -05:00
Saúl Ibarra Corretgé
10d54498d0 fix(config) fix incorrect option name and whitelist it 2021-11-19 11:00:57 +01:00
Saúl Ibarra Corretgé
cd166b5f19 fix(build) fix make dev with facial recognition worker 2021-11-19 11:00:57 +01:00
Werner Fleischer
b5faf9f62a feat(breakout-rooms) add breakout-rooms
- implement breakout-rooms
- integrated into the participants panel
- managed by moderators
- moderators can send participants to breakout-rooms
- participants can join breakout rooms by themselve
- participants can leave breakout rooms anytime

Co-authored-by: Robert Pintilii <robert.pin9@gmail.com>
Co-authored-by: Saúl Ibarra Corretgé <saghul@jitsi.org>
2021-11-19 10:27:34 +01:00
Saúl Ibarra Corretgé
d98ea3ca24 chore(deps) lib-jitsi-meet@latest
* feat(breakout-rooms) introduce breakout rooms

131b9458fe...bdfbb82087
2021-11-19 09:37:43 +01:00
Jaya Allamsetty
d2b7151f23 chore(deps) lib-jitsi-meet@latest
* TPC: make the comments more descriptive.
* fix(SignalingLayerImpl): Log an error when only the ssrc owner gets overwritten with a diff ep id.
* fix(TPC): Force reneg when user unmutes the first time. This ensures that the source signaling is sent before the mute state is sent in presence. Jicofo relies on mute state from presence to check if the sender limit has been reached.

6d981ebb6c...131b9458fe
2021-11-18 11:13:09 -05:00
Saúl Ibarra Corretgé
7fa72db384 fix(rn,remote-video-menu) fix import after refactor 2021-11-18 15:58:43 +01:00
Gabriel Borlea
d56b282c5d fix(facial-expressions): some markdowns in the README.md for licence 2021-11-18 11:01:19 +01:00
Gabriel Borlea
72e1dcb877 add(facial-expressions): licence info about facial models 2021-11-18 11:01:19 +01:00
hmuresan
98b05a2529 fix(notify-button-clicked) Fix crash on mobile browsers 2021-11-18 09:35:28 +02:00
Christoph Settgast
2d0a70f2ab lang: Update German translation 2021-11-18 07:57:52 +01:00
Andrei Gavrilescu
6243836b3e chore(deps) lib-jitsi-meet@latest (#10386)
* feat: add facial-expressions in speaker stats (#1724)

b337778da8...6d981ebb6c
2021-11-17 18:32:49 +02:00
Payetus
6520cc2496 feat(Lobby): Adding autoknock feature as a config (#10366)
* adding lobby localization to "ca" lang

* feat(Lobby): Adding autoknock config

feat(Lobby): Adding autoknock config

Co-authored-by: Payetus <payet91@gmail.xom>
2021-11-17 10:24:18 -06:00
Gabriel Borlea
61684b1071 feat(facial-expressions): add the facial expression feature and display them in speakerstats (#10006)
* 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>
2021-11-17 16:33:03 +02:00
Calin Chitu
e42db3c9c2 feat(welcome) added WelcomePage React Nav bottom tabs 2021-11-17 15:42:06 +02:00
Andrei Gavrilescu
6f75226044 chore(deps): update rtcstats 9.0.1 (#10374) 2021-11-17 14:21:37 +02:00
Andrei Gavrilescu
7e9d665697 fix(toolbox): enable fullscreen button on Android mobile browsers 2021-11-17 12:55:10 +01:00
Robert Pintilii
9aa2bbe115 feat(tokens) Added more colors to theme (#10381) 2021-11-17 11:35:07 +02:00
Vlad Piersec
31e4a9c1a0 fix(responsive-ui): Make modal full screen & fix prejoin layout on mobile landscape 2021-11-17 10:44:35 +02:00
Vlad Piersec
1106e71f03 fix(speaker-stats): Fix stats search position on narrow screens 2021-11-17 10:44:17 +02:00
Horatiu Muresan
d84ba85f58 fix(dynamic-branding) Fix bogus mUI dependency on mobile (#10375) 2021-11-16 22:16:18 +01:00
robertpin
1e706db114 fix(av-moderation) Don't stop local screensharing on mute all 2021-11-16 12:47:39 -06:00
Calin Chitu
c82cead5ae feat(chat/native) removed keyboard dismiss from JitsiKeybAvView 2021-11-16 17:50:09 +02:00
Calin Chitu
39d1ccff85 feat(chat/native) fixed scroll inside chat room 2021-11-16 17:50:09 +02:00
tmoldovan8x8
2e69ec71c5 feat(e2ee) add externally managed key mode 2021-11-16 12:12:10 +01:00
Avram Tudor
be6adad61b chore(deps) lib-jitsi-meet@latest (#10368)
* fix(browser) Mark safari <14 as unsupported

51f77cbd51...b337778da8
2021-11-15 15:45:50 +02:00
Vlad Piersec
23b8dd4860 fix(Prejoin): Make prejoin name noneditable only when taken from jwt 2021-11-15 15:40:18 +02:00
Robert Pintilii
c74bdf137c fix(screenshot-capture) Update data sent to backend (#10364) 2021-11-15 14:59:06 +02:00
Horatiu Muresan
8ebca64af1 feat(dynamic-branding): Add custom theme branding (#10335)
- apply theming to various buttons
2021-11-15 10:37:54 +02:00
Saúl Ibarra Corretgé
61025edb74 chore(deps) lib-jitsi-meet@latest
* fix(e2ee) disable p2p when e2ee is enabled
* fix(e2ee) fix race condition when restarting media sessions
* fix(p2p) fix error if p2p session is stopped while accepting it
* fix(e2ee) removed no longer needed code
* feat: SourceVideoTypeMessage message
* chore(lint) tame the new linter
* chore(deps) update Babel and ESLint to the latest versions
* chore(deps) adapt to logger package rename
* fix(e2ee): fix loading web worker when using a relative path inside a blob for the E2EE context
* * fix(sdp): provide SCTP streams, because the XMPP parser expects them

c193f0d433...51f77cbd51
2021-11-11 16:52:39 +01:00
Calinteodor
4e2fea1e12 feat(rn,welcome) React Navigation drawer 2021-11-11 15:32:56 +01:00
Vlad Piersec
f5cdd5fca1 fix(Chat): Fix private message reply button not working 2021-11-11 15:21:24 +02:00
Robert Pintilii
eec8b9e58e fix(participants-list) Show participants with empty names (#10353) 2021-11-11 14:48:15 +02:00
Saúl Ibarra Corretgé
a96a4ea336 chore(deps) update rtcstats, change package name 2021-11-11 08:04:28 +01:00
Christoph Wiechert
876773ca2a fix(lang) Fix typos in german translation 2021-11-11 06:40:31 +01:00
Jaya Allamsetty
bc6070b98d fix(prejoin): Add audio tracks on Safari always.
This fixes a bug where remote audio is not being played out if the user joins audio and video muted from pre-join screen.
2021-11-10 14:12:53 -05:00
Jaya Allamsetty
9ca0ee41b6 fix(devices): Fixes a JS error when no audio/video is selected and there is a device update. 2021-11-10 14:12:53 -05:00
Saúl Ibarra Corretgé
957bd8916a chore(tech-debt) remove dead code 2021-11-10 18:29:34 +01:00
Saúl Ibarra Corretgé
8f08a54fb2 chore(deps) adapt to logger package rename 2021-11-10 14:40:17 +01:00
Saúl Ibarra Corretgé
28c793b3a9 chore(deps) adapt to eslint-config-jitsi rename 2021-11-10 13:10:15 +01:00
tmoldovan8x8
243aa20912 bugfix(rn) sends CONFERENCE_TERMINATED to native after dismissing the ReloadOverlay 2021-11-10 13:34:16 +02:00
Pavol Cvengros
2d27195652 chore(deps) update uuid package to 8.3.2
Co-authored-by: Saúl Ibarra Corretgé <saghul@jitsi.org>
2021-11-10 11:35:20 +01:00
Hristo Terezov
bcb0fe919c fix(recorder): "already started" notification 2021-11-09 13:25:19 -06:00
Hristo Terezov
981fc2f410 feat: Handle recording already started error 2021-11-09 12:33:43 -06:00
Hristo Terezov
e6e808c764 chore(deps) lib-jitsi-meet@latest
* feat(recording): Add unexpected-request error
* fix(xmpp): use RTX with Firefox from 96 on only
* fix(sdp): update data channel to RFC format
* sdp: switch port to 9 and rtp protocol to UDP/TLS/RTP/SAVPF (#1697)

03bc5278da...c193f0d433
2021-11-09 12:33:24 -06:00
Saúl Ibarra Corretgé
01ae4c477b fix(lint) remove warning in eslint-plugin-react
Fixes: Warning: React version not specified in eslint-plugin-react settings.
2021-11-09 15:16:01 +01:00
Robert Pintilii
e0010def14 fix(analytics) Fix analytics event names (#10332)
Fixed analytics where event names had duplicated words (eg. calendar.calendar.selected.selected)

Group reaction buttons analytics into one event

Removed unused code
2021-11-09 12:20:40 +02:00
Saúl Ibarra Corretgé
e77216f18e chore(lint) tame the linter 2021-11-09 11:05:09 +01:00
Saúl Ibarra Corretgé
ba7b5fc996 chore(deps) update eslint-config-jitsi to version 3.0.0 2021-11-09 11:05:09 +01:00
Saúl Ibarra Corretgé
162a67fe8b chore(lint) tame the (uppdated) linter 2021-11-09 09:43:55 +01:00
Saúl Ibarra Corretgé
0aba61d5c6 chore(Deps) update Babel and eslint to their latest versions 2021-11-09 09:43:55 +01:00
Vlad Piersec
5e4f09dd0a fix(config): Move 'disableDetails' flag to connectionIndicators config 2021-11-09 09:18:34 +01:00
Дамян Минков
17c0298e59 feat: Filters moderators presence in lobby room. (#10316)
* feat: Filters moderators presence in lobby room.

* squash: Print actor creating lobby.
2021-11-08 16:38:22 -07:00
Jaya Allamsetty
6348840cbd fix(large-video) Call play() whenever a new stream is attached to large-video.
This fixes an issue on Safari where black video is rendered sometimes whenever a new stream is attached to the large video container.
2021-11-08 16:49:45 -05:00
Paweł Domas
6a7842ab7e fix: incompatible effect instance (#10311)
There are hard to handle race conditions around
screensharing/presenter mode turning on/off. It's
easier to make a NO-OP for turning the camera on/off
while switching to screen sharing is in progress
than trying to handle this gracefully. It should be okay
for the user to click the button again after the switch
operation is done.

Ideally this logic will be re-implemented in redux
middlewares and moved out of the conference.js file.
2021-11-08 14:05:23 -06:00
hmuresan
b2894cc941 fix(raise-hand): Remove participant left from raised hand queue 2021-11-08 18:41:10 +02:00
Robert Pintilii
fc52105cf6 fix(reactions) Updated sounds (#10321) 2021-11-08 16:16:09 +02:00
Christoph Settgast
b47a263e5c lang: fixes for German
Signed-off-by: Christoph Settgast <csett86@web.de>
2021-11-08 05:52:04 -07:00
Vlad Piersec
15b677aa2a fix(Avatar): Display special characters in avatar initials 2021-11-08 14:32:30 +02:00
Vlad Piersec
08fb232627 fix(Avatar): Calculate avatar color based on display name 2021-11-08 14:32:16 +02:00
Vlad Piersec
3c5017a66a feat(connection-indicator): Add config option to disable indicator popover 2021-11-08 11:38:03 +02:00
Robert Pintilii
a97b700712 fix(tracks) Use duration from JitsiTrack (#10304) 2021-11-08 10:55:28 +02:00
José Luís Andrade
bf36b22bbd fix(lang) update portuguese translation of "highestQuality" (#10317)
Shorten text size for better viewing
2021-11-07 08:02:18 +01:00
Payetus
d6253c57c9 adding lobby localization to "ca" lang 2021-11-06 05:57:24 +01:00
José Luís Andrade
978586c157 fix(lang) update Portuguese Translation 2021-11-05 19:59:16 +01:00
tudordan7
a7efbfb0f8 feat(app-notifications): Remove device notifications in the prejoin screen. 2021-11-05 16:16:10 +01:00
alexbratu92
68eb0795eb feat(polls) fix spacing and send answer identifier 2021-11-05 07:34:52 -07:00
alexandrubratu8x8
4c46396e6a feat(polls): trigger events for poll created and answered (#10249)
Co-authored-by: alexbratu92 <alexbratu92@gmail.com>
2021-11-04 12:18:41 +02:00
Robert Pintilii
4767ef497f chore(deps) lib-jitsi-meet@latest (#10305) 2021-11-04 09:26:39 +02:00
Robert Pintilii
f27cb46f3c fix(reactions) Remove auth header if there's no JWT 2021-11-03 17:43:47 +02:00
Robert Pintilii
c2e55339d1 fix(av-moderation) Fix text on stop video dialog
Show correct text on stop participant's video dialog when moderation is on
2021-11-03 14:16:11 +02:00
Saúl Ibarra Corretgé
a78c8c199d feat(ci) use Node 16 / npm 8 for testing 2021-11-03 12:44:45 +01:00
Saúl Ibarra Corretgé
0d7ecfad40 chore(deps) run npm audit fix 2021-11-03 12:44:45 +01:00
Saúl Ibarra Corretgé
040a1d8add feat(misc) add .nvmrc 2021-11-03 12:44:45 +01:00
Saúl Ibarra Corretgé
3294dc882d chore(deps) sync package-lock.json 2021-11-03 12:44:45 +01:00
robertpin
21d5b7bcd6 fix(av-moderation) Fix text on stop video dialog
Show correct text on stop participant's video dialog when moderation is on
2021-11-03 12:38:12 +02:00
gpatel-fr
c4cbf83208 fix(lang) update french translation 2021-11-03 10:21:32 +01:00
Alexey Matveev
f1ae9a6697 fix(lang) update Russian translation
Co-authored-by: Alexey Matveev <malex@1forma.ru>
2021-11-02 16:48:39 +01:00
Jaya Allamsetty
c653334d69 chore(deps) lib-jitsi-meet@latest
* fix(presence) Send presence on mute state change.
* fix(TPC) change the tranceiver dir to recvonly when track is removed. This fixes occasional failures of MuteTest.MuteAfterJoinCanShareAndUnmute torture test and also the case on Safari where user stopping the screenshare doesn't stop showing the screensharing indication on the thumbnail.
* fix: Avoid sending two presences if start muted and then screen share. (#1771)
* feat: use source names in presence
* ref: move SignalingLayer to the conference
* feat: Delays deployment info stats till we get update from backend. (#1770)

e566291864...e6b330186f
2021-11-02 10:32:00 -04:00
Vlad Piersec
e51655a93a feat(Polls): Display creator name for polls 2021-11-02 15:45:46 +02:00
Vlad Piersec
8983ea41fd fix(Drawer): Close drawer on item click
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.
2021-11-02 15:45:29 +02:00
Nils Ohlmeier
cd6a814978 addressed review comments 2021-11-01 11:27:22 -05:00
Nils Ohlmeier
41f5872f70 fix(conference): store user selected device from Firefox prompt
When Firefox users choose a new device via the gUM prompt store
these as the new user selected devices, so they show up in the
settings menu.
2021-11-01 11:27:22 -05:00
Gabriel Borlea
af01072827 fix(speaker-stats): calculate total dominant speaker time if user is dominant and has no previous speaker time 2021-11-01 07:53:10 -07:00
Vlad Piersec
eaa084722f fix(Chat): Place Chat pane above Participants pane on mobile web 2021-11-01 15:30:59 +02:00
Vlad Piersec
318bc26fa0 fix(Polls): Fix polls pane on Firefox
On Firefox the create button is not visible.
Having a poll with long question/options breaks the UI.
2021-11-01 14:55:18 +02:00
tudordan7
072c29c0f9 fix(connection-indicator): Hide indicator circle when ghost icon is hidden. 2021-11-01 10:02:43 +01:00
Vlad Piersec
9ab16a0a5c chore(webpack): Fix source maps on hot reloading 2021-11-01 11:01:52 +02:00
robertpin
69d2cb52fe feat(virtual-bg) Added config to disable screen sharing as virtual bg 2021-11-01 09:50:22 +02:00
Vlad Piersec
6845a759a0 fix(Slider): Fix slider appearance on Firefox 2021-11-01 08:55:09 +02:00
robertpin
7aca5e71b9 refactor(participants-pane) Refactored with reusable components
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
2021-11-01 08:54:13 +02:00
Дамян Минков
78e825de36 fix: Fixes upgrading component to muc prosody config.
Fixes #10282.
2021-10-29 13:53:01 -07:00
robertpin
829f36e886 fix(lobby) Added data-testid and aria-label used for testing 2021-10-29 14:02:06 +03:00
robertpin
afbf261f67 fix(iframe) Keep URL params on iframe reload
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
2021-10-29 10:59:54 +03:00
robertpin
76fc5a0806 fix(av-moderation) Stop screensharing on video mute on native
When the moderator stops the video for the participant stop screensharing (removes the track doesn't just mute it)
2021-10-29 09:21:47 +03:00
scott boone
09d3344c39 temporarily pin luajwtjitsi because v3 will intro a breaking change (#10262) 2021-10-27 16:24:56 -05:00
Jaya Allamsetty
0dc061f633 chore(deps) lib-jitsi-meet@latest
* fix(TPC) add muted tracks to TPC but not to the RTCPeerConnection.

447f111cf2...e566291864
2021-10-27 11:27:55 -04:00
gpatel-fr
ba110fbdc3 (Lang) fix french translation 2021-10-27 07:28:47 -07:00
robertpin
a6167997d8 fix(reactions) Updated payload sent to backend
Added jid

Instead of internal id send id from JWT
2021-10-27 16:02:32 +03:00
Vlad Piersec
b6047b9761 fix(Chat): Use proper 'aria-label' attr on tab menu 2021-10-27 15:59:10 +03:00
robertpin
53a05dd1ad fix(av-moderation) Fix Ask to Unmute on native
Show button with moderation off

Show "Allow video" instead of "Ask to unmute" when needed
2021-10-27 09:44:18 +03:00
Дамян Минков
be5c397422 chore(deps) lib-jitsi-meet@latest
* fix(av-moderation) Fix remove from whitelist to match prosody changes

111e50c38a...447f111cf2
2021-10-26 18:09:44 -07:00
robertpin
d38bf36b2a fix(av-moderation) Fix ask to unmute after allow video
Make Ask to Unmute work if video moderation is on but participant is video whitelisted
2021-10-26 12:00:04 -07:00
Avram Tudor
1793bf460e fix(tileview) Enlarge tiles to fill whole space (#10201) 2021-10-26 11:46:01 +03:00
Vlad Piersec
9e3084ef48 refactor(chat): Don't display chat inside a dialog
* 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.
2021-10-26 09:11:14 +03:00
Vlad Piersec
b0f8b34d94 refactor(toolbox): Rename touch start action for toggle button & move teranry 2021-10-26 09:10:35 +03:00
Vlad Piersec
366dc8d11b fix(toolbar): Hide/Show toolbar on tap on mobile web.
* A tap on video space will toggle the toolbar.
* Double tapping on a tile will pin the participant.
2021-10-26 09:10:35 +03:00
Jaya Allamsetty
667a6eac80 chore(deps) lib-jitsi-meet@latest
* ref(JitsiConference) Remove remote tracks from conf before reneg is done. We do not have to wait for the removal of the ssrcs from the remote description for removing the remote tracks associated with a participant that left the call. This speeds up removal of the participant from call even if the JingleSession modification queue is backed up.
* faet(SDP): Add test for jingle JSON format.

42c675249a...111e50c38a
2021-10-25 15:58:05 -04:00
Nils Ohlmeier
84f37b1777 fix(conference) avoid double prompts in Firefox after choosing non-default device.
* fix(conference) avoid double prompts in Firefox after choosing non-default device

* addressed linting errors
2021-10-25 14:53:45 -04:00
Andrei Oltean
779d44298b feat: (video-thumbnail) add permanent video participant name to thumbnail (#10242)
* 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>
2021-10-25 16:35:40 +03:00
Avram Tudor
b4ba887d92 Revert "Update Virtual Background Model (#9867)" (#10247)
This reverts commit 9b6b335c60.
2021-10-25 14:48:18 +03:00
robertpin
0182cc0504 feat(reactions) Added metrics for disable reaction sounds
Reordered reactions middleware alphabetically
2021-10-25 13:24:51 +03:00
Mejans
1dbfbb9786 Update Occitan (#10240) 2021-10-25 13:00:44 +03:00
gpatel-fr
d77a3bb61e fix(lang): update French translation (#10239) 2021-10-25 13:00:32 +03:00
Roshan Pulapura
9b6b335c60 Update Virtual Background Model (#9867)
* update virtual background

* remove comments

* remove general model
2021-10-25 12:59:11 +03:00
csett86
2ab0d6b606 fix(lang): update German translation (#10188)
Signed-off-by: Christoph Settgast <csett86@web.de>
2021-10-25 12:55:31 +03:00
robertpin
dec05917d3 fix(translation) Reverted changes to translation parameter
Reverted param name change on translation
2021-10-25 10:49:52 +03:00
robertpin
0715f85796 fix(video-thumbnail) Fixed name for remote participants
Display name on thumbnail for remote participants as well
Updated style
2021-10-22 17:21:32 +03:00
Andrei Oltean
f1e13404b7 feat: (video-thumbnail) add permanent participant name to video thumbnail 2021-10-22 15:58:14 +03:00
Andrei Oltean
dd89034503 feat: (video-thumbnail) add permanent participant name to video thumbnail 2021-10-22 15:58:14 +03:00
Alex Bumbu
92c34c9c3e fix(iOS) fix missing headers 2021-10-22 14:00:20 +03:00
Horatiu Muresan
e273a05dd0 feat(external-api): Add recording download link available event (#10229) 2021-10-22 11:53:22 +03:00
Alex Bumbu
81dfbaeb81 feat(iOS) expose activating/deactivating audio session functionality 2021-10-22 11:30:25 +03:00
Horatiu Muresan
2cfa5f6312 fix(dominant-speaker): Lower hand through xmpp for dominant speaker (#10220) 2021-10-21 17:52:22 +03:00
Saúl Ibarra Corretgé
162ec5a2b2 chore(deps) sync package-lock.json 2021-10-21 16:31:47 +02:00
robertpin
338ff43c81 feat(participants-pane) Added search in participants list (#9975)
- 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`
2021-10-21 14:58:44 +03:00
Calin Chitu
da5603dd9a feat(polls) added padding to the buttons container 2021-10-21 14:56:54 +03:00
robertpin
92c6324ff3 fix(screenshare) Add timestamp to desktop track
Send screenshare duration to analytics
2021-10-21 12:44:09 +03:00
Horatiu Muresan
4b7a6741fa feat(raised-hand) Change raisedHand to a timestamp instead of boole… (#10167)
- this was needed for sorting the raised hand participants in participants pane in
the order they raised their hand also for participants joining late
2021-10-21 12:40:57 +03:00
Mihaela Dumitru
f435fc4ade feat(external-api): add knocking event and approve/reject command (#10210) 2021-10-21 10:39:13 +03:00
Avram Tudor
b250f21f91 fix(prejoin) fix incorrect alignment of alternative join options (#10218)
remove styles that break the inline dialog's position management
2021-10-21 10:17:24 +03:00
Hristo Terezov
acaadb503f chore(deps) lib-jitsi-meet@latest
* fix(SS): missing.

7275ee1286...42c675249a
2021-10-20 19:50:42 -05:00
Saúl Ibarra Corretgé
6e55351e68 chore(deps) uppdate xmldom
The previous package has become unmaintained and it has a new home now.
2021-10-21 02:45:33 +02:00
Jaya Allamsetty
4f58b5fab9 chore(deps) lib-jitsi-meet@latest
* fix(layer-suspension) Do not ignore maxHeight=0 sender constraint. This fixes https://github.com/jitsi/lib-jitsi-meet/issues/1759.

012c38769d...7275ee1286
2021-10-20 16:56:41 -04:00
Saúl Ibarra Corretgé
3f7c6a3801 chore(rn) update CocoaPods 2021-10-20 21:52:19 +02:00
Calinteodor
9df59b4a6f feat(conference) added React Navigation
Introduce navigation for all in-conference screens.
2021-10-20 21:29:21 +02:00
Дамян Минков
a5129ef291 fix: Fixes kick when allowners is enabled.
Broken after ab18fa7 which disallows the kick as the affiliation attribute is missing in kick iq that is sent.
2021-10-20 08:10:40 -07:00
Дамян Минков
bc6e49754c feat: Adds a prosody module limiting the join rate in a room. 2021-10-19 16:52:32 -07:00
Дамян Минков
ab18fa731b Adds new option to allowners module (#10207)
* feat: Adds option to disable owner revoke in allowners module.

* squash: Fixes few lua check warnings.
2021-10-19 16:52:16 -07:00
Jaya Allamsetty
becbbdd139 chore(deps) lib-jitsi-meet@latest
* ref(JingleSessionPC) Do not renegotiate on every local source change. Instead rely on the 'negotiationneeded' event fired by the browser for JVB connection. This makes local source changes faster even if the modification queue is backed up.

75d3106544...012c38769d
2021-10-19 12:43:21 -04:00
Werner Fleischer
0a9985f5ca fix(video-menu): match size of local and remote video menu icons 2021-10-19 11:35:37 +02:00
Vlad Piersec
fbef0e2a59 docs: Document 'virtualBackgrounds' on dynamic branding 2021-10-19 10:21:34 +03:00
Vlad Piersec
1ad8f77179 feat(dialogs): Redesign Video Quality dialog & change dialog background color 2021-10-19 10:05:59 +03:00
Vlad Piersec
bad8911fe8 feat(Labels): Redo video quality label
Video quality label now becomes "performance settings".
All CSS for labels is moved to JS.
Overflow menu button is also changed to "performance settings".
2021-10-19 10:05:23 +03:00
Vlad Piersec
1feb0fa129 fix(polls): Fix scroll not working on mobile web polls pane
* Moved TouchmoveHack's css to component
2021-10-19 10:01:48 +03:00
Werner Fleischer
a0aff63dde fix(webpack): ignore optional canvas dependency in resemblejs
Skipping node-canvas dependency in resemblejs as it [fails in certain environments](https://github.com/rsmbl/Resemble.js#nodejs).
The reference states

> If you are using Resemble.js for in-browser analysis only, you can skip the node-canvas dependency.
2021-10-18 17:08:41 +02:00
Avram Tudor
f24e0f3622 fix(virtual-backgrounds) cache wasm and model (#10190)
Prevents downloading wasm module and module each time background is changed
2021-10-18 15:19:21 +03:00
Vlad Piersec
c37678f3bb fix(polls): Keep the original height for options when moving it up and down 2021-10-18 11:13:28 +03:00
Vlad Piersec
70af0d6b78 fix(polls): Fix 'Skip' button functionality 2021-10-18 11:13:08 +03:00
Rafael
09efaa0d0d fix(lang) updated pr-BR translation 2021-10-18 09:19:37 +02:00
Vlad Piersec
2855642fc3 fix(polls): Update ux according to design 2021-10-18 10:06:43 +03:00
Vlad Piersec
ebb0a206f1 feat(polls): Add analytics for polls 2021-10-18 09:30:44 +03:00
Дамян Минков
04194ae8a1 fix: Fixes correct ljm version. 2021-10-15 13:09:19 -07:00
Дамян Минков
ea26a48678 feat: Hides prejoin screen on conference in progress event. (#10175)
* 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.
2021-10-15 11:53:50 -07:00
hmuresan
359c11bfb9 feat(rtc-stats) Whitelist rtcstatsEnabled 2021-10-15 20:00:50 +03:00
George Politis
16402d8482 Include the callstats username in the rtcstats display name. (#10173)
We want to be able to correlate between rtcstats and callstats, so we're
appending the callstats user name (if it exists) to the display name.
2021-10-15 16:55:23 +01:00
Jaya Allamsetty
2b62cc8a74 chore(deps) lib-jitsi-meet@latest
* ref(TPC) Configure encodings in one go. (#1739)
* feat(CodecSelection) Disable VP9 on Safari. (#1752)

a5cc2321b8...d27a510f84
2021-10-15 11:11:00 -04:00
Vlad Piersec
bb8bc2fe32 Add 1000 char limit to questions & answers 2021-10-15 14:10:32 +03:00
hmuresan
97ea155905 fix(prejoin) Hide prejoin screen on init join conference 2021-10-14 17:44:47 -05:00
Saúl Ibarra Corretgé
e0bde6d491 fix(ios) sync Podfile.lock 2021-10-14 11:27:22 +02:00
Zoltán Ulrich
9506f3ac3d fix(ios) Fixes RCTBridge not being released when JitsiMeet is trying to destroy its bridge on some OS versions 2021-10-14 10:51:14 +02:00
Saúl Ibarra Corretgé
accdfe4625 chore(deps) update package-lock after a fresh module install 2021-10-13 18:08:03 +02:00
Saúl Ibarra Corretgé
0b984ce5f9 feat(notifications) Changed notifications stack to be full height
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
2021-10-13 16:37:34 +02:00
Saúl Ibarra Corretgé
b4f1ab991d chore(rn,versions) bump app and sdk versions 2021-10-13 16:13:42 +02:00
Saúl Ibarra Corretgé
917545a297 chore(deps) run npm audit fix
Also enable using legacy peer dependencies until we update RN.
2021-10-13 14:41:26 +02:00
José Luís Andrade
8bcc94fdcc fix(lang) update Portuguese translation 2021-10-13 13:48:16 +02:00
Saúl Ibarra Corretgé
749f93ce1a chore(doc) delete old sample config files
The Debian package's config files are the canonical example.
2021-10-12 21:55:29 +02:00
Selyan Slimane Amiri
a6ce4fe368 fix(lang) update Kabyle translation
* Update languages-kab.json

Add missed translation

* Update main-kab.json

Continue translation in kabyle

* Update main-kab.json

Finish the Kabyle translation

* Update languages-kab.json
2021-10-11 20:32:51 +02:00
Saúl Ibarra Corretgé
c84e2e6ad8 feat(build) update build toolchain to Node 14 / npm 7 (#10145)
* feat(build) update build toolchain to Node 14 / npm 7

* squash: Updates ljm.

Co-authored-by: Дамян Минков <damencho@jitsi.org>
2021-10-11 09:15:42 -07:00
hmuresan
cdf00b5696 feat(raise-hand): Change raise hand indicator background color 2021-10-11 16:05:02 +03:00
hmuresan
4a322d2e60 feat(avatar-background): Change default colors for avatar backgrounds 2021-10-11 15:26:57 +03:00
Vlad Piersec
95e96b605d fix(rn, polls): Fix vote percentage alignment 2021-10-11 13:03:08 +03:00
Vlad Piersec
7f95bc23fe fix(rn, polls): Display 'Chat and Polls' as heading when polls enabled 2021-10-11 13:02:40 +03:00
Jesús Verduzco
927505ebf8 fix(lang) updated Spanish translation 2021-10-11 11:13:41 +02:00
Izak Glasenčnik
f17af0ce2a fix(lang) update Slovenian translations 2021-10-11 10:57:54 +02:00
Vlad Piersec
7f4fb7f447 fix(polls): Disable submit button if no answers have been chosen 2021-10-11 11:53:23 +03:00
Vlad Piersec
16c3a35da9 fix(polls): Don't let poll question and option text overflow 2021-10-11 10:27:39 +03:00
bgrozev
5344e2bfae feat: Whitelist all of videoQualitty, not just "persist". (#10133)
* doc: Clarify documentation.

* feat: Whitelist all of videoQualitty, not just "persist".
2021-10-08 15:52:12 -05:00
Hristo Terezov
f83559568d fix(FIlmstrip): disable default overscrolling
With the default overscrolling policy when a user overscroll the
filmstrip the scroll focus is moved to the main window and it looks like
the scroll is not working.
2021-10-08 09:13:56 -05:00
Vlad Piersec
d1a69689bc chore(webpack): Don't show warnings on dev server overlay 2021-10-08 11:06:55 +03:00
Saúl Ibarra Corretgé
873ccf24ec chore(deps) lib-jitsi-meet@latest
Bring in Webpack 5 support.
2021-10-07 20:22:44 +02:00
Saúl Ibarra Corretgé
a313f5cde2 feat(build) migrate to Webpack 5 2021-10-07 20:22:44 +02:00
Saúl Ibarra Corretgé
720d19ba95 chore(deps) update js-utils
In preparation for Webpack 5.
2021-10-07 20:22:44 +02:00
Saúl Ibarra Corretgé
0af14b0f05 chore(deps) update eslint-config-jitsi
Flow rules are now separate from the default ones.
2021-10-07 20:22:44 +02:00
Дамян Минков
b55526702e chore(deps) lib-jitsi-meet@latest
* feat(identity): add region identity parsing
* fix(IceFailedHandling) force client reload when ICE fails locally.
* fix(iOS15) fix not being able to unmute if "everyone starts muted" is set
* fix: logger calling wrong function typo
* feat: generates source names (#1725)

b5288c2989...febd9087b9
2021-10-07 13:07:25 -04:00
Jaya Allamsetty
15aaf832b4 fix(notification) Edit reason for forced reload of the client.
It is triggered by both local ICE failure and because of call getting migrated to a different bridge.
2021-10-07 11:27:53 -04:00
hmuresan
7102ad1186 feat(external-api) Expose deployment info through API
- Set region along shard from xmpp
2021-10-07 09:41:42 -05:00
tmoldovan8x8
3b33ba3f5d feat(android) adds initializer for SoLoader.init 2021-10-07 11:56:19 +03:00
Vlad Piersec
ddcb85a1d8 fix(jaas): Get dynamic branding url from config file
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.
2021-10-07 11:52:28 +03:00
Hristo Terezov
1bc5ef3516 fix(toolbox): prevents filmstrip scrolling.
The toolbox container with is 100% and when displayed prevents filmstrip
scrolling for the whole width of the screen.
2021-10-07 09:33:08 +02:00
qwertiko GmbH
1d44741d5e fix(config) remove deprecated useRoomAsSharedDocumentName parameter
Fixes: #10103

Co-authored-by: Denis Meiswinkel <meiswinkel@qwertiko.de>
2021-10-06 19:35:20 +02:00
robertpin
483bc45d59 fix(participants-pane) Place Dominant Speaker first in participants list
Move function participants list ordering function in participant-pane, since that's the only feature that uses it.
2021-10-06 15:11:40 +02:00
Anton Solomonov
597c99f884 fix(doc) fix typo in README 2021-10-06 15:06:55 +02:00
Saúl Ibarra Corretgé
f63b161955 fix(ios) disable QuickType bar on iOS15 when not using autocorrect
See:
https://reactnative.dev/blog/2021/09/01/preparing-your-app-for-iOS-15-and-android-12#quicktype-bar
2021-10-06 13:28:51 +02:00
robertpin
09835a672b feat(external_api) Exposed AV Moderation to the iFrame API
Renamed event property
2021-10-06 14:21:27 +03:00
Vlad Piersec
e4448e0a68 fix(Prejoin): Make prejoin avatar match the other avatars 2021-10-06 14:18:28 +03:00
hmuresan
9f7a4f86d8 feat(context-menu) Show participants context menu overlaid in a portal 2021-10-06 14:06:59 +03:00
Vlad Piersec
9ef71e3b15 (fix): Change wrong function description 2021-10-06 09:58:49 +03:00
Vlad Piersec
f879ecfc70 feat(large-video): Switch to tile view on large video double tap 2021-10-06 09:58:49 +03:00
dependabot[bot]
fed018eb08 chore(deps): bump url-parse from 1.5.1 to 1.5.3
Bumps [url-parse](https://github.com/unshiftio/url-parse) from 1.5.1 to 1.5.3.
- [Release notes](https://github.com/unshiftio/url-parse/releases)
- [Commits](https://github.com/unshiftio/url-parse/compare/1.5.1...1.5.3)

---
updated-dependencies:
- dependency-name: url-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-06 08:08:25 +02:00
Jaya Allamsetty
2572ba9a65 fix(tracks) Always add audio track on Safari.
This fixes an issue where Safari users cannot hear remote audio if they join audio/video muted. The browser throws the following error when the application tries to execute play on the audio element: 'NotAllowedError: The request is not allowed by the user agent or the platform in the current context, possibly because the user denied permission.' This started happening in Safari 15.
2021-10-05 12:36:53 -05:00
Vlad Piersec
fc6e8fd4b9 feat(config): Add config option for making display name read only 2021-10-05 14:36:34 +03:00
robertpin
8fd7b10f06 fix(av-moderation) Update function that calculates quick action button 2021-10-05 06:06:09 -05:00
robertpin
001ae54a7c feat(screenshot-capture) Updated screensharing screenshot capture
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
2021-10-05 10:25:27 +02:00
Suleyman BİLGİN
7c86ece9fa lang: added and translated all missing keys on turkish translation (#10050) 2021-10-04 14:12:38 -05:00
chipechop
8aa475d159 lang: Update main-it.json (#10088)
* Update main-it.json

* Update main-it.json

added a missing comma...

* Update main-it.json

added all the missing commas...

* Update main-it.json

will this be the last comma I left behind? Who knows...
2021-10-04 14:12:17 -05:00
alexbratu92
0c187f180f call module that checks the jwt against the access service 2021-10-04 14:11:54 -05:00
robertpin
c6d3667211 fix(av-moderation) Fix Ask to Unmute
Make ask to unmute work even if the participant is already whitelisted for audio
2021-10-04 09:01:27 -05:00
robertpin
eba58ad56b fix(av-moderation) Show Mute button when participant is unmuted (#10090)
Show Mute button instead of always showing Ask to Unmute

Added aria-label
2021-10-04 14:05:53 +03:00
robertpin
3aec980378 fix(reactions) Remove vpaas check for reactions webhook (#10089)
Reactions will be sent if webhookProxyUrl is set in config.js
2021-10-04 12:01:14 +03:00
robertpin
31ce7e010d fix(config, reactions) Added config option to disable reaction sounds (#10046) 2021-10-04 11:37:02 +03:00
Дамян Минков
acfc9c6683 chore(deps) lib-jitsi-meet@latest
* fix: Avoids sending empty nick in presence.

afc1c34e75...b5288c2989
2021-10-01 11:07:30 -05:00
Дамян Минков
576fd0d343 fix: Skips setting language for transcriptions if not enabled. 2021-10-01 11:07:09 -05:00
robertpin
1beed8c490 fix(av-moderation) Check for moderation support
Show av moderation toggles on mute all / stop everyone's video dialogs only if moderation is supported
Show Ask to Unmute only for moderators
2021-10-01 09:17:02 -05:00
Дамян Минков
33503122c4 fix: Fixes displaying country names which has multiple names listed.
Some countries have multiple names listed in i18n-iso-countries, like US -> ['United States of America', 'USA'].
2021-10-01 09:16:53 -05:00
Saúl Ibarra Corretgé
4369579d2b chore(deps): update react-native-webrtc@1.92.2
Fixes a crash on Android
2021-10-01 16:05:10 +02:00
Saúl Ibarra Corretgé
51626506ff fix(rn,conference) fix unmute when "everyone starts muted" is set
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
2021-10-01 15:45:51 +02:00
Saúl Ibarra Corretgé
eb494f6b8c chore(deps) lib-jitsi-meet@latest
* fix(JitsiConference) make sure isE2EEEnabled() returns a boolean
* fix(loggging) fix exceptions on mobile

7a56f7b341...afc1c34e75
2021-10-01 15:45:20 +02:00
tmoldovan8x8
6124e72f21 feat(android) extract notification channel name 2021-10-01 10:17:23 +03:00
Дамян Минков
6a223763a3 chore(deps) lib-jitsi-meet@latest
* fix(xmpp): disable RTX for Firefox < 93, because it results in random SSRC order
* fix(Jingle): stop reverting the SSRCs from Firefox

c15dda1537...7a56f7b341
2021-09-30 18:24:35 -05:00
Дамян Минков
432c4ada70 fix: Fixes #9869 Lobby and wrong password case. 2021-09-30 18:04:46 -05:00
Дамян Минков
31a7fbfa82 feat: Simplify AV moderation participant approve/remove message and fix array usage. (#10062)
* feat: Simplify av moderation participant approve/remove message.

There is no point of having messages like:
{
  "room": "myroom@conference.mydomain.com",
  "type": "av_moderation",
  "mediaType": "audio",
  "removed": true,
  "approved": true
}

* fix: Fixes array in json.

fix: Fixes array in json.
2021-09-30 13:35:55 -05:00
Hristo Terezov
9e5a9599ca chore(deps) lib-jitsi-meet@latest
* fix(browser-support) fix detecting iOS browsers correctly
* fix(JitsiConference):2 instances for the same room
* ref: sendMuteStatus is not async

ae70962bfa...c15dda1537
2021-09-30 10:58:23 -05:00
Hristo Terezov
2a725d2165 fix(prejoin): Prevent double joining conference. 2021-09-30 10:28:16 -05:00
Hristo Terezov
0214138863 fix(Prejoin): Join click before conference.init() 2021-09-30 10:28:16 -05:00
tmoldovan8x8
fc6c389902 feat(android) target sdk 31 2021-09-30 14:24:01 +03:00
Saúl Ibarra Corretgé
12139655c6 feat(external-api) add data-channel-open event
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.
2021-09-30 12:31:41 +02:00
Saúl Ibarra Corretgé
dd184763ff fix(ios) fix crash on WebSocket errors
Bacckport
748aa13747

Fixes:

~~~
Fatal Exception: NSInvalidArgumentException
0  CoreFoundation                 0x129708 __exceptionPreprocess
1  libobjc.A.dylib                0x287a8 objc_exception_throw
2  CoreFoundation                 0x19b9c8 -[__NSCFString characterAtIndex:].cold.1
3  CoreFoundation                 0x1a7a20 -[__NSPlaceholderDictionary initWithCapacity:].cold.1
4  CoreFoundation                 0x164c0 -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]
5  CoreFoundation                 0x8de0 +[NSDictionary dictionaryWithObjects:forKeys:count:]
6  JitsiMeetSDK                   0x5704b4 -[RCTWebSocketModule webSocket:didFailWithError:] + 168 (RCTWebSocketModule.m:168)
7  JitsiMeetSDK                   0x54a5ec __33-[RCTSRWebSocket _failWithError:]_block_invoke_2 + 622 (RCTSRWebSocket.m:622)
8  libdispatch.dylib              0x2a84 _dispatch_call_block_and_release
9  libdispatch.dylib              0x481c _dispatch_client_callout
10 libdispatch.dylib              0xc004 _dispatch_lane_serial_drain
11 libdispatch.dylib              0xcc00 _dispatch_lane_invoke
12 libdispatch.dylib              0x174bc _dispatch_workloop_worker_thread
13 libsystem_pthread.dylib        0x37a4 _pthread_wqthread
14 libsystem_pthread.dylib        0xa74c start_wqthread
~~~
2021-09-30 12:09:24 +02:00
Vlad Piersec
cfde918a30 fix(chore): Don't show react "unique key" warning 2021-09-30 10:55:26 +03:00
Jaya Allamsetty
d66f23ca4a fix(logging) Remove logs that are very chatty.
The receiver video constraints that are actually sent to the bridge are logged in LJM and need not be logged in the application.
2021-09-29 16:54:04 -04:00
Jaya Allamsetty
28904e18f8 chore(deps) lib-jitsi-meet@latest
* fix(Jingle) Log the extracted info from Jingle IQ.
* ref(Jingle) Alpha sort and prefix the local functions with '_'
* ref(Jingle) Log formatted source information. Instead of logging the full IQs for Jingle messages like session-initiate, source-add and source-remove which can be very long, log just the formatted source information.
* ref(RTC) rename iceConfig to pcConfig. It makes more sense to call it pcConfig since it is the RTCConfiguration object passed to the WebRTC peerconnection.
* fix(logging) Log only the imp events on remote tracks. Log only the important events that we care about on the HTMLMediaElement that the remote tracks are attached to.

0646bc3403...ae70962bfa
2021-09-29 13:12:07 -04:00
Saúl Ibarra Corretgé
4bfbc72613 feat(ios) drop support for iOS 11 2021-09-29 13:50:00 +02:00
Saúl Ibarra Corretgé
b1ecd03924 fix(lang) sample run of the translations updating script 2021-09-29 13:08:59 +02:00
Saúl Ibarra Corretgé
7546db53e4 feat(lang) add helper script for manual translations
It updates the main language file for a given locale from the canonical one and
sets the empty string on the missing keys. No longer used keys are discarded.
2021-09-29 13:08:59 +02:00
Andrei Gavrilescu
7b0dccdad1 feat(rtcstats): remove SDP transmission #10054 2021-09-29 13:20:01 +03:00
dimitardelchev93
7936117fcb fix: Fix speaker stats search dependency and remove duplicate logic #9751 (#10045)
* Fix speaker stats search dependency and remove duplicate logic #9751

* Fix speaker stats component render on update #9751
2021-09-28 22:17:49 -05:00
robertpin
ace53c880b feat(av-moderation) Ask to Unmute and remove from Whitelist (#10043)
* 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>
2021-09-28 11:11:13 -05:00
Tudor-Ovidiu Avram
e3ac52908a fix(invite) fix video rooms not being displayed in invite search 2021-09-28 09:13:55 -05:00
titus.moldovan
989303f5d2 fix(android) disables uncompressed native libs usage 2021-09-28 14:51:24 +02:00
Avram Tudor
6b8db2ad9e fix(config) fix prejoin throwing a TypeError due to late config initialization (#10041) 2021-09-28 14:52:31 +03:00
Mejans
b42ebf6901 fix(lang) update Occitan translation 2021-09-28 13:27:48 +02:00
titus.moldovan
e38a9c3525 fix(android) removes unnecessary parcel processing 2021-09-28 12:39:49 +02:00
robertpin
700e809439 fix(av-moderation) Improve advanced moderation (#10004)
* 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
2021-09-28 11:46:20 +03:00
Alexey Matveev
a91b2c91dd lang: minor fix in russian localization (#10027)
* - minor fix in russian localization

* - minor localization fix

Co-authored-by: Alexey Matveev <malex@1forma.ru>
2021-09-27 22:12:31 -05:00
Ali Alhaidary
344e9c8a03 lang: Update main-ar.json (#10034)
Adding missing keys and translate them
2021-09-27 22:10:22 -05:00
Дамян Минков
ba6247daaf fix: Fixes errors in prosody about string formatting and nil values. (#10037)
* fix: Fixes errors in prosody about string formatting and nil values.

error   Traceback[c2s]: /usr/lib/prosody/util/format.lua:59: invalid option '%b' to 'format'
stack traceback:

mod_polls.lua:25: attempt to index local 'data' (a nil value)
stack traceback:

* squash: Fix more formatting concatenation.
2021-09-27 14:48:13 -05:00
1380 changed files with 86892 additions and 51655 deletions

View File

@@ -8,8 +8,12 @@ libs/*
resources/*
react/features/stream-effects/virtual-background/vendor/*
load-test/*
react/features/facial-recognition/resources/*
# ESLint will by default ignore its own configuration file. However, there does
# not seem to be a reason why we will want to risk being inconsistent with our
# remaining JavaScript source code.
!.eslintrc.js
# Not worth it.
actionTypes.js

View File

@@ -1,5 +1,5 @@
module.exports = {
'extends': [
'eslint-config-jitsi'
'@jitsi/eslint-config'
]
};

View File

@@ -1,118 +0,0 @@
[ignore]
; We fork some components by platform
.*/*[.]android.js
; Ignore unexpected extra "@providesModule"
.*/node_modules/.*/node_modules/fbjs/.*
node_modules/react-native/Libraries/react-native/React.js
; Ignore duplicate module providers
; For RN Apps installed via npm, "Libraries" folder is inside
; "node_modules/react-native" but in the source repo it is in the root
node_modules/react-native/Libraries/react-native/React.js
; Flow doesn't support platforms
.*/Libraries/Utilities/LoadingView.js
; Ignore polyfills
node_modules/react-native/Libraries/polyfills/.*
; These should not be required directly
; require from fbjs/lib instead: require('fbjs/lib/warning')
node_modules/warning/.*
; Flow doesn't support platforms
.*/Libraries/Utilities/HMRLoadingView.js
[untyped]
.*/node_modules/@react-native-community/cli/.*/.*
; Ignore packages in node_modules which we (i.e. the jitsi-meet project) have
; seen to cause errors and we have chosen not to fix.
.*/node_modules/@atlaskit/.*/*.js.flow
.*/node_modules/react-native-keep-awake/.*
.*/node_modules/react-native-permissions/.*
.*/node_modules/styled-components/.*
.*/\.git/.*
[include]
[libs]
node_modules/react-native/Libraries/react-native/react-native-interface.js
node_modules/react-native/flow/
[options]
emoji=true
esproposal.optional_chaining=enable
esproposal.nullish_coalescing=enable
; We (i.e. the jitsi-meet project) are using the haste module system on Web as
; well, not only on React Native. Unfortunately, Flow does not support .web.js
; by default. Override Flow's defaults to include .web.js as well. Technically,
; we have .native.js as well so the choice of .web.js may lead to errors.
; Practically though, it is a potential future problem that we do not have at
; the time of this writing.
module.file_ext=.web.js
; Flow's defaults:
module.file_ext=.js
module.file_ext=.json
module.file_ext=.ios.js
module.system=haste
module.system.haste.use_name_reducers=true
# get basename
module.system.haste.name_reducers='^.*/\([a-zA-Z0-9$_.-]+\.js\(\.flow\)?\)$' -> '\1'
# strip .js or .js.flow suffix
module.system.haste.name_reducers='^\(.*\)\.js\(\.flow\)?$' -> '\1'
# strip .ios suffix
module.system.haste.name_reducers='^\(.*\)\.ios$' -> '\1'
module.system.haste.name_reducers='^\(.*\)\.android$' -> '\1'
module.system.haste.name_reducers='^\(.*\)\.native$' -> '\1'
module.system.haste.paths.blacklist=.*/__tests__/.*
module.system.haste.paths.blacklist=.*/__mocks__/.*
module.system.haste.paths.whitelist=<PROJECT_ROOT>/node_modules/react-native/Libraries/.*
module.system.haste.paths.whitelist=<PROJECT_ROOT>/node_modules/react-native/RNTester/.*
module.system.haste.paths.whitelist=<PROJECT_ROOT>/node_modules/react-native/IntegrationTests/.*
module.system.haste.paths.blacklist=<PROJECT_ROOT>/node_modules/react-native/Libraries/react-native/react-native-implementation.js
module.system.haste.paths.blacklist=<PROJECT_ROOT>/node_modules/react-native/Libraries/Animated/src/polyfills/.*
munge_underscores=true
module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> 'RelativeImageStub'
suppress_type=$FlowIssue
suppress_type=$FlowFixMe
suppress_type=$FlowFixMeProps
suppress_type=$FlowFixMeState
suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(<VERSION>\\)? *\\(site=[a-z,_]*react_native\\(_ios\\)?_\\(oss\\|fb\\)[a-z,_]*\\)?)\\)
suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(<VERSION>\\)? *\\(site=[a-z,_]*react_native\\(_ios\\)?_\\(oss\\|fb\\)[a-z,_]*\\)?)\\)?:? #[0-9]+
suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError
[lints]
sketchy-null-number=warn
sketchy-null-mixed=warn
sketchy-number=warn
untyped-type-import=warn
nonstrict-import=warn
deprecated-type=warn
unsafe-getters-setters=warn
inexact-spread=warn
unnecessary-invariant=warn
signature-verification-failure=warn
deprecated-utility=error
[strict]
deprecated-type
nonstrict-import
sketchy-null
unclear-type
unsafe-getters-setters
untyped-import
untyped-type-import
[version]
^0.104.0

View File

@@ -10,9 +10,16 @@ jobs:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: '12.x'
node-version: '16.x'
- run: npm install
- name: Check git status
run: git status
- name: Normalize lang files to ensure sorted
run: npm run lang-sort
- name: Check git diff
run: git diff
- name: Check if the git repository is clean
run: exit $( git status --porcelain --untracked-files=no | head -255 | wc -l )
- run: npm run lint
- run: for file in lang/*.json; do npx --yes jsonlint -q $file || exit 1; done
- run: make

2
.npmrc
View File

@@ -1 +1,3 @@
package-lock=true
; FIXME Set legacy-peer-deps=false when we upgrade RN.
legacy-peer-deps=true

1
.nvmrc Normal file
View File

@@ -0,0 +1 @@
16

View File

@@ -1,12 +1,14 @@
BUILD_DIR = build
CLEANCSS = ./node_modules/.bin/cleancss
DEPLOY_DIR = libs
LIBJITSIMEET_DIR = node_modules/lib-jitsi-meet/
LIBFLAC_DIR = node_modules/libflacjs/dist/min/
LIBJITSIMEET_DIR = node_modules/lib-jitsi-meet
LIBFLAC_DIR = node_modules/libflacjs/dist/min
OLM_DIR = node_modules/@matrix-org/olm
RNNOISE_WASM_DIR = node_modules/rnnoise-wasm/dist/
TF_WASM_DIR = node_modules/@tensorflow/tfjs-backend-wasm/dist/
RNNOISE_WASM_DIR = node_modules/rnnoise-wasm/dist
TFLITE_WASM = react/features/stream-effects/virtual-background/vendor/tflite
MEET_MODELS_DIR = react/features/stream-effects/virtual-background/vendor/models/
MEET_MODELS_DIR = react/features/stream-effects/virtual-background/vendor/models
FACIAL_MODELS_DIR = react/features/facial-recognition/resources
NODE_SASS = ./node_modules/.bin/sass
NPM = npm
OUTPUT_DIR = .
@@ -14,12 +16,12 @@ STYLES_BUNDLE = css/all.bundle.css
STYLES_DESTINATION = css/all.css
STYLES_MAIN = css/main.scss
WEBPACK = ./node_modules/.bin/webpack
WEBPACK_DEV_SERVER = ./node_modules/.bin/webpack-dev-server
WEBPACK_DEV_SERVER = ./node_modules/.bin/webpack serve --mode development
all: compile deploy clean
compile: compile-load-test
$(WEBPACK) -p
$(WEBPACK)
compile-load-test:
${NPM} install --prefix resources/load-test && ${NPM} run build --prefix resources/load-test
@@ -28,7 +30,7 @@ clean:
rm -fr $(BUILD_DIR)
.NOTPARALLEL:
deploy: deploy-init deploy-appbundle deploy-rnnoise-binary deploy-tflite deploy-meet-models deploy-lib-jitsi-meet deploy-libflac deploy-olm deploy-css deploy-local
deploy: deploy-init deploy-appbundle deploy-rnnoise-binary deploy-tflite deploy-meet-models deploy-lib-jitsi-meet deploy-libflac deploy-olm deploy-tf-wasm deploy-css deploy-local deploy-facial-expressions
deploy-init:
rm -fr $(DEPLOY_DIR)
@@ -37,29 +39,35 @@ deploy-init:
deploy-appbundle:
cp \
$(BUILD_DIR)/app.bundle.min.js \
$(BUILD_DIR)/app.bundle.min.map \
$(BUILD_DIR)/app.bundle.min.js.map \
$(BUILD_DIR)/do_external_connect.min.js \
$(BUILD_DIR)/do_external_connect.min.map \
$(BUILD_DIR)/do_external_connect.min.js.map \
$(BUILD_DIR)/external_api.min.js \
$(BUILD_DIR)/external_api.min.map \
$(BUILD_DIR)/external_api.min.js.map \
$(BUILD_DIR)/flacEncodeWorker.min.js \
$(BUILD_DIR)/flacEncodeWorker.min.map \
$(BUILD_DIR)/flacEncodeWorker.min.js.map \
$(BUILD_DIR)/dial_in_info_bundle.min.js \
$(BUILD_DIR)/dial_in_info_bundle.min.map \
$(BUILD_DIR)/dial_in_info_bundle.min.js.map \
$(BUILD_DIR)/alwaysontop.min.js \
$(BUILD_DIR)/alwaysontop.min.map \
$(BUILD_DIR)/alwaysontop.min.js.map \
$(OUTPUT_DIR)/analytics-ga.js \
$(BUILD_DIR)/analytics-ga.min.js \
$(BUILD_DIR)/analytics-ga.min.map \
$(BUILD_DIR)/close3.min.js \
$(BUILD_DIR)/close3.min.map \
$(BUILD_DIR)/analytics-ga.min.js.map \
$(BUILD_DIR)/face-centering-worker.min.js \
$(BUILD_DIR)/face-centering-worker.min.js.map \
$(BUILD_DIR)/facial-expressions-worker.min.js \
$(BUILD_DIR)/facial-expressions-worker.min.js.map \
$(DEPLOY_DIR)
cp \
$(BUILD_DIR)/close3.min.js \
$(BUILD_DIR)/close3.min.js.map \
$(DEPLOY_DIR) || true
deploy-lib-jitsi-meet:
cp \
$(LIBJITSIMEET_DIR)/lib-jitsi-meet.min.js \
$(LIBJITSIMEET_DIR)/lib-jitsi-meet.min.map \
$(LIBJITSIMEET_DIR)/lib-jitsi-meet.e2ee-worker.js \
$(LIBJITSIMEET_DIR)/dist/umd/lib-jitsi-meet.min.js \
$(LIBJITSIMEET_DIR)/dist/umd/lib-jitsi-meet.min.map \
$(LIBJITSIMEET_DIR)/dist/umd/lib-jitsi-meet.e2ee-worker.js \
$(LIBJITSIMEET_DIR)/connection_optimization/external_connect.js \
$(LIBJITSIMEET_DIR)/modules/browser/capabilities.json \
$(DEPLOY_DIR)
@@ -75,6 +83,11 @@ deploy-olm:
$(OLM_DIR)/olm.wasm \
$(DEPLOY_DIR)
deploy-tf-wasm:
cp \
$(TF_WASM_DIR)/*.wasm \
$(DEPLOY_DIR)
deploy-rnnoise-binary:
cp \
$(RNNOISE_WASM_DIR)/rnnoise.wasm \
@@ -83,24 +96,29 @@ deploy-rnnoise-binary:
deploy-tflite:
cp \
$(TFLITE_WASM)/*.wasm \
$(DEPLOY_DIR)
$(DEPLOY_DIR)
deploy-meet-models:
cp \
$(MEET_MODELS_DIR)/*.tflite \
$(DEPLOY_DIR)
$(DEPLOY_DIR)
deploy-facial-expressions:
cp \
$(FACIAL_MODELS_DIR)/* \
$(DEPLOY_DIR)
deploy-css:
$(NODE_SASS) $(STYLES_MAIN) $(STYLES_BUNDLE) && \
$(CLEANCSS) --skip-rebase $(STYLES_BUNDLE) > $(STYLES_DESTINATION) ; \
$(CLEANCSS) --skip-rebase $(STYLES_BUNDLE) > $(STYLES_DESTINATION) && \
rm $(STYLES_BUNDLE)
deploy-local:
([ ! -x deploy-local.sh ] || ./deploy-local.sh)
.NOTPARALLEL:
dev: deploy-init deploy-css deploy-rnnoise-binary deploy-tflite deploy-meet-models deploy-lib-jitsi-meet deploy-libflac deploy-olm
$(WEBPACK_DEV_SERVER) --detect-circular-deps
dev: deploy-init deploy-css deploy-rnnoise-binary deploy-tflite deploy-meet-models deploy-lib-jitsi-meet deploy-libflac deploy-olm deploy-tf-wasm deploy-facial-expressions
$(WEBPACK_DEV_SERVER)
source-package:
mkdir -p source_package/jitsi-meet/css && \

View File

@@ -45,12 +45,12 @@ developed you can also sign up for our open beta testing here:
## Running your own instance
If you'd like to run your own Jitsi Meet installation head over to the [handbook](https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-start) to get started.
If you'd like to run your own Jitsi Meet installation head over to the [handbook](https://jitsi.github.io/handbook/docs/devops-guide/) to get started.
We provide Debian packages and a comprehensive Docker setup to make deployments as simple as possible.
Advanced users also have the possibility of building all the components from source.
You can check the latest releases [[here](https://jitsi.github.io/handbook/docs/releases).
You can check the latest releases [here](https://jitsi.github.io/handbook/docs/releases).
## Jitsi as a Service

View File

@@ -76,9 +76,15 @@ android {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.2.0'
// https://github.com/facebook/react-native/issues/31572
// We can update past 1.4.0 on RN 0.68
implementation ('androidx.appcompat:appcompat:1.3.1') {
version {
strictly '1.3.1'
}
}
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.2'
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.7'
if (!rootProject.ext.libreBuild) {
implementation 'com.google.android.gms:play-services-auth:16.0.1'
@@ -109,6 +115,7 @@ gradle.projectsEvaluated {
def dropboxActivity = """
<activity
android:configChanges="keyboard|orientation"
android:exported="true"
android:launchMode="singleTask"
android:name="com.dropbox.core.android.AuthActivity">
<intent-filter>

View File

@@ -85,4 +85,9 @@
# ^^^ We added the above when we switched minifyEnabled on.
# Rule to avoid build errors related to SVGs.
-keep public class com.horcrux.svg.** {*;}
-keep public class com.horcrux.svg.** {*;}
# https://github.com/facebook/fresco/issues/2638
-keep public class com.facebook.imageutils.** {
public *;
}

View File

@@ -4,8 +4,10 @@
android:installLocation="auto">
<application
android:allowBackup="true"
android:extractNativeLibs="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:name=".MainApplication"
android:networkSecurityConfig="@xml/network_security_config"
android:theme="@style/AppTheme">
<meta-data
@@ -13,6 +15,7 @@
android:resource="@xml/app_restrictions" />
<activity
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize"
android:exported="true"
android:label="@string/app_name"
android:launchMode="singleTask"
android:name=".MainActivity"

View File

@@ -82,7 +82,7 @@ public class MainActivity extends JitsiMeetActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
JitsiMeet.showSplashScreen(this);
super.onCreate(savedInstanceState);
super.onCreate(null);
}
@Override
@@ -150,8 +150,8 @@ public class MainActivity extends JitsiMeetActivity {
// Set default options
JitsiMeetConferenceOptions defaultOptions
= new JitsiMeetConferenceOptions.Builder()
.setWelcomePageEnabled(true)
.setServerURL(buildURL(defaultURL))
.setFeatureFlag("welcomepage.enabled", true)
.setFeatureFlag("call-integration.enabled", false)
.setFeatureFlag("resolution", 360)
.setFeatureFlag("server-url-change.enabled", !configurationByRestrictions)
@@ -182,11 +182,6 @@ public class MainActivity extends JitsiMeetActivity {
}
}
@Override
protected void onConferenceTerminated(HashMap<String, Object> extraData) {
Log.d(TAG, "Conference terminated: " + extraData);
}
// Activity lifecycle method overrides
//

View File

@@ -0,0 +1,47 @@
/*
* Copyright @ 2022-present 8x8, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jitsi.meet;
import android.app.Application;
import android.util.Log;
import com.facebook.react.ReactApplication;
import com.facebook.react.ReactNativeHost;
import org.jitsi.meet.sdk.JitsiReactNativeHost;
/**
* Application class for Jitsi Meet. The only reason why this exists is for Detox
* to believe our app is a "greenfield" app. SDK users need not use this.
*/
public class MainApplication extends Application implements ReactApplication {
private final ReactNativeHost mReactNativeHost = new JitsiReactNativeHost(this);
@Override
public ReactNativeHost getReactNativeHost() {
return mReactNativeHost;
}
@Override
public void onCreate() {
super.onCreate();
// Initialize RN
Log.d(this.getClass().getCanonicalName(), "app onCreate");
getReactNativeHost().getReactInstanceManager();
}
}

View File

@@ -3,5 +3,6 @@
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="android:navigationBarColor">@color/colorPrimaryDark</item>
</style>
<item name="android:windowDisablePreview">true</item>
</style>
</resources>

View File

@@ -7,21 +7,22 @@ import org.gradle.util.VersionNumber
buildscript {
repositories {
google()
jcenter()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.1.2'
classpath 'com.google.gms:google-services:4.3.4'
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.4.1'
classpath 'com.android.tools.build:gradle:4.2.2'
classpath 'com.google.gms:google-services:4.3.10'
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.1'
}
}
ext {
buildToolsVersion = "30.0.3"
compileSdkVersion = 30
compileSdkVersion = 31
minSdkVersion = 23
targetSdkVersion = 30
targetSdkVersion = 31
supportLibVersion = "28.0.0"
ndkVersion = "21.4.7075529"
// The Maven artifact groupdId of the third-party react-native modules which
// Jitsi Meet SDK for Android depends on and which are not available in
@@ -42,12 +43,19 @@ ext {
allprojects {
repositories {
google()
jcenter()
// React Native (JS, Obj-C sources, Android binaries) is installed from npm.
maven { url "$rootDir/../node_modules/react-native/android" }
// Android JSC is installed from npm.
maven { url("$rootDir/../node_modules/jsc-android/dist") }
mavenCentral {
// We don't want to fetch react-native from Maven Central as there are
// older versions over there.
content {
excludeGroup "com.facebook.react"
}
}
google()
maven { url 'https://www.jitpack.io' }
}
// Make sure we use the react-native version in node_modules and not the one
@@ -110,7 +118,7 @@ allprojects {
project.version = "${json.version}-jitsi-${versionQualifierNumber}"
task androidSourcesJar(type: Jar) {
task jitsiAndroidSourcesJar(type: Jar) {
classifier = 'sources'
from android.sourceSets.main.java.source
}
@@ -124,7 +132,7 @@ allprojects {
artifact("${project.buildDir}/outputs/aar/${project.name}-release.aar") {
extension "aar"
}
artifact(androidSourcesJar)
artifact(jitsiAndroidSourcesJar)
pom.withXml {
def pomXml = asNode()
pomXml.appendNode('name', project.name)

View File

@@ -24,6 +24,7 @@ android.enableDexingArtifactTransform.desugaring=false
android.useAndroidX=true
android.enableJetifier=true
android.bundle.enableUncompressedNativeLibs=false
appVersion=21.4.0
sdkVersion=3.10.0
appVersion=22.1.1
sdkVersion=5.0.2

View File

@@ -1,6 +1,5 @@
#Wed Sep 23 11:48:00 EEST 2020
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.6.1-all.zip

53
android/gradlew vendored
View File

@@ -1,5 +1,21 @@
#!/usr/bin/env sh
#
# Copyright 2015 the original author or authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
##############################################################################
##
## Gradle start up script for UN*X
@@ -28,7 +44,7 @@ APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
@@ -66,6 +82,7 @@ esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
@@ -109,10 +126,11 @@ if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
# For Cygwin or MSYS, switch paths to Windows format before running java
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
@@ -138,19 +156,19 @@ if $cygwin ; then
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
i=`expr $i + 1`
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
0) set -- ;;
1) set -- "$args0" ;;
2) set -- "$args0" "$args1" ;;
3) set -- "$args0" "$args1" "$args2" ;;
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
@@ -159,14 +177,9 @@ save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
APP_ARGS=$(save "$@")
APP_ARGS=`save "$@"`
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
cd "$(dirname "$0")"
fi
exec "$JAVACMD" "$@"

173
android/gradlew.bat vendored
View File

@@ -1,84 +1,89 @@
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windows variants
if not "%OS%" == "Windows_NT" goto win9xME_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega

View File

@@ -3,6 +3,7 @@ apply plugin: 'maven-publish'
android {
compileSdkVersion rootProject.ext.compileSdkVersion
ndkVersion rootProject.ext.ndkVersion
defaultConfig {
minSdkVersion rootProject.ext.minSdkVersion
@@ -34,8 +35,14 @@ android {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.fragment:fragment:1.2.5'
// https://github.com/facebook/react-native/issues/31572
// We can update past 1.4.0 on RN 0.68
implementation ('androidx.appcompat:appcompat:1.3.1') {
version {
strictly '1.3.1'
}
}
implementation 'androidx.fragment:fragment:1.4.0'
implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0'
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
@@ -48,6 +55,7 @@ dependencies {
implementation 'com.jakewharton.timber:timber:4.7.1'
implementation 'com.squareup.duktape:duktape-android:1.3.0'
implementation 'com.google.code.gson:gson:2.8.6'
implementation "androidx.startup:startup-runtime:1.1.0"
if (rootProject.ext.libreBuild) {
implementation(project(':react-native-device-info')) {
@@ -67,11 +75,19 @@ dependencies {
implementation project(':react-native-async-storage')
implementation project(':react-native-background-timer')
implementation project(':react-native-calendar-events')
implementation project(':react-native-community_clipboard')
implementation project(':react-native-community_netinfo')
implementation project(':react-native-default-preference')
implementation project(':react-native-gesture-handler')
implementation project(':react-native-get-random-values')
implementation project(':react-native-immersive')
implementation project(':react-native-keep-awake')
implementation project(':react-native-masked-view_masked-view')
implementation project(':react-native-pager-view')
implementation project(':react-native-performance')
implementation project(':react-native-reanimated')
implementation project(':react-native-safe-area-context')
implementation project(':react-native-screens')
implementation project(':react-native-slider')
implementation project(':react-native-sound')
implementation project(':react-native-splash-screen')
@@ -210,7 +226,7 @@ publishing {
def groupId = it.moduleGroup
def artifactId = it.moduleName
if (artifactId.startsWith('react-native-') && groupId.equals('jitsi-meet')) {
if (artifactId.startsWith('react-native-')) {
groupId = rootProject.ext.moduleGroupId
}

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<application android:usesCleartextTraffic="true">
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
</application>
</manifest>

View File

@@ -10,7 +10,6 @@
<uses-permission android:name="android.permission.MANAGE_OWN_CALLS" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
@@ -36,7 +35,6 @@
android:resizeableActivity="true"
android:supportsPictureInPicture="true"
android:windowSoftInputMode="adjustResize"/>
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
<service
android:name=".ConnectionService"
@@ -57,6 +55,14 @@
android:enabled="false"
tools:replace="android:authorities">
</provider>
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
android:exported="false">
<meta-data android:name="org.jitsi.meet.sdk.JitsiInitializer"
android:value="androidx.startup" />
</provider>
</application>
</manifest>

View File

@@ -16,6 +16,7 @@
package org.jitsi.meet.sdk;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.media.AudioManager;
@@ -54,6 +55,7 @@ import java.util.concurrent.Executors;
* Before a call has started and after it has ended the
* {@code AudioModeModule.DEFAULT} mode should be used.
*/
@SuppressLint("AnnotateVersionCheck")
@ReactModule(name = AudioModeModule.NAME)
class AudioModeModule extends ReactContextBaseJavaModule {
public static final String NAME = "AudioMode";
@@ -79,7 +81,6 @@ class AudioModeModule extends ReactContextBaseJavaModule {
/**
* Whether or not the ConnectionService is used for selecting audio devices.
*/
private static final boolean supportsConnectionService = Build.VERSION.SDK_INT >= Build.VERSION_CODES.O;
private static boolean useConnectionService_ = supportsConnectionService;
@@ -148,6 +149,16 @@ class AudioModeModule extends ReactContextBaseJavaModule {
audioManager = (AudioManager)reactContext.getSystemService(Context.AUDIO_SERVICE);
}
@ReactMethod
public void addListener(String eventName) {
// Keep: Required for RN built in Event Emitter Calls.
}
@ReactMethod
public void removeListeners(Integer count) {
// Keep: Required for RN built in Event Emitter Calls.
}
/**
* Gets a mapping with the constants this module is exporting.
*

View File

@@ -86,8 +86,8 @@ public class BroadcastEvent {
PARTICIPANTS_INFO_RETRIEVED("org.jitsi.meet.PARTICIPANTS_INFO_RETRIEVED"),
CHAT_MESSAGE_RECEIVED("org.jitsi.meet.CHAT_MESSAGE_RECEIVED"),
CHAT_TOGGLED("org.jitsi.meet.CHAT_TOGGLED"),
VIDEO_MUTED_CHANGED("org.jitsi.meet.VIDEO_MUTED_CHANGED");
VIDEO_MUTED_CHANGED("org.jitsi.meet.VIDEO_MUTED_CHANGED"),
READY_TO_CLOSE("org.jitsi.meet.READY_TO_CLOSE");
private static final String CONFERENCE_WILL_JOIN_NAME = "CONFERENCE_WILL_JOIN";
private static final String CONFERENCE_JOINED_NAME = "CONFERENCE_JOINED";
@@ -101,6 +101,7 @@ public class BroadcastEvent {
private static final String CHAT_MESSAGE_RECEIVED_NAME = "CHAT_MESSAGE_RECEIVED";
private static final String CHAT_TOGGLED_NAME = "CHAT_TOGGLED";
private static final String VIDEO_MUTED_CHANGED_NAME = "VIDEO_MUTED_CHANGED";
private static final String READY_TO_CLOSE_NAME = "READY_TO_CLOSE";
private final String action;
@@ -147,6 +148,8 @@ public class BroadcastEvent {
return CHAT_TOGGLED;
case VIDEO_MUTED_CHANGED_NAME:
return VIDEO_MUTED_CHANGED;
case READY_TO_CLOSE_NAME:
return READY_TO_CLOSE;
}
return null;

View File

@@ -31,8 +31,7 @@ import java.util.Map;
* Module implementing an API for sending events from JavaScript to native code.
*/
@ReactModule(name = ExternalAPIModule.NAME)
class ExternalAPIModule
extends ReactContextBaseJavaModule {
class ExternalAPIModule extends ReactContextBaseJavaModule {
public static final String NAME = "ExternalAPI";
@@ -57,6 +56,16 @@ class ExternalAPIModule
ParticipantsService.init(reactContext);
}
@ReactMethod
public void addListener(String eventName) {
// Keep: Required for RN built in Event Emitter Calls.
}
@ReactMethod
public void removeListeners(Integer count) {
// Keep: Required for RN built in Event Emitter Calls.
}
/**
* Gets the name of this module to be used in the React Native bridge.
*

View File

@@ -0,0 +1,48 @@
/*
* Copyright @ 2021-present 8x8, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jitsi.meet.sdk;
import android.content.Context;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.startup.Initializer;
import com.facebook.soloader.SoLoader;
import java.util.Collections;
import java.util.List;
public class JitsiInitializer implements Initializer<Boolean> {
@NonNull
@Override
public Boolean create(@NonNull Context context) {
Log.d(this.getClass().getCanonicalName(), "create");
SoLoader.init(context, /* native exopackage */ false);
// Register our uncaught exception handler.
JitsiMeetUncaughtExceptionHandler.register();
return true;
}
@NonNull
@Override
public List<Class<? extends Initializer<?>>> dependencies() {
return Collections.emptyList();
}
}

View File

@@ -24,7 +24,7 @@ import android.net.Uri;
import android.os.Bundle;
import androidx.annotation.Nullable;
import androidx.fragment.app.FragmentActivity;
import androidx.appcompat.app.AppCompatActivity;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import com.facebook.react.modules.core.PermissionListener;
@@ -38,7 +38,7 @@ import android.app.Activity;
* A base activity for SDK users to embed. It uses {@link JitsiMeetFragment} to do the heavy
* lifting and wires the remaining Activity lifecycle methods so it works out of the box.
*/
public class JitsiMeetActivity extends FragmentActivity
public class JitsiMeetActivity extends AppCompatActivity
implements JitsiMeetActivityInterface {
protected static final String TAG = JitsiMeetActivity.class.getSimpleName();
@@ -194,7 +194,6 @@ public class JitsiMeetActivity extends FragmentActivity
protected void onConferenceTerminated(HashMap<String, Object> extraData) {
JitsiMeetLogger.i("Conference terminated: " + extraData);
finish();
}
protected void onConferenceWillJoin(HashMap<String, Object> extraData) {
@@ -217,6 +216,11 @@ public class JitsiMeetActivity extends FragmentActivity
}
}
protected void onReadyToClose() {
JitsiMeetLogger.i("SDK is ready to close");
finish();
}
// Activity lifecycle methods
//
@@ -298,6 +302,9 @@ public class JitsiMeetActivity extends FragmentActivity
case PARTICIPANT_LEFT:
onParticipantLeft(event.getData());
break;
case READY_TO_CLOSE:
onReadyToClose();
break;
}
}
}

View File

@@ -45,11 +45,6 @@ public class JitsiMeetConferenceOptions implements Parcelable {
*/
private String token;
/**
* Color scheme override, see: https://github.com/jitsi/jitsi-meet/blob/dbedee5e22e5dcf9c92db96ef5bb3c9982fc526d/react/features/base/color-scheme/defaultScheme.js
*/
private Bundle colorScheme;
/**
* Config. See: https://github.com/jitsi/jitsi-meet/blob/master/config.js
*/
@@ -77,10 +72,6 @@ public class JitsiMeetConferenceOptions implements Parcelable {
return token;
}
public Bundle getColorScheme() {
return colorScheme;
}
public Bundle getFeatureFlags() {
return featureFlags;
}
@@ -97,7 +88,6 @@ public class JitsiMeetConferenceOptions implements Parcelable {
private String room;
private String token;
private Bundle colorScheme;
private Bundle config;
private Bundle featureFlags;
@@ -152,19 +142,6 @@ public class JitsiMeetConferenceOptions implements Parcelable {
return this;
}
/**
* Sets the color scheme override so the app is themed. See:
* https://github.com/jitsi/jitsi-meet/blob/master/react/features/base/color-scheme/defaultScheme.js
* for the structure.
* @param colorScheme - A color scheme to be applied to the app.
* @return - The {@link Builder} object itself so the method calls can be chained.
*/
public Builder setColorScheme(Bundle colorScheme) {
this.colorScheme = colorScheme;
return this;
}
/**
* Indicates the conference will be joined with the microphone muted.
* @param audioMuted - Muted indication.
@@ -198,19 +175,6 @@ public class JitsiMeetConferenceOptions implements Parcelable {
return this;
}
/**
* Sets the welcome page enabled / disabled. The welcome page lists recent meetings and
* calendar appointments and it's meant to be used by standalone applications. Defaults to
* false.
* @param enabled - Whether the welcome page should be enabled or not.
* @return - The {@link Builder} object itself so the method calls can be chained.
*/
public Builder setWelcomePageEnabled(boolean enabled) {
this.featureFlags.putBoolean("welcomepage.enabled", enabled);
return this;
}
public Builder setFeatureFlag(String flag, boolean value) {
this.featureFlags.putBoolean(flag, value);
@@ -276,7 +240,6 @@ public class JitsiMeetConferenceOptions implements Parcelable {
options.serverURL = this.serverURL;
options.room = this.room;
options.token = this.token;
options.colorScheme = this.colorScheme;
options.config = this.config;
options.featureFlags = this.featureFlags;
options.userInfo = this.userInfo;
@@ -292,11 +255,9 @@ public class JitsiMeetConferenceOptions implements Parcelable {
serverURL = (URL) in.readSerializable();
room = in.readString();
token = in.readString();
colorScheme = in.readBundle();
config = in.readBundle();
featureFlags = in.readBundle();
userInfo = new JitsiMeetUserInfo(in.readBundle());
byte tmpAudioMuted = in.readByte();
}
Bundle asProps() {
@@ -309,10 +270,6 @@ public class JitsiMeetConferenceOptions implements Parcelable {
props.putBundle("flags", featureFlags);
if (colorScheme != null) {
props.putBundle("colorScheme", colorScheme);
}
Bundle urlProps = new Bundle();
// The room is fully qualified
@@ -361,7 +318,6 @@ public class JitsiMeetConferenceOptions implements Parcelable {
dest.writeSerializable(serverURL);
dest.writeString(room);
dest.writeString(token);
dest.writeBundle(colorScheme);
dest.writeBundle(config);
dest.writeBundle(featureFlags);
dest.writeBundle(userInfo != null ? userInfo.asBundle() : new Bundle());

View File

@@ -0,0 +1,41 @@
package org.jitsi.meet.sdk;
import android.app.Application;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import java.util.List;
/**
* This is the minimal implementation of ReactNativeHost that will make things like the
* Detox testing framework believe we are a "greenfield" app.
*
* Generally speaking, apps using the SDK (other than the Jitsi Meet app itself) should not
* need to use this because the
*/
public class JitsiReactNativeHost extends ReactNativeHost {
public JitsiReactNativeHost(Application application) {
super(application);
}
@Override
public boolean getUseDeveloperSupport() {
// Unused since we override `createReactInstanceManager`.
return false;
}
@Override
protected List<ReactPackage> getPackages() {
// Unused since we override `createReactInstanceManager`.
return null;
}
@Override
protected ReactInstanceManager createReactInstanceManager() {
ReactInstanceManagerHolder.initReactInstanceManager(this.getApplication());
return ReactInstanceManagerHolder.getReactInstanceManager();
}
}

View File

@@ -5,7 +5,6 @@ import java.util.List;
public class NotificationChannels {
static final String ONGOING_CONFERENCE_CHANNEL_ID = "JitsiOngoingConferenceChannel";
static final String ONGOING_CONFERNCE_CHANNEL_NAME = "Ongoing Conference Notifications";
public static List<String> allIds = new ArrayList<String>() {{ add(ONGOING_CONFERENCE_CHANNEL_ID); }};
}

View File

@@ -17,7 +17,6 @@
package org.jitsi.meet.sdk;
import static org.jitsi.meet.sdk.NotificationChannels.ONGOING_CONFERENCE_CHANNEL_ID;
import static org.jitsi.meet.sdk.NotificationChannels.ONGOING_CONFERNCE_CHANNEL_NAME;
import android.app.Notification;
import android.app.NotificationChannel;
@@ -66,7 +65,7 @@ class OngoingNotification {
return;
}
channel = new NotificationChannel(ONGOING_CONFERENCE_CHANNEL_ID, ONGOING_CONFERNCE_CHANNEL_NAME, NotificationManager.IMPORTANCE_DEFAULT);
channel = new NotificationChannel(ONGOING_CONFERENCE_CHANNEL_ID, context.getString(R.string.ongoing_notification_action_unmute), NotificationManager.IMPORTANCE_DEFAULT);
channel.enableLights(false);
channel.enableVibration(false);
channel.setShowBadge(false);
@@ -82,7 +81,7 @@ class OngoingNotification {
}
Intent notificationIntent = new Intent(context, context.getClass());
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, notificationIntent, PendingIntent.FLAG_IMMUTABLE);
NotificationCompat.Builder builder = new NotificationCompat.Builder(context, ONGOING_CONFERENCE_CHANNEL_ID);
@@ -125,7 +124,7 @@ class OngoingNotification {
Intent intent = new Intent(context, JitsiMeetOngoingConferenceService.class);
intent.setAction(action.getName());
PendingIntent pendingIntent
= PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
= PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_IMMUTABLE);
String title = context.getString(titleId);
return new NotificationCompat.Action(0, title, pendingIntent);
}

View File

@@ -59,6 +59,16 @@ class RNConnectionService extends ReactContextBaseJavaModule {
super(reactContext);
}
@ReactMethod
public void addListener(String eventName) {
// Keep: Required for RN built in Event Emitter Calls.
}
@ReactMethod
public void removeListeners(Integer count) {
// Keep: Required for RN built in Event Emitter Calls.
}
/**
* Starts a new outgoing call.
*

View File

@@ -17,6 +17,8 @@
package org.jitsi.meet.sdk;
import android.app.Activity;
import android.app.Application;
import android.util.Log;
import androidx.annotation.Nullable;
@@ -26,11 +28,9 @@ import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.common.LifecycleState;
import com.facebook.react.devsupport.DevInternalSettings;
import com.facebook.react.jscexecutor.JSCExecutorFactory;
import com.facebook.react.modules.core.DeviceEventManagerModule;
import com.facebook.react.uimanager.ViewManager;
import com.facebook.soloader.SoLoader;
import com.oney.WebRTCModule.RTCVideoViewManager;
import com.oney.WebRTCModule.WebRTCModule;
@@ -101,6 +101,69 @@ class ReactInstanceManagerHolder {
);
}
static List<ReactPackage> getReactNativePackages() {
List<ReactPackage> packages
= new ArrayList<>(Arrays.asList(
new com.reactnativecommunity.asyncstorage.AsyncStoragePackage(),
new com.ocetnik.timer.BackgroundTimerPackage(),
new com.calendarevents.RNCalendarEventsPackage(),
new com.corbt.keepawake.KCKeepAwakePackage(),
new com.facebook.react.shell.MainReactPackage(),
new com.reactnativecommunity.clipboard.ClipboardPackage(),
new com.reactnativecommunity.netinfo.NetInfoPackage(),
new com.reactnativepagerview.PagerViewPackage(),
new com.oblador.performance.PerformancePackage(),
new com.reactnativecommunity.slider.ReactSliderPackage(),
new com.brentvatne.react.ReactVideoPackage(),
new com.swmansion.reanimated.ReanimatedPackage(),
new org.reactnative.maskedview.RNCMaskedViewPackage(),
new com.reactnativecommunity.webview.RNCWebViewPackage(),
new com.kevinresol.react_native_default_preference.RNDefaultPreferencePackage(),
new com.learnium.RNDeviceInfo.RNDeviceInfo(),
new com.swmansion.gesturehandler.react.RNGestureHandlerPackage(),
new org.linusu.RNGetRandomValuesPackage(),
new com.rnimmersive.RNImmersivePackage(),
new com.swmansion.rnscreens.RNScreensPackage(),
new com.zmxv.RNSound.RNSoundPackage(),
new com.th3rdwave.safeareacontext.SafeAreaContextPackage(),
new com.horcrux.svg.SvgPackage(),
new ReactPackageAdapter() {
@Override
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
return ReactInstanceManagerHolder.createNativeModules(reactContext);
}
@Override
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
return ReactInstanceManagerHolder.createViewManagers(reactContext);
}
}));
// AmplitudeReactNativePackage
try {
Class<?> amplitudePackageClass = Class.forName("com.amplitude.reactnative.AmplitudeReactNativePackage");
Constructor constructor = amplitudePackageClass.getConstructor();
packages.add((ReactPackage)constructor.newInstance());
} catch (Exception e) {
// Ignore any error, the module is not compiled when LIBRE_BUILD is enabled.
}
// RNGoogleSignInPackage
try {
Class<?> googlePackageClass = Class.forName("com.reactnativegooglesignin.RNGoogleSigninPackage");
Constructor constructor = googlePackageClass.getConstructor();
packages.add((ReactPackage)constructor.newInstance());
} catch (Exception e) {
// Ignore any error, the module is not compiled when LIBRE_BUILD is enabled.
}
return packages;
}
static JSCExecutorFactory getReactNativeJSFactory() {
// Keep on using JSC, the jury is out on Hermes.
return new JSCExecutorFactory("", "");
}
/**
* Helper function to send an event to JavaScript.
*
@@ -161,6 +224,35 @@ class ReactInstanceManagerHolder {
return reactInstanceManager;
}
/**
* Internal method to initialize the React Native instance manager. We
* create a single instance in order to load the JavaScript bundle a single
* time. All {@code ReactRootView} instances will be tied to the one and
* only {@code ReactInstanceManager}.
*
* This method is only meant to be called when integrating with {@code JitsiReactNativeHost}.
*
* @param app {@code Application} current running Application.
*/
static void initReactInstanceManager(Application app) {
if (reactInstanceManager != null) {
return;
}
Log.d(ReactInstanceManagerHolder.class.getCanonicalName(), "initializing RN with Application");
reactInstanceManager
= ReactInstanceManager.builder()
.setApplication(app)
.setBundleAssetName("index.android.bundle")
.setJSMainModulePath("index.android")
.setJavaScriptExecutorFactory(getReactNativeJSFactory())
.addPackages(getReactNativePackages())
.setUseDeveloperSupport(BuildConfig.DEBUG)
.setInitialLifecycleState(LifecycleState.BEFORE_CREATE)
.build();
}
/**
* Internal method to initialize the React Native instance manager. We
* create a single instance in order to load the JavaScript bundle a single
@@ -174,57 +266,7 @@ class ReactInstanceManagerHolder {
return;
}
SoLoader.init(activity.getApplication(), /* native exopackage */ false);
List<ReactPackage> packages
= new ArrayList<>(Arrays.asList(
new com.calendarevents.CalendarEventsPackage(),
new com.corbt.keepawake.KCKeepAwakePackage(),
new com.facebook.react.shell.MainReactPackage(),
new com.horcrux.svg.SvgPackage(),
new com.kevinresol.react_native_default_preference.RNDefaultPreferencePackage(),
new com.learnium.RNDeviceInfo.RNDeviceInfo(),
new com.oblador.performance.PerformancePackage(),
new com.ocetnik.timer.BackgroundTimerPackage(),
new com.reactnativecommunity.asyncstorage.AsyncStoragePackage(),
new com.reactnativecommunity.netinfo.NetInfoPackage(),
new com.reactnativecommunity.slider.ReactSliderPackage(),
new com.reactnativecommunity.webview.RNCWebViewPackage(),
new com.rnimmersive.RNImmersivePackage(),
new com.zmxv.RNSound.RNSoundPackage(),
new com.brentvatne.react.ReactVideoPackage(),
new ReactPackageAdapter() {
@Override
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
return ReactInstanceManagerHolder.createNativeModules(reactContext);
}
@Override
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
return ReactInstanceManagerHolder.createViewManagers(reactContext);
}
}));
// AmplitudeReactNativePackage
try {
Class<?> amplitudePackageClass = Class.forName("com.amplitude.reactnative.AmplitudeReactNativePackage");
Constructor constructor = amplitudePackageClass.getConstructor();
packages.add((ReactPackage)constructor.newInstance());
} catch (Exception e) {
// Ignore any error, the module is not compiled when LIBRE_BUILD is enabled.
}
// RNGoogleSigninPackage
try {
Class<?> googlePackageClass = Class.forName("co.apptailor.googlesignin.RNGoogleSigninPackage");
Constructor constructor = googlePackageClass.getConstructor();
packages.add((ReactPackage)constructor.newInstance());
} catch (Exception e) {
// Ignore any error, the module is not compiled when LIBRE_BUILD is enabled.
}
// Keep on using JSC, the jury is out on Hermes.
JSCExecutorFactory jsFactory
= new JSCExecutorFactory("", "");
Log.d(ReactInstanceManagerHolder.class.getCanonicalName(), "initializing RN with Activity");
reactInstanceManager
= ReactInstanceManager.builder()
@@ -232,20 +274,10 @@ class ReactInstanceManagerHolder {
.setCurrentActivity(activity)
.setBundleAssetName("index.android.bundle")
.setJSMainModulePath("index.android")
.setJavaScriptExecutorFactory(jsFactory)
.addPackages(packages)
.setJavaScriptExecutorFactory(getReactNativeJSFactory())
.addPackages(getReactNativePackages())
.setUseDeveloperSupport(BuildConfig.DEBUG)
.setInitialLifecycleState(LifecycleState.RESUMED)
.build();
// Disable delta updates on Android, they have caused trouble.
DevInternalSettings devSettings
= (DevInternalSettings)reactInstanceManager.getDevSupportManager().getDevSettings();
if (devSettings != null) {
devSettings.setBundleDeltasEnabled(false);
}
// Register our uncaught exception handler.
JitsiMeetUncaughtExceptionHandler.register();
}
}

View File

@@ -1,72 +0,0 @@
/*
* Copyright @ 2018-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jitsi.meet.sdk.incoming_call;
import androidx.annotation.NonNull;
public class IncomingCallInfo {
/**
* URL for the caller avatar.
*/
private final String callerAvatarURL;
/**
* Caller's name.
*/
private final String callerName;
/**
* Whether this is a regular call or a video call.
*/
private final boolean hasVideo;
public IncomingCallInfo(
@NonNull String callerName,
@NonNull String callerAvatarURL,
boolean hasVideo) {
this.callerName = callerName;
this.callerAvatarURL = callerAvatarURL;
this.hasVideo = hasVideo;
}
/**
* Gets the caller's avatar URL.
*
* @return - The URL as a string.
*/
public String getCallerAvatarURL() {
return callerAvatarURL;
}
/**
* Gets the caller's name.
*
* @return - The caller's name.
*/
public String getCallerName() {
return callerName;
}
/**
* Gets whether the call is a video call or not.
*
* @return - {@code true} if this call has video; {@code false}, otherwise.
*/
public boolean hasVideo() {
return hasVideo;
}
}

View File

@@ -1,73 +0,0 @@
/*
* Copyright @ 2018-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jitsi.meet.sdk.incoming_call;
import android.content.Context;
import android.os.Bundle;
import androidx.annotation.NonNull;
import com.facebook.react.bridge.ReadableMap;
import org.jitsi.meet.sdk.BaseReactView;
import org.jitsi.meet.sdk.ListenerUtils;
import java.lang.reflect.Method;
import java.util.Map;
public class IncomingCallView
extends BaseReactView<IncomingCallViewListener> {
/**
* The {@code Method}s of {@code JitsiMeetViewListener} by event name i.e.
* redux action types.
*/
private static final Map<String, Method> LISTENER_METHODS
= ListenerUtils.mapListenerMethods(IncomingCallViewListener.class);
public IncomingCallView(@NonNull Context context) {
super(context);
}
/**
* Handler for {@link ExternalAPIModule} events.
*
* @param name The name of the event.
* @param data The details/specifics of the event to send determined
* by/associated with the specified {@code name}.
*/
@Override
protected void onExternalAPIEvent(String name, ReadableMap data) {
onExternalAPIEvent(LISTENER_METHODS, name, data);
}
/**
* Sets the information for the incoming call this {@code IncomingCallView}
* represents.
*
* @param callInfo - {@link IncomingCallInfo} object representing the caller
* information.
*/
public void setIncomingCallInfo(IncomingCallInfo callInfo) {
Bundle props = new Bundle();
props.putString("callerAvatarURL", callInfo.getCallerAvatarURL());
props.putString("callerName", callInfo.getCallerName());
props.putBoolean("hasVideo", callInfo.hasVideo());
createReactRootView("IncomingCallApp", props);
}
}

View File

@@ -1,41 +0,0 @@
/*
* Copyright @ 2018-present Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jitsi.meet.sdk.incoming_call;
import java.util.Map;
/**
* Interface for listening to events coming from Jitsi Meet, related to
* {@link IncomingCallView}.
*/
public interface IncomingCallViewListener {
/**
* Called when the user presses the "Answer" button on the
* {@link IncomingCallView}.
*
* @param data - Unused at the moment.
*/
void onIncomingCallAnswered(Map<String, Object> data);
/**
* Called when the user presses the "Decline" button on the
* {@link IncomingCallView}.
*
* @param data - Unused at the moment.
*/
void onIncomingCallDeclined(Map<String, Object> data);
}

View File

@@ -6,4 +6,5 @@
<string name="ongoing_notification_action_hang_up">Hang up</string>
<string name="ongoing_notification_action_mute">Mute</string>
<string name="ongoing_notification_action_unmute">Unmute</string>
<string name="ongoing_notification_channel_name">Ongoing Conference Notifications</string>
</resources>

View File

@@ -9,20 +9,36 @@ include ':react-native-background-timer'
project(':react-native-background-timer').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-background-timer/android')
include ':react-native-calendar-events'
project(':react-native-calendar-events').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-calendar-events/android')
include ':react-native-community_clipboard'
project(':react-native-community_clipboard').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-community/clipboard/android')
include ':react-native-community_netinfo'
project(':react-native-community_netinfo').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-community/netinfo/android')
include ':react-native-default-preference'
project(':react-native-default-preference').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-default-preference/android')
include ':react-native-device-info'
project(':react-native-device-info').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-device-info/android')
include ':react-native-gesture-handler'
project(':react-native-gesture-handler').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-gesture-handler/android')
include ':react-native-get-random-values'
project(':react-native-get-random-values').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-get-random-values/android')
include ':react-native-google-signin'
project(':react-native-google-signin').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-community/google-signin/android')
project(':react-native-google-signin').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-google-signin/google-signin/android')
include ':react-native-immersive'
project(':react-native-immersive').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-immersive/android')
include ':react-native-keep-awake'
project(':react-native-keep-awake').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-keep-awake/android')
include ':react-native-masked-view_masked-view'
project(':react-native-masked-view_masked-view').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-masked-view/masked-view/android')
include ':react-native-pager-view'
project(':react-native-pager-view').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-pager-view/android')
include ':react-native-performance'
project(':react-native-performance').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-performance/android')
include ':react-native-reanimated'
project(':react-native-reanimated').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-reanimated/android')
include ':react-native-safe-area-context'
project(':react-native-safe-area-context').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-safe-area-context/android')
include ':react-native-screens'
project(':react-native-screens').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-screens/android')
include ':react-native-slider'
project(':react-native-slider').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-community/slider/android')
include ':react-native-sound'

View File

@@ -1,14 +1,15 @@
/* global APP, JitsiMeetJS, config, interfaceConfig */
import { jitsiLocalStorage } from '@jitsi/js-utils';
import Logger from '@jitsi/logger';
import EventEmitter from 'events';
import Logger from 'jitsi-meet-logger';
import { openConnection } from './connection';
import { ENDPOINT_TEXT_MESSAGE_NAME } from './modules/API/constants';
import { AUDIO_ONLY_SCREEN_SHARE_NO_TRACK } from './modules/UI/UIErrors';
import AuthHandler from './modules/UI/authentication/AuthHandler';
import UIUtil from './modules/UI/util/UIUtil';
import VideoLayout from './modules/UI/videolayout/VideoLayout';
import mediaDeviceHelper from './modules/devices/mediaDeviceHelper';
import Recorder from './modules/recorder/Recorder';
import { createTaskQueue } from './modules/util/helpers';
@@ -26,9 +27,11 @@ import {
} from './react/features/app/actions';
import { showModeratedNotification } from './react/features/av-moderation/actions';
import { shouldShowModeratedNotification } from './react/features/av-moderation/functions';
import { setAudioOnly } from './react/features/base/audio-only';
import {
AVATAR_URL_COMMAND,
EMAIL_COMMAND,
_conferenceWillJoin,
authStatusChanged,
commonUserJoinedHandling,
commonUserLeftHandling,
@@ -47,9 +50,9 @@ import {
onStartMutedPolicyChanged,
p2pStatusChanged,
sendLocalParticipant,
_conferenceWillJoin
nonParticipantMessageReceived
} from './react/features/base/conference';
import { getReplaceParticipant } from './react/features/base/config/functions';
import { getReplaceParticipant, getMultipleVideoSupportFeatureFlag } from './react/features/base/config/functions';
import {
checkAndNotifyForNewDevice,
getAvailableDevices,
@@ -59,7 +62,6 @@ import {
setAudioOutputDeviceId,
updateDeviceList
} from './react/features/base/devices';
import { isIosMobileBrowser } from './react/features/base/environment/utils';
import {
browser,
isFatalJitsiConnectionError,
@@ -79,14 +81,16 @@ import {
MEDIA_TYPE,
setAudioAvailable,
setAudioMuted,
setAudioUnmutePermissions,
setVideoAvailable,
setVideoMuted
setVideoMuted,
setVideoUnmutePermissions
} from './react/features/base/media';
import {
dominantSpeakerChanged,
getLocalParticipant,
getNormalizedDisplayName,
getParticipantById,
localParticipantAudioLevelChanged,
localParticipantConnectionStatusChanged,
localParticipantRoleChanged,
participantConnectionStatusChanged,
@@ -102,12 +106,14 @@ import {
updateSettings
} from './react/features/base/settings';
import {
addLocalTrack,
createLocalPresenterTrack,
createLocalTracksF,
destroyLocalTracks,
getLocalJitsiAudioTrack,
getLocalJitsiVideoTrack,
getLocalTracks,
getLocalVideoTrack,
isLocalCameraTrackMuted,
isLocalTrackMuted,
isUserInteractionRequiredForUnmute,
@@ -122,22 +128,30 @@ import {
maybeOpenFeedbackDialog,
submitFeedback
} from './react/features/feedback';
import { isModerationNotificationDisplayed, showNotification } from './react/features/notifications';
import { maybeSetLobbyChatMessageListener } from './react/features/lobby/actions.any';
import {
isModerationNotificationDisplayed,
showNotification,
NOTIFICATION_TIMEOUT_TYPE
} from './react/features/notifications';
import { mediaPermissionPromptVisibilityChanged, toggleSlowGUMOverlay } from './react/features/overlay';
import { suspendDetected } from './react/features/power-monitor';
import {
initPrejoin,
isPrejoinPageEnabled,
isPrejoinPageVisible,
makePrecallTest
makePrecallTest,
setJoiningInProgress,
setPrejoinPageVisibility
} from './react/features/prejoin';
import { disableReceiver, stopReceiver } from './react/features/remote-control';
import { setScreenAudioShareState, isScreenAudioShared } from './react/features/screen-share/';
import { toggleScreenshotCaptureEffect } from './react/features/screenshot-capture';
import { toggleScreenshotCaptureSummary } from './react/features/screenshot-capture';
import { isScreenshotCaptureEnabled } from './react/features/screenshot-capture/functions';
import { AudioMixerEffect } from './react/features/stream-effects/audio-mixer/AudioMixerEffect';
import { createPresenterEffect } from './react/features/stream-effects/presenter';
import { createRnnoiseProcessor } from './react/features/stream-effects/rnnoise';
import { endpointMessageReceived } from './react/features/subtitles';
import { muteLocal } from './react/features/video-menu/actions.any';
import UIEvents from './service/UI/UIEvents';
const logger = Logger.getLogger(__filename);
@@ -156,6 +170,15 @@ let connection;
*/
let _connectionPromise;
/**
* We are storing the resolve function of a Promise that waits for the _connectionPromise to be created. This is needed
* when the prejoin button was pressed before the conference object was initialized and the _connectionPromise has not
* been initialized when we tried to execute prejoinStart. In this case in prejoinStart we create a new Promise, assign
* the resolve function to this variable and wait for the promise to resolve before we continue. The
* _onConnectionPromiseCreated will be called once the _connectionPromise is created.
*/
let _onConnectionPromiseCreated;
/**
* This promise is used for chaining mutePresenterVideo calls in order to avoid calling GUM multiple times if it takes
* a while to finish.
@@ -219,17 +242,6 @@ function sendData(command, value) {
room.sendCommand(command, { value });
}
/**
* Get user nickname by user id.
* @param {string} id user id
* @returns {string?} user nickname or undefined if user is unknown.
*/
function getDisplayName(id) {
const participant = getParticipantById(APP.store.getState(), id);
return participant && participant.name;
}
/**
* Mute or unmute local audio stream if it exists.
* @param {boolean} muted - if audio stream should be muted or unmuted.
@@ -345,7 +357,10 @@ class ConferenceConnector {
case JitsiConferenceErrors.FOCUS_DISCONNECTED: {
const [ focus, retrySec ] = params;
APP.UI.notifyFocusDisconnected(focus, retrySec);
APP.store.dispatch(showNotification({
descriptionKey: focus,
titleKey: retrySec
}, NOTIFICATION_TIMEOUT_TYPE.SHORT));
break;
}
@@ -362,7 +377,6 @@ class ConferenceConnector {
break;
case JitsiConferenceErrors.CONFERENCE_MAX_USERS:
connection.disconnect();
APP.UI.notifyMaxUsersLimitReached();
break;
@@ -474,7 +488,7 @@ export default {
// Always get a handle on the audio input device so that we have statistics (such as "No audio input" or
// "Are you trying to speak?" ) even if the user joins the conference muted.
const initialDevices = config.disableInitialGUM ? [] : [ 'audio' ];
const initialDevices = config.disableInitialGUM ? [] : [ MEDIA_TYPE.AUDIO ];
const requestedAudio = !config.disableInitialGUM;
let requestedVideo = false;
@@ -482,7 +496,7 @@ export default {
&& !options.startWithVideoMuted
&& !options.startAudioOnly
&& !options.startScreenSharing) {
initialDevices.push('video');
initialDevices.push(MEDIA_TYPE.VIDEO);
requestedVideo = true;
}
@@ -506,21 +520,35 @@ export default {
// spend much time displaying the overlay screen. If GUM is not resolved within 15 seconds it will
// probably never resolve.
const timeout = browser.isElectron() ? 15000 : 60000;
const audioOptions = {
devices: [ MEDIA_TYPE.AUDIO ],
timeout,
firePermissionPromptIsShownEvent: true,
fireSlowPromiseEvent: true
};
// FIXME is there any simpler way to rewrite this spaghetti below ?
if (options.startScreenSharing) {
tryCreateLocalTracks = this._createDesktopTrack()
// This option has been deprecated since it is no longer supported as per the w3c spec.
// https://w3c.github.io/mediacapture-screen-share/#dom-mediadevices-getdisplaymedia. If the user has not
// interacted with the webpage before the getDisplayMedia call, the promise will be rejected by the
// browser. This has already been implemented in Firefox and Safari and will be implemented in Chrome soon.
// https://bugs.chromium.org/p/chromium/issues/detail?id=1198918
// Please note that Spot uses the same config option to use an external video input device label as
// screenshare and calls getUserMedia instead of getDisplayMedia for capturing the media. Therefore it
// needs to be supported here if _desktopSharingSourceDevice is provided.
const errMessage = new Error('startScreenSharing config option is no longer supported for web browsers');
const desktopPromise = config._desktopSharingSourceDevice
? this._createDesktopTrack()
: Promise.reject(errMessage);
tryCreateLocalTracks = desktopPromise
.then(([ desktopStream ]) => {
if (!requestedAudio) {
return [ desktopStream ];
}
return createLocalTracksF({
devices: [ 'audio' ],
timeout,
firePermissionPromptIsShownEvent: true,
fireSlowPromiseEvent: true
})
return createLocalTracksF(audioOptions)
.then(([ audioStream ]) =>
[ desktopStream, audioStream ])
.catch(error => {
@@ -533,14 +561,7 @@ export default {
logger.error('Failed to obtain desktop stream', error);
errors.screenSharingError = error;
return requestedAudio
? createLocalTracksF({
devices: [ 'audio' ],
timeout,
firePermissionPromptIsShownEvent: true,
fireSlowPromiseEvent: true
})
: [];
return requestedAudio ? createLocalTracksF(audioOptions) : [];
})
.catch(error => {
errors.audioOnlyError = error;
@@ -575,13 +596,7 @@ export default {
return [];
}
return (
createLocalTracksF({
devices: [ 'audio' ],
timeout,
firePermissionPromptIsShownEvent: true,
fireSlowPromiseEvent: true
}));
return createLocalTracksF(audioOptions);
} else if (requestedAudio && !requestedVideo) {
errors.audioOnlyError = err;
@@ -603,7 +618,7 @@ export default {
// Try video only...
return requestedVideo
? createLocalTracksF({
devices: [ 'video' ],
devices: [ MEDIA_TYPE.VIDEO ],
firePermissionPromptIsShownEvent: true,
fireSlowPromiseEvent: true
})
@@ -743,13 +758,13 @@ export default {
APP.store.dispatch(showNotification({
descriptionKey: 'notify.startSilentDescription',
titleKey: 'notify.startSilentTitle'
}));
}, NOTIFICATION_TIMEOUT_TYPE.LONG));
}
// XXX The API will take care of disconnecting from the XMPP
// server (and, thus, leaving the room) on unload.
return new Promise((resolve, reject) => {
(new ConferenceConnector(resolve, reject)).connect();
new ConferenceConnector(resolve, reject).connect();
});
},
@@ -785,7 +800,21 @@ export default {
logger.warn('initial device list initialization failed', error);
}
if (isPrejoinPageEnabled(APP.store.getState())) {
const handleStartAudioMuted = (options, tracks) => {
if (options.startWithAudioMuted) {
// Always add the track on Safari because of a known issue where audio playout doesn't happen
// if the user joins audio and video muted, i.e., if there is no local media capture.
if (browser.isWebKitBased()) {
this.muteAudio(true, true);
} else {
return tracks.filter(track => track.getType() !== MEDIA_TYPE.AUDIO);
}
}
return tracks;
};
if (isPrejoinPageVisible(APP.store.getState())) {
_connectionPromise = connect(roomName).then(c => {
// we want to initialize it early, in case of errors to be able
// to gather logs
@@ -794,6 +823,10 @@ export default {
return c;
});
if (_onConnectionPromiseCreated) {
_onConnectionPromiseCreated();
}
APP.store.dispatch(makePrecallTest(this._getConferenceOptions()));
const { tryCreateLocalTracks, errors } = this.createInitialLocalTracks(initialOptions);
@@ -812,37 +845,54 @@ export default {
this._displayErrorsForCreateInitialLocalTracks(errors);
return this._setLocalAudioVideoStreams(tracks);
let localTracks = handleStartAudioMuted(initialOptions, tracks);
// in case where gum is slow and resolves after the startAudio/VideoMuted coming from jicofo, we can be
// join unmuted even though jicofo had instruct us to mute, so let's respect that before passing the tracks
if (!browser.isWebKitBased()) {
if (room?.isStartAudioMuted()) {
localTracks = localTracks.filter(track => track.getType() !== MEDIA_TYPE.AUDIO);
}
}
if (room?.isStartVideoMuted()) {
localTracks = localTracks.filter(track => track.getType() !== MEDIA_TYPE.VIDEO);
}
return this._setLocalAudioVideoStreams(localTracks);
}
const [ tracks, con ] = await this.createInitialLocalTracksAndConnect(roomName, initialOptions);
let localTracks = tracks;
this._initDeviceList(true);
if (initialOptions.startWithAudioMuted) {
// Always add the audio track to the peer connection and then mute the track on mobile Safari
// because of a known issue where audio playout doesn't happen if the user joins audio and video muted.
if (isIosMobileBrowser()) {
this.muteAudio(true, true);
} else {
localTracks = localTracks.filter(track => track.getType() !== MEDIA_TYPE.AUDIO);
}
}
return this.startConference(con, localTracks);
return this.startConference(con, handleStartAudioMuted(initialOptions, tracks));
},
/**
* Joins conference after the tracks have been configured in the prejoin screen.
*
* @param {Object[]} tracks - An array with the configured tracks
* @returns {Promise}
* @returns {void}
*/
async prejoinStart(tracks) {
const con = await _connectionPromise;
if (!_connectionPromise) {
// The conference object isn't initialized yet. Wait for the promise to initialise.
await new Promise(resolve => {
_onConnectionPromiseCreated = resolve;
});
_onConnectionPromiseCreated = undefined;
}
return this.startConference(con, tracks);
let con;
try {
con = await _connectionPromise;
this.startConference(con, tracks);
} catch (error) {
logger.error(`An error occurred while trying to join a meeting from the prejoin screen: ${error}`);
APP.store.dispatch(setJoiningInProgress(false));
}
},
/**
@@ -986,6 +1036,14 @@ export default {
* dialogs in case of media permissions error.
*/
muteVideo(mute, showUI = true) {
if (this.videoSwitchInProgress) {
// Turning the camera on while the screen sharing mode is being turned off is causing issues around
// the presenter mode handling. It should be okay for the user to click the button again once that's done.
console.warn('muteVideo - unable to perform operations while video switch is in progress');
return;
}
if (!mute
&& isUserInteractionRequiredForUnmute(APP.store.getState())) {
logger.error('Unmuting video requires user interaction');
@@ -1086,8 +1144,12 @@ export default {
return room.getParticipants();
},
/**
* Used by Jibri to detect when it's alone and the meeting should be terminated.
*/
get membersCount() {
return room.getParticipants().length + 1;
return room.getParticipants()
.filter(p => !p.isHidden() || !(config.iAmRecorder && p.isHiddenFromRecorder())).length + 1;
},
/**
@@ -1173,14 +1235,6 @@ export default {
return room.isConnectionInterrupted();
},
/**
* Obtains the local display name.
* @returns {string|undefined}
*/
getLocalDisplayName() {
return getDisplayName(this.getMyUserId());
},
/**
* Finds JitsiParticipant for given id.
*
@@ -1193,29 +1247,6 @@ export default {
return room ? room.getParticipantById(id) : null;
},
/**
* Gets the display name foe the <tt>JitsiParticipant</tt> identified by
* the given <tt>id</tt>.
*
* @param id {string} the participant's id(MUC nickname/JVB endpoint id)
*
* @return {string} the participant's display name or the default string if
* absent.
*/
getParticipantDisplayName(id) {
const displayName = getDisplayName(id);
if (displayName) {
return displayName;
}
if (APP.conference.isLocalId(id)) {
return APP.translation.generateTranslationHTML(
interfaceConfig.DEFAULT_LOCAL_DISPLAY_NAME);
}
return interfaceConfig.DEFAULT_REMOTE_DISPLAY_NAME;
},
getMyUserId() {
return room && room.myUserId();
},
@@ -1323,14 +1354,43 @@ export default {
}
},
_createRoom(localTracks) {
room
= connection.initJitsiConference(
APP.conference.roomName,
this._getConferenceOptions());
/**
* Used by the Breakout Rooms feature to join a breakout room or go back to the main room.
*/
async joinRoom(roomName, options) {
// Reset VideoLayout. It's destroyed in features/video-layout/middleware.web.js so re-initialize it.
VideoLayout.initLargeVideo();
VideoLayout.resizeVideoArea();
// Filter out the tracks that are muted (except on mobile Safari).
const tracks = isIosMobileBrowser() ? localTracks : localTracks.filter(track => !track.isMuted());
// Restore initial state.
this._localTracksInitialized = false;
this.isSharingScreen = false;
this.localPresenterVideo = null;
this.roomName = roomName;
const { tryCreateLocalTracks, errors } = this.createInitialLocalTracks(options);
const localTracks = await tryCreateLocalTracks;
this._displayErrorsForCreateInitialLocalTracks(errors);
localTracks.forEach(track => {
if ((track.isAudioTrack() && this.isLocalAudioMuted())
|| (track.isVideoTrack() && this.isLocalVideoMuted())) {
track.mute();
}
});
this._createRoom(localTracks);
return new Promise((resolve, reject) => {
new ConferenceConnector(resolve, reject).connect();
});
},
_createRoom(localTracks) {
room = connection.initJitsiConference(APP.conference.roomName, this._getConferenceOptions());
// Filter out the tracks that are muted (except on Safari).
const tracks = browser.isWebKitBased() ? localTracks : localTracks.filter(track => !track.isMuted());
this._setLocalAudioVideoStreams(tracks);
this._room = room; // FIXME do not use this
@@ -1385,11 +1445,13 @@ export default {
* @returns {Promise}
*/
useVideoStream(newTrack) {
const state = APP.store.getState();
logger.debug(`useVideoStream: ${newTrack}`);
return new Promise((resolve, reject) => {
_replaceLocalVideoTrackQueue.enqueue(onFinish => {
const oldTrack = getLocalJitsiVideoTrack(APP.store.getState());
const oldTrack = getLocalJitsiVideoTrack(state);
logger.debug(`useVideoStream: Replacing ${oldTrack} with ${newTrack}`);
@@ -1400,6 +1462,26 @@ export default {
return;
}
// In the multi-stream mode, add the track to the conference if there is no existing track, replace it
// otherwise.
if (getMultipleVideoSupportFeatureFlag(state)) {
const trackAction = oldTrack
? replaceLocalTrack(oldTrack, newTrack, room)
: addLocalTrack(newTrack);
APP.store.dispatch(trackAction)
.then(() => {
this.setVideoMuteStatus();
})
.then(resolve)
.catch(error => {
logger.error(`useVideoStream failed: ${error}`);
reject(error);
})
.then(onFinish);
return;
}
APP.store.dispatch(
replaceLocalTrack(oldTrack, newTrack, room))
.then(() => {
@@ -1517,9 +1599,10 @@ export default {
APP.store.dispatch(stopReceiver());
this._stopProxyConnection();
if (config.enableScreenshotCapture) {
APP.store.dispatch(toggleScreenshotCaptureEffect(false));
}
APP.store.dispatch(toggleScreenshotCaptureSummary(false));
const tracks = APP.store.getState()['features/base/tracks'];
const duration = getLocalVideoTrack(tracks)?.jitsiTrack.getDuration() ?? 0;
// It can happen that presenter GUM is in progress while screensharing is being turned off. Here it needs to
// wait for that GUM to be resolved in order to prevent leaking the presenter track(this.localPresenterVideo
@@ -1554,34 +1637,32 @@ export default {
APP.store.dispatch(setScreenAudioShareState(false));
if (didHaveVideo && !ignoreDidHaveVideo) {
promise = promise.then(() => createLocalTracksF({ devices: [ 'video' ] }))
.then(([ stream ]) => {
logger.debug(`_turnScreenSharingOff using ${stream} for useVideoStream`);
promise = promise.then(() => createLocalTracksF({ devices: [ 'video' ] }))
.then(([ stream ]) => {
logger.debug(`_turnScreenSharingOff using ${stream} for useVideoStream`);
return this.useVideoStream(stream);
})
.catch(error => {
logger.error('failed to switch back to local video', error);
return this.useVideoStream(stream);
})
.catch(error => {
logger.error('failed to switch back to local video', error);
return this.useVideoStream(null).then(() =>
return this.useVideoStream(null).then(() =>
// Still fail with the original err
Promise.reject(error)
);
});
} else {
promise = promise.then(() => {
logger.debug('_turnScreenSharingOff using null for useVideoStream');
return this.useVideoStream(null);
// Still fail with the original err
Promise.reject(error)
);
});
}
return promise.then(
() => {
// Mute the video if camera video needs to be ignored or if video was muted before switching to screen
// share.
if (ignoreDidHaveVideo || !didHaveVideo) {
APP.store.dispatch(setVideoMuted(true, MEDIA_TYPE.VIDEO));
}
this.videoSwitchInProgress = false;
sendAnalytics(createScreenSharingEvent('stopped'));
sendAnalytics(createScreenSharingEvent('stopped',
duration === 0 ? null : duration));
logger.info('Screen sharing stopped.');
},
error => {
@@ -1602,25 +1683,27 @@ export default {
* toggles between screen sharing and camera video.
* @param {Object} [options] - Screen sharing options that will be passed to
* createLocalTracks.
* @param {boolean} [options.audioOnly] - Whether or not audioOnly is enabled.
* @param {Array<string>} [options.desktopSharingSources] - Array with the
* sources that have to be displayed in the desktop picker window ('screen',
* 'window', etc.).
* @param {Object} [options.desktopStream] - An existing desktop stream to
* use instead of creating a new desktop stream.
* @param {boolean} ignoreDidHaveVideo - if true ignore if video was on when sharing started.
* @return {Promise.<T>}
*/
async toggleScreenSharing(toggle = !this._untoggleScreenSharing, options = {}, ignoreDidHaveVideo) {
logger.debug(`toggleScreenSharing: ${toggle}`);
if (this.videoSwitchInProgress) {
return Promise.reject('Switch in progress.');
return Promise.reject(`toggleScreenSharing: ${toggle} aborted - video switch in progress.`);
}
if (!JitsiMeetJS.isDesktopSharingEnabled()) {
return Promise.reject('Cannot toggle screen sharing: not supported.');
}
if (this.isAudioOnly()) {
return Promise.reject('No screensharing in audio only mode');
APP.store.dispatch(setAudioOnly(false));
}
if (toggle) {
try {
await this._switchToScreenSharing(options);
@@ -1671,10 +1754,10 @@ export default {
= this._turnScreenSharingOff.bind(this, didHaveVideo);
const desktopVideoStream = desktopStreams.find(stream => stream.getType() === MEDIA_TYPE.VIDEO);
const dekstopAudioStream = desktopStreams.find(stream => stream.getType() === MEDIA_TYPE.AUDIO);
const desktopAudioStream = desktopStreams.find(stream => stream.getType() === MEDIA_TYPE.AUDIO);
if (dekstopAudioStream) {
dekstopAudioStream.on(
if (desktopAudioStream) {
desktopAudioStream.on(
JitsiTrackEvents.LOCAL_TRACK_STOPPED,
() => {
logger.debug(`Local screensharing audio track stopped. ${this.isSharingScreen}`);
@@ -1882,11 +1965,13 @@ export default {
// api.
if (localAudio) {
this._mixerEffect = new AudioMixerEffect(this._desktopAudioStream);
logger.debug(`_switchToScreenSharing is mixing ${this._desktopAudioStream} and ${localAudio}`
+ ' as a single audio stream');
await localAudio.setEffect(this._mixerEffect);
} else {
// If no local stream is present ( i.e. no input audio devices) we use the screen share audio
// stream as we would use a regular stream.
logger.debug(`_switchToScreenSharing is using ${this._desktopAudioStream} for useAudioStream`);
await this.useAudioStream(this._desktopAudioStream);
}
@@ -1895,8 +1980,8 @@ export default {
})
.then(() => {
this.videoSwitchInProgress = false;
if (config.enableScreenshotCapture) {
APP.store.dispatch(toggleScreenshotCaptureEffect(true));
if (isScreenshotCaptureEnabled(APP.store.getState(), false, true)) {
APP.store.dispatch(toggleScreenshotCaptureSummary(true));
}
sendAnalytics(createScreenSharingEvent('started'));
logger.log('Screen sharing started');
@@ -1977,6 +2062,9 @@ export default {
room.on(JitsiConferenceEvents.CONFERENCE_JOINED, () => {
this._onConferenceJoined();
});
room.on(JitsiConferenceEvents.CONFERENCE_JOIN_IN_PROGRESS, () => {
APP.store.dispatch(setPrejoinPageVisibility(false));
});
room.on(
JitsiConferenceEvents.CONFERENCE_LEFT,
@@ -2003,6 +2091,10 @@ export default {
APP.store.dispatch(updateRemoteParticipantFeatures(user));
});
room.on(JitsiConferenceEvents.USER_JOINED, (id, user) => {
if (config.iAmRecorder && user.isHiddenFromRecorder()) {
return;
}
// The logic shared between RN and web.
commonUserJoinedHandling(APP.store, room, user);
@@ -2040,6 +2132,10 @@ export default {
if (this.isLocalId(id)) {
logger.info(`My role changed, new role: ${role}`);
if (role === 'moderator') {
APP.store.dispatch(maybeSetLobbyChatMessageListener());
}
APP.store.dispatch(localParticipantRoleChanged(role));
APP.API.notifyUserRoleChanged(id, role);
} else {
@@ -2052,6 +2148,14 @@ export default {
return;
}
if (config.iAmRecorder) {
const participant = room.getParticipantById(track.getParticipantId());
if (participant.isHiddenFromRecorder()) {
return;
}
}
APP.store.dispatch(trackAdded(track));
});
@@ -2067,6 +2171,10 @@ export default {
const localAudio = getLocalJitsiAudioTrack(APP.store.getState());
let newLvl = lvl;
if (this.isLocalId(id)) {
APP.store.dispatch(localParticipantAudioLevelChanged(lvl));
}
if (this.isLocalId(id) && localAudio?.isMuted()) {
newLvl = 0;
}
@@ -2091,6 +2199,8 @@ export default {
}
});
room.on(JitsiConferenceEvents.TRACK_UNMUTE_REJECTED, track => APP.store.dispatch(destroyLocalTracks(track)));
room.on(JitsiConferenceEvents.SUBJECT_CHANGED,
subject => APP.store.dispatch(conferenceSubjectChanged(subject)));
@@ -2132,6 +2242,10 @@ export default {
(id, displayName) => {
const formattedDisplayName
= getNormalizedDisplayName(displayName);
const state = APP.store.getState();
const {
defaultRemoteDisplayName
} = state['features/base/config'];
APP.store.dispatch(participantUpdated({
conference: room,
@@ -2143,7 +2257,7 @@ export default {
formattedDisplayName:
appendSuffix(
formattedDisplayName
|| interfaceConfig.DEFAULT_REMOTE_DISPLAY_NAME)
|| defaultRemoteDisplayName)
});
}
);
@@ -2178,6 +2292,10 @@ export default {
}
});
room.on(
JitsiConferenceEvents.NON_PARTICIPANT_MESSAGE_RECEIVED,
(...args) => APP.store.dispatch(nonParticipantMessageReceived(...args)));
room.on(
JitsiConferenceEvents.LOCK_STATE_CHANGED,
(...args) => APP.store.dispatch(lockStateChanged(room, ...args)));
@@ -2211,6 +2329,17 @@ export default {
APP.store.dispatch(suspendDetected());
});
room.on(
JitsiConferenceEvents.AUDIO_UNMUTE_PERMISSIONS_CHANGED,
disableAudioMuteChange => {
APP.store.dispatch(setAudioUnmutePermissions(disableAudioMuteChange));
});
room.on(
JitsiConferenceEvents.VIDEO_UNMUTE_PERMISSIONS_CHANGED,
disableVideoMuteChange => {
APP.store.dispatch(setVideoUnmutePermissions(disableVideoMuteChange));
});
APP.UI.addListener(UIEvents.AUDIO_MUTED, muted => {
this.muteAudio(muted);
});
@@ -2266,9 +2395,9 @@ export default {
// Remove the tracks from the peerconnection.
for (const track of localTracks) {
// Always add the track on mobile Safari because of a known issue where audio playout doesn't happen
// if the user joins audio and video muted.
if (audioMuted && track.jitsiTrack?.getType() === MEDIA_TYPE.AUDIO && !isIosMobileBrowser()) {
// Always add the track on Safari because of a known issue where audio playout doesn't happen
// if the user joins audio and video muted, i.e., if there is no local media capture.
if (audioMuted && track.jitsiTrack?.getType() === MEDIA_TYPE.AUDIO && !browser.isWebKitBased()) {
promises.push(this.useAudioStream(null));
}
if (videoMuted && track.jitsiTrack?.getType() === MEDIA_TYPE.VIDEO) {
@@ -2277,7 +2406,12 @@ export default {
}
Promise.allSettled(promises)
.then(() => APP.UI.notifyInitiallyMuted());
.then(() => {
APP.store.dispatch(showNotification({
titleKey: 'notify.mutedTitle',
descriptionKey: 'notify.muted'
}, NOTIFICATION_TIMEOUT_TYPE.SHORT));
});
});
room.on(
@@ -2509,13 +2643,24 @@ export default {
* @returns {void}
*/
_onConferenceJoined() {
const { dispatch } = APP.store;
APP.UI.initConference();
if (!config.disableShortcuts) {
APP.keyboardshortcut.init();
}
APP.store.dispatch(conferenceJoined(room));
dispatch(conferenceJoined(room));
const jwt = APP.store.getState()['features/base/jwt'];
if (jwt?.user?.hiddenFromRecorder) {
dispatch(muteLocal(true, MEDIA_TYPE.AUDIO));
dispatch(muteLocal(true, MEDIA_TYPE.VIDEO));
dispatch(setAudioUnmutePermissions(true, true));
dispatch(setVideoUnmutePermissions(true, true));
}
},
/**
@@ -2606,12 +2751,17 @@ export default {
APP.store.dispatch(updateDeviceList(devices));
// Firefox users can choose their preferred device in the gUM prompt. In that case
// we should respect that and not attempt to switch to the preferred device from
// our settings.
const newLabelsOnly = mediaDeviceHelper.newDeviceListAddedLabelsOnly(oldDevices, devices);
const newDevices
= mediaDeviceHelper.getNewMediaDevicesAfterDeviceListChanged(
devices,
this.isSharingScreen,
localVideo,
localAudio);
localAudio,
newLabelsOnly);
const promises = [];
const audioWasMuted = this.isLocalAudioMuted();
const videoWasMuted = this.isLocalVideoMuted();
@@ -2837,7 +2987,7 @@ export default {
Promise.all([
requestFeedbackPromise,
this.leaveRoomAndDisconnect()
this.leaveRoom()
])
.then(values => {
this._room = undefined;
@@ -2856,18 +3006,25 @@ export default {
},
/**
* Leaves the room and calls JitsiConnection.disconnect.
* Leaves the room.
*
* @param {boolean} doDisconnect - Wether leaving the room should also terminate the connection.
* @returns {Promise}
*/
leaveRoomAndDisconnect() {
async leaveRoom(doDisconnect = true) {
APP.store.dispatch(conferenceWillLeave(room));
if (room && room.isJoined()) {
return room.leave().then(disconnect, disconnect);
return room.leave().finally(() => {
if (doDisconnect) {
return disconnect();
}
});
}
return disconnect();
if (doDisconnect) {
return disconnect();
}
},
/**
@@ -2949,6 +3106,15 @@ export default {
room.sendEndpointMessage(to, payload);
},
/**
* Sends a facial expression as a string and its duration as a number
* @param {object} payload - Object containing the {string} facialExpression
* and {number} duration
*/
sendFacialExpression(payload) {
room.sendFacialExpression(payload);
},
/**
* Adds new listener.
* @param {String} eventName the name of the event

355
config.js
View File

@@ -1,3 +1,4 @@
/* eslint-disable no-unused-vars, no-var */
var config = {
@@ -74,15 +75,41 @@ var config = {
// callStatsThreshold: 5 // enable callstats for 5% of the users.
},
// Feature Flags.
flags: {
// Enables source names in the signaling.
// sourceNameSignaling: false,
},
// Disables moderator indicators.
// disableModeratorIndicator: false,
// Disables the reactions feature.
// disableReactions: true,
// Disables the reactions moderation feature.
// disableReactionsModeration: false,
// Disables polls feature.
// disablePolls: false,
// Disables self-view tile. (hides it from tile view and from filmstrip)
// disableSelfView: false,
// Disables self-view settings in UI
// disableSelfViewSettings: false,
// screenshotCapture : {
// Enables the screensharing capture feature.
// enabled: false,
//
// The mode for the screenshot capture feature.
// Can be either 'recording' - screensharing screenshots are taken
// only when the recording is also on,
// or 'always' - screensharing screenshots are always taken.
// mode: 'recording'
// }
// Disables ICE/UDP by filtering out local and remote UDP candidates in
// signalling.
// webrtcIceUdpDisable: false,
@@ -221,7 +248,11 @@ var config = {
// max: 5
// },
// Try to start calls with screen-sharing instead of camera video.
// This option has been deprecated since it is no longer supported as per the w3c spec.
// https://w3c.github.io/mediacapture-screen-share/#dom-mediadevices-getdisplaymedia. If the user has not
// interacted with the webpage before the getDisplayMedia call, the promise will be rejected by the browser. This
// has already been implemented in Firefox and Safari and will be implemented in Chrome soon.
// https://bugs.chromium.org/p/chromium/issues/detail?id=1198918
// startScreenSharing: false,
// Recording
@@ -279,6 +310,7 @@ var config = {
// autoHide: true,
// autoHideTimeout: 5000,
// disabled: false,
// disableDetails: false,
// inactiveDisabled: false
// },
@@ -374,6 +406,13 @@ var config = {
// resizeDesktopForPresenter: false
// },
// Notification timeouts
// notificationTimeouts: {
// short: 2500,
// medium: 5000,
// long: 10000
// },
// // Options for the recording limit notification.
// recordingLimit: {
//
@@ -392,6 +431,9 @@ var config = {
// Disables or enables RTX (RFC 4588) (defaults to false).
// disableRtx: false,
// Moves all Jitsi Meet 'beforeunload' logic (cleanup, leaving, disconnecting, etc) to the 'unload' event.
// disableBeforeUnloadHandlers: true,
// Disables or enables TCC support in this client (default: enabled).
// enableTcc: true,
@@ -429,6 +471,16 @@ var config = {
// Hides lobby button
// hideLobbyButton: false,
// If Lobby is enabled starts knocking automatically.
// autoKnockLobby: false,
// Enable lobby chat.
// enableLobbyChat: true,
// DEPRECATED! Use `breakoutRooms.hideAddRoomButton` instead.
// Hides add breakout room button
// hideAddRoomButton: false,
// Require users to always specify a display name.
// requireDisplayName: true,
@@ -452,12 +504,27 @@ var config = {
// when the toolbar is shown on mouse movements
// disable1On1Mode: null | false | true,
// Default language for the user interface.
// Default local name to be displayed
// defaultLocalDisplayName: 'me',
// Default remote name to be displayed
// defaultRemoteDisplayName: 'Fellow Jitster',
// Hides the display name from the participant thumbnail
// hideDisplayName: false,
// Hides the dominant speaker name badge that hovers above the toolbox
// hideDominantSpeakerBadge: false,
// Default language for the user interface. Cannot be overwritten.
// defaultLanguage: 'en',
// Disables profile and the edit of all fields from the profile settings (display name and email)
// disableProfile: false,
// Hides the email section under profile settings.
// hideEmailInSettings: false,
// Whether or not some features are checked based on token.
// enableFeaturesBasedOnToken: false,
@@ -473,8 +540,18 @@ var config = {
// and microsoftApiApplicationClientID
// enableCalendarIntegration: false,
// When 'true', it shows an intermediate page before joining, where the user can configure their devices.
// prejoinPageEnabled: false,
// Configs for prejoin page.
// prejoinConfig: {
// // When 'true', it shows an intermediate page before joining, where the user can configure their devices.
// // This replaces `prejoinPageEnabled`.
// enabled: true,
// // List of buttons to hide from the extra join options dropdown.
// hideExtraJoinButtons: ['no-audio', 'by-phone']
// },
// When 'true', the user cannot edit the display name.
// (Mainly useful when used in conjuction with the JWT so the JWT name becomes read only.)
// readOnlyName: false,
// If etherpad integration is enabled, setting this to true will
// automatically open the etherpad when a participant joins. This
@@ -492,6 +569,9 @@ var config = {
// Document should be focused for this option to work
// enableAutomaticUrlCopy: false,
// Array with avatar URL prefixes that need to use CORS.
// corsAvatarURLs: [ 'https://www.gravatar.com/avatar/' ],
// Base URL for a Gravatar-compatible service. Defaults to libravatar.
// gravatarBaseURL: 'https://seccdn.libravatar.org/avatar/',
@@ -523,7 +603,9 @@ var config = {
// 'fullscreen',
// 'hangup',
// 'help',
// 'highlight',
// 'invite',
// 'linktosalesforce',
// 'livestreaming',
// 'microphone',
// 'mute-everyone',
@@ -555,44 +637,66 @@ var config = {
// timeout: 4000,
// // Moved from interfaceConfig.TOOLBAR_ALWAYS_VISIBLE
// // Whether toolbar should be always visible or should hide after x miliseconds.
// alwaysVisible: false
// alwaysVisible: false,
// // Indicates whether the toolbar should still autohide when chat is open
// autoHideWhileChatIsOpen: false
// },
// Toolbar buttons which have their click event exposed through the API on
// `toolbarButtonClicked` event instead of executing the normal click routine.
// Toolbar buttons which have their click/tap event exposed through the API on
// `toolbarButtonClicked`. Passing a string for the button key will
// prevent execution of the click/tap routine; passing an object with `key` and
// `preventExecution` flag on false will not prevent execution of the click/tap
// routine. Below array with mixed mode for passing the buttons.
// buttonsWithNotifyClick: [
// 'camera',
// 'chat',
// 'closedcaptions',
// 'desktop',
// 'download',
// 'embedmeeting',
// 'etherpad',
// 'feedback',
// 'filmstrip',
// 'fullscreen',
// 'hangup',
// 'help',
// 'invite',
// 'livestreaming',
// 'microphone',
// 'mute-everyone',
// 'mute-video-everyone',
// 'participants-pane',
// 'profile',
// 'raisehand',
// 'recording',
// 'security',
// 'select-background',
// 'settings',
// 'shareaudio',
// 'sharedvideo',
// 'shortcuts',
// 'stats',
// 'tileview',
// 'toggle-camera',
// 'videoquality',
// '__end'
// 'camera',
// {
// key: 'chat',
// preventExecution: false
// },
// {
// key: 'closedcaptions',
// preventExecution: true
// },
// 'desktop',
// 'download',
// 'embedmeeting',
// 'etherpad',
// 'feedback',
// 'filmstrip',
// 'fullscreen',
// 'hangup',
// 'help',
// {
// key: 'invite',
// preventExecution: false
// },
// 'livestreaming',
// 'microphone',
// 'mute-everyone',
// 'mute-video-everyone',
// 'participants-pane',
// 'profile',
// {
// key: 'raisehand',
// preventExecution: true
// },
// 'recording',
// 'security',
// 'select-background',
// 'settings',
// 'shareaudio',
// 'sharedvideo',
// 'shortcuts',
// 'stats',
// 'tileview',
// 'toggle-camera',
// 'videoquality',
// // The add passcode button from the security dialog.
// {
// key: 'add-passcode',
// preventExecution: false
// }
// '__end'
// ],
// List of pre meeting screens buttons to hide. The values must be one or more of the 5 allowed buttons:
@@ -644,6 +748,23 @@ var config = {
// Enables sending participants' emails (if available) to callstats and other analytics
// enableEmailInStats: false,
// Enables detecting faces of participants and get their expression and send it to other participants
// enableFacialRecognition: true,
// Enables displaying facial expressions in speaker stats
// enableDisplayFacialExpressions: true,
// faceCoordinatesSharing: {
// // Enables sharing your face cordinates. Used for centering faces within a video.
// enabled: false,
// // Minimum required face movement percentage threshold for sending new face coordinates data.
// threshold: 10,
// // Miliseconds for processing a new image capture in order to detect face coordinates if they exist.
// captureInterval: 100
// },
// Controls the percentage of automatic feedback shown to participants when callstats is enabled.
// The default value is 100%. If set to 0, no automatic feedback will be requested
// feedbackPercentage: 100,
@@ -726,7 +847,7 @@ var config = {
// module connects to the provided rtcstatsEndpoint and sends statistics regarding
// PeerConnection states along with getStats metrics polled at the specified
// interval.
// rtcstatsEnabled: true,
// rtcstatsEnabled: false,
// In order to enable rtcstats one needs to provide a endpoint url.
// rtcstatsEndpoint: wss://rtcstats-server-pilot.jitsi.net/,
@@ -772,6 +893,7 @@ var config = {
// - 'PARTICIPANT_JOINED_SOUND'
// - 'PARTICIPANT_LEFT_SOUND'
// - 'RAISE_HAND_SOUND'
// - 'REACTION_SOUND'
// - 'RECORDING_OFF_SOUND'
// - 'RECORDING_ON_SOUND'
// - 'TALK_WHILE_MUTED_SOUND'
@@ -820,6 +942,10 @@ var config = {
// format: 'flac'
//
// },
// e2ee: {
// labels,
// externallyManagedKey: false
// },
// Options related to end-to-end (participant to participant) ping.
@@ -873,12 +999,25 @@ var config = {
// Options related to the remote participant menu.
// remoteVideoMenu: {
// // Whether the remote video context menu to be rendered or not.
// disabled: true,
// // If set to true the 'Kick out' button will be disabled.
// disableKick: true,
// // If set to true the 'Grant moderator' button will be disabled.
// disableGrantModerator: true
// disableGrantModerator: true,
// // If set to true the 'Send private message' button will be disabled.
// disablePrivateChat: true
// },
// Endpoint that enables support for salesforce integration with in-meeting resource linking
// This is required for:
// listing the most recent records - salesforceUrl/records/recents
// searching records - salesforceUrl/records?text=${text}
// retrieving record details - salesforceUrl/records/${id}?type=${type}
// and linking the meeting - salesforceUrl/sessions/${sessionId}/records/${id}
//
// salesforceUrl: 'https://api.example.com/',
// If set to true all muting operations of remote participants will be disabled.
// disableRemoteMute: true,
@@ -890,29 +1029,73 @@ var config = {
If there is no url set or there are missing fields, the defaults are applied.
The config file should be in JSON.
None of the fields are mandatory and the response must have the shape:
{
// The domain url to apply (will replace the domain in the sharing conference link/embed section)
inviteDomain: 'example-company.org,
// The hex value for the colour used as background
backgroundColor: '#fff',
// The url for the image used as background
backgroundImageUrl: 'https://example.com/background-img.png',
// The anchor url used when clicking the logo image
logoClickUrl: 'https://example-company.org',
// The url used for the image used as logo
logoImageUrl: 'https://example.com/logo-img.png',
// Overwrite for pool of background images for avatars
avatarBackgrounds: ['url(https://example.com/avatar-background-1.png)', '#FFF'],
// The lobby/prejoin screen background
premeetingBackground: 'url(https://example.com/premeeting-background.png)'
}
{
// The domain url to apply (will replace the domain in the sharing conference link/embed section)
inviteDomain: 'example-company.org,
// The hex value for the colour used as background
backgroundColor: '#fff',
// The url for the image used as background
backgroundImageUrl: 'https://example.com/background-img.png',
// The anchor url used when clicking the logo image
logoClickUrl: 'https://example-company.org',
// The url used for the image used as logo
logoImageUrl: 'https://example.com/logo-img.png',
// Overwrite for pool of background images for avatars
avatarBackgrounds: ['url(https://example.com/avatar-background-1.png)', '#FFF'],
// The lobby/prejoin screen background
premeetingBackground: 'url(https://example.com/premeeting-background.png)',
// A list of images that can be used as video backgrounds.
// When this field is present, the default images will be replaced with those provided.
virtualBackgrounds: ['https://example.com/img.jpg'],
// Object containing a theme's properties. It also supports partial overwrites of the main theme.
// For a list of all possible theme tokens and their current defaults, please check:
// https://github.com/jitsi/jitsi-meet/tree/master/resources/custom-theme/custom-theme.json
// For a short explanations on each of the tokens, please check:
// https://github.com/jitsi/jitsi-meet/blob/master/react/features/base/ui/Tokens.js
// IMPORTANT!: This is work in progress so many of the various tokens are not yet applied in code
// or they are partially applied.
customTheme: {
palette: {
ui01: "orange !important",
ui02: "maroon",
surface02: 'darkgreen',
ui03: "violet",
ui04: "magenta",
ui05: "blueviolet",
field02Hover: 'red',
action01: 'green',
action01Hover: 'lightgreen',
action02Disabled: 'beige',
success02: 'cadetblue',
action02Hover: 'aliceblue'
},
typography: {
labelRegular: {
fontSize: 25,
lineHeight: 30,
fontWeight: 500
}
}
}
}
*/
// dynamicBrandingUrl: '',
// Options related to the breakout rooms feature.
// breakoutRooms: {
// // Hides the add breakout room button. This replaces `hideAddRoomButton`.
// hideAddRoomButton: false,
// // Hides the join breakout room button.
// hideJoinRoomButton: false
// },
// When true the user cannot add more images to be used as virtual background.
// Only the default ones from will be available.
// disableAddingBackgroundImages: false,
// Disables using screensharing as virtual background.
// disableScreensharingVirtualBackground: false,
// Sets the background transparency level. '0' is fully transparent, '1' is opaque.
// backgroundAlpha: 1,
@@ -924,11 +1107,15 @@ var config = {
// If true, tile view will not be enabled automatically when the participants count threshold is reached.
// disableTileView: true,
// If true, the tiles will be displayed contained within the available space rather than enlarged to cover it,
// with a 16:9 aspect ratio (old behaviour).
// disableTileEnlargement: true,
// Controls the visibility and behavior of the top header conference info labels.
// If a label's id is not in any of the 2 arrays, it will not be visible at all on the header.
// conferenceInfo: {
// // those labels will not be hidden in tandem with the toolbox.
// alwaysVisible: ['recording', 'local-recording'],
// alwaysVisible: ['recording', 'local-recording', 'raised-hands-count'],
// // those labels will be auto-hidden in tandem with the toolbox buttons.
// autoHide: [
// 'subject',
@@ -937,15 +1124,16 @@ var config = {
// 'e2ee',
// 'transcribing',
// 'video-quality',
// 'insecure-room'
// 'insecure-room',
// 'highlight-moment'
// ]
// },
// Hides the conference subject
// hideConferenceSubject: true,
// hideConferenceSubject: false,
// Hides the conference timer.
// hideConferenceTimer: true,
// hideConferenceTimer: false,
// Hides the recording label
// hideRecordingLabel: false,
@@ -956,6 +1144,9 @@ var config = {
// Sets the conference subject
// subject: 'Conference Subject',
// Sets the conference local subject
// localSubject: 'Conference Local Subject',
// This property is related to the use case when jitsi-meet is used via the IFrame API. When the property is true
// jitsi-meet will use the local storage of the host page instead of its own. This option is useful if the browser
// is not persisting the local storage inside the iframe.
@@ -968,11 +1159,6 @@ var config = {
// will open an etherpad document.
// etherpad_base: 'https://your-etherpad-installati.on/p/',
// If etherpad_base is set, and useRoomAsSharedDocumentName is set to true,
// open a pad with the name of the room (lowercased) instead of a pad with a
// random UUID.
// useRoomAsSharedDocumentName: true,
// List of undocumented settings used in jitsi-meet
/**
_immediateReloadThreshold
@@ -1023,6 +1209,7 @@ var config = {
forceJVB121Ratio
forceTurnRelay
hiddenDomain
hiddenFromRecorderFeatureEnabled
ignoreStartMuted
websocketKeepAlive
websocketKeepAliveUrl
@@ -1065,15 +1252,20 @@ var config = {
// 'lobby.joinRejectedMessage', // shown when while in a lobby, user's request to join is rejected
// 'lobby.notificationTitle', // shown when lobby is toggled and when join requests are allowed / denied
// 'localRecording.localRecording', // shown when a local recording is started
// 'notify.chatMessages', // shown when receiving chat messages while the chat window is closed
// 'notify.disconnected', // shown when a participant has left
// 'notify.connectedOneMember', // show when a participant joined
// 'notify.connectedTwoMembers', // show when two participants joined simultaneously
// 'notify.connectedThreePlusMembers', // show when more than 2 participants joined simultaneously
// 'notify.leftOneMember', // show when a participant left
// 'notify.leftTwoMembers', // show when two participants left simultaneously
// 'notify.leftThreePlusMembers', // show when more than 2 participants left simultaneously
// 'notify.grantedTo', // shown when moderator rights were granted to a participant
// 'notify.invitedOneMember', // shown when 1 participant has been invited
// 'notify.invitedThreePlusMembers', // shown when 3+ participants have been invited
// 'notify.invitedTwoMembers', // shown when 2 participants have been invited
// 'notify.kickParticipant', // shown when a participant is kicked
// 'notify.linkToSalesforce', // shown when joining a meeting with salesforce integration
// 'notify.moderationStartedTitle', // shown when AV moderation is activated
// 'notify.moderationStoppedTitle', // shown when AV moderation is deactivated
// 'notify.moderationInEffectTitle', // shown when user attempts to unmute audio during AV moderation
@@ -1083,11 +1275,13 @@ var config = {
// 'notify.mutedTitle', // shown when user has been muted upon joining,
// 'notify.newDeviceAudioTitle', // prompts the user to use a newly detected audio device
// 'notify.newDeviceCameraTitle', // prompts the user to use a newly detected camera
// 'notify.participantWantsToJoin', // shown when lobby is enabled and participant requests to join meeting
// 'notify.passwordRemovedRemotely', // shown when a password has been removed remotely
// 'notify.passwordSetRemotely', // shown when a password has been set remotely
// 'notify.raisedHand', // shown when a partcipant used raise hand,
// 'notify.startSilentTitle', // shown when user joined with no audio
// 'notify.unmute', // shown to moderator when user raises hand during AV moderation
// 'notify.hostAskedUnmute', // shown to participant when host asks them to unmute
// 'prejoin.errorDialOut',
// 'prejoin.errorDialOutDisconnected',
// 'prejoin.errorDialOutFailed',
@@ -1106,9 +1300,38 @@ var config = {
// Prevent the filmstrip from autohiding when screen width is under a certain threshold
// disableFilmstripAutohiding: false,
// filmstrip: {
// // Disables user resizable filmstrip. Also, allows configuration of the filmstrip
// // (width, tiles aspect ratios) through the interfaceConfig options.
// disableResizable: false,
// },
// Tile view related config options.
// tileView: {
// // The optimal number of tiles that are going to be shown in tile view. Depending on the screen size it may
// // not be possible to show the exact number of participants specified here.
// numberOfVisibleTiles: 25
// },
// Specifies whether the chat emoticons are disabled or not
// disableChatSmileys: false,
// Settings for the GIPHY integration.
// giphy: {
// // Whether the feature is enabled or not.
// enabled: false,
// // SDK API Key from Giphy.
// sdkKey: '',
// // Display mode can be one of:
// // - tile: show the GIF on the tile of the participant that sent it.
// // - chat: show the GIF as a message in chat
// // - all: all of the above. This is the default option
// displayMode: 'all',
// // How long the GIF should be displayed on the tile (in miliseconds).
// tileTime: 5000
// },
// Allow all above example options to include a trailing comma and
// prevent fear when commenting out the last value.
makeJsonParserHappy: 'even if last key had a trailing comma'

View File

@@ -1,7 +1,7 @@
/* global APP, JitsiMeetJS, config */
import { jitsiLocalStorage } from '@jitsi/js-utils';
import Logger from 'jitsi-meet-logger';
import Logger from '@jitsi/logger';
import { redirectToTokenAuthService } from './modules/UI/authentication/AuthHandler';
import { LoginDialog } from './react/features/authentication/components';

View File

@@ -24,69 +24,6 @@
bottom: calc(#{$newToolbarSizeWithPadding}) !important;
}
.modal-dialog-form {
/**
* Override @atlaskit/dropdown-menu styling when in a modal because the
* dropdown backgrounds clash with the modal backgrounds.
*/
.dropdown-menu div[style*="transform"] {
outline: 1px solid #455166;
}
.dropdown-menu button:not(:active):not(:hover) > span {
color: #B8C7E0;
}
/**
* Override @atlaskit/tab styling when in a modal because the
* tab text color clash with the modal backgrounds.
*/
div[role="tablist"] > div:not([data-selected]):not(:hover),
label > div > span {
color: #B8C7E0 !important;
}
}
/**
* Override @atlaskit/modal-dialog header styling
*/
.atlaskit-portal [role="dialog"] header {
box-shadow: none;
.jitsi-icon {
cursor: pointer;
}
.jitsi-icon svg {
fill: #B8C7E0;
}
}
/**
* Override @atlaskit/modal-dialog footer styling.
*/
.atlaskit-portal [role="dialog"] footer {
box-shadow: none;
}
/**
* Make header close button more easily tappable on mobile.
*/
.mobile-browser .atlaskit-portal [role="dialog"] header .jitsi-icon {
display: grid;
place-items: center;
height: 48px;
width: 48px;
background: #2a3a4b;
border-radius: 3px;
}
/**
* Override @atlaskit/theme styling for the top toolbar so it displays over
* the video thumbnail while obscuring as little as possible.
*/
.videocontainer__toptoolbar > div > div {
background: none;
}
/**
* Keep overflow menu within screen vertical bounds and make it scrollable.
@@ -158,3 +95,20 @@ div.Tooltip {
line-height: 14px;
padding: 8px;
}
// make modal full screen on landscape orientation
@media (max-height: 420px) {
.atlaskit-portal {
.css-1oc7v0j {
height: 100%;
padding: 0;
max-width: 100%;
top: 0;
width: 100%;
&> div {
height: 100%;
}
}
}
}

View File

@@ -121,9 +121,18 @@
}
}
.audio-preview-entry-text {
max-width: 178px;
&--nometer {
.audio-preview-entry-text {
max-width: 238px;
}
}
&--withmeter {
.audio-preview-entry-text {
max-width: 178px;
}
}
}
&-icon {

View File

@@ -1,50 +0,0 @@
.avatar {
background-color: #AAA;
border-radius: 50%;
color: rgba(255, 255, 255, 1);
font-weight: 100;
object-fit: cover;
&.avatar-small {
height: 28px !important;
width: 28px !important;
}
&.avatar-xsmall {
height: 16px !important;
width: 16px !important;
}
.jitsi-icon {
transform: translateY(50%);
}
}
.avatar-svg {
height: 100%;
width: 100%;
}
.avatar-badge {
position: relative;
&-available::after {
@include avatarBadge;
background-color: $presence-available;
}
&-away::after {
@include avatarBadge;
background-color: $presence-away;
}
&-busy::after {
@include avatarBadge;
background-color: $presence-busy;
}
&-idle::after {
@include avatarBadge;
background-color: $presence-idle;
}
}

View File

@@ -6,6 +6,10 @@
* {
-webkit-user-select: none;
user-select: none;
// Firefox only
scrollbar-width: thin;
scrollbar-color: rgba(0, 0, 0, .5) transparent;
}
input,
@@ -160,16 +164,6 @@ form {
font-size: 12px;
}
/**
* Dialogs fade
*/
.aui-blanket {
background: #000;
transition: opacity 0.2s, visibility 0.2s;
transition-delay: 0.1s;
visibility: visible;
}
#inviteLinkRef {
-webkit-user-select: text;
user-select: text;

View File

@@ -2,34 +2,39 @@
background-color: $chatBackgroundColor;
box-sizing: border-box;
color: #FFF;
display: flex;
flex-direction: column;
height: 100%;
left: -$sidebarWidth;
overflow: hidden;
position: absolute;
top: 0;
width: $sidebarWidth;
z-index: $sideToolbarContainerZ;
/**
* The sidebar (chat) is off-screen when hidden. Move it flush to the left
* side of the window when it should be visible.
*/
&.slideInExt {
left: 0;
@media (max-width: 580px) {
width: 100%;
}
}
.chat-panel {
display: flex;
flex-direction: column;
// extract header + tabs height
height: calc(100% - 102px);
}
.chat-panel-no-tabs {
// extract header height
height: calc(100% - 70px);
}
#chatconversation {
box-sizing: border-box;
flex: 1;
font-size: 10pt;
// extract message input height
height: calc(100% - 68px);
line-height: 20px;
overflow: auto;
padding: 16px;
text-align: left;
width: $sidebarWidth;
word-wrap: break-word;
display: flex;
@@ -58,28 +63,6 @@
a:active {
color: black;
}
&::-webkit-scrollbar {
background: #06a5df;
width: 7px;
}
&::-webkit-scrollbar-button {
display: none;
}
&::-webkit-scrollbar-track {
background: black;
}
&::-webkit-scrollbar-track-piece {
background: black;
}
&::-webkit-scrollbar-thumb {
background: #06a5df;
border-radius: 4px;
}
}
#chat-recipient {
@@ -102,6 +85,10 @@
fill: white;
}
}
&.lobby-chat-recipient {
background-color: $chatLobbyMessageBackgroundColor;
}
}
@@ -319,10 +306,6 @@
text-overflow: ellipsis;
overflow: hidden;
}
@media (max-width: 580px) {
display: none !important;
}
}
.sr-only {
@@ -476,6 +459,9 @@
&.privatemessage {
background-color: $chatPrivateMessageBackgroundColor;
}
&.lobbymessage {
background-color: $chatLobbyMessageBackgroundColor;
}
}
.display-name {
@@ -515,6 +501,10 @@
justify-content: center;
padding: 5px;
&.lobbychatmessageactions {
border-left-color: $chatLobbyActionsSeparatorColor;
}
.toolbox-icon {
cursor: pointer;
}
@@ -532,6 +522,9 @@
&.privatemessage {
background-color: $chatPrivateMessageBackgroundColor;
}
&.lobbymessage {
background-color: $chatLobbyMessageBackgroundColor;
}
}
}
@@ -563,11 +556,6 @@
}
}
.touchmove-hack {
display: flex;
flex: 1;
overflow: auto;
}
/**
* Make header close button more easily tappable on mobile.

View File

@@ -11,12 +11,6 @@
{
@extend %connection-info;
/**
* Apply negative margin to reduce the appearance of padding in AtlasKit
* InlineDialog.
*/
margin: -15px;
> table {
white-space: nowrap;
@extend %connection-info;

View File

@@ -5,6 +5,10 @@
bottom: 0;
z-index: $drawerZ;
border-radius: 16px 16px 0 0;
&.notification-portal {
z-index: $dropdownZ;
}
}
.drawer-portal::after {
@@ -20,10 +24,9 @@
}
.drawer-menu {
max-height: calc(80vh - 64px);
background: #242528;
border-radius: 16px 16px 0 0;
overflow-y: scroll;
overflow-y: auto;
margin-bottom: env(safe-area-inset-bottom, 0);
width: 100%;
@@ -39,15 +42,6 @@
}
}
.popupmenu {
margin: auto;
width: 100%;
}
.popupmenu__item {
height: 48px;
}
&#{&} .overflow-menu {
margin: auto;
font-size: 1.2em;

View File

@@ -1,10 +0,0 @@
.shortcuts-list {
list-style-type: none;
padding: 0;
&__item {
display: flex;
justify-content: space-between;
margin-bottom: em(7, 14);
}
}

View File

@@ -1,37 +0,0 @@
.label {
align-items: center;
background: #36383C;
border-radius: 3px;
color: #fff;
display: flex;
font-size: 12px;
font-weight: 600;
height: 28px;
margin: 0 0 4px 4px;
padding: 0 8px;
&--green {
background: #31B76A;
}
&--red {
background: #E34F56
}
&--white {
background: #fff;
color: #5e6d7a;
svg {
fill: #5e6d7a;
}
}
}
.label-text-with-icon {
margin-left: 8px;
}
.participants-count {
cursor: pointer;
}

View File

@@ -193,16 +193,3 @@
@mixin transparentBg($color, $alpha) {
background-color: rgba(red($color), green($color), blue($color), $alpha);
}
/**
* Avatar status badge mixin
*/
@mixin avatarBadge {
border-radius: 50%;
content: '';
display: block;
height: 35%;
position: absolute;
bottom: 0;
width: 35%;
}

23
css/_notifications.scss Normal file
View File

@@ -0,0 +1,23 @@
.notification-appear, .notification-enter {
opacity: 0;
position: relative;
left: -200px;
transition: all .2s !important; // !important needed to overwrite atlaskit default style
&-active {
opacity: 1;
left: 0;
}
}
.notification-exit {
opacity: 1;
position: relative;
left: 0;
transition: all .2s !important; // !important needed to overwrite atlaskit default style
&-active {
opacity: 0;
left: -200px;
}
}

View File

@@ -25,10 +25,6 @@
}
}
.participant-avatar {
margin: 8px 16px 8px 0;
}
@media (max-width: 580px) {
.participants_pane {
height: 100vh;
@@ -56,3 +52,9 @@
border-radius: 3px;
}
}
.mobile-browser.shift-right {
.participants_pane {
z-index: -1;
}
}

View File

@@ -1,5 +1,7 @@
.poll-dialog {
font-size: 1rem;
font-size: 14px;
font-weight: 400;
line-height: 20px;
h1, span, li, strong {
color: #bce;
@@ -16,28 +18,58 @@
}
.poll-header {
padding: 8px 16px;
margin-bottom: 8px;
}
.poll-answer-container{
padding: 8px;
.poll-creator {
color: #C2C2C2;
font-weight: 600;
margin: 4px 0 16px 0;
}
.poll-answer-container {
background: #3D3D3D;
border-radius: 3px;
margin-bottom: 8px;
@media (max-width: 580px) {
&> span {
padding: 8px 0;
}
svg {
margin-top: 6px;
}
}
}
.poll-answer-option {
font-weight: 400;
display: block;
margin: 4px;
@media (max-width: 580px) {
font-size: 16px;
margin: 11px 8px
}
}
.poll-answer-field-list, .poll-answer-list, .poll-result-list {
list-style-type: none;
padding: 0 16px;
padding: 0;
margin: 0;
}
.poll-answer-field-list {
padding: 0 16px;
}
ol.poll-result-list {
margin-bottom: 1.5em;
}
.poll-result-list > li {
margin-bottom: 8px;
margin-bottom: 16px;
}
.poll-answer-field {
@@ -60,7 +92,7 @@ ol.poll-result-list {
.poll-create-container .jsYMHu {
background: #292929;
border-color: #808090;
color: white // #808090
color: #fff // #808090
}
.poll-add-button {
@@ -72,7 +104,7 @@ ol.poll-result-list {
.poll-remove-option-button {
background: 0 0;
border: none;
color: #8B8B8B;
color: #E04757;
padding-left: 0;
}
@@ -85,7 +117,7 @@ ol.poll-result-list {
.poll-icon-button, .poll-drag-handle {
.jitsi-icon svg {
fill: #bce;
fill: #929292;
}
}
@@ -94,6 +126,7 @@ ol.poll-result-list {
border: none;
cursor: grab;
padding-left: 8;
padding-top: 8px;
display: flex;
}
@@ -105,13 +138,12 @@ ol.poll-result-list {
}
.poll-question {
font-size: 1.2em;
font-size: 16px;
font-weight: 600;
margin-bottom: 0.5em;
line-height: 26px;
}
.poll-answer-voters {
font-size: 1em;
font-weight: lighter;
list-style-type: none;
border: #616161 solid 1px;
@@ -191,29 +223,36 @@ ol.poll-result-list {
display: flex;
flex-direction: row;
justify-content: space-between;
a.poll-detail-link, a.poll-change-vote-link {
color: #669AEC;
cursor: pointer;
font-weight: 600;
text-decoration: none;
&:hover {
color: #669AEC;
}
&:visited {
color: #669AEC;
}
}
}
a.poll-detail-link, a.poll-change-vote-link {
color: #246FE5;
cursor: pointer;
text-decoration: none;
}
.polls-pane-content {
display: flex;
flex-direction: column;
font-weight: 600;
height: 85%;
align-items: stretch;
height: 100%;
position: relative;
}
.pane-content{
display: flex;
flex-direction: column;
height: 100%;
justify-content: center;
align-items: center;
width: 100%;
height: 100%;
}
.empty-pane-icon {
@@ -228,36 +267,41 @@ a.poll-detail-link, a.poll-change-vote-link {
}
.empty-pane-message {
color: #fff;
padding: 0 16px;
text-align: center;
}
.poll-results {
color: white;
}
.poll-answer {
h1, strong ,span {
color: white;
}
}
.poll-results, .poll-answer {
margin-bottom: 16px;
background: #292929;
border-radius: 8px;
padding: 12px 8px;
border-width: thin;
border-style: solid;
border-color: #616161;
border: 1px solid #666666;
margin: 16px;
padding: 16px;
word-break: break-word;
}
.poll-results {
color: #fff;
}
.poll-answer {
h1, strong ,span {
color: #fff;
}
}
.poll-create-label {
color: white;
margin-bottom: 4;
color: #C2C2C2;
display: flex;
font-weight: 400;
margin-bottom: 4;
}
.expandable-input{
line-height: 18px;
resize: none;
width: 100%;
height: 40px;
@@ -270,24 +314,31 @@ a.poll-detail-link, a.poll-change-vote-link {
padding: 10px 16px;
}
#polls-panel {
height: calc(100% - 102px);
}
.poll-container {
box-sizing: border-box;
flex: 1;
font-size: 14px;
font-weight: 600;
height: calc(100% - 88px);
line-height: 20px;
overflow-y: auto;
position: relative;
padding: 16px;
& > * + *:not(.ignore-child) {
margin-top: 16px;
}
&::-webkit-scrollbar {
display: none;
@media (max-width: 580px) {
height: calc(100% - 102px);
}
}
.poll-create-header {
color: #fff;
font-size: 20px;
line-height: 28px;
margin: 20px 16px;
font-weight: 600;
}
@@ -296,28 +347,45 @@ a.poll-detail-link, a.poll-change-vote-link {
padding: 8px 0;
}
.poll-create-footer {
background-color: #141414;
bottom: 0;
position: absolute;
width: calc(100% - 32px);
}
.poll-footer {
display: flex;
justify-content: flex-end;
padding: 8px 16px;
height: 40px;
align-items: stretch;
& > *:not(:last-child) {
margin-right: 16px;
}
display: flex;
justify-content: space-between;
padding: 0 16px 16px 16px;
}
.poll-primary-button {
align-items: center;
.poll-answer-footer {
padding: 8px 0 0 0;
}
.poll-button {
align-items: center;
border: 0;
border-radius: 6px;
font-size: 14px;
font-weight: 600;
display: flex;
justify-content: center;
min-height: 40px;
width: 100%;
&:disabled {
cursor: initial;
}
@media (max-width: 580px) {
min-height: 48px;
}
}
.poll-button-primary {
background-color: #0056E0;
border: 0;
border-radius: 6px;
display: flex;
font-weight: unset;
justify-content: center;
font-size: 15px;
flex: 1;
&:hover {
background-color: #246FE5;
@@ -336,23 +404,10 @@ a.poll-detail-link, a.poll-change-vote-link {
background-color: #00225A;
color: #858585;
}
& > *:not(:last-child) {
margin-right: 8px;
}
}
.poll-secondary-button {
align-items: center;
.poll-button-secondary {
background-color: #3D3D3D;
border: 0;
border-radius: 6px;
display: flex;
font-weight: unset;
justify-content: center;
font-size: 15px;
height: 40px;
width: 100%;
&:hover {
background-color: #525252;
@@ -371,78 +426,19 @@ a.poll-detail-link, a.poll-change-vote-link {
background-color: #141414;
color: #858585;
}
& > *:not(:last-child) {
margin-right: 8px;
}
}
.poll-small-primary-button {
align-items: center;
background-color: #0056E0;
border: 0;
border-radius: 6px;
display: flex;
font-weight: unset;
justify-content: center;
font-size: 15px;
height: 40px;
width: 50%;
&:hover {
background-color: #246FE5;
}
&:active {
background-color: #0045B3;
}
&:focus {
background-color: #0045B3;
border: 3px solid #99BBF3;
}
&:disabled {
background-color: #00225A;
color: #858585;
}
& > *:not(:last-child) {
margin-right: 8px;
}
.poll-button-short {
max-width: 132px;
}
.poll-small-secondary-button {
align-items: center;
background-color: #3D3D3D;
border: 0;
border-radius: 6px;
display: flex;
font-weight: unset;
justify-content: center;
font-size: 15px;
height: 40px;
width: 50%;
&:hover {
background-color: #525252;
}
&:active {
background-color: #292929;
}
&:focus {
background-color: #292929;
border: 3px solid #858585;
}
&:disabled {
background-color: #141414;
color: #858585;
}
& > *:not(:last-child) {
margin-right: 8px;
}
.poll-button-shortest {
max-width: 117px;
}
.poll-button-short,
.poll-button-shortest {
@media (max-width: 580px) {
min-width: 49%;
}
}

View File

@@ -3,49 +3,45 @@
* to allow mouse movement from the popover trigger to the popover itself
* without triggering a mouseleave event.
*/
.popover-mousemove-padding-bottom {
bottom: -15px;
height: 20px;
position: absolute;
right: 0;
width: 100%;
}
%vertical-popover-padding {
height: 100%;
position: absolute;
top: 0;
width: 40px;
width: 20px;
padding: 20px 0;
top: -20px;
}
%horizontal-popover-padding {
height: 25px;
position: absolute;
right: 0;
width: 100%;
padding: 0 35px;
left: -35px;
}
.popover-mousemove-padding-left {
@extend %vertical-popover-padding;
left: -20px;
left: -35px;
}
.popover-mousemove-padding-right {
@extend %vertical-popover-padding;
right: -20px;
right: -35px;
}
/**
* An invisible element is added to the top of the popover to ensure the mouse
* stays over the popover when the popover's height is shrunk, which would then
* normally leave the mouse outside of the popover itself and cause a mouseleave
* event.
*/
.popover-mouse-padding-top {
height: 30px;
position: absolute;
right: 0;
top: -25px;
width: 100%;
.popover-mousemove-padding-bottom {
@extend %horizontal-popover-padding;
bottom: -40px;
}
.popover-mousemove-padding-top {
@extend %horizontal-popover-padding;
top: -40px;
}
.popover {
background-color: $popoverBg;
border-radius: 3px;
margin: -16px -24px;
padding: 16px 24px;
z-index: $popoverZ;
}

View File

@@ -2,116 +2,18 @@
* Initialize
**/
.popupmenu {
background-color: $menuBG;
border-radius: 3px;
min-width: 150px;
text-align: left;
padding: 0px;
white-space: nowrap;
.popupmenu__contents {
.popupmenu__volume-slider {
&::-webkit-slider-runnable-track {
background-color: $popupSliderColor;
}
&__item {
list-style-type: none;
height: 35px;
}
&::-moz-range-track {
background-color: $popupSliderColor;
}
// Link Appearance
&__link,
&__contents {
display: block;
box-sizing: border-box;
text-decoration: none;
height: 100%;
font-size: 9pt;
width: 100%;
cursor: pointer;
padding: 0 5px;
color: $popupMenuColor;
&:hover {
background-color: $popupMenuHoverBackground;
color: $popupMenuHoverColor;
}
&.disabled {
pointer-events: none;
}
}
&__text {
display: inline-block;
margin-left: 8px;
vertical-align: middle;
}
&__link {
i {
cursor: pointer;
}
}
&__contents {
display: flex;
/**
* Positioning styles on the slider and its container are used to make
* the container fit the popup width, by removing the slider from the
* page flow, and then making the slider fit the container.
*/
.popupmenu__slider_container {
position: relative;
width: 100%;
.popupmenu__slider {
position: absolute;
top: 50%;
transform: translate(0, -50%);
width: 100%;
&::-webkit-slider-runnable-track {
background-color: $popupSliderColor;
}
&::-moz-range-track {
background-color: $popupSliderColor;
}
&::-ms-fill-lower {
background-color: $popupSliderColor;
}
&::-ms-fill-lower {
background-color: $popupSliderColor;
}
}
}
&__icon {
vertical-align: middle;
position: relative;
display: inline-block;
min-width: 20px;
height: 100%;
padding-right: 10px;
> * {
@include absoluteAligning();
}
}
.icon-kick,
.icon-play,
.icon-stop {
font-size: 8pt;
}
}
/**
* Override reset css styling modifying all lists and set negative margin to
* reduce the visibility of padding on AtlasKit
* InlineDialogs.
*/
ul.popupmenu {
margin: -16px -24px;
}
span.localvideomenu:hover ul.popupmenu, span.remotevideomenu:hover ul.popupmenu, ul.popupmenu:hover {
display:block !important;
}

View File

@@ -7,13 +7,20 @@
border-radius: 3px;
padding: 16px;
&.with-gif {
width: 328px;
.reactions-row .toolbox-button:last-of-type {
top: 3px;
& .toolbox-icon.toggled {
background-color: #000000;
}
}
}
&.overflow {
width: auto;
padding-bottom: max(env(safe-area-inset-bottom, 0), 16px);
background-color: #141414;
box-shadow: none;
border-radius: 0;
position: relative;
width: 100%;
.toolbox-icon {
width: 48px;
@@ -33,6 +40,10 @@
.toolbox-button {
margin-right: 0;
}
.toolbox-button:last-of-type {
top: 0;
}
}
}
@@ -62,6 +73,7 @@
.toolbox-button {
margin-right: 8px;
touch-action: manipulation;
position: relative;
}
.toolbox-button:last-of-type {

View File

@@ -7,22 +7,23 @@
flex-direction: column;
.recording-header {
align-items: center;
display: flex;
flex: 0;
flex-direction: row;
justify-content: space-between;
padding-top: 32px;
.recording-title {
display: inline-flex;
align-items: center;
font-size: 16px;
font-size: 14px;
margin-left: 16px;
}
}
.recording-header-line {
border-top: 1px solid #5e6d7a;
padding-top: 32px;
}
.recording-switch-disabled {
@@ -34,10 +35,79 @@
align-items: center;
}
.file-sharing-icon-container {
background-color: #525252;
border-radius: 4px;
height: 40px;
justify-content: center;
width: 56px;
}
.cloud-content-recording-icon-container {
background-color: #FFFFFF;
border-radius: 4px;
height: 40px;
justify-content: center;
width: 40px;
}
.jitsi-recording-header {
margin-bottom: 32px;
}
.jitsi-content-recording-icon-container-with-switch {
background-color: #FFFFFF;
border-radius: 4px;
height: 40px;
width: 56px;
}
.jitsi-content-recording-icon-container-without-switch {
background-color: #FFFFFF;
border-radius: 4px;
height: 40px;
width: 46px;
}
.recording-icon {
width: 32px;
height: 32px;
height: 40px;
object-fit: contain;
width: 40px;
}
.content-recording-icon {
height: 18px;
margin: 10px 0 0 10px;
object-fit: contain;
width: 18px;
}
.recording-file-sharing-icon {
height: 18px;
object-fit: contain;
width: 18px;
}
.recording-info{
background-color: #FFD740;
color: black;
display: inline-flex;
margin: 32px 0;
width: 100%;
}
.recording-info-icon {
align-self: center;
height: 14px;
margin: 0 24px 0 16px;
object-fit: contain;
width: 14px;
}
.recording-info-title {
display: inline-flex;
font-size: 14px;
width: 290px
}
.recording-switch {

View File

@@ -48,6 +48,7 @@ canvas,
progress,
video {
display: inline-block;
transition: object-position 0.5s ease 0s;
vertical-align: baseline;
}
audio:not([controls]) {

View File

@@ -1,11 +1,25 @@
.subject {
color: #fff;
margin-top: -120px;
transition: margin-top .3s ease-in;
z-index: $zindex3;
transition: opacity .6s ease-in-out;
z-index: $toolbarZ + 2;
margin-top: 20px;
opacity: 0;
&.visible {
margin-top: 20px;
opacity: 1;
}
&#autoHide.with-always-on {
overflow: hidden;
animation: hideSubject forwards .6s ease-out;
& > .subject-info-container {
justify-content: flex-start;
}
&.visible {
animation: showSubject forwards .6s ease-out;
}
}
}
@@ -36,10 +50,7 @@
line-height: 28px;
padding: 0 16px;
height: 28px;
@media (max-width: 700px) {
max-width: 100px;
}
max-width: 324px;
@media (max-width: 300px) {
display: none;
@@ -74,8 +85,29 @@
position: absolute;
top: 0;
height: 48px;
max-width: calc(100% - 24px);
}
.shift-right .details-container {
margin-left: calc(#{$sidebarWidth} / 2);
}
@keyframes hideSubject {
0% {
max-width: 100%;
}
100% {
max-width: 0;
}
}
@keyframes showSubject {
0% {
max-width: 0%;
}
100% {
max-width: 100%;
}
}

View File

@@ -29,7 +29,8 @@
right: 0;
transition: bottom .3s ease-in;
width: 100%;
pointer-events: none;
z-index: $toolbarZ + 2;
&.visible {
bottom: 0;
@@ -76,14 +77,6 @@
}
}
.toolbox-button {
color: $toolbarButtonColor;
cursor: pointer;
display: inline-block;
line-height: $newToolbarSize;
text-align: center;
}
.toolbar-button-with-badge {
display: inline-block;
position: relative;
@@ -114,86 +107,6 @@
padding-bottom: env(safe-area-inset-bottom, 0);
}
.toolbox-content-items {
background: $newToolbarBackgroundColor;
border-radius: 6px;
margin: 0 auto;
padding: 6px;
text-align: center;
pointer-events: all;
box-shadow: 0px 2px 8px 4px rgba(0, 0, 0, 0.25), 0px 0px 0px 1px rgba(0, 0, 0, 0.15);
>div {
margin-left: 8px;
&:first-child {
margin-left: 0;
}
}
}
.overflow-menu {
font-size: 14px;
list-style-type: none;
padding: 8px 0;
background-color: $menuBG;
.profile-text {
max-width: 150px;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
}
}
.overflow-menu-item {
align-items: center;
color: $overflowMenuItemColor;
cursor: pointer;
display: flex;
font-size: 14px;
font-weight: 400;
height: 40px;
line-height: 24px;
padding: 8px 16px;
box-sizing: border-box;
@media (hover: hover) and (pointer: fine) {
&:hover {
background: $overflowMenuItemBackground;
}
}
div {
display: flex;
flex-direction: row;
align-items: center;
}
&.unclickable {
cursor: default;
}
&.disabled {
cursor: initial;
color: #929292;
&:hover {
background: none;
}
svg {
fill: #929292;
}
}
@media (hover: hover) and (pointer: fine) {
&.unclickable:hover {
background: inherit;
}
}
}
.beta-tag {
background: #36383C;
border-radius: 3px;
@@ -204,73 +117,12 @@
text-transform: uppercase;
}
.overflow-menu-item-icon {
margin-right: 16px;
i {
display: inline;
font-size: 24px;
}
@media (hover: hover) and (pointer: fine) {
i:hover {
background-color: initial;
}
}
img {
max-width: 24px;
max-height: 24px;
}
svg {
fill: #fff;
height: 20px;
width: 20px;
}
}
.overflow-menu-hr {
border-top: 1px solid #4C4D50;
border-bottom: 0;
margin: 8px 0;
}
.toolbox-icon {
display: flex;
border-radius: 3px;
flex-direction: column;
font-size: 24px;
height: $newToolbarSize;
justify-content: center;
width: $newToolbarSize;
@media (hover: hover) and (pointer: fine) {
&:hover {
background: $newToolbarButtonHoverColor;
}
}
@media (max-width: 320px) {
height: 36px;
width: 36px;
}
&.toggled {
background: $newToolbarButtonToggleColor;
}
&.disabled {
cursor: initial !important;
background-color: #36383c !important;
svg {
fill: #929292 !important;
}
}
}
.hangup-button {
background-color: $hangupColor;

View File

@@ -13,9 +13,6 @@ $hangupFontSize: 2em;
*/
// Video layout.
$thumbnailToolbarHeight: 22px;
$thumbnailIndicatorBorder: 2px;
$thumbnailIndicatorSize: $thumbnailToolbarHeight;
$thumbnailVideoMargin: 2px;
$thumbnailsBorder: 2px;
$thumbnailVideoBorder: 2px;
@@ -31,10 +28,6 @@ $defaultSemiDarkColor: #ACACAC;
$defaultDarkColor: #2b3d5c;
$defaultWarningColor: rgb(215, 121, 118);
$participantsPaneBgColor: #141414;
$presence-available: rgb(110, 176, 5);
$presence-away: rgb(250, 201, 20);
$presence-busy: rgb(233, 0, 27);
$presence-idle: rgb(172, 172, 172);
/**
* Toolbar
@@ -56,19 +49,12 @@ $overflowMenuItemBackground: #36383C;
/**
* Video layout
*/
$videoThumbnailHovered: rgba(22, 94, 204, .4);
$videoThumbnailSelected: #165ECC;
$participantNameColor: #fff;
$thumbnailPictogramColor: #fff;
$dominantSpeakerBg: #165ecc;
$raiseHandBg: #D6D61E;
$audioLevelBg: #44A5FF;
$connectionIndicatorBg: #165ecc;
$audioLevelShadow: rgba(9, 36, 77, 0.9);
$videoStateIndicatorColor: $defaultColor;
$videoStateIndicatorBackground: $toolbarBackground;
$videoStateIndicatorSize: 40px;
$remoteVideoMenuIconMargin: initial;
/**
* Feedback Modal
@@ -93,6 +79,8 @@ $modalTextColor: #333;
$chatActionsSeparatorColor: rgb(173, 105, 112);
$chatBackgroundColor: #131519;
$chatInputSeparatorColor: #A4B8D1;
$chatLobbyMessageBackgroundColor: #6A50D3;
$chatLobbyActionsSeparatorColor: #6A50D3;
$chatLocalMessageBackgroundColor: #484A4F;
$chatPrivateMessageBackgroundColor: rgb(153, 69, 77);
$chatRemoteMessageBackgroundColor: #242528;
@@ -102,7 +90,6 @@ $sidebarWidth: 315px;
* Misc.
*/
$borderRadius: 4px;
$popoverMenuPadding: 13px;
$happySoftwareBackground: transparent;
$desktopAppDragBarHeight: 25px;
$scrollHeight: 7px;
@@ -118,11 +105,10 @@ $toolbarBackgroundZ: 4;
$labelsZ: 5;
$subtitlesZ: 7;
$popoverZ: 8;
$zindex10: 10;
$reloadZ: 20;
$poweredByZ: 100;
$ringingZ: 300;
$sideToolbarContainerZ: 200;
$sideToolbarContainerZ: 300;
$toolbarZ: 250;
$drawerZ: 351;
$tooltipsZ: 401;
@@ -269,4 +255,4 @@ $verySmallScreen: 500px;
* Prejoin / premeeting screen
*/
$prejoinDefaultContentWidth: 336px;
$prejoinDefaultContentWidth: 336px;

View File

@@ -1,9 +1,9 @@
.video-preview {
background: none;
display: inline-block;
max-height: 344px;
&-container {
max-height: 344px;
background: $menuBG;
border-radius: 3px;
overflow: auto;

View File

@@ -43,152 +43,7 @@
.videocontainer {
position: relative;
text-align: center;
&__background {
@include topLeft();
background-color: black;
border-radius: $borderRadius;
width: 100%;
height: 100%;
}
/**
* The toolbar of the video thumbnail.
*/
&__toolbar,
&__toptoolbar {
position: absolute;
left: 0;
pointer-events: none;
z-index: $zindex10;
width: 100%;
box-sizing: border-box; // Includes the padding in the 100% width.
/**
* FIXME (lenny): Disabling pointer-events is a pretty big sin that
* sidesteps the problems. There are z-index wars occurring within
* videocontainer and AtlasKit Tooltips rely on their parent z-indexe
* being higher than whatever they need to appear over. So set a higher
* z-index for the tooltip containers but make any empty space not block
* mouse overs for various mouseover triggers.
*/
pointer-events: none;
* {
pointer-events: auto;
}
.indicator-container {
display: inline-block;
float: left;
pointer-events: all;
}
}
&__toolbar {
bottom: 0;
height: $thumbnailToolbarHeight;
padding: 0 5px 0 5px;
}
&__toptoolbar {
$toolbarIconMargin: 5px;
top: 0;
padding-bottom: 0;
/**
* Override text-align center as icons need to be left justified.
*/
text-align: left;
/**
* Intentionally use margin on the icon itself as AtlasKit InlineDialog
* positioning depends on the trigger (indicator icon).
*/
.indicator {
margin-left: 5px;
margin-top: $toolbarIconMargin;
}
.indicator-container:nth-child(1) .indicator {
margin-left: $toolbarIconMargin;
}
.indicator-container {
display: inline-block;
vertical-align: top;
.popover-trigger {
display: inline-block;
}
}
.connection-indicator,
.indicator {
position: relative;
font-size: 8px;
text-align: center;
line-height: $thumbnailIndicatorSize;
padding: 0;
@include circle($thumbnailIndicatorSize);
box-sizing: border-box;
z-index: $zindex3;
background: $dominantSpeakerBg;
color: $thumbnailPictogramColor;
border: $thumbnailIndicatorBorder solid $thumbnailPictogramColor;
.indicatoricon {
@include absoluteAligning();
}
.connection {
position: relative;
display: inline-block;
margin: 0 auto;
left: 0;
@include transform(translate(0, -50%));
&_empty,
&_lost
{
color: #8B8B8B;/*#FFFFFF*/
overflow: hidden;
}
&_full
{
@include topLeft();
color: #FFFFFF;/*#15A1ED*/
overflow: hidden;
}
&_ninja
{
font-size: 1.5em;
}
}
.icon-gsm-bars {
cursor: pointer;
font-size: 1em;
}
}
.hide-connection-indicator {
display: none;
}
}
&__hoverOverlay {
background: rgba(0,0,0,.6);
border-radius: $borderRadius;
position: absolute;
top: 0px;
left: 0px;
width: 100%;
height: 100%;
visibility: hidden;
z-index: $zindex2;
}
overflow: 'hidden';
@media (min-width: 581px) {
&.shift-right {
@@ -223,6 +78,10 @@
#largeVideoContainer {
overflow: hidden;
text-align: center;
&.transition {
transition: width 1s, height 1s, top 1s;
}
}
#largeVideoContainer {
@@ -275,29 +134,6 @@
z-index: $zindex0;
}
/**
* Positions video thumbnail display name and editor.
*/
#alwaysOnTop .displayname,
.videocontainer .displayname,
.videocontainer .editdisplayname {
display: inline-block;
position: absolute;
left: 10%;
width: 80%;
top: 50%;
@include transform(translateY(-40%));
color: $participantNameColor;
text-align: center;
text-overflow: ellipsis;
font-size: 12px;
font-weight: 100;
overflow: hidden;
white-space: nowrap;
line-height: $thumbnailToolbarHeight;
z-index: $zindex2;
}
#alwaysOnTop .displayname {
font-size: 15px;
position: inherit;
@@ -307,141 +143,6 @@
margin-top: 10px;
}
/**
* Positions video thumbnail display name editor.
*/
.videocontainer .editdisplayname {
outline: none;
border: none;
background: none;
box-shadow: none;
padding: 0;
}
#localVideoContainer .displayname:hover {
cursor: text;
}
.videocontainer .displayname {
pointer-events: none;
padding: 0 3px 0 3px;
}
.videocontainer .editdisplayname {
height: auto;
}
#localDisplayName {
pointer-events: auto !important;
}
.videocontainer>a.displayname {
display: inline-block;
position: absolute;
color: #FFFFFF;
bottom: 0;
right: 0;
padding: 3px 5px;
font-size: 9pt;
cursor: pointer;
z-index: $zindex2;
}
/**
* Video thumbnail toolbar icon.
*/
.videocontainer .toolbar-icon {
font-size: 8pt;
text-align: center;
text-shadow: 0px 1px 0px rgba(255,255,255,.3), 0px -1px 0px rgba(0,0,0,.7);
color: #FFFFFF;
width: 12px;
line-height: $thumbnailToolbarHeight;
height: $thumbnailToolbarHeight;
padding: 0;
border: 0;
margin: 0px 5px 0px 0px;
}
/**
* Toolbar icon internal i elements (font icons).
*/
.toolbar-icon>div {
height: $thumbnailToolbarHeight;
display: flex;
flex-direction: column;
justify-content: center;
}
/**
* Toolbar icons positioned on the right.
*/
.moderator-icon {
display: inline-block;
&.right {
float: right;
margin: 0px 0px 0px 5px;
}
.toolbar-icon {
margin: 0;
}
}
.raisehandindicator {
background: $raiseHandBg;
}
.connection-indicator {
background: $connectionIndicatorBg;
&.status-high {
background: green;
}
&.status-med {
background: #FFD740;
}
&.status-lost {
background: gray;
}
&.status-low {
background: #BF2117;
}
&.status-other {
background: $connectionIndicatorBg;
}
}
.local-video-menu-trigger,
.remote-video-menu-trigger,
.localvideomenu,
.remotevideomenu
{
display: inline-block;
position: absolute;
top: 0px;
right: 0;
z-index: $zindex2;
width: 18px;
height: 18px;
color: #FFF;
font-size: 10pt;
margin-right: $remoteVideoMenuIconMargin;
>i{
cursor: hand;
}
}
.local-video-menu-trigger,
.remote-video-menu-trigger {
margin-top: 7px;
}
/**
* Audio indicator on video thumbnails.
*/
@@ -618,74 +319,11 @@
display: none;
}
.display-avatar-with-name {
.avatar-container {
visibility: visible;
}
.displayNameContainer {
visibility: visible;
}
.videocontainer__hoverOverlay {
visibility: visible;
}
video {
visibility: hidden;
}
}
.display-name-on-black {
.avatar-container {
visibility: hidden;
}
.displayNameContainer {
visibility: visible;
}
.videocontainer__hoverOverlay {
visibility: hidden;
}
video {
opacity: 0.2;
visibility: visible;
}
}
.display-video {
.avatar-container {
visibility: hidden;
}
.displayNameContainer {
visibility: hidden;
}
.videocontainer__hoverOverlay {
visibility: hidden;
}
video {
visibility: visible;
}
}
.display-name-on-video {
.avatar-container {
visibility: hidden;
}
.displayNameContainer {
visibility: visible;
}
.videocontainer__hoverOverlay {
visibility: visible;
}
video {
visibility: visible;
}
@@ -696,14 +334,6 @@
visibility: visible;
}
.displayNameContainer {
visibility: hidden;
}
.videocontainer__hoverOverlay {
visibility: hidden;
}
video {
visibility: hidden;
}

View File

@@ -1,68 +0,0 @@
.select2-container.aui-select2-container {
background-color: transparent !important;
margin-top: 2px;
a.select2-choice {
height: 28px !important;
line-height: 18px !important;
width: 100% !important;
background-color: $selectBg !important;
border-color: $selectBg !important;
color: $selectFontColor !important;
text-shadow: none !important;
font-size: 12px !important;
margin: 0 auto !important;
&:after {
border-top-color: $selectFontColor;
}
}
&.select2-dropdown-open{
a.select2-choice {
background-color: $selectActiveBg !important;
border-color: $selectActiveBg !important;
}
}
}
.select2-drop.aui-select2-drop.aui-style-default {
z-index: $dropdownZ;
background-color: $selectActiveBg;
border-color: $selectActiveBg;
.select2-results{
background-color: $selectActiveBg;
border-color: $selectActiveBg;
&::-webkit-scrollbar {
background-color: transparent;
}
&::-webkit-scrollbar-track {
background-color: transparent;
}
&::-webkit-scrollbar-track-piece {
background-color: transparent;
}
&::-webkit-scrollbar-thumb {
background-color: $selectActiveItemBg;
}
.select2-result{
&.select2-highlighted{
background-color: $selectActiveItemBg;
}
.select2-result-label{
font-size: 12px;
color: $selectFontColor !important;
line-height: 20px;
}
}
}
}
.select2-drop-mask {
z-index: $dropdownMaskZ;
}

View File

@@ -1,38 +0,0 @@
.copy-button {
display: flex;
justify-content: space-between;
align-items: center;
padding: 8px 8px 8px 16px;
margin-top: 5px;
width: calc(100% - 24px);
height: 24px;
background: #0376DA;
border-radius: 4px;
cursor: pointer;
&:hover {
background: #278ADF;
font-weight: 600;
}
&-content {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
max-width: 292px;
margin-right: 16px;
&.selected {
font-weight: 600;
}
}
&.clicked {
background: #31B76A;
}
& > div > svg > path {
fill: #fff;
}
}

View File

@@ -1,30 +0,0 @@
.filmstrip__toolbar {
@include flex();
flex-direction: column-reverse;
flex-wrap: nowrap;
position: relative;
width: $filmstripToggleButtonWidth;
button {
font-size: 14px;
line-height: 1.2;
text-align: center;
background: transparent;
opacity: 0.7;
height: auto;
width: 100%;
padding: 0;
margin: 0;
border: none;
-webkit-appearance: none;
&:hover {
opacity: 1;
}
i {
cursor: pointer;
}
}
}

View File

@@ -6,11 +6,8 @@
}
.horizontal-filmstrip .filmstrip {
bottom: 0;
right: 0;
padding: 10px 5px;
@extend %align-right;
transition: bottom .3s;
z-index: $filmstripVideosZ;
box-sizing: border-box;
width: 100%;
@@ -58,11 +55,13 @@
}
&.hidden {
bottom: calc(-196px - #{$newToolbarSizeWithPadding});
bottom: calc(-196px - #{$newToolbarSizeWithPadding} + 50px);
}
}
.remote-videos {
overscroll-behavior: contain;
& > div {
transition: opacity 1s;
position: absolute;

View File

@@ -6,37 +6,10 @@
border-radius: $borderRadius;
margin: 0 $thumbnailVideoMargin;
&.videoContainerFocused, &:hover {
&:hover {
cursor: hand;
}
/**
* Focused video thumbnail.
*/
&.videoContainerFocused {
border: $thumbnailVideoBorder solid $videoThumbnailSelected;
box-shadow: inset 0 0 3px $videoThumbnailSelected,
0 0 3px $videoThumbnailSelected;
}
.remotevideomenu > .icon-menu, .localvideomenu > .icon-menu {
display: none;
}
/**
* Hovered video thumbnail.
*/
&:hover:not(.videoContainerFocused):not(.active-speaker) {
cursor: hand;
border: $thumbnailVideoBorder solid $videoThumbnailHovered;
box-shadow: inset 0 0 3px $videoThumbnailHovered,
0 0 3px $videoThumbnailHovered;
.remotevideomenu > .icon-menu, .localvideomenu > .icon-menu {
display: inline-block;
}
}
& > video {
cursor: hand;
border-radius: $borderRadius;

View File

@@ -2,19 +2,12 @@
* CSS styles that are specific to the filmstrip that shows the thumbnail tiles.
*/
.tile-view {
/**
* Add a border around the active speaker to make the thumbnail easier to
* see.
*/
.active-speaker {
box-shadow: 0px 0px 1px 1.5px black, 0px 0px 1.3px 4px $videoThumbnailSelected;
}
.remote-videos {
align-items: center;
box-sizing: border-box;
display: flex;
flex-direction: column;
overscroll-behavior: contain;
}
.filmstrip__videos .videocontainer {
@@ -80,6 +73,10 @@
display: block;
}
.filmstrip__videos.has-scroll {
padding-left: 7px;
}
.remote-videos {
box-sizing: border-box;
@@ -97,7 +94,6 @@
margin-top: auto;
margin-bottom: auto;
justify-content: center;
position: absolute;
.videocontainer {
border: 0;
@@ -105,19 +101,6 @@
display: block;
margin: 2px;
}
video {
object-fit: contain;
}
/**
* Max-width corresponding to the ASPECT_RATIO_BREAKPOINT from features/filmstrip/constants.
*/
@media only screen and (max-width: 500px) {
video {
object-fit: cover;
}
}
}
}
}
@@ -133,7 +116,3 @@
}
}
}
.indicator-icon-container {
display: inline-block;
}

View File

@@ -17,8 +17,7 @@
#dominantSpeaker,
#filmstripLocalVideoThumbnail,
#largeVideoElementsContainer,
#sharedVideo,
.filmstrip__toolbar {
#sharedVideo {
display: none;
}
@@ -35,16 +34,4 @@
#remotePresenceMessage {
display: none !important;
}
/**
* Thumbnail popover menus can overlap other thumbnails. Setting an auto
* z-index will allow AtlasKit InlineDialog's large z-index to be
* respected and thereby display over elements in other thumbnails,
* specifically the various status icons.
*/
.remotevideomenu,
.localvideomenu,
.videocontainer__toptoolbar {
z-index: auto;
}
}

View File

@@ -28,7 +28,7 @@
flex-direction: column-reverse;
height: 100%;
width: 100%;
padding: ($desktopAppDragBarHeight - 5px) 5px calc(env(safe-area-inset-bottom, 0) + 10px);
padding: 0;
/**
* fixed positioning is necessary for remote menus and tooltips to pop
* out of the scrolling filmstrip. AtlasKit dialogs and tooltips use
@@ -37,10 +37,13 @@
*/
position: fixed;
top: 0;
transition: height .3s ease-in;
right: 0;
z-index: $filmstripVideosZ;
&.no-vertical-padding {
padding: 0;
}
/**
* Hide videos by making them slight to the right.
*/
@@ -52,11 +55,6 @@
right: 0;
width: auto;
&.hidden {
bottom: auto;
right: -196px;
}
/**
* An id selector is used to match id specificity with existing
* filmstrip styles.
@@ -64,8 +62,10 @@
&#remoteVideos {
border: $thumbnailsBorder solid transparent;
padding-left: 0;
transition: right 2s;
border-left: 0;
width: 100%;
height: 100%;
justify-content: center;
}
}
@@ -74,11 +74,12 @@
*/
#filmstripLocalVideo {
align-self: initial;
bottom: 5px;
margin-bottom: 5px;
display: flex;
flex-direction: column-reverse;
height: auto;
justify-content: flex-start;
width: 100%;
#filmstripLocalVideoThumbnail {
width: calc(100% - 15px);
@@ -107,13 +108,41 @@
flex-grow: 1;
}
.resizable-filmstrip #remoteVideos .videocontainer {
border-left: 0;
margin: 0;
}
&.reduce-height {
height: calc(100% - calc(#{$newToolbarSizeWithPadding} + #{$scrollHeight}));
}
.filmstrip__videos.vertical-view-grid#remoteVideos {
align-items: 'center';
border: 0px;
padding-right: 7px;
&.has-scroll {
padding-right: 0px;
}
.remote-videos > div {
left: 0px; // fixes an issue on FF - the div is aligned to the right by default for some reason
}
.videocontainer {
border: 0px;
margin: 2px;
}
}
.remote-videos {
display: flex;
transition: height .3s ease-in;
overscroll-behavior: contain;
&.height-transition {
transition: height .3s ease-in;
}
& > div {
position: absolute;

View File

@@ -1,11 +1,3 @@
/**
* Rotate the hide filmstrip icon so it points towards the right edge
* of the screen.
*/
.vertical-filmstrip .filmstrip__toolbar {
transform: rotate(-90deg);
}
/**
* Overrides for video containers that should not be centered aligned to avoid=
* clashing with the filmstrip.
@@ -19,72 +11,6 @@
* Overrides for small videos in vertical filmstrip mode.
*/
.vertical-filmstrip .filmstrip__videos .videocontainer {
/**
* Move status icons to the bottom right of the thumbnail.
*/
.videocontainer__toolbar {
/**
* FIXME: disable pointer to allow any elements moved below to still
* be clickable. The real fix would to make sure those moved elements
* are actually part of the toolbar instead of positioning being faked.
*/
pointer-events: none;
text-align: right;
> div {
pointer-events: none;
}
.right {
float: none;
margin: auto;
}
.toolbar-icon {
pointer-events: all;
}
}
/**
* Apply hardware acceleration to prevent flickering on scroll. The
* selectors are specific to icon wrappers to prevent fixed position dialogs
* and tooltips from getting a new location context due to translate3d.
*/
.connection-indicator,
.local-video-menu-trigger,
.remote-video-menu-trigger,
.indicator-icon-container {
transform: translate3d(0, 0, 0);
}
.indicator-icon-container {
display: inline-block;
}
.indicator-container {
float: none;
}
/**
* Move the remote video menu trigger to the bottom left of the video
* thumbnail.
*/
.localvideomenu,
.remotevideomenu,
.local-video-menu-trigger,
.remote-video-menu-trigger {
bottom: 0;
left: 0;
top: auto;
right: auto;
}
.local-video-menu-trigger,
.remote-video-menu-trigger {
margin-bottom: 3px;
margin-left: $remoteVideoMenuIconMargin;
}
.self-view-mobile-portrait video {
object-fit: contain;
}

View File

@@ -24,8 +24,7 @@ $flagsImagePath: "../images/";
/* Flags END */
/* Modules BEGIN */
@import 'aui_reset';
@import 'reset';
@import 'atlaskit_overrides';
@import 'base';
@import 'utils';
@@ -33,7 +32,6 @@ $flagsImagePath: "../images/";
@import 'inlay';
@import 'reload_overlay/reload_overlay';
@import 'mini_toolbox';
@import 'buttons/copy.scss';
@import 'modals/desktop-picker/desktop-picker';
@import 'modals/device-selection/device-selection';
@import 'modals/dialog';
@@ -43,8 +41,6 @@ $flagsImagePath: "../images/";
@import 'modals/settings/settings';
@import 'modals/screen-share/share-audio';
@import 'modals/screen-share/share-screen-warning';
@import 'modals/speaker_stats/speaker_stats';
@import 'modals/video-quality/video-quality';
@import 'modals/virtual-background/virtual-background';
@import 'modals/local-recording/local-recording';
@import 'videolayout_default';
@@ -59,7 +55,6 @@ $flagsImagePath: "../images/";
@import 'welcome_page_content';
@import 'welcome_page_settings_toolbar';
@import 'toolbars';
@import 'keyboard-shortcuts';
@import 'redirect_page';
@import 'components/form-control';
@import 'components/link';
@@ -67,18 +62,15 @@ $flagsImagePath: "../images/";
@import 'components/input-control';
@import 'components/input-slider';
@import "connection-info";
@import 'aui-components/dropdown';
@import '404';
@import 'policy';
@import 'popover';
@import 'filmstrip/filmstrip_toolbar';
@import 'filmstrip/horizontal_filmstrip';
@import 'filmstrip/small_video';
@import 'filmstrip/tile_view';
@import 'filmstrip/tile_view_overrides';
@import 'filmstrip/vertical_filmstrip';
@import 'filmstrip/vertical_filmstrip_overrides';
@import 'labels';
@import 'unsupported-browser/main';
@import 'modals/invite/add-people';
@import 'deep-linking/main';
@@ -87,7 +79,6 @@ $flagsImagePath: "../images/";
@import 'navigate_section_list';
@import 'third-party-branding/google';
@import 'third-party-branding/microsoft';
@import 'avatar';
@import 'promotional-footer';
@import 'chrome-extension-banner';
@import 'settings-button';
@@ -106,5 +97,6 @@ $flagsImagePath: "../images/";
@import 'reactions-menu';
@import 'plan-limit';
@import 'polls';
@import 'notifications';
/* Modules END */

View File

@@ -1,114 +1,3 @@
.dialog {
box-sizing: border-box;
height: auto;
min-height: 131px;
overflow: visible;
visibility: visible;
width: 400px;
h1, h2, h3, h4, h5, h6 {
color: $auiDialogColor;
}
.aui {
&-dialog2 {
&-header, &-footer {
background-color: $auiDialogBg;
border: none;
}
&-header {
border-bottom: 1px solid $auiBorderColor;
border-radius: 5px 5px 0 0;
box-sizing: border-box;
color: #333;
display: table;
font-weight: normal;
height: em(58, 12);
margin-top: -69px;
padding: 0 20px;
width: 100%;
h2 {
font-size: em(20, 12);
font-weight: $dialogTitleFontWeight;
color: $auiDialogColor;
}
&-main {
display: table-cell;
padding-right: 0;
max-width: 400px;
overflow: hidden;
text-overflow: ellipsis;
vertical-align: middle;
white-space: nowrap;
}
}
&-footer {
border-top: 1px solid $auiBorderColor;
border-radius: 0 0 5px 5px;
box-sizing: border-box;
height: 51px;
overflow: hidden;
padding: 10px 20px;
width: 100%;
&:empty {
height: 5px;
padding: 0;
}
}
&-content {
background-color: $auiDialogBg;
box-sizing: border-box;
color: $auiDialogColor;
font-size: em(14, 12);
overflow: auto;
max-height: 100%;
padding: 20px;
p,span, h3 {
font-weight: $labelFontWeight;
}
&:last-child {
border-bottom-right-radius: 5px;
border-bottom-left-radius: 5px;
}
&:first-child {
border-top-right-radius: 5px;
border-top-left-radius: 5px;
}
}
}
&-hide {
display: none;
}
}
.input-control {
background-color: $auiDialogContentBg;
color: $auiDialogColor;
}
.form-control:not(:last-child) {
border-bottom: 1px solid $auiBorderColor;
}
}
@media all and (max-width: 420px) {
.aui-dialog2-small .aui-dialog2-content {
height: 100%;
}
}
.modal-dialog-form {
margin-top: 5px !important;
@@ -122,9 +11,6 @@
margin-bottom: 8px;
}
}
.modal-dialog-footer {
font-size: $modalButtonFontSize;
}
/**
* Styling inline dialog errors.
@@ -143,3 +29,12 @@
margin: 16px auto 0 auto;
}
}
/**
* Styling shared video dialog errors.
*/
.shared-video-dialog-error {
color: #E04757;
margin-top: 2px;
display: block;
}

View File

@@ -48,7 +48,7 @@
}
.profile-edit-field {
flex: 1;
flex: .5;
}
.settings-sub-pane {
flex: 1;
@@ -65,6 +65,11 @@
text-align: left;
flex: 1;
}
.moderator-settings-wrapper {
padding-top: 20px;
}
.profile-edit-field {
margin-right: 20px;
}

View File

@@ -1,51 +0,0 @@
.speaker-stats {
list-style: none;
padding: 0;
width: 100%;
font-weight: 500;
.speaker-stats-item__status-dot {
position: relative;
display: block;
width: 9px;
height: 9px;
border-radius: 50%;
margin: 0 auto;
&.status-active {
background: green;
}
&.status-inactive {
background: gray;
}
}
.status-user-left {
color: $placeHolderColor;
}
.speaker-stats-item__status,
.speaker-stats-item__name,
.speaker-stats-item__time {
display: inline-block;
margin: 5px 0;
vertical-align: middle;
}
.speaker-stats-item__status {
width: 5%;
}
.speaker-stats-item__name {
width: 40%;
}
.speaker-stats-item__time {
width: 55%;
}
.speaker-stats-item__name,
.speaker-stats-item__time {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}

View File

@@ -1,114 +0,0 @@
.video-quality-dialog {
.video-quality-dialog-title {
margin-bottom: 10px;
}
.video-quality-dialog-contents {
align-items: center;
display: flex;
flex-direction: column;
padding: 10px;
min-width: 250px;
.video-quality-dialog-slider-container {
width: 100%;
text-align: center;
}
.video-quality-dialog-slider {
width: calc(100% - 5px);
@mixin sliderTrackStyles() {
height: 15px;
border-radius: 10px;
background: rgb(14, 22, 36);
}
&::-ms-track {
@include sliderTrackStyles();
}
&::-moz-range-track {
@include sliderTrackStyles();
}
&::-webkit-slider-runnable-track {
@include sliderTrackStyles();
}
@mixin sliderThumbStyles() {
top: 50%;
border: none;
position: relative;
opacity: 0;
}
&::-ms-thumb {
@include sliderThumbStyles();
}
&::-moz-range-thumb {
@include sliderThumbStyles();
}
&::-webkit-slider-thumb {
@include sliderThumbStyles();
}
}
.video-quality-dialog-labels {
box-sizing: border-box;
display: flex;
margin-top: 5px;
position: relative;
width: 90%;
}
.video-quality-dialog-label-container {
position: absolute;
text-align: center;
transform: translate(-50%, 0%);
&::before {
content: '';
border-radius: 50%;
left: 0;
height: 6px;
margin: 0 auto;
pointer-events: none;
position: absolute;
right: 0;
top: -16px;
width: 6px;
}
}
.video-quality-dialog-label-container.active {
color: $videoQualityActive;
font-weight: bold;
&::before {
background: $videoQualityActive;
height: 12px;
top: -19px;
width: 12px;
}
}
.video-quality-dialog-label-container:first-child {
position: relative;
}
.video-quality-dialog-label {
display: table-caption;
word-spacing: unset;
}
}
}
.modal-dialog-form {
.video-quality-dialog-title {
display: none;
}
}

View File

@@ -201,3 +201,7 @@
top: 40%;
left: 45%;
}
.dialog-margin-top{
margin-top: 44px;
}

View File

@@ -1,71 +0,0 @@
.con-status {
border-radius: 6px;
color: #fff;
font-size: 12px;
letter-spacing: 0.16px;
line-height: 16px;
position: absolute;
width: 100%;
&-header {
background-color: rgba(0, 0, 0, 0.7);
align-items: center;
display: flex;
padding: 14px 16px;
}
&-circle {
border-radius: 50%;
display: inline-block;
padding: 4px;
margin-right: 16px;
}
&--good {
background: #31B76A;
}
&--poor {
background: #E12D2D;
}
&--non-optimal {
background: #E39623;
}
&-arrow {
margin-left: auto;
transition: background-color 0.16s ease-out;
&--up {
transform: rotate(180deg);
}
&>svg {
cursor: pointer;
}
&:hover {
background-color: rgba(1,1,1, 0.1);
}
}
&-text {
text-align: center;
}
&-details {
background-color: rgba(0, 0, 0, 0.7);
border-top: 1px solid #5E6D7A;
padding: 16px;
transition: opacity 0.16s ease-out;
&-visible {
opacity: 1;
}
&-hidden {
opacity: 0;
}
}
}

View File

@@ -1,38 +0,0 @@
.device {
&-status {
align-items: center;
color: #fff;
display: flex;
font-size: 14px;
line-height: 20px;
padding: 6px;
text-align: center;
&-error {
align-items: flex-start;
background-color: #F8AE1A;
border-radius: 6px;
color: #040404;
padding: 12px 16px;
text-align: left;
}
span {
margin-left: 16px;
}
}
&-icon {
background-position: center;
background-repeat: no-repeat;
display: inline-block;
height: 16px;
width: 16px;
&--ok {
svg path {
fill: #189b55;
}
}
}
}

View File

@@ -12,11 +12,29 @@
margin: 8px;
}
.lobby-chat-container {
background-color: $chatBackgroundColor;
width: 100%;
height: 314px;
display: flex;
flex-direction: column;
align-items: stretch;
margin-bottom: 16px;
border-radius: 5px;
.lobby-chat-header {
display: none;
}
}
.joining-message {
color: white;
margin: 24px auto;
text-align: center;
}
.open-chat-button {
display: none;
}
}
}
@@ -63,6 +81,10 @@
top: 120px;
}
&.avoid-chat {
left: 315px;
}
.title {
background-color: rgba(0, 0, 0, .2);
font-size: 1.2em;
@@ -143,3 +165,42 @@
}
}
}
@media (max-width: 1000px) {
.lobby-screen-content {
.lobby-chat-container {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 255;
&.hidden {
display: none;
}
.lobby-chat-header {
display: flex;
flex-direction: row;
padding-top: 20px;
padding-left: 16px;
padding-right: 16px;
.title {
flex: 1;
color: #fff;
font-size: 20px;
font-weight: 600;
line-height: 28px;
letter-spacing: -1.2%;
}
}
}
.open-chat-button {
display: block;
}
}
}

View File

@@ -1,5 +1,3 @@
@import 'connection-status';
@import 'device-status';
@import 'lobby';
@import 'premeeting-screens';
@import 'prejoin';

View File

@@ -116,72 +116,3 @@
margin: 8px 0 16px 0;
}
}
.prejoin-dialog-dialin {
text-align: center;
&-header {
align-items: center;
margin: 16px 0 32px 16px;
display: flex;
}
&-icon {
margin-right: 16px;
}
&-num {
background: #3e474f;
border-radius: 4px;
display: inline-block;
font-size: 15px;
line-height: 24px;
margin: 4px;
padding: 8px;
&-container {
min-height: 48px;
margin: 8px 0;
}
}
&-link {
color: #6FB1EA;
cursor: pointer;
display: inline-block;
font-size: 13px;
line-height: 20px;
margin-bottom: 24px;
}
&-spaced-label {
margin-bottom: 16px;
margin-top: 28px;
}
&-btns {
&> div {
margin-bottom: 16px;
}
}
}
.prejoin-dialog-calling {
padding: 16px;
text-align: center;
&-header {
text-align: right;
}
&-label {
font-size: 15px;
margin: 8px 0 16px 0;
}
&-number {
font-size: 19px;
line-height: 28px;
margin: 16px 0;
}
}

View File

@@ -21,31 +21,6 @@
.prejoin-preview {
&-dropdown-btns {
padding: 8px 0;
width: calc(100% - 48px);
}
&-dropdown-btn {
align-items: center;
color: #1C2025;
cursor: pointer;
display: flex;
height: 40px;
font-size: 15px;
line-height: 24px;
padding: 0 16px;
&:hover {
background-color: #DAEBFA;
}
}
&-dropdown-icon {
display: inline-block;
margin-right: 16px;
& > svg {
fill: #1C2025;
}
}
&-dropdown-container {
@@ -59,8 +34,6 @@
background: #fff;
padding: 0;
position: absolute !important;
top: 48px !important;
transform: none !important;
width: 100%;
}
}

View File

@@ -7,7 +7,7 @@
position: absolute;
right: 0;
top: 0;
z-index: $toolbarZ + 1;
z-index: $toolbarZ + 2;
.action-btn {
border-radius: 6px;
@@ -82,7 +82,7 @@
flex-direction: column;
flex-shrink: 0;
height: 100%;
margin: 0 110px;
margin: 0 30px;
padding: 24px 0 16px;
position: relative;
width: $prejoinDefaultContentWidth;
@@ -138,7 +138,6 @@
.toolbox-content-items {
background: transparent;
border-radius: 0;
box-shadow: none;
display: flex;
justify-content: space-evenly;
@@ -155,19 +154,19 @@
}
}
@media (max-width: 1000px) {
@media (max-width: 720px) {
flex-direction: column-reverse;
.content {
height: auto;
margin: 0 auto;
}
}
.con-status {
margin: 24px auto;
position: fixed;
top: 0;
width: $prejoinDefaultContentWidth;
// mobile phone landscape
@media (max-height: 420px) {
div.content {
padding: 16px 16px 0 16px;
}
}
@@ -188,11 +187,6 @@
}
}
.con-status {
margin: 0;
width: 100%;
}
.device-status-error {
border-radius: 0;
margin: 0 -16px;
@@ -226,8 +220,6 @@
.avatar {
text {
fill: white;
font-size: 26px;
font-weight: 400;
}
}

View File

@@ -46,11 +46,6 @@ $reloadProgressBarBg: #0074E0;
/**
* Dialog colors
**/
$auiDialogColor: #eceef1;
$auiDialogBg: #253858;
$auiDialogContentBg: #344563;
$auiBorderColor: #253858;
$dialogTitleFontWeight: 400;
$dialogErrorText: #344563;
/**
@@ -75,11 +70,7 @@ $errorColor: #c61600;
$feedbackCancelFontColor: #333;
// Popover colors
$popoverBg: initial;
$popoverFontColor: #ffffff !important;
$popupMenuColor: #ffffff !important;
$popupMenuHoverColor: #ffffff !important;
$popupMenuHoverBackground: rgba(255, 255, 255, 0.1);
$popupSliderColor: #0376da;
// Toolbar

View File

@@ -130,6 +130,8 @@ case "$1" in
echo -e " storage = \"memory\"" >> $PROSODY_HOST_CONFIG
echo -e " modules_enabled = { \"ping\"; }" >> $PROSODY_HOST_CONFIG
echo -e " admins = { \"$JICOFO_AUTH_USER@$JICOFO_AUTH_DOMAIN\", \"jvb@$JICOFO_AUTH_DOMAIN\" }" >> $PROSODY_HOST_CONFIG
echo -e " muc_room_locking = false" >> $PROSODY_HOST_CONFIG
echo -e " muc_room_default_public_jids = true" >> $PROSODY_HOST_CONFIG
fi
# Convert the old focus component config to the new one.
@@ -202,6 +204,8 @@ case "$1" in
fi
fi
CERT_ADDED_TO_TRUST="false"
if [ ! -f /var/lib/prosody/$JICOFO_AUTH_DOMAIN.crt ]; then
# prosodyctl takes care for the permissions
# echo for using all default values
@@ -218,6 +222,8 @@ case "$1" in
# store not get re-generated with latest changes
update-ca-certificates -f
CERT_ADDED_TO_TRUST="true"
# don't fail on systems with custom config ($PROSODY_HOST_CONFIG is missing)
if [ -f $PROSODY_HOST_CONFIG ]; then
# now let's add the ssl cert for the auth. domain (we use # as a sed delimiter cause filepaths are confused with default / delimiter)
@@ -230,6 +236,11 @@ case "$1" in
if [ "$PROSODY_CONFIG_PRESENT" = "false" ]; then
invoke-rc.d prosody restart || true
# In case we had updated the certificates and restarted prosody, let's restart and the bridge if possible
if [ -d /run/systemd/system ] && [ "$CERT_ADDED_TO_TRUST" = "true" ]; then
systemctl restart jitsi-videobridge2.service >/dev/null || true
fi
fi
;;

View File

@@ -61,7 +61,7 @@ case "$1" in
sed -i '/^\s*--\s*"token_verification"/ s/--\s*//' $PROSODY_HOST_CONFIG
# Install luajwt
if ! luarocks install luajwtjitsi; then
if ! luarocks install luajwtjitsi 2.0-0; then
echo "Failed to install luajwtjitsi - try installing it manually"
fi

View File

@@ -52,10 +52,12 @@ VirtualHost "jitmeet.example.com"
"external_services";
"conference_duration";
"muc_lobby_rooms";
"muc_breakout_rooms";
"av_moderation";
}
c2s_require_encryption = false
lobby_muc = "lobby.jitmeet.example.com"
breakout_rooms_muc = "breakout.jitmeet.example.com"
main_muc = "conference.jitmeet.example.com"
-- muc_lobby_whitelist = { "recorder.jitmeet.example.com" } -- Here we can whitelist jibri to enter lobby enabled rooms
@@ -67,6 +69,21 @@ Component "conference.jitmeet.example.com" "muc"
"muc_domain_mapper";
"polls";
--"token_verification";
"muc_rate_limit";
}
admins = { "focusUser@auth.jitmeet.example.com" }
muc_room_locking = false
muc_room_default_public_jids = true
Component "breakout.jitmeet.example.com" "muc"
restrict_room_creation = true
storage = "memory"
modules_enabled = {
"muc_meeting_id";
"muc_domain_mapper";
--"token_verification";
"muc_rate_limit";
"polls";
}
admins = { "focusUser@auth.jitmeet.example.com" }
muc_room_locking = false
@@ -106,3 +123,7 @@ Component "lobby.jitmeet.example.com" "muc"
restrict_room_creation = true
muc_room_locking = false
muc_room_default_public_jids = true
modules_enabled = {
"muc_rate_limit";
"polls";
}

View File

@@ -32,4 +32,12 @@ denied-peer-ip=198.18.0.0-198.19.255.255
denied-peer-ip=198.51.100.0-198.51.100.255
denied-peer-ip=203.0.113.0-203.0.113.255
denied-peer-ip=240.0.0.0-255.255.255.255
denied-peer-ip=::1
denied-peer-ip=64:ff9b::-64:ff9b::ffff:ffff
denied-peer-ip=::ffff:0.0.0.0-::ffff:255.255.255.255
denied-peer-ip=100::-100::ffff:ffff:ffff:ffff
denied-peer-ip=2001::-2001:1ff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=2002::-2002:ffff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=fc00::-fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=fe80::-febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff
syslog

View File

@@ -1,8 +0,0 @@
var config = {
hosts: {
domain: 'jitsi.example.com',
muc: 'conference.jitsi.example.com', // FIXME: use XEP-0030
bridge: 'jitsi-videobridge.jitsi.example.com' // FIXME: use XEP-0030
},
bosh: '//jitsi.example.com/http-bind' // FIXME: use xep-0156 for that
};

View File

@@ -1,39 +0,0 @@
server {
listen 80;
server_name jitsi.example.com;
# set the root
root /srv/jitsi.example.com;
index index.html;
location ~ ^/([a-zA-Z0-9=\?]+)$ {
rewrite ^/(.*)$ / break;
}
location / {
ssi on;
}
gzip on;
gzip_types text/plain text/css application/javascript application/json image/x-icon application/octet-stream application/wasm;
gzip_vary on;
gzip_proxied no-cache no-store private expired auth;
gzip_min_length 512;
# BOSH
location /http-bind {
proxy_pass http://localhost:5280/http-bind;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
}
# xmpp websockets
location /xmpp-websocket {
proxy_pass http://localhost:5280/xmpp-websocket;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
tcp_nodelay on;
}
}

View File

@@ -1,14 +0,0 @@
var subdomain = "<!--# echo var="subdomain" default="" -->";
if (subdomain) {
subdomain = subdomain.substr(0,subdomain.length-1).split('.').join('_').toLowerCase() + '.';
}
var config = {
hosts: {
domain: 'jitsi.example.com',
muc: 'conference.'+subdomain+'jitsi.example.com', // FIXME: use XEP-0030
focus: 'focus.jitsi.example.com',
},
bosh: '//jitsi.example.com/http-bind', // FIXME: use xep-0156 for that
websocket: 'wss://jitsi.example.com/xmpp-websocket'
};

View File

@@ -1,76 +0,0 @@
server {
listen 80;
server_name jitsi.example.com;
# set the root
root /srv/jitsi.example.com;
# ssi on with javascript for multidomain variables in config.js
ssi on;
ssi_types application/x-javascript application/javascript;
index index.html;
set $prefix "";
# BOSH
location /http-bind {
proxy_pass http://localhost:5280/http-bind;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
}
# xmpp websockets
location /xmpp-websocket {
proxy_pass http://localhost:5280/xmpp-websocket;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
tcp_nodelay on;
}
gzip on;
gzip_types text/plain text/css application/javascript application/json image/x-icon application/octet-stream application/wasm;
gzip_vary on;
gzip_proxied no-cache no-store private expired auth;
gzip_min_length 512;
location ~ ^/([^/?&:'"]+)$ {
try_files $uri @root_path;
}
location @root_path {
rewrite ^/(.*)$ / break;
}
location ~ ^/([^/?&:'"]+)/config.js$
{
set $subdomain "$1.";
set $subdir "$1/";
alias /etc/jitsi/meet/{{jitsi_meet_domain_name}}-config.js;
}
# Anything that didn't match above, and isn't a real file, assume it's a room name and redirect to /
location ~ ^/([^/?&:'"]+)/(.*)$ {
set $subdomain "$1.";
set $subdir "$1/";
rewrite ^/([^/?&:'"]+)/(.*)$ /$2;
}
# BOSH for subdomains
location ~ ^/([^/?&:'"]+)/http-bind {
set $subdomain "$1.";
set $subdir "$1/";
set $prefix "$1";
rewrite ^/(.*)$ /http-bind;
}
# websockets for subdomains
location ~ ^/([^/?&:'"]+)/xmpp-websocket {
set $subdomain "$1.";
set $subdir "$1/";
set $prefix "$1";
rewrite ^/(.*)$ /xmpp-websocket;
}
}

View File

@@ -1,218 +0,0 @@
-- Prosody XMPP Server Configuration
--
-- Information on configuring Prosody can be found on our
-- website at http://prosody.im/doc/configure
--
-- Tip: You can check that the syntax of this file is correct
-- when you have finished by running: prosodyctl check config
-- If there are any errors, it will let you know what and where
-- they are, otherwise it will keep quiet.
--
-- Good luck, and happy Jabbering!
---------- Server-wide settings ----------
-- Settings in this section apply to the whole server and are the default settings
-- for any virtual hosts
-- This is a (by default, empty) list of accounts that are admins
-- for the server. Note that you must create the accounts separately
-- (see http://prosody.im/doc/creating_accounts for info)
-- Example: admins = { "user1@example.com", "user2@example.net" }
admins = { }
daemonize = true
cross_domain_bosh = true;
component_ports = { 5347 }
--component_interface = "192.168.0.10"
-- Enable use of libevent for better performance under high load
-- For more information see: http://prosody.im/doc/libevent
--use_libevent = true
-- This is the list of modules Prosody will load on startup.
-- It looks for mod_modulename.lua in the plugins folder, so make sure that exists too.
-- Documentation on modules can be found at: http://prosody.im/doc/modules
modules_enabled = {
-- Generally required
"roster"; -- Allow users to have a roster. Recommended ;)
"saslauth"; -- Authentication for clients and servers. Recommended if you want to log in.
"tls"; -- Add support for secure TLS on c2s/s2s connections
"dialback"; -- s2s dialback support
"disco"; -- Service discovery
"posix"; -- POSIX functionality, sends server to background, enables syslog, etc.
-- Not essential, but recommended
"private"; -- Private XML storage (for room bookmarks, etc.)
"vcard"; -- Allow users to set vCards
-- These are commented by default as they have a performance impact
--"privacy"; -- Support privacy lists
"compression"; -- Stream compression (requires the lua-zlib package installed)
-- Nice to have
"version"; -- Replies to server version requests
"uptime"; -- Report how long server has been running
"time"; -- Let others know the time here on this server
"ping"; -- Replies to XMPP pings with pongs
"pep"; -- Enables users to publish their mood, activity, playing music and more
"register"; -- Allow users to register on this server using a client and change passwords
-- Admin interfaces
"admin_adhoc"; -- Allows administration via an XMPP client that supports ad-hoc commands
--"admin_telnet"; -- Opens telnet console interface on localhost port 5582
-- HTTP modules
"bosh"; -- Enable BOSH clients, aka "Jabber over HTTP"
--"http_files"; -- Serve static files from a directory over HTTP
-- Other specific functionality
--"groups"; -- Shared roster support
--"announce"; -- Send announcement to all online users
--"welcome"; -- Welcome users who register accounts
--"watchregistrations"; -- Alert admins of registrations
--"motd"; -- Send a message to users when they log in
--"legacyauth"; -- Legacy authentication. Only used by some old clients and bots.
-- jitsi
"smacks";
"carbons";
"mam";
"lastactivity";
"offline";
"pubsub";
"adhoc";
"websocket";
"http_altconnect";
}
-- domain mapper options, must at least have domain base set to use the mapper
muc_mapper_domain_base = "jitsi.example.com";
-- These modules are auto-loaded, but should you want
-- to disable them then uncomment them here:
modules_disabled = {
--"offline"; -- Store offline messages
--"c2s"; -- Handle client connections
--"s2s"; -- Handle server-to-server connections
}
-- Disable account creation by default, for security
-- For more information see http://prosody.im/doc/creating_accounts
allow_registration = false
-- These are the SSL/TLS-related settings. If you don't want
-- to use SSL/TLS, you may comment or remove this
ssl = {
key = "/etc/prosody/certs/localhost.key";
certificate = "/etc/prosody/certs/localhost.crt";
}
-- Force clients to use encrypted connections? This option will
-- prevent clients from authenticating unless they are using encryption.
--c2s_require_encryption = true
-- Force certificate authentication for server-to-server connections?
-- This provides ideal security, but requires servers you communicate
-- with to support encryption AND present valid, trusted certificates.
-- NOTE: Your version of LuaSec must support certificate verification!
-- For more information see http://prosody.im/doc/s2s#security
--s2s_secure_auth = false
-- Many servers don't support encryption or have invalid or self-signed
-- certificates. You can list domains here that will not be required to
-- authenticate using certificates. They will be authenticated using DNS.
--s2s_insecure_domains = { "gmail.com" }
-- Even if you leave s2s_secure_auth disabled, you can still require valid
-- certificates for some domains by specifying a list here.
--s2s_secure_domains = { "jabber.org" }
-- Required for init scripts and prosodyctl
pidfile = "/var/run/prosody/prosody.pid"
-- Select the authentication backend to use. The 'internal' providers
-- use Prosody's configured data storage to store the authentication data.
-- To allow Prosody to offer secure authentication mechanisms to clients, the
-- default provider stores passwords in plaintext. If you do not trust your
-- server please see http://prosody.im/doc/modules/mod_auth_internal_hashed
-- for information about using the hashed backend.
authentication = "internal_hashed"
-- Select the storage backend to use. By default Prosody uses flat files
-- in its configured data directory, but it also supports more backends
-- through modules. An "sql" backend is included by default, but requires
-- additional dependencies. See http://prosody.im/doc/storage for more info.
--storage = "sql" -- Default is "internal"
-- For the "sql" backend, you can uncomment *one* of the below to configure:
--sql = { driver = "SQLite3", database = "prosody.sqlite" } -- Default. 'database' is the filename.
--sql = { driver = "MySQL", database = "prosody", username = "prosody", password = "secret", host = "localhost" }
--sql = { driver = "PostgreSQL", database = "prosody", username = "prosody", password = "secret", host = "localhost" }
-- Logging configuration
-- For advanced logging see http://prosody.im/doc/logging
log = {
info = "/var/log/prosody/prosody.log"; -- Change 'info' to 'debug' for verbose logging
error = "/var/log/prosody/prosody.err";
"*syslog";
}
----------- Virtual hosts -----------
-- You need to add a VirtualHost entry for each domain you wish Prosody to serve.
-- Settings under each VirtualHost entry apply *only* to that host.
--VirtualHost "localhost"
VirtualHost "jitsi.example.com"
-- enabled = false -- Remove this line to enable this host
authentication = "anonymous"
-- Assign this host a certificate for TLS, otherwise it would use the one
-- set in the global section (if any).
-- Note that old-style SSL on port 5223 only supports one certificate, and will always
-- use the global one.
ssl = {
key = "/var/lib/prosody/jitsi.example.com.key";
certificate = "/var/lib/prosody/jitsi.example.com.crt";
}
c2s_require_encryption = false
VirtualHost "auth.jitsi.example.com"
ssl = {
key = "/var/lib/prosody/auth.jitsi.example.com.key";
certificate = "/var/lib/prosody/auth.jitsi.example.com.crt";
}
authentication = "internal_hashed"
------ Components ------
-- You can specify components to add hosts that provide special services,
-- like multi-user conferences, and transports.
-- For more information on components, see http://prosody.im/doc/components
---Set up a MUC (multi-user chat) room server on conference.example.com:
--Component "conference.example.com" "muc"
-- Set up a SOCKS5 bytestream proxy for server-proxied file transfers:
--Component "proxy.example.com" "proxy65"
---Set up an external component (default component port is 5347)
--
-- External components allow adding various services, such as gateways/
-- transports to other networks like ICQ, MSN and Yahoo. For more info
-- see: http://prosody.im/doc/components#adding_an_external_component
--
--Component "gateway.example.com"
-- component_secret = "password"
Component "conference.jitsi.example.com" "muc"
modules_enabled = { "muc_domain_mapper" }
Component "jitsi-videobridge.jitsi.example.com"
component_secret = "IfGaish6"

View File

@@ -1,54 +0,0 @@
user www-data;
worker_processes 1;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
# multi_accept on;
}
http {
include /etc/nginx/mime.types;
access_log /var/log/nginx/access.log;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
tcp_nodelay on;
tcp_nopush on;
types_hash_max_size 2048;
server_names_hash_bucket_size 64;
gzip on;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
# mail {
# # See sample authentication script at:
# # http://wiki.nginx.org/NginxImapAuthenticateWithApachePhpScript
#
# # auth_http localhost/auth.php;
# # pop3_capabilities "TOP" "USER";
# # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
# server {
# listen localhost:110;
# protocol pop3;
# proxy on;
# }
#
# server {
# listen localhost:143;
# protocol imap;
# proxy on;
# }
# }

View File

@@ -1,214 +0,0 @@
-- Prosody XMPP Server Configuration
--
-- Information on configuring Prosody can be found on our
-- website at http://prosody.im/doc/configure
--
-- Tip: You can check that the syntax of this file is correct
-- when you have finished by running: prosodyctl check config
-- If there are any errors, it will let you know what and where
-- they are, otherwise it will keep quiet.
--
-- Good luck, and happy Jabbering!
---------- Server-wide settings ----------
-- Settings in this section apply to the whole server and are the default settings
-- for any virtual hosts
-- This is a (by default, empty) list of accounts that are admins
-- for the server. Note that you must create the accounts separately
-- (see http://prosody.im/doc/creating_accounts for info)
-- Example: admins = { "user1@example.com", "user2@example.net" }
admins = { }
daemonize = true
cross_domain_bosh = true;
component_ports = { 5347 }
--component_interface = "192.168.0.10"
-- Enable use of libevent for better performance under high load
-- For more information see: http://prosody.im/doc/libevent
--use_libevent = true
-- This is the list of modules Prosody will load on startup.
-- It looks for mod_modulename.lua in the plugins folder, so make sure that exists too.
-- Documentation on modules can be found at: http://prosody.im/doc/modules
modules_enabled = {
-- Generally required
"roster"; -- Allow users to have a roster. Recommended ;)
"saslauth"; -- Authentication for clients and servers. Recommended if you want to log in.
"tls"; -- Add support for secure TLS on c2s/s2s connections
"dialback"; -- s2s dialback support
"disco"; -- Service discovery
"posix"; -- POSIX functionality, sends server to background, enables syslog, etc.
-- Not essential, but recommended
"private"; -- Private XML storage (for room bookmarks, etc.)
"vcard"; -- Allow users to set vCards
-- These are commented by default as they have a performance impact
--"privacy"; -- Support privacy lists
"compression"; -- Stream compression (requires the lua-zlib package installed)
-- Nice to have
"version"; -- Replies to server version requests
"uptime"; -- Report how long server has been running
"time"; -- Let others know the time here on this server
"ping"; -- Replies to XMPP pings with pongs
"pep"; -- Enables users to publish their mood, activity, playing music and more
"register"; -- Allow users to register on this server using a client and change passwords
-- Admin interfaces
"admin_adhoc"; -- Allows administration via an XMPP client that supports ad-hoc commands
--"admin_telnet"; -- Opens telnet console interface on localhost port 5582
-- HTTP modules
"bosh"; -- Enable BOSH clients, aka "Jabber over HTTP"
--"http_files"; -- Serve static files from a directory over HTTP
-- Other specific functionality
--"groups"; -- Shared roster support
--"announce"; -- Send announcement to all online users
--"welcome"; -- Welcome users who register accounts
--"watchregistrations"; -- Alert admins of registrations
--"motd"; -- Send a message to users when they log in
--"legacyauth"; -- Legacy authentication. Only used by some old clients and bots.
-- jitsi
"smacks";
"carbons";
"mam";
"lastactivity";
"offline";
"pubsub";
"adhoc";
"websocket";
"http_altconnect";
}
-- These modules are auto-loaded, but should you want
-- to disable them then uncomment them here:
modules_disabled = {
--"offline"; -- Store offline messages
--"c2s"; -- Handle client connections
--"s2s"; -- Handle server-to-server connections
}
-- Disable account creation by default, for security
-- For more information see http://prosody.im/doc/creating_accounts
allow_registration = false
-- These are the SSL/TLS-related settings. If you don't want
-- to use SSL/TLS, you may comment or remove this
ssl = {
key = "/etc/prosody/certs/localhost.key";
certificate = "/etc/prosody/certs/localhost.crt";
}
-- Force clients to use encrypted connections? This option will
-- prevent clients from authenticating unless they are using encryption.
--c2s_require_encryption = true
-- Force certificate authentication for server-to-server connections?
-- This provides ideal security, but requires servers you communicate
-- with to support encryption AND present valid, trusted certificates.
-- NOTE: Your version of LuaSec must support certificate verification!
-- For more information see http://prosody.im/doc/s2s#security
--s2s_secure_auth = false
-- Many servers don't support encryption or have invalid or self-signed
-- certificates. You can list domains here that will not be required to
-- authenticate using certificates. They will be authenticated using DNS.
--s2s_insecure_domains = { "gmail.com" }
-- Even if you leave s2s_secure_auth disabled, you can still require valid
-- certificates for some domains by specifying a list here.
--s2s_secure_domains = { "jabber.org" }
-- Required for init scripts and prosodyctl
pidfile = "/var/run/prosody/prosody.pid"
-- Select the authentication backend to use. The 'internal' providers
-- use Prosody's configured data storage to store the authentication data.
-- To allow Prosody to offer secure authentication mechanisms to clients, the
-- default provider stores passwords in plaintext. If you do not trust your
-- server please see http://prosody.im/doc/modules/mod_auth_internal_hashed
-- for information about using the hashed backend.
authentication = "internal_hashed"
-- Select the storage backend to use. By default Prosody uses flat files
-- in its configured data directory, but it also supports more backends
-- through modules. An "sql" backend is included by default, but requires
-- additional dependencies. See http://prosody.im/doc/storage for more info.
--storage = "sql" -- Default is "internal"
-- For the "sql" backend, you can uncomment *one* of the below to configure:
--sql = { driver = "SQLite3", database = "prosody.sqlite" } -- Default. 'database' is the filename.
--sql = { driver = "MySQL", database = "prosody", username = "prosody", password = "secret", host = "localhost" }
--sql = { driver = "PostgreSQL", database = "prosody", username = "prosody", password = "secret", host = "localhost" }
-- Logging configuration
-- For advanced logging see http://prosody.im/doc/logging
log = {
info = "/var/log/prosody/prosody.log"; -- Change 'info' to 'debug' for verbose logging
error = "/var/log/prosody/prosody.err";
"*syslog";
}
----------- Virtual hosts -----------
-- You need to add a VirtualHost entry for each domain you wish Prosody to serve.
-- Settings under each VirtualHost entry apply *only* to that host.
--VirtualHost "localhost"
VirtualHost "jitsi.example.com"
-- enabled = false -- Remove this line to enable this host
authentication = "anonymous"
-- Assign this host a certificate for TLS, otherwise it would use the one
-- set in the global section (if any).
-- Note that old-style SSL on port 5223 only supports one certificate, and will always
-- use the global one.
ssl = {
key = "/var/lib/prosody/jitsi.example.com.key";
certificate = "/var/lib/prosody/jitsi.example.com.crt";
}
c2s_require_encryption = false
VirtualHost "auth.jitsi.example.com"
ssl = {
key = "/var/lib/prosody/auth.jitsi.example.com.key";
certificate = "/var/lib/prosody/auth.jitsi.example.com.crt";
}
authentication = "internal_hashed"
------ Components ------
-- You can specify components to add hosts that provide special services,
-- like multi-user conferences, and transports.
-- For more information on components, see http://prosody.im/doc/components
---Set up a MUC (multi-user chat) room server on conference.example.com:
--Component "conference.example.com" "muc"
-- Set up a SOCKS5 bytestream proxy for server-proxied file transfers:
--Component "proxy.example.com" "proxy65"
---Set up an external component (default component port is 5347)
--
-- External components allow adding various services, such as gateways/
-- transports to other networks like ICQ, MSN and Yahoo. For more info
-- see: http://prosody.im/doc/components#adding_an_external_component
--
--Component "gateway.example.com"
-- component_secret = "password"
Component "conference.jitsi.example.com" "muc"
Component "jitsi-videobridge.jitsi.example.com"
component_secret = "IfGaish6"

View File

@@ -1,32 +0,0 @@
# Jitsi Conference Focus settings
# sets the host name of the XMPP server
JICOFO_HOST=localhost
# sets the XMPP domain (default: none)
JICOFO_HOSTNAME=meet.example.com
# sets the secret used to authenticate as an XMPP component
JICOFO_SECRET=$JICOFO_SECRET
# sets the port to use for the XMPP component connection
JICOFO_PORT=5347
# sets the XMPP domain name to use for XMPP user logins
JICOFO_AUTH_DOMAIN=auth.meet.example.com
# sets the username to use for XMPP user logins
JICOFO_AUTH_USER=focus
# sets the password to use for XMPP user logins
JICOFO_AUTH_PASSWORD=$JICOFO_PASSWORD
# extra options to pass to the jicofo daemon
JICOFO_OPTS=""
# adds java system props that are passed to jicofo (default are for home and logging config file)
JAVA_SYS_PROPS=" \
-Dnet.java.sip.communicator.SC_HOME_DIR_LOCATION=/etc/jitsi \
-Dnet.java.sip.communicator.SC_HOME_DIR_NAME=jicofo \
-Dnet.java.sip.communicator.SC_LOG_DIR_LOCATION=/var/log/jitsi \
-Djava.util.logging.config.file=/etc/jitsi/jicofo/logging.properties \
"

View File

@@ -1,6 +0,0 @@
org.jitsi.jicofo.BRIDGE_MUC=JvbBrewery@internal.auth.meet.example.com
org.jitsi.jicofo.ALWAYS_TRUST_MODE_ENABLED=true
org.jitsi.jicofo.jibri.BREWERY=JibriBrewery@internal.auth.meet.example.com
org.jitsi.jicofo.jibri.PENDING_TIMEOUT=90

Some files were not shown because too many files have changed in this diff Show More