* fix(invite): normalize room before building dial-in URL to avoid double encoding
* refactor(invite): use getNormalizedRoomName for room normalization
Room names with non-ASCII characters (e.g. ò) were double URL-encoded
when appended as query parameters to websocket, conference-request, and
keepalive URLs. getBackendSafeRoomName() returns a percent-encoded string
which was then re-encoded by URLSearchParams.append() via appendURLParam().
Extract getNormalizedRoomName() that decodes, NFKC-normalizes, and
lowercases without percent-encoding, and use it in the appendURLParam
call sites. getBackendSafeRoomName() is refactored to call it internally,
preserving identical behavior for all other callers.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds a retry logic with a button. The problem is that some browsers (Safari) when window.open is not executed directly in the onClick handler, but on some underlying Promise will block the popup.
Chat and CC panels showed oldest messages at the top when opened because
scrollIntoView was called on hidden (display: none) elements where it
silently does nothing. Now we skip scrolling on mount for hidden tabs
and defer it to when each tab first becomes visible, while preserving
the user's scroll position on subsequent tab switches.
Add logger.debug calls throughout the PiP (Picture-in-Picture) feature
to make it easier to trace the PiP lifecycle when investigating issues.
Covers API event dispatching, action invocations with state snapshots,
requestPictureInPicture success/failure paths, and Electron namespace
mutations.
* fix(recording): show advanced options for local recording with transcription
* Fixed edge case when all recording service are disabled
* Modified css
* Added warning message
* Show transcription option when no recording service is present
* Addressed PR reviews
* squash: Hide recording advanced option when not rendering recording.
* squash: Show recording button when only transcriptions are enabled.
* squash: Make sure we do not call record when it is not rendered due to no permissions.
* squash: Allows those with just feature transcription to use async transcribe.
* squash: Show recording stop button when recording is running when only transcriptions feature is available.
---------
Co-authored-by: damencho <damencho@jitsi.org>
* feat(transcription): allow custom transcriber languages via config
* fix(transcription): avoid duplicating default language json and document config
* feat(config): add support for custom transcription languages in configuration
* fix(config): satisfy lint and ts rules
* fix(video-layout) Fixes auto-pinning of SS in large calls.
In calls with 50+ participants, isTopPanelEnabled returns true. This causes isStageFilmstripAvailable(state) (called with no minimum participant count from getPinnedParticipant) to return true even when activeParticipants is empty. When getPinnedParticipant takes that stage filmstrip path, it reads from activeParticipants.find(p => p.pinned) — which is always
empty for an auto-pinned screenshare.
Added an explicit check in shouldDisplayTileView's auto-mode logic: when there are active screenshares AND the top panel is enabled AND auto-pin is active AND Follow Me isn't controlling the layout, exit tile view. The guards on getAutoPinSetting() and !isFollowMeActive(state) mirror the same conditions checked everywhere else before auto-pinning fires, ensuring
consistent behavior.
* squash: Fixes linter error
* fix(meeting_id): Depends on jitsi_session(uses session.user_region).
* feat(authentication): A static page that can be used with some auth providers like keycloak.
* fix(authentication): Implements inline authentication.
squash: Adds refresh token use when refresh token is needed on connection resuming.
squash: Fix bugs and move to PKCE flow.
* squash: Adds nonce verification.
* squash: Drops the closing logic.
* squash: Replace resuming event with CONNECTION_TOKEN_EXPIRED one.
* squash: Fixes comments.
* squash: Make sure we use tokenAuthUrl only when it is set and is not jaas.
* squash: Move CONNECTION_TOKEN_EXPIRED to web only middleware as it uses web only logic for now.
* squash: Fix comments.
Update the label's htmlFor and the Switch id from 'recording-switch-transcription' to 'recording-switch-audio-video' in StartRecordingDialogContent. This corrects the label-to-control association for the audio/video recording toggle, fixing an accessibility/mapping mismatch.
*Hang-up button is calling both appNavigate and conferenceWillLeave synchronously and something is interfering.
appNavigate is async and something is calling it again before conferenceWillLeave completes.