mirror of
https://github.com/suitenumerique/meet.git
synced 2026-07-28 12:49:34 +00:00
Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3d245c3bd4 | |||
| 66a36eff73 | |||
| 387bc2e1f4 | |||
| d44b45b6aa | |||
| 224b98fd9a | |||
| 031852d0b1 | |||
| 24915b0485 |
@@ -50,6 +50,7 @@ def get_frontend_configuration(request):
|
|||||||
else None,
|
else None,
|
||||||
"default_country": settings.ROOM_TELEPHONY_DEFAULT_COUNTRY,
|
"default_country": settings.ROOM_TELEPHONY_DEFAULT_COUNTRY,
|
||||||
},
|
},
|
||||||
|
"livekit": {"url": settings.LIVEKIT_CONFIGURATION["url"]},
|
||||||
}
|
}
|
||||||
frontend_configuration.update(settings.FRONTEND_CONFIGURATION)
|
frontend_configuration.update(settings.FRONTEND_CONFIGURATION)
|
||||||
return Response(frontend_configuration)
|
return Response(frontend_configuration)
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ build-backend = "setuptools.build_meta"
|
|||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "meet"
|
name = "meet"
|
||||||
version = "0.1.30"
|
version = "0.1.32"
|
||||||
authors = [{ "name" = "DINUM", "email" = "dev@mail.numerique.gouv.fr" }]
|
authors = [{ "name" = "DINUM", "email" = "dev@mail.numerique.gouv.fr" }]
|
||||||
classifiers = [
|
classifiers = [
|
||||||
"Development Status :: 5 - Production/Stable",
|
"Development Status :: 5 - Production/Stable",
|
||||||
|
|||||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "meet",
|
"name": "meet",
|
||||||
"version": "0.1.30",
|
"version": "0.1.32",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "meet",
|
"name": "meet",
|
||||||
"version": "0.1.30",
|
"version": "0.1.32",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@livekit/components-react": "2.9.13",
|
"@livekit/components-react": "2.9.13",
|
||||||
"@livekit/components-styles": "1.1.6",
|
"@livekit/components-styles": "1.1.6",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "meet",
|
"name": "meet",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.1.30",
|
"version": "0.1.32",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "panda codegen && vite",
|
"dev": "panda codegen && vite",
|
||||||
|
|||||||
@@ -37,6 +37,9 @@ export interface ApiConfig {
|
|||||||
default_country?: string
|
default_country?: string
|
||||||
}
|
}
|
||||||
manifest_link?: string
|
manifest_link?: string
|
||||||
|
livekit: {
|
||||||
|
url: string
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const fetchConfig = (): Promise<ApiConfig> => {
|
const fetchConfig = (): Promise<ApiConfig> => {
|
||||||
|
|||||||
@@ -18,12 +18,13 @@ import { ApiRoom } from '../api/ApiRoom'
|
|||||||
import { useCreateRoom } from '../api/createRoom'
|
import { useCreateRoom } from '../api/createRoom'
|
||||||
import { InviteDialog } from './InviteDialog'
|
import { InviteDialog } from './InviteDialog'
|
||||||
import { VideoConference } from '../livekit/prefabs/VideoConference'
|
import { VideoConference } from '../livekit/prefabs/VideoConference'
|
||||||
import posthog from 'posthog-js'
|
|
||||||
import { css } from '@/styled-system/css'
|
import { css } from '@/styled-system/css'
|
||||||
import { BackgroundProcessorFactory } from '../livekit/components/blur'
|
import { BackgroundProcessorFactory } from '../livekit/components/blur'
|
||||||
import { LocalUserChoices } from '@/stores/userChoices'
|
import { LocalUserChoices } from '@/stores/userChoices'
|
||||||
import { navigateTo } from '@/navigation/navigateTo'
|
import { navigateTo } from '@/navigation/navigateTo'
|
||||||
import { MediaDeviceErrorAlert } from './MediaDeviceErrorAlert'
|
import { MediaDeviceErrorAlert } from './MediaDeviceErrorAlert'
|
||||||
|
import { usePostHog } from 'posthog-js/react'
|
||||||
|
import { useConfig } from '@/api/useConfig'
|
||||||
|
|
||||||
export const Conference = ({
|
export const Conference = ({
|
||||||
roomId,
|
roomId,
|
||||||
@@ -36,11 +37,16 @@ export const Conference = ({
|
|||||||
mode?: 'join' | 'create'
|
mode?: 'join' | 'create'
|
||||||
initialRoomData?: ApiRoom
|
initialRoomData?: ApiRoom
|
||||||
}) => {
|
}) => {
|
||||||
|
const posthog = usePostHog()
|
||||||
|
const { data: apiConfig } = useConfig()
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
posthog.capture('visit-room', { slug: roomId })
|
posthog.capture('visit-room', { slug: roomId })
|
||||||
}, [roomId])
|
}, [roomId, posthog])
|
||||||
const fetchKey = [keys.room, roomId]
|
const fetchKey = [keys.room, roomId]
|
||||||
|
|
||||||
|
const [isConnectionWarmedUp, setIsConnectionWarmedUp] = useState(false)
|
||||||
|
|
||||||
const {
|
const {
|
||||||
mutateAsync: createRoom,
|
mutateAsync: createRoom,
|
||||||
status: createStatus,
|
status: createStatus,
|
||||||
@@ -91,6 +97,28 @@ export const Conference = ({
|
|||||||
|
|
||||||
const room = useMemo(() => new Room(roomOptions), [roomOptions])
|
const room = useMemo(() => new Room(roomOptions), [roomOptions])
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
/**
|
||||||
|
* Warm up connection to LiveKit server before joining room
|
||||||
|
* This prefetch helps reduce initial connection latency by establishing
|
||||||
|
* an early HTTP connection to the WebRTC signaling server
|
||||||
|
*
|
||||||
|
* FIREFOX + PROXY WORKAROUND:
|
||||||
|
* On Firefox behind proxy configurations, WebSocket signaling fails to establish.
|
||||||
|
* Client receives HTTP 200 instead of expected 101 (Switching Protocols).
|
||||||
|
* This appears to be a certificate/security issue where the initial request
|
||||||
|
* is considered unsecure. By first calling the signaling server via HTTPS,
|
||||||
|
* subsequent WebSocket establishment works correctly in these setups.
|
||||||
|
* This is a workaround - issue is reproducible on LiveKit's demo app.
|
||||||
|
*/
|
||||||
|
const prepareConnection = async () => {
|
||||||
|
if (!apiConfig || isConnectionWarmedUp) return
|
||||||
|
await room.prepareConnection(apiConfig.livekit.url)
|
||||||
|
setIsConnectionWarmedUp(true)
|
||||||
|
}
|
||||||
|
prepareConnection()
|
||||||
|
}, [room, apiConfig, isConnectionWarmedUp])
|
||||||
|
|
||||||
const [showInviteDialog, setShowInviteDialog] = useState(mode === 'create')
|
const [showInviteDialog, setShowInviteDialog] = useState(mode === 'create')
|
||||||
const [mediaDeviceError, setMediaDeviceError] = useState<{
|
const [mediaDeviceError, setMediaDeviceError] = useState<{
|
||||||
error: MediaDeviceFailure | null
|
error: MediaDeviceFailure | null
|
||||||
@@ -123,9 +151,9 @@ export const Conference = ({
|
|||||||
<Screen header={false} footer={false}>
|
<Screen header={false} footer={false}>
|
||||||
<LiveKitRoom
|
<LiveKitRoom
|
||||||
room={room}
|
room={room}
|
||||||
serverUrl={data?.livekit?.url}
|
serverUrl={apiConfig?.livekit.url}
|
||||||
token={data?.livekit?.token}
|
token={data?.livekit?.token}
|
||||||
connect={true}
|
connect={isConnectionWarmedUp}
|
||||||
audio={userConfig.audioEnabled}
|
audio={userConfig.audioEnabled}
|
||||||
video={
|
video={
|
||||||
userConfig.videoEnabled && {
|
userConfig.videoEnabled && {
|
||||||
@@ -138,6 +166,9 @@ export const Conference = ({
|
|||||||
className={css({
|
className={css({
|
||||||
backgroundColor: 'primaryDark.50 !important',
|
backgroundColor: 'primaryDark.50 !important',
|
||||||
})}
|
})}
|
||||||
|
onError={(e) => {
|
||||||
|
posthog.captureException(e)
|
||||||
|
}}
|
||||||
onDisconnected={(e) => {
|
onDisconnected={(e) => {
|
||||||
if (e == DisconnectReason.CLIENT_INITIATED) {
|
if (e == DisconnectReason.CLIENT_INITIATED) {
|
||||||
navigateTo('feedback', { duplicateIdentity: false })
|
navigateTo('feedback', { duplicateIdentity: false })
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { useIsAnalyticsEnabled } from '@/features/analytics/hooks/useIsAnalytics
|
|||||||
import { isMobileBrowser } from '@livekit/components-core'
|
import { isMobileBrowser } from '@livekit/components-core'
|
||||||
|
|
||||||
export const useNoiseReductionAvailable = () => {
|
export const useNoiseReductionAvailable = () => {
|
||||||
const featureEnabled = useFeatureFlagEnabled(FeatureFlags.faceLandmarks)
|
const featureEnabled = useFeatureFlagEnabled(FeatureFlags.noiseReduction)
|
||||||
const isAnalyticsEnabled = useIsAnalyticsEnabled()
|
const isAnalyticsEnabled = useIsAnalyticsEnabled()
|
||||||
|
|
||||||
const isMobile = isMobileBrowser()
|
const isMobile = isMobileBrowser()
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ export const useKeyboardShortcuts = () => {
|
|||||||
// Issues might occur. First draft.
|
// Issues might occur. First draft.
|
||||||
const onKeyDown = (e: KeyboardEvent) => {
|
const onKeyDown = (e: KeyboardEvent) => {
|
||||||
const { key, metaKey, ctrlKey } = e
|
const { key, metaKey, ctrlKey } = e
|
||||||
|
if (!key) return
|
||||||
const shortcutKey = formatShortcutKey({
|
const shortcutKey = formatShortcutKey({
|
||||||
key,
|
key,
|
||||||
ctrlKey: ctrlKey || (isMacintosh() && metaKey),
|
ctrlKey: ctrlKey || (isMacintosh() && metaKey),
|
||||||
|
|||||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "mail_mjml",
|
"name": "mail_mjml",
|
||||||
"version": "0.1.30",
|
"version": "0.1.32",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "mail_mjml",
|
"name": "mail_mjml",
|
||||||
"version": "0.1.30",
|
"version": "0.1.32",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@html-to/text-cli": "0.5.4",
|
"@html-to/text-cli": "0.5.4",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "mail_mjml",
|
"name": "mail_mjml",
|
||||||
"version": "0.1.30",
|
"version": "0.1.32",
|
||||||
"description": "An util to generate html and text django's templates from mjml templates",
|
"description": "An util to generate html and text django's templates from mjml templates",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "sdk",
|
"name": "sdk",
|
||||||
"version": "0.1.30",
|
"version": "0.1.32",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "sdk",
|
"name": "sdk",
|
||||||
"version": "0.1.30",
|
"version": "0.1.32",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"workspaces": [
|
"workspaces": [
|
||||||
"./library",
|
"./library",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "sdk",
|
"name": "sdk",
|
||||||
"version": "0.1.30",
|
"version": "0.1.32",
|
||||||
"author": "",
|
"author": "",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"description": "",
|
"description": "",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "summary"
|
name = "summary"
|
||||||
version = "0.1.30"
|
version = "0.1.32"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"fastapi[standard]>=0.105.0",
|
"fastapi[standard]>=0.105.0",
|
||||||
"uvicorn>=0.24.0",
|
"uvicorn>=0.24.0",
|
||||||
|
|||||||
Reference in New Issue
Block a user