This includes interfaceConfig.SUPPORT_URL, interfaceConfig.LIVE_STREAMING_HELP_LINK, config.defaultLogoUrl, config.deploymentUrls, config.liveStreaming and config.customToolbarButtons.
* fix: Check for ICE connected as part of ensureXParticipants.
* squash: Move waitForIceConnected and waitForSendReceiveData to ensure methods.
* squash: Check ICE first, then "send receive data", then remote streams. Report the correct failure.
---------
Co-authored-by: damencho <damencho@jitsi.org>
Tests that take time (desktopSharing) before they use one of the browsers (the 4th one), by the time we use it backend may have timed out the websocket (60 seconds). Add every 20 second and execute a print to keep it alive.
LogCollector stops saving logs the moment we leave the room, although we take care to stop statistics from ljm and throw events so we can flush the logs.
Flush on conference failed.
If the notification disappears, we don't have any other indication about this.
We were not showing any notification if only video is allowed.
Adds option to unmute audio or video, depend on what was allowed.
In order to use gDM in Electron the flow is somewhat reversed. It starts
from the Electron main process, so we need an API in the external_api
that can trigger the builtin picker. The picker is still necessary.
Fixes the following: Warning: A component is changing a controlled input to be uncontrolled. This is likely caused by the value changing from a defined to undefined, which should not happen. Decide between using a controlled or uncontrolled input element for the lifetime of the component. More info: https://reactjs.org/link/controlled-components
Detected due to failure while moving locked room test.
* do not show conference info in prejoin or lobby
Signed-off-by: Joshua Irmer <irmer@gonicus.de>
* fix typo
Signed-off-by: Joshua Irmer <irmer@gonicus.de>
---------
Signed-off-by: Joshua Irmer <irmer@gonicus.de>
Without it, we cannot detect what features to polyfill.
Some bundles have seen a size increase, this is due to necessary
polyfills now being included as usage was detected.
The proposal never passed stage 1 and was last updated 4 years ago,
which signals it won't make it into the language: https://github.com/tc39/proposal-export-default-from
The alternative is just a couple of characters longer.
webpack + babel-loader + core-js should've take care of it, but they
somehow don't and I couldn't finesse the webpack config enough.
This is a stop-gap.
Fixes: https://github.com/jitsi/jitsi-meet/issues/15539
Sometimes jicofo may leave before the disconnect iq reaches the visitor prosody, that will cause a reload for all visitors instead of a dialog for conference ended.
Fixes the case when someone enters a wrong password to access the meeting and then clicks back to continue knocking and not showing the knocking state, while still in the Lobby room.
The problem was introduced in 721bb4e, on access denied we are being kicked out of lobby room and then knocking state should be cleared.
Technically, on Android, the audio mode is configured but no audio is
played. Since the configured audio mode matches what we expect from a
calling app (what we support to coexist with) this is enough to not
create audio disruptions.
* fix(share-video): Hide element when not shown on large.
Fixes two issues:
- disabling mouse for all large video types, including local shared desktop that prevents clicking the link to show content
- as shared-video z-index is on top of everything, it local shared desktop to be seen when the thumbnail is clicked
* squash: Drop the video shared component from the dom when not playing.
If we are not requesting any transcription, `language` will be `null` so
take that into consideration when checking if we should stop processing
a transcription message after firing the API event.
Fixes: https://github.com/jitsi/docker-jitsi-meet/issues/1997
* Fixed exception for visibility state of mute all button
* Updated changes as per review: shifted conditional to the toggle
* chore: fix eslint warnings and errors
---------
Co-authored-by: Bhavik Arora <arorabhavik1001>
* fix(tests): Another attempt to fix Firefox excludes.
Drawback is that it will be a little bit slow.
* feat(tests): Adds chatPanel tests.
* feat(tests): Adds codec selection tests.
* feat(tests): Adds option to skip suite.
* fix(tests): Rename context to ctx to avoid clashing mocha's one.
* feat(tests): Moves room name generation in hooks.
Move also the proxy connection in the hooks.
* fix(tests): Avatar checks when using a token.
Token has its avatar so we skip the token for avatar tests.
* feat(tests): Renames avatars to drop Test from name.
* feat(tests): Updates dependencies.
* feat(tests): Fix end test log.
* feat(tests): AVModeration tests.
* fix(shared-video): Removes disable pointer for non moderators.
It fixes an issue where people can see ads from YouTube, allowing them to click the Skip Ad button. If you by mistake pause, the next time sync will unpuase it.
* squash: Remove unused.
Our SDK is only really tested with a single RN version, make sure to put
that in peerDependencies.
In addition, drop the peer dependency on @react-native/metro-config
since our project doesn't use it directly.
* fixtranscript results from whisper may have json.language="zh-TW" also requesting transcriptions language could be "zh-CN". Use _getPrimaryLanguageCode func to compare only the main lang code.
* fix: lint issue
* feat(prosody): extend jigasi kick endpoint to work for any participant
* apply review
* squash: Fix UI when there is no actor of the kick.
---------
Co-authored-by: damencho <damencho@jitsi.org>
* feat(tests): Adds join options.
* fix(tests): Fix opening tests by default with tenant.
* fix(tests): Renames a method.
* fix(tests): Moves a method from filmstrip to participants pane.
* fix(tests): Adds ok button to base dialog.
* fix(tests): Adds missing checks for using iframe API.
* feat(tests): Prettify the result html on error.
* fix(tests): Fixes checking when not in room.
* fix(tests): Adds profile button to toolbar.
* fix(tests): Adds avatar test.
* fix(tests): Fix all execute methods and await.
* fix(tests): Fix avatar checks.
* fix(tests): Fix include/excludes of tests based on participant count.
* feat(tests): Define context globally.
The context is being created on every new suite in before hook.
* feat(tests): Drop extra char in room name.
* feat(tests): Adds an option to load iframeAPI.
* feat(tests): Adds some ts types.
* fix(tests): Fix iframeAPI helper with events received too early.
* fix(tests): Fix iframeAPI helper detecting own role changed.
* feat(tests): Adds run script to start tests with local dev server.
* feat(tests): Adds participants iframeAPI tests.
* feat(tests): Updates wdio dependencies.
* feat: Adds grid config.
* feat: Simplify iframeAPI.
Drop URL params.
* feat: Adds tenant to iframeAPI.
* feat: Adds firefox target.
Certain tests are disable as not supported on FF. Missing upload file function for iframeAPI helper. Missing option to set audio file as a mic source.
* fix: Fix using tenant from baseUrl.
* feat: Adds audio only tests.
* feat: Adds option to generate tokens for the moderator.
* feat: Adds option to test and webhooks.
* fix: Improve error stack trace on error.
* fix: Address comments.
* fix: Fix test exclusion for FF.
* squash: Revert the strophe change and add a comment.
Make sure there are several connects before slowing down the visitor trying to join. This slow down is handling the case where the meeting was live few minutes ago, but ended.
We need to check whether the live field is defined ignoring its boolean value. When it is false we were ignoring it and still marking the room as live.
We cannot look up the name as the meeting is left and data has been cleaned up already.
The value is coming from ljm and the reported actor: JitsiParticipant.
- Run Android and iOS on macOS (same as our release process)
- Simplify checking for Podfile changes
- Simplify frontend actions
- Add CI for building the native Android and iOS SDK
If a non final transcript was displayed and then hidden and then we receive a final transcript we remove the part that has already been shown before. If the final transcript is the same as the non final that was already displayed we don't show the final.
* Adding sq translation
* Adding sq to languages.json
* Updating sq translation
* Fixing missing commas and updating string changes
* Fixing unclosed quotes
* Updating sq translation
* Updating sq translation
* Typo fixing; removing and adding commas to make the .json file valid
* Another comma missing fix
* Sorting entries aphabetically
* More sorting…
* More entry sorting
* Adding a missing space
* Adding spaces
* Get rid of an extra period
* Update for sq locale
* Update main-sq.json
* Update main-sq.json
* Update main-sq.json
* Update main-sq.json
* Update main-sq.json
* Update for sq translation
* Adding missing separator
* Adding another missing separator
* Adding another separator
* Not tired of adding separators…
* Typo fixing
* Changing place for a string; translating a forgoten string
* Updating sq translation
* Deleting an extra space at the beggining of a string
* Update for sq translation
If you are in meeting and you want to join another meeting from an external link, it is not possible.
That is because Prejoin screen didn't get unmounted, isJoining remains true and button is unpressable.
Most probably because react navigation, where the screen only gets focused or blurred.
There seems to be an issue related to FlatList component. It was introduced after we updated to a newer version of React Native. Transitioning the app from background to foreground triggers re-renders that affect the visible remote participants, at least in tile view, by sometimes removing them from the list.
* feat(tests): First test from torture to meet.
* squash: Fixes logging as per comments.
* squash: Fixes some eslint errors.
* squash: Drop no needed await and async declarations.
* squash: Simplify syntax.
* squash: Disable blur everywhere not only FF.
* squash: Use allSettled.
* squash: Prettify intervals and timeouts.
* squash: Use uuids for torture rooms.
* squash: Introduce helper methods in Participant for toolbar and filmstrip.
* squash: Changes headless resolution to a standard 720p.
* squash: Adds env BASE_URL.
* squash: Fix some eslint errors.
* squash: Fix js error.
* squash: Fix participant logs.
* squash: Move bag to Promise.all.
* squash: More types thing.
* squash: Fix more ts errors.
* squash: Bumps version to include 6d146cd332
* squash: More ts stuff.
* squash: Fixes last ts errors.
* squash: Drop eslint rule.
* squash: Update default configs.
* squash: Drop and docs eslint.
* feat(noise-suppression): Add support for BVC model
* feat(noise-suppression): Add support for extended BVC devices list
This commit adds support for extending the list of allowed BVC devices in the noise suppression feature. It introduces a new file, `bvc-allowed-ext.txt`, which can be used to include additional BVC supported devices.
* fix(noise-suppression): reuse the existing audioStream for Krisp initialization
* update krisp configuration
* refactor(krisp): Update Krisp JS SDK version and noise suppression configuration
* refactor(config): update config default values, add the enabled flad in INoiseSuppressionConfig
- Do not throw the error. This results in unhandled rejection promise.
- Add proper logging so that we can figure out from which video element the error occured.
* Adding sq translation
* Adding sq to languages.json
* Updating sq translation
* Fixing missing commas and updating string changes
* Fixing unclosed quotes
* Updating sq translation
* Updating sq translation
* Typo fixing; removing and adding commas to make the .json file valid
* Another comma missing fix
* Sorting entries aphabetically
* More sorting…
* More entry sorting
* Adding a missing space
* Adding spaces
* Get rid of an extra period
* Update for sq locale
* Update main-sq.json
* Update main-sq.json
* Update main-sq.json
* Update main-sq.json
* Update main-sq.json
* Update for sq translation
* Adding missing separator
* Adding another missing separator
* Adding another separator
* Not tired of adding separators…
* Typo fixing
* Changing place for a string; translating a forgoten string
* Updating sq translation
* Deleting an extra space at the beggining of a string
* fix(lobby): Inconsistent state after deny and then approve.
Fixes several issues:
- The error on lobby deny is not sticky
- When preJoin is not enabled we were showing conference UI and showing the error, while the participant is denied to enter the meeting.
- There was inconsistent state (after deny we were keeping membersOnly conference state) and when being approved on re-try while being in the meeting, no remote thumbnails are shown although media is flowing.
The scenario is enabling lobby and tryintg to join, denying the first attempt and approving the second one.
* squash: Drop extra hide lobby screen.
* squash: Finish action first before showing the notification.
* feat(rn,screen-sharing) allow sharing the screen and camera on mobile
With the advancements in layer suspension it should now be ok to do.
Users can still mute the camera themselves if they so desire.
Having the camera enabled while in the background is a separate effort.
The will-join event happens before we actually try to join and things
would go wrong, whereas join-in-progress happens when it's guaranteed
that joining will be successful.
* add: Missing keys in Turkish language file added with translations.
upd: Translations marked as "", which have not been translated, have been completed.
upd: Updated with "..." (ellipsis), which is the symbolic value for "..." (three dots).
fix: Wrong words in the dictionary in the source have been corrected.
* upd: Updated with "..." (ellipsis), which is the symbolic value for "..." (three dots) all languages.
It was possible that join can be executed before conference.init have even started or we haven't reached the point ot create the initialGUMPromise. This was causing the following issues:
- users stuck on the prejoin screen
- participants join 2+ times in the call (we have been creating more than 1 local participants from a single page).
* add the participants count to the aria label and fix the accessibility toggle for the participants button
---------
Co-authored-by: AHMAD KADRI <52747422+ahmadkadri@users.noreply.github.com>
Currently we add keyboard listeners on conference join but never remove them. In the cases where we have multiple join events during a call (visitors promotion, breakout rooms), there are multiple keyboard handlers added and the shortcuts are executed multiple times on a single press.
* fix(subtitles): Handle errors to revert to default state.
* fix(transcribing): Handle transcriber status changed.
Drops potential transcribers and hidden participant actions and handling. Expect ljm to detect transcriptions on and off.
* feat(transcriptions): Adds a notification if transcriber leaves abruptly.
* squash: Renames action.
* chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1869.0.0+5671c5d6...v1872.0.0+8940b5c9
The exception we see in jicofo: IllegalArgumentException: Value is not a list
We were encoding empty array for media types as {} where it should be [].
- large video does not adhere to the same restriction when it comes to the flip mode, it simply respects the last cached state or the doNotFlipLocalVideo flag if it was provided
* feat(visitors): Transcriptions for visitors.
* squash: Fixes filter iq.
* feat: Rewrites room name requests in rayo iq for visitors.
* squash: Handles visitors count that request transcriptions and the languages requested.
* fix(subtitles): Make sure we show captions button when no features but is transcribing.
* fix(transcriptions): Uses dial command to invite transcriber.
* fix(transcriptions,recording): Allows non moderators with features to dial, record or transcribe.
* sqaush: Make sure filtering works when only is a moderator.
It works now and without a token and no features, but being moderator.
* squash: Rename constant.
* squash: Checks features first before defaulting to moderator when filtering metadata service.
* squash: Checks features first before defaulting to moderator in UI.
* squash: Fixes lint and one other check.
* squash: Moves more logic to is_feature_allowed.
* squash: Drops unnecessary check.
* squash: Uses constant coming from ljm.
* squash: Toggles back captions button on error.
* squash: Fix comment.
* squash: Reverting back isLiveStreamingButtonVisible.
* squash: Fix imports.
Some parts of the ui still showed the setting for flipping the video, even if the flag indicated otherwise
Also fixes the case where setting a virtual background ignores the stored localFlipX setting
- Move the styles from css to tss-react ones
- Dynamic fontSize based on the visible area of the page
- Remove the gaps in the background when a line is wrapped.
- Change the text color to white.
- Remove transparency.
On mobile (React-Native) the sharedVideoAllowedURLDomains property from dynamic branding was filtered and therefore the allow list from the branding was not reaching redux and was ignored.
* feat(shared-video): Shows confirmation dialog before playing video.
* feat(shared-video/native): created ShareVideoConfirmDialog and unified actions
* squash: Simplifies state and fixes stop and then start scenario.
* squash: Use constants everywhere.
* squash: Use helper function.
* squash: Ignore any command with not matching video URL.
---------
Co-authored-by: Calin-Teodor <calin.chitu@8x8.com>
If the readyToClose event was fired there is no need to "leave" the
meeting, it just circles back to the app unnecessarily, potentially
creating another readyToClose event.
During authentication cycle the iceServers URL params are not passed through the various redirects. The result is that the when we finally return back to the conference page authenticated and with the JWT token the iceServers URL param is lost.
There is no point in ever setting lastN to anything other than 0 when in
the background because we are not rendering anything.
When in PiP mode, the app state is not background, which might have
deceived us into adding that check there way back when.
Just remain in the background. The ongoing notification can be used to
get back to the meeting.
NOTE: This behavior only affected the app, not the SDK.
* feat(invite) add email value in peopleSearchQueryTypes and peopleSearchToken config
* feat(invite) pass custom auth token in search directory (e. g. for email directory)
* feat(invite) autocomplete and invitations working with custom auth token (e. g. email invite type), invite icons updated
* feat(invite) remove newly documented config from undocumented settings list
* feat(invite) jwt are now passed in the invite requests headers
* feat(invite) linter-related formatting
* feat(invite) fix default user icon regression
* feat(invite) last lint issues
* feat(invite) pass alternate token in header, not in params
* Fixes lint error
---------
Co-authored-by: Raphaël Badawi <raphael.badawi@ceo-vision.com>
Co-authored-by: Дамян Минков <damencho@jitsi.org>
When the prejoin screen is disabled during the prosody login cycle the initial GUM tracks were lost causing the user to start the call without local media and audio/video mute buttons staying forever in pending state.
Some middleware functions are declared as async. This wraps next(action) in Promise which will delay the execution of actions and also dispatch will return the its result always as a Promise.
We are ending up in incorrect mute state (unmuted) if the initial press event is resulting in a new track creation and the release event happens before the track is created.
Come over for a fun story, dear reader!
Here is a not-so-fun difference in behavior, observed in macOS:
- The builtin keyboard doesn't seem to send the same key over and over
again while it's being held.
- On the contrary, a USB keyboard does.
That means that for some keyboards PTT has been broken. We get
keydown/keyup pairs in quick successing.
One would think that KeyboardEvent.repeat would solve that, but it
doesn't seem to, in practice. See: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/repeat
So, in order to solve this, delay handling the keyup event by 50ms. This
way, if a new keydown comes before the keyup has been handled we'll
cancel it and act as it never happened, restoring PTT functionality.
While we're at it, use window.addEventListener rather than
onkeyup/onkeydown, since it's 2024 :-)
* fix(visitors): Fixes going live when first moderator joins.
* squash(jwt): Drop unused field.
* squash(jwt): Fixes loading token_util for visitors component.
* squash(jwt): Validate nbf if it exists as it is optional.
* squash(visitors): Keep prefer visitor state for not live meetings.
* squash(visitors): Automatically go live only when there is a moderator in the meeting.
* squash(visitors): Automatically go live only when there is an occupant in the meeting.
* squash(visitors): Drops a debug log.
* squash(visitors): Makes sure we first disconnect before attempting a reconnect.
If the reconnect happens too quickly, before being disconnected and the conference is still not live we will detect that we are still connected and will skip connecting to visitors service, and in the next moment we will disconnect.
* squash(visitors): Slow down successful reconnects.
If a meeting was just live but was destroyed jicofo will return it is not live, but service will return that it just got live. Slows down reconnects and at some point the service will return that the meeting is not live. The drawback is that it will take some time to connect when the meeting is created and back live.
* squash(visitors): Randomize the delay up to the available value.
* feat(visitors): Handling of live conference and queue service.
* squash: Small refactor mobile code.
* squash: Drop debug log.
* chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1836.0.0+d05325f3...v1839.0.0+ea523fc6
* squash: Adds a count function.
* squash: Drop debug print.
* squash: Skip if queueService is not enabled.
* squash: Avoids double subscribing for visitorsWaiting.
* squash: Fixes lint error.
* squash: Fixes showing dialog.
- on iOS safari and chrome, in case we show eg a spinner until we get the videoConferenceJoined event, all `clientResize` are done with size 0 for width/height
- on iOS we never get a `clientResize` call with correct values, except if we force a call by eg opening/closing the chat window
getJwtDisabledButtons which is used as a selector will create a new array every time it is called. This will lead to unneccessary rerenders on every action where there is no difference in the result of getJwtDisabledButtons because the reference of the array will be different.
As part of the PR, it also fixes:
- Removes button aliases
- Unifies the keys in the object returned by getAllToolboxButtons and the button keys
- Makes sure that the number of buttons displayed are always the same as the number of buttons specified in the thresholds and removes the exception for not filling up the main toolbar with buttons from overflow menu when reactions button is disabled.
- Introduces a priority for buttons that will be used to fill empty spaces in the main toolbar.
Out build process does not actually require nodejs. We assume node/npm is installed on the machine. Dropping it so we can use just nvm to control the versions via .npmrc.
* feat: move jwt to URL hash from search parameters
* fix lint
* comments for future work
* comment format
* fix to use ts-ignore like previous parseURLParams case
- settings string contained a string saying "show / hide settings", but
we should match the english string saying only "show settings" as the
button is only used to show the settings (its a dialog you can't go out of, so
there is no way to go back to the settings button to close, the "hide" case
doesn't exist)
- use "Activer" instead of "Rétablir" and "Démarrer" for toggle on states,
as this wording is used accross lots of other buttons, it makes more sense
to use the same wording
- change the unmute/mute audio/video strings to tell the user its *their*
device they toggle. There are a few spots in this app where we label stuff
as "mute microphone", sometimes its for you, sometimes its for other people.
The idea here is to say "Mute your microphone" instead of "Mute microphone"
so that screen reader users fully understand what they do.
Before we were using setAudioMuted and setVideoMuted which was effectively using separate GUM calls for audio and video. This was problematic in the case where GUM permissions prompt was displayed because two separate prompts were displayed.
* feat: allow client JWT in Authorization header
* cleaner check for initial header
* better comment for the reason for sub(8
* allow query value to override authorization header
* fix(notifications): Adds a 60 secs timeout for bridge channel message.
Also indicates that audio might get disrupted in addition to video when ssrc-rewriting is enabled.
* squash: decrease the timeout to 15 secs if the data channel doesn't establish at all.
- Update project files
- Make sure CI uses Xcode 15.2
- Fix custom Xcode build scripts to depend on the Info.plist file
generation
- Combine 2 scripts related to Firebase into a single one
Fixes#14672.
When passing url param config.subject="Example%20Title" we will send config.subject%22%3A%22%2522Example%2520Title%2522%22 which is double quotes.
In certain cases (lib-unbound not found message from lua) we can detect that jvb account is not existing, and we will re-create causing jvb to not able to connect, as password is changed only in prosody.
Many of the events are not used at all or used only on one place. For the rest of them the listeners were added 2 times on promoted visitors and not cleaned at all.
We were using prosody,util.json and cjson at the same time, but the latter is more performant.
Adds some error handling which were missing with the prosody util json one.
In the case where we switch from jvb to p2p when we need to switch the p2p and jvb track, they will be with the same source name. In order to add the streaming status listener we need to check if the isP2P flag is different. Without this check we won't have the correct stream status listener for the track. Normally the Thumbnail and ConnectionIndicator components will update the streaming status the same way and this may mask the problem. But if for some reason the update from the Thumbnail and ConnectionIndicator components don't happen this may lead to showing the avatar instead of the video because of the old track inactive streaming status.
When screensharing source is the first source to be added with ssrc-rewriting enabled, constraints for the camera tile don't get updated when its pinned. Fixes https://github.com/jitsi/jitsi-meet/issues/14501
Fixes#14491.
When a screensharing participant leaves and is unmuted or sharing the tab audio, there is a dominant speaker changed event which stores wrong values in filmstrip state. And because we skip reordering when there is no filmstrip scroll and no screensharers to avoid reordering on every dominant speaker event for small meetings, we fail to evaluate that the screensharere is actually gone and we still show it.
This will not happen if the one sharing is not dominant speaker (muted) or if there are more participants in the meeting (there is a scroll).
There are cases when if you are kicked and the participant pane is
open, the getBreakoutRooms() call will return undefined and since
isBreakoutRoomRenameAllowed is used in useSelector and fails, all
execution will stop leaving us in a broken state.
* fix(visitors): Fixes replacing visitor domain.
Constructing the visitor room jid instead of doing a risky replacement.
The problem is having a room like:
[meet-jit-si-shard]someroomname@conference.meet.jit.si and replacing with 'meet.jit.si', the dots match the -.
* feat: Introduces new rate limit setting.
No can have two different values per ip that is used to limit session creation and one that is used when that stanza rate limit is exceeded.
* feat: Introduces unthrottle logic.
* fix: Bumps default iq rate limits.
* feat: Prints how many times a session hits the rates.
* Update resources/prosody-plugins/mod_rate_limit.lua
Co-authored-by: Aaron van Meerten <aaron.van.meerten@8x8.com>
---------
Co-authored-by: Aaron van Meerten <aaron.van.meerten@8x8.com>
Filters the toolbarButtons in redux depending on the visitor state instead of filtering them every time in mapStateToProps. This will prevent unnecessary rerenders of the toolbar.
Additionally:
- Moves visitor buttons const from features/config in features/toolbox.
- Removes dublicate functions isButtonEnabled and isToolbarButtonEnabled.
- Adds more buttons to the visitor allowed buttons which functionality has been any way accessible trough shortcuts or somewhere else.
- Enables customButtons to be visible for visitors.
The previous version of getToolbarButtons function was actually adding the custom buttons on every call to the config toolbarButtons array, effectively creating dublicates of every custom button. The PR fixes this issue.
Also now we will be running the getToolbarButtons calculation only when needed.
Until this commit we didn't make difference between transcriptions from the recording dialog and subtitles. Now subtitles are not considered recording anymore and only the transcriptions started from recording dialog are considered recording.
Deprecates current component for conference duration. Will wait a bit for mobile to catch up and then we can delete the code.
chore(deps) lib-jitsi-meet@latest
jitsi/lib-jitsi-meet@v1767.0.0+178f9bbf...v1769.0.0+ff9f57c5
It wasn't related to transcriptions but to subtitles, really.
Since we are not going to show subtitles just because transcriptions are
enabled, this setting no longer makes sense.
As we have the jitsi-meet-electron app, lets allow deployments to use it.
Allow deployments to enable desktop deeplinking without the need to re-implement _openDesktopApp()
Disable it by default to keep the current behaviour (deeplinking on mobile on, on desktop off)
This feature is meant as purely opt-in.
Signed-off-by: Christoph Settgast <csett86_git@quicksands.de>
* fix: Fixes leaving the visitor's meeting on promotion.
This was resulting some colibri websockets reconnects as the state of the previous JitsiConference was not cleaned up.
* squash: Update jsdocs, lint error.
Updates the remoteVideoSources set only when neccessary when participant is leaving . This fixes an endless recursion when visitor is promoted or left and there is a screen sharing.
* fix: Fixes wrong warning message.
* fix: Detect enables/disables visitors for a room.
* fix: We need customusername in all cases of auto-allow setting.
* feat: Sends promotion-request to all moderators.
* feat(visitors): Implements request promotion.
* feat(visitors): Implements single moderator and vpass cases for moderators.
* fix: Fixes clearing request instances from UI.
* feat: Implements visitors approval for mobile.
* squash: Drops unused and wrong report for auto allow promotion.
* squash: Returns early based on count.
* squash: Moves translation to common key.
* squash: Adds dependencies for useCallback.
* squash: comments.
* squash: Refactor 1 to unify with native.
* squash: Rename some styles.
* squash: Fixes error dew to fewer hooks error.
* squash: Renames VISITOR_PROMOTION_REQUEST_DENIED.
* squash: Fix renaming component.
* squash: Suggestions.
Events such as "mouse-move", "mouse-leave" and "face-landmark-detected"
reach this code and pollute the logs. It's probably worth investigating
why this is the case and fixing it if necessary, but for now just remove
the log message.
* feat: Adds detection of occupants with no connection.
We saw recently two occasions with rooms with participants but no prosody.full_sessions for those participants and when everyone leaves the meeting it never ends.
* squash: Updates counting.
* ref(transcriptions): refactor transcriptions api
* ref(transcriptions): refactor usage of translation label
Extend IFrame API to allow adding a transcriber in the room without the subtitles needing to be visible.
Allow transcription chunk messages to be passed through the IFrame API if a transcriber is present.
Clean-up transcription messages sent through the IFrame API to not include timeout field and possible conflicting states (stable / unstable /final)
* fix linting
* code review: extend api message to match webhook format
- on 3rd party prejoin, we did not setup the initial devices, resulting in always creating tracks for default device for camera and mic regardless of settings, and for both meeting and 3rd party prejoin to not set the audio output device at all
In the jitsi web app, the poll creator is displayed
for all published votes whereas in the native app
the current username of the participant has been
displayed for all polls regardless of the creator
Currently we are waiting for the user to submit feedback dialog in
order to leave the room. Now the leave and showing the dialog are
executed in parallel.
* fix: Adds check for jitsi_meet_room not being string.
Oct 20 12:22:50 mod_bosh error Traceback[bosh]: /usr/share/jitsi-meet/prosody-plugins/token/util.lib.lua:336: bad argument #1 to 'lower' (string expected, got userdata)
stack traceback:
[C]: in function 'lower'
/usr/share/jitsi-meet/prosody-plugins/token/util.lib.lua:336: in function 'verify_room'
...re/jitsi-meet/prosody-plugins/mod_token_verification.lua:78: in function 'verify_user'
* fix: Adds check for missing speaker stats for occupant.
error Traceback[c2s]: ...itsi-meet/prosody-plugins/mod_speakerstats_component.lua:124: attempt to index field '?' (a nil value)
stack traceback:
...itsi-meet/prosody-plugins/mod_speakerstats_component.lua:124: in function '?'
* fix: Nil check for breakout_rooms.
c2saaaad95a16c0 error Traceback[c2s]: ...re/jitsi-meet/prosody-plugins/mod_muc_breakout_rooms.lua:345: attempt to index local 'main_room' (a nil value)
stack traceback:
...re/jitsi-meet/prosody-plugins/mod_muc_breakout_rooms.lua:345: in function '?'
/usr/share/lua/5.2/prosody/util/events.lua:81: in function </usr/share/lua/5.2/prosody/util/events.lua:77>
(...tail calls...)
/usr/lib/prosody/modules/muc/muc.lib.lua:496: in function </usr/lib/prosody/modules/muc/muc.lib.lua:492>
* fix: Adds nil check in allowners.
c2saaaae3024810 error Traceback[c2s]: /usr/share/jitsi-meet/prosody-plugins/mod_muc_allowners.lua:171: attempt to index local 'room' (a nil value)
stack traceback:
/usr/share/jitsi-meet/prosody-plugins/mod_muc_allowners.lua:171: in function '?'
/usr/share/lua/5.2/prosody/util/events.lua:81: in function </usr/share/lua/5.2/prosody/util/events.lua:77>
* fix: Adds nil check in lobby.
mod_bosh error Traceback[bosh]: ...share/jitsi-meet/prosody-plugins/mod_muc_lobby_rooms.lua:168: attempt to index local 'lobby_room' (a nil value)
stack traceback:
...share/jitsi-meet/prosody-plugins/mod_muc_lobby_rooms.lua:168: in function '?'
/usr/share/lua/5.2/prosody/util/filters.lua:25: in function 'filter'
/usr/lib/prosody/modules/mod_bosh.lua:361: in function 'send'
/usr/lib/prosody/modules/muc/mod_muc.lua:495: in function '?'
* fix: Fixes nil error in fmuc.
s2sinaaaaf2817260 error Traceback[s2s]: /usr/share/jitsi-meet/prosody-plugins/mod_fmuc.lua:295: attempt to index local 'occupant' (a nil value)
stack traceback:
/usr/share/jitsi-meet/prosody-plugins/mod_fmuc.lua:295: in function '?'
/usr/share/lua/5.2/prosody/util/events.lua:81: in function </usr/share/lua/5.2/prosody/util/events.lua:77>
(...tail calls...)
/usr/lib/prosody/modules/muc/muc.lib.lua:1201: in function </usr/lib/prosody/modules/muc/muc.lib.lua:1194>
* fix: Fixes nil occupant.
c2s55f4d5411dd0 error Traceback[c2s]: /usr/share/jitsi-meet/prosody-plugins/mod_muc_flip.lua:120: attempt to index local 'kicked_occupant' (a nil value)
stack traceback:
/usr/share/jitsi-meet/prosody-plugins/mod_muc_flip.lua:120: in function '?'
/usr/share/lua/5.2/prosody/util/events.lua:81: in function </usr/share/lua/5.2/prosody/util/events.lua:77>
(...tail calls...)
/usr/lib/prosody/modules/muc/muc.lib.lua:791: in function </usr/lib/prosody/modules/muc/muc.lib.lua:616>
* fix: Fixes caching main room.
Objects should not be set in room._data as this field is being serialized and we see errors like.
error Traceback[c2s]: /usr/share/lua/5.2/prosody/util/serialization.lua:34: Can't serialize userdata
stack traceback:
[C]: in function 'error'
/usr/share/lua/5.2/prosody/util/serialization.lua:34: in function </usr/share/lua/5.2/prosody/util/serialization.lua:33>
(...tail calls...)
/usr/share/lua/5.2/prosody/util/serialization.lua:199: in function 'serialize_table'
/usr/share/lua/5.2/prosody/util/serialization.lua:197: in function 'serialize_table'
/usr/share/lua/5.2/prosody/util/serialization.lua:197: in function 'serialize_table'
/usr/share/lua/5.2/prosody/util/serialization.lua:219: in function </usr/share/lua/5.2/prosody/util/serialization.lua:217>
(...tail calls...)
/usr/lib/prosody/modules/mod_storage_memory.lua:42: in function </usr/lib/prosody/modules/mod_storage_memory.lua:40>
(...tail calls...)
...re/jitsi-meet/prosody-plugins/mod_muc_breakout_rooms.lua:207: in function 'create_breakout_room'
* fix: Fixes calling save_occupant after changing its role.
* squash: Fixed passed value to type.
It's fired when the API is ready, and it signals the embedder that they
can reveal the meeting from behind an overlay, for example.
The astute reader might notice we are currently sending a
'browser-support' event roughly at the same time. The reason for this
new event is plain simply semantics.
In addition the 'onload' handler is faked by calling it when the new
ready event fires. The original onload event is unreliable. It will be
called even when nothing was ever loaded (try loading a page without
internet and be amused).
On Android we support RestrictionManager, but that already sets it, so
make sure we always save it on the settings.
Editing will be restricted in the Settings dialog if changing it is
restricted anyway.
Fixes: https://github.com/jitsi/jitsi-meet/issues/13994
Sep 22 22:06:01 mod_bosh error Traceback[bosh]: /usr/share/jitsi-meet/prosody-plugins/mod_visitors.lua:305: attempt to index field '?' (a nil value)
stack traceback:
/usr/share/jitsi-meet/prosody-plugins/mod_visitors.lua:305: in function '?'
/usr/share/lua/5.2/prosody/util/events.lua:81: in function </usr/share/lua/5.2/prosody/util/events.lua:77>
This issue tracker is only for reporting bugs and tracking issues related to the source code.
**Before posting, please make sure to check if the same or similar bugs have already been reported.**
⚠️ General questions regarding usage, installation, etc. should be posted in our [community forum](https://community.jitsi.org).
- type:textarea
attributes:
label:What happened?
description:Please describe the problem. Be as detailed as possible.
validations:
required:true
- type:checkboxes
attributes:
label:Platform
description:Onwhat platforms can you reproduce the problem?
options:
- label:Chrome (or Chromium based)
- label:Firefox
- label:Safari
- label:Other desktop browser
- label:Android browser
- label:iOS browser
- label:Electron app
- label:Android mobile app
- label:iOS mobile app
- label:Custom app using a mobile SDK
- type:input
attributes:
label:Browser / app / sdk version
description:Please provide the version of the browser / app / sdk where the problem manifests.
validations:
required:true
- type:textarea
attributes:
label:Relevant log output
description:Please copy and paste any relevant log output. The browser console JS logs (if applicable) is a good start. This will be automatically formatted into code, so no need for backticks.
render:shell
- type:checkboxes
attributes:
label:Reproducibility
description:Does the problem reproduce on meet.jit.si using Chrome, Firefox or the official mobile apps?
options:
- label:The problem is reproducible on meet.jit.si
- type:textarea
attributes:
label:More details?
description:Please provide more details in case they apply (such as the Jitsi Meet version you are running, if you are hosting your own server).
We would love to have your help. Before you start working however, please read
and follow this short guide.
# Follow Our Updated Guide to See How You Can Contribute
# Reporting Issues
Provide as much information as possible. Mention the version of Jitsi Meet,
Jicofo and JVB you are using, and explain (as detailed as you can) how the
problem can be reproduced.
Hello there! 👋
# Code contributions
Found a bug and know how to fix it? Great! Please read on.
We're thrilled that you're eager to contribute to Jitsi Meet! ❤️
## Contributor License Agreement
While the Jitsi projects are released under the
[Apache License 2.0](https://github.com/jitsi/jitsi-meet/blob/master/LICENSE), the copyright
holder and principal creator is [8x8](https://www.8x8.com/). To
ensure that we can continue making these projects available under an Open Source license,
we need you to sign our Apache-based contributor
license agreement as either a [corporation](https://jitsi.org/ccla) or an
[individual](https://jitsi.org/icla). If you cannot accept the terms laid out
in the agreement, unfortunately, we cannot accept your contribution.
Your interest in improving our platform means a lot to us. To ensure your contributions align seamlessly with our goals and processes, we've recently updated our guide. This guide will provide you with clear instructions on how to get involved effectively.
## Creating Pull Requests
- Make sure your code passes the linter rules beforehand. The linter is executed
automatically when committing code.
- Perform **one** logical change per pull request.
- Maintain a clean list of commits, squash them if necessary.
- Rebase your topic branch on top of the master branch before creating the pull
request.
Ready to get started? Head over to our [Jitsi Meet Handbook](https://jitsi.github.io/handbook/docs/dev-guide/dev-guide-contributing/) and let's make Jitsi Meet even better together!
## Coding style
### ❗️Additional Note
Before sending us your code, double-check that it meets our coding standards. You can do this by running a command: `npm run lint`. If there are any issues, don't worry! You can fix them by running: `npm run lint-fix`. Once your code passes these checks, feel free to submit your pull request.
### Comments
* Comments documenting the source code are required.
* Comments from which documentation is automatically generated are **not**
subject to case-by-case decisions. Such comments are used, for example, on
types and their members. Examples of tools which automatically generate
documentation from such comments include JSDoc, Javadoc, Doxygen.
* Comments which are not automatically processed are strongly encouraged. They
are subject to case-by-case decisions. Such comments are often observed in
function bodies.
* Comments should be formatted as proper English sentences. Such formatting pays
attention to, for example, capitalization and punctuation.
### Duplication
* Don't copy-paste source code. Reuse it.
### Formatting
* Line length is limited to 120 characters.
* Sort by alphabetical order in order to make the addition of new entities as
easy as looking a word up in a dictionary. Otherwise, one risks duplicate
entries (with conflicting values in the cases of key-value pairs). For
example:
* Within an `import` of multiple names from a module, sort the names in
alphabetical order. (Of course, the default name stays first as required by
the `import` syntax.)
````javascript
import {
DOMINANT_SPEAKER_CHANGED,
JITSI_CLIENT_CONNECTED,
JITSI_CLIENT_CREATED,
JITSI_CLIENT_DISCONNECTED,
JITSI_CLIENT_ERROR,
JITSI_CONFERENCE_JOINED,
MODERATOR_CHANGED,
PEER_JOINED,
PEER_LEFT,
RTC_ERROR
} from './actionTypes';
````
* Within a group of imports (e.g. groups of imports delimited by an empty line
may be: third-party modules, then project modules, and eventually the
private files of a module), sort the module names in alphabetical order.
````javascript
import React, { Component } from 'react';
import { connect } from 'react-redux';
````
### Indentation
* Align `switch` and `case`/`default`. Don't indent the `case`/`default` more
than its `switch`.
````javascript
switch (i) {
case 0:
...
break;
default:
...
}
````
### Naming
* An abstraction should have one name within the project and across multiple
projects. For example:
* The instance of lib-jitsi-meet's `JitsiConnection` type should be named
`connection` or `jitsiConnection` in jitsi-meet, not `client`.
* The class `ReducerRegistry` should be defined in ReducerRegistry.js and its
imports in other files should use the same name. Don't define the class
`Registry` in ReducerRegistry.js and then import it as `Reducers` in other
files.
* The names of global constants (including ES6 module-global constants) should
be written in uppercase with underscores to separate words. For example,
`BACKGROUND_COLOR`.
* The underscore character at the beginning of a name signals that the
respective variable, function, property is non-public i.e. private, protected,
or internal. In contrast, the lack of an underscore at the beginning of a name
signals public API.
### Feature layout
When adding a new feature, this would be the usual layout.
```
react/features/sample/
├── actionTypes.ts
├── actions.js
├── components
│ ├── AnotherComponent.js
│ ├── OneComponent.js
│ └── index.js
├── middleware.js
└── reducer.js
```
The middleware must be imported in `react/features/app/` specifically
in `middlewares.any.ts`, `middlewares.native.ts` or `middlewares.web.ts` where appropriate.
Likewise for the reducer.
An `index.js` file must not be provided for exporting actions, action types and
component. Features / files requiring those must import them explicitly.
This has not always been the case and the entire codebase hasn't been migrated to
this model but new features should follow this new layout.
When working on an old feature, adding the necessary changes to migrate to the new
model is encouraged.
### Avoiding bundle bloat
When adding a new feature it's possible that it triggers a build failure due to the increased bundle size. We have safeguards inplace to avoid bundles growing disproportionatelly. While there are legit reasons for increasing the limits, please analyze the bundle first to make sure no unintended dependencies have been included, causing the increase in size.
First, make a production build with bundle-analysis enabled:
Using Jitsi Meet is straightforward, as it's browser based. Head over to [meet.jit.si](https://meet.jit.si) and give it a try. It's anonymous, scalable and free to use. All browsers are supported!
Using Jitsi Meet is straightforward, as it's browser based. Head over to [meet.jit.si](https://meet.jit.si) and give it a try. It's scalable and free to use. All you need is a Google, Facebook or GitHub account in order to start a meeting. All browsers are supported!
Using mobile? No problem, you can either use your mobile web browser or our fully-featured
We take security very seriously and develop all Jitsi projects to be secure and safe.
If you find (or simply suspect) a security issue in any of the Jitsi projects, please report it to us via [HackerOne](https://hackerone.com/8x8) or send us an email to security@jitsi.org.
If you find (or simply suspect) a security issue in any of the Jitsi projects, please report it to us via [HackerOne](https://hackerone.com/8x8-bounty) or send us an email to security@jitsi.org.
**We encourage responsible disclosure for the sake of our users, so please reach out before posting in a public space.**
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.