From ff19135d4edef2e8b46ea44e94da56e5a05bad68 Mon Sep 17 00:00:00 2001 From: Vri Date: Wed, 4 Jan 2023 15:01:27 +0000 Subject: [PATCH 01/20] Translated using Weblate (German) Currently translated at 100.0% (141 of 141 strings) Translation: Element Call/element-call Translate-URL: https://translate.element.io/projects/element-call/element-call/de/ --- public/locales/de/app.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/public/locales/de/app.json b/public/locales/de/app.json index fbd9538..120f979 100644 --- a/public/locales/de/app.json +++ b/public/locales/de/app.json @@ -137,5 +137,7 @@ "Whether to enable single-key keyboard shortcuts, e.g. 'm' to mute/unmute the mic.": "Ob Tastenkürzel mit nur einer Taste aktiviert sein sollen, z. B. „m“ um das Mikrofon stumm/aktiv zu schalten.", "Single-key keyboard shortcuts": "Ein-Tasten-Tastenkürzel", "{{name}} (Waiting for video...)": "{{name}} (Warte auf Video …)", - "This feature is only supported on Firefox.": "Diese Funktion wird nur in Firefox unterstützt." + "This feature is only supported on Firefox.": "Diese Funktion wird nur in Firefox unterstützt.", + "<0>Submitting debug logs will help us track down the problem.": "<0>Übermittelte Problemberichte helfen uns, Fehler zu beheben.", + "<0>Oops, something's gone wrong.": "<0>Hoppla, etwas ist schiefgelaufen." } From dcbc3ed8657059abcc21552638f7507f4c0cbb43 Mon Sep 17 00:00:00 2001 From: Linerly Date: Wed, 4 Jan 2023 13:17:56 +0000 Subject: [PATCH 02/20] Translated using Weblate (Indonesian) Currently translated at 100.0% (141 of 141 strings) Translation: Element Call/element-call Translate-URL: https://translate.element.io/projects/element-call/element-call/id/ --- public/locales/id/app.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/public/locales/id/app.json b/public/locales/id/app.json index 0a236b1..dccfe8f 100644 --- a/public/locales/id/app.json +++ b/public/locales/id/app.json @@ -137,5 +137,7 @@ "Whether to enable single-key keyboard shortcuts, e.g. 'm' to mute/unmute the mic.": "Apakah pintasan papan ketik seharusnya diaktifkan, mis. 'm' untuk membisukan/menyuarakan mikrofon.", "Single-key keyboard shortcuts": "Pintasan papan ketik satu tombol", "{{name}} (Waiting for video...)": "{{name}} (Menunggu video...)", - "This feature is only supported on Firefox.": "Fitur ini hanya didukung di Firefox." + "This feature is only supported on Firefox.": "Fitur ini hanya didukung di Firefox.", + "<0>Submitting debug logs will help us track down the problem.": "<0>Mengirim catatan pengawakutuan akan membantu kami melacak masalahnya.", + "<0>Oops, something's gone wrong.": "<0>Aduh, ada yang salah." } From d45ea78ddb44b076b9f07131511a9b8658d734bc Mon Sep 17 00:00:00 2001 From: Glandos Date: Thu, 5 Jan 2023 08:40:42 +0000 Subject: [PATCH 03/20] Translated using Weblate (French) Currently translated at 100.0% (141 of 141 strings) Translation: Element Call/element-call Translate-URL: https://translate.element.io/projects/element-call/element-call/fr/ --- public/locales/fr/app.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/public/locales/fr/app.json b/public/locales/fr/app.json index ebee285..c8e9cce 100644 --- a/public/locales/fr/app.json +++ b/public/locales/fr/app.json @@ -137,5 +137,7 @@ "Whether to enable single-key keyboard shortcuts, e.g. 'm' to mute/unmute the mic.": "Bascule sur les raccourcis clavier à touche unique, par exemple « m » pour désactiver / activer le micro.", "Single-key keyboard shortcuts": "Raccourcis clavier en une touche", "{{name}} (Waiting for video...)": "{{name}} (En attente de vidéo…)", - "This feature is only supported on Firefox.": "Cette fonctionnalité est prise en charge dans Firefox uniquement." + "This feature is only supported on Firefox.": "Cette fonctionnalité est prise en charge dans Firefox uniquement.", + "<0>Submitting debug logs will help us track down the problem.": "<0>Soumettre les journaux de débogage nous aidera à déterminer le problème.", + "<0>Oops, something's gone wrong.": "<0>Oups, quelque chose s’est mal passé." } From 49cae76387451197d03ea6b180e13b02e85afef6 Mon Sep 17 00:00:00 2001 From: Ihor Hordiichuk Date: Wed, 4 Jan 2023 14:51:16 +0000 Subject: [PATCH 04/20] Translated using Weblate (Ukrainian) Currently translated at 100.0% (141 of 141 strings) Translation: Element Call/element-call Translate-URL: https://translate.element.io/projects/element-call/element-call/uk/ --- public/locales/uk/app.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/public/locales/uk/app.json b/public/locales/uk/app.json index a88df53..f7c6075 100644 --- a/public/locales/uk/app.json +++ b/public/locales/uk/app.json @@ -137,5 +137,7 @@ "Whether to enable single-key keyboard shortcuts, e.g. 'm' to mute/unmute the mic.": "Чи вмикати/вимикати мікрофон однією клавішею, наприклад, «m» для ввімкнення/вимкнення мікрофона.", "Single-key keyboard shortcuts": "Одноклавішні комбінації клавіш", "{{name}} (Waiting for video...)": "{{name}} (Очікування на відео...)", - "This feature is only supported on Firefox.": "Ця функція підтримується лише в браузері Firefox." + "This feature is only supported on Firefox.": "Ця функція підтримується лише в браузері Firefox.", + "<0>Submitting debug logs will help us track down the problem.": "<0>Надсилання журналів зневадження допоможе нам виявити проблему.", + "<0>Oops, something's gone wrong.": "<0>Йой, щось пішло не за планом." } From de31c099e3e4c673e792b94f9b10b86b4beec04c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Priit=20J=C3=B5er=C3=BC=C3=BCt?= Date: Thu, 5 Jan 2023 07:21:39 +0000 Subject: [PATCH 05/20] Translated using Weblate (Estonian) Currently translated at 100.0% (141 of 141 strings) Translation: Element Call/element-call Translate-URL: https://translate.element.io/projects/element-call/element-call/et/ --- public/locales/et/app.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/public/locales/et/app.json b/public/locales/et/app.json index 1a6a142..0ca2e14 100644 --- a/public/locales/et/app.json +++ b/public/locales/et/app.json @@ -137,5 +137,7 @@ "Whether to enable single-key keyboard shortcuts, e.g. 'm' to mute/unmute the mic.": "Kas kasutame üheklahvilisi kiirklahve, näiteks „m“ mikrofoni sisse/välja lülitamiseks.", "Single-key keyboard shortcuts": "Üheklahvilised kiirklahvid", "{{name}} (Waiting for video...)": "{{name}} (Ootame videovoo algust...)", - "This feature is only supported on Firefox.": "See funktsionaalsus on toetatud vaid Firefoxis." + "This feature is only supported on Firefox.": "See funktsionaalsus on toetatud vaid Firefoxis.", + "<0>Submitting debug logs will help us track down the problem.": "<0>Kui saadad meile vealogid, siis on lihtsam vea põhjust otsida.", + "<0>Oops, something's gone wrong.": "<0>Ohoo, midagi on nüüd katki." } From 62e98f6c47bf743288d9d5c252798b3e8af04bb3 Mon Sep 17 00:00:00 2001 From: Jozef Gaal Date: Wed, 4 Jan 2023 14:51:26 +0000 Subject: [PATCH 06/20] Translated using Weblate (Slovak) Currently translated at 100.0% (141 of 141 strings) Translation: Element Call/element-call Translate-URL: https://translate.element.io/projects/element-call/element-call/sk/ --- public/locales/sk/app.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/public/locales/sk/app.json b/public/locales/sk/app.json index b8ee171..9834347 100644 --- a/public/locales/sk/app.json +++ b/public/locales/sk/app.json @@ -137,5 +137,7 @@ "{{displayName}}, your call is now ended": "{{displayName}}, váš hovor je teraz ukončený", "{{count}} people connected|other": "{{count}} osôb pripojených", "{{count}} people connected|one": "{{count}} osoba pripojená", - "This feature is only supported on Firefox.": "Táto funkcia je podporovaná len v prehliadači Firefox." + "This feature is only supported on Firefox.": "Táto funkcia je podporovaná len v prehliadači Firefox.", + "<0>Submitting debug logs will help us track down the problem.": "<0>Odoslanie záznamov ladenia nám pomôže nájsť problém.", + "<0>Oops, something's gone wrong.": "<0>Hups, niečo sa pokazilo." } From 946f564f84119832c256f221dd6f0177769a300a Mon Sep 17 00:00:00 2001 From: Robin Townsend Date: Fri, 6 Jan 2023 10:39:29 -0500 Subject: [PATCH 07/20] Update matrix-js-sdk --- package.json | 2 +- yarn.lock | 18 +++++++++++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 1650912..3d38f48 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "i18next": "^21.10.0", "i18next-browser-languagedetector": "^6.1.8", "i18next-http-backend": "^1.4.4", - "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#2c8eece5ca5333c6e6a14e8ed53f359ed0e9e9bf", + "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#bba4a35665b99c988064f8485dce5f0fb525cdc8", "matrix-widget-api": "^1.0.0", "mermaid": "^8.13.8", "normalize.css": "^8.0.1", diff --git a/yarn.lock b/yarn.lock index 783b88d..b8384d1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1821,6 +1821,11 @@ resolved "https://registry.yarnpkg.com/@juggle/resize-observer/-/resize-observer-3.3.1.tgz#b50a781709c81e10701004214340f25475a171a0" integrity sha512-zMM9Ds+SawiUkakS7y94Ymqx+S0ORzpG3frZirN3l+UlXUmSUR7hF4wxCVqW+ei94JzV5kt0uXBcoOEAuiydrw== +"@matrix-org/matrix-sdk-crypto-js@^0.1.0-alpha.2": + version "0.1.0-alpha.2" + resolved "https://registry.yarnpkg.com/@matrix-org/matrix-sdk-crypto-js/-/matrix-sdk-crypto-js-0.1.0-alpha.2.tgz#a09d0fea858e817da971a3c9f904632ef7b49eb6" + integrity sha512-oVkBCh9YP7H9i4gAoQbZzswniczfo/aIptNa4dxRi4Ff9lSvUCFv6Hvzi7C+90c0/PWZLXjIDTIAWZYmwyd2fA== + "@matrix-org/olm@https://gitlab.matrix.org/api/v4/projects/27/packages/npm/@matrix-org/olm/-/@matrix-org/olm-3.2.8.tgz": version "3.2.8" resolved "https://gitlab.matrix.org/api/v4/projects/27/packages/npm/@matrix-org/olm/-/@matrix-org/olm-3.2.8.tgz#8d53636d045e1776e2a2ec6613e57330dd9ce856" @@ -10357,11 +10362,12 @@ matrix-events-sdk@0.0.1: resolved "https://registry.yarnpkg.com/matrix-events-sdk/-/matrix-events-sdk-0.0.1.tgz#c8c38911e2cb29023b0bbac8d6f32e0de2c957dd" integrity sha512-1QEOsXO+bhyCroIe2/A5OwaxHvBm7EsSQ46DEDn8RBIfQwN5HWBpFvyWWR4QY0KHPPnnJdI99wgRiAl7Ad5qaA== -"matrix-js-sdk@github:matrix-org/matrix-js-sdk#2c8eece5ca5333c6e6a14e8ed53f359ed0e9e9bf": - version "21.2.0" - resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/2c8eece5ca5333c6e6a14e8ed53f359ed0e9e9bf" +"matrix-js-sdk@github:matrix-org/matrix-js-sdk#bba4a35665b99c988064f8485dce5f0fb525cdc8": + version "23.0.0" + resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/bba4a35665b99c988064f8485dce5f0fb525cdc8" dependencies: "@babel/runtime" "^7.12.5" + "@matrix-org/matrix-sdk-crypto-js" "^0.1.0-alpha.2" another-json "^0.2.0" bs58 "^5.0.0" content-type "^1.0.4" @@ -10372,6 +10378,7 @@ matrix-events-sdk@0.0.1: qs "^6.9.6" sdp-transform "^2.14.1" unhomoglyph "^1.0.6" + uuid "9" matrix-widget-api@^1.0.0: version "1.1.1" @@ -14294,6 +14301,11 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== +uuid@9: + version "9.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" + integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== + uuid@^3.3.2: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" From 881054e2657fa42606ca59a5f7cb4c9dda79b907 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Sat, 7 Jan 2023 10:09:20 +0100 Subject: [PATCH 08/20] Hide local volume controls for tiles with no audio MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- src/video-grid/VideoTile.tsx | 20 ++++++++++++-------- src/video-grid/VideoTileContainer.tsx | 2 ++ src/video-grid/useCallFeed.ts | 2 ++ 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/video-grid/VideoTile.tsx b/src/video-grid/VideoTile.tsx index a7792c6..afaa48e 100644 --- a/src/video-grid/VideoTile.tsx +++ b/src/video-grid/VideoTile.tsx @@ -36,6 +36,7 @@ interface Props { mediaRef?: React.RefObject; onOptionsPress?: () => void; localVolume?: number; + hasAudio?: boolean; maximised?: boolean; fullscreen?: boolean; onFullscreen?: () => void; @@ -58,6 +59,7 @@ export const VideoTile = forwardRef( mediaRef, onOptionsPress, localVolume, + hasAudio, maximised, fullscreen, onFullscreen, @@ -74,14 +76,16 @@ export const VideoTile = forwardRef( const toolbarButtons: JSX.Element[] = []; if (connectionState == ConnectionState.Connected && !isLocal) { - toolbarButtons.push( - - ); + if (hasAudio) { + toolbarButtons.push( + + ); + } if (screenshare) { toolbarButtons.push( diff --git a/src/video-grid/VideoTileContainer.tsx b/src/video-grid/VideoTileContainer.tsx index 10f65c7..249c787 100644 --- a/src/video-grid/VideoTileContainer.tsx +++ b/src/video-grid/VideoTileContainer.tsx @@ -62,6 +62,7 @@ export function VideoTileContainer({ audioMuted, videoMuted, localVolume, + hasAudio, speaking, stream, purpose, @@ -109,6 +110,7 @@ export function VideoTileContainer({ avatar={getAvatar && getAvatar(item.member, width, height)} onOptionsPress={onOptionsPress} localVolume={localVolume} + hasAudio={hasAudio} maximised={maximised} fullscreen={fullscreen} onFullscreen={onFullscreenCallback} diff --git a/src/video-grid/useCallFeed.ts b/src/video-grid/useCallFeed.ts index 229df3c..719c81d 100644 --- a/src/video-grid/useCallFeed.ts +++ b/src/video-grid/useCallFeed.ts @@ -25,6 +25,7 @@ interface CallFeedState { videoMuted: boolean; audioMuted: boolean; localVolume: number; + hasAudio: boolean; disposed: boolean | undefined; stream: MediaStream | undefined; purpose: SDPStreamMetadataPurpose | undefined; @@ -38,6 +39,7 @@ function getCallFeedState(callFeed: CallFeed | undefined): CallFeedState { videoMuted: callFeed ? callFeed.isVideoMuted() : true, audioMuted: callFeed ? callFeed.isAudioMuted() : true, localVolume: callFeed ? callFeed.getLocalVolume() : 0, + hasAudio: callFeed ? callFeed.stream.getAudioTracks().length >= 1 : false, disposed: callFeed ? callFeed.disposed : undefined, stream: callFeed ? callFeed.stream : undefined, purpose: callFeed ? callFeed.purpose : undefined, From de5b58792ea57365b5e68ac90f814499d0d52498 Mon Sep 17 00:00:00 2001 From: Robin Townsend Date: Mon, 9 Jan 2023 10:32:05 -0500 Subject: [PATCH 09/20] Update matrix-js-sdk --- package.json | 2 +- yarn.lock | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 3d38f48..8f423e5 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "i18next": "^21.10.0", "i18next-browser-languagedetector": "^6.1.8", "i18next-http-backend": "^1.4.4", - "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#bba4a35665b99c988064f8485dce5f0fb525cdc8", + "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#c3d422f5fb1efac400da4c4ade592db3831445f9", "matrix-widget-api": "^1.0.0", "mermaid": "^8.13.8", "normalize.css": "^8.0.1", diff --git a/yarn.lock b/yarn.lock index b8384d1..8b03b14 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10362,9 +10362,9 @@ matrix-events-sdk@0.0.1: resolved "https://registry.yarnpkg.com/matrix-events-sdk/-/matrix-events-sdk-0.0.1.tgz#c8c38911e2cb29023b0bbac8d6f32e0de2c957dd" integrity sha512-1QEOsXO+bhyCroIe2/A5OwaxHvBm7EsSQ46DEDn8RBIfQwN5HWBpFvyWWR4QY0KHPPnnJdI99wgRiAl7Ad5qaA== -"matrix-js-sdk@github:matrix-org/matrix-js-sdk#bba4a35665b99c988064f8485dce5f0fb525cdc8": +"matrix-js-sdk@github:matrix-org/matrix-js-sdk#c3d422f5fb1efac400da4c4ade592db3831445f9": version "23.0.0" - resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/bba4a35665b99c988064f8485dce5f0fb525cdc8" + resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/c3d422f5fb1efac400da4c4ade592db3831445f9" dependencies: "@babel/runtime" "^7.12.5" "@matrix-org/matrix-sdk-crypto-js" "^0.1.0-alpha.2" @@ -10375,7 +10375,6 @@ matrix-events-sdk@0.0.1: matrix-events-sdk "0.0.1" matrix-widget-api "^1.0.0" p-retry "4" - qs "^6.9.6" sdp-transform "^2.14.1" unhomoglyph "^1.0.6" uuid "9" @@ -12100,7 +12099,7 @@ qs@6.10.3: dependencies: side-channel "^1.0.4" -qs@^6.10.0, qs@^6.9.6: +qs@^6.10.0: version "6.11.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== From 449c1c9d79f1c694849fd74e5b5c903118425ac5 Mon Sep 17 00:00:00 2001 From: Robin Townsend Date: Mon, 9 Jan 2023 10:49:01 -0500 Subject: [PATCH 10/20] Try updating Olm to fix type errors --- package.json | 2 +- yarn.lock | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 8f423e5..b271f5d 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ }, "dependencies": { "@juggle/resize-observer": "^3.3.1", - "@matrix-org/olm": "https://gitlab.matrix.org/api/v4/projects/27/packages/npm/@matrix-org/olm/-/@matrix-org/olm-3.2.8.tgz", + "@matrix-org/olm": "https://gitlab.matrix.org/api/v4/projects/27/packages/npm/@matrix-org/olm/-/@matrix-org/olm-3.2.14.tgz", "@react-aria/button": "^3.3.4", "@react-aria/dialog": "^3.1.4", "@react-aria/focus": "^3.5.0", diff --git a/yarn.lock b/yarn.lock index 8b03b14..bd5b2ce 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1826,9 +1826,9 @@ resolved "https://registry.yarnpkg.com/@matrix-org/matrix-sdk-crypto-js/-/matrix-sdk-crypto-js-0.1.0-alpha.2.tgz#a09d0fea858e817da971a3c9f904632ef7b49eb6" integrity sha512-oVkBCh9YP7H9i4gAoQbZzswniczfo/aIptNa4dxRi4Ff9lSvUCFv6Hvzi7C+90c0/PWZLXjIDTIAWZYmwyd2fA== -"@matrix-org/olm@https://gitlab.matrix.org/api/v4/projects/27/packages/npm/@matrix-org/olm/-/@matrix-org/olm-3.2.8.tgz": - version "3.2.8" - resolved "https://gitlab.matrix.org/api/v4/projects/27/packages/npm/@matrix-org/olm/-/@matrix-org/olm-3.2.8.tgz#8d53636d045e1776e2a2ec6613e57330dd9ce856" +"@matrix-org/olm@https://gitlab.matrix.org/api/v4/projects/27/packages/npm/@matrix-org/olm/-/@matrix-org/olm-3.2.14.tgz": + version "3.2.14" + resolved "https://gitlab.matrix.org/api/v4/projects/27/packages/npm/@matrix-org/olm/-/@matrix-org/olm-3.2.14.tgz#acd96c00a881d0f462e1f97a56c73742c8dbc984" "@mdx-js/mdx@^1.6.22": version "1.6.22" @@ -10375,6 +10375,7 @@ matrix-events-sdk@0.0.1: matrix-events-sdk "0.0.1" matrix-widget-api "^1.0.0" p-retry "4" + qs "^6.9.6" sdp-transform "^2.14.1" unhomoglyph "^1.0.6" uuid "9" From 4fd76f95995665474499e6e4087607c70c5c27cf Mon Sep 17 00:00:00 2001 From: Robin Townsend Date: Mon, 9 Jan 2023 11:10:59 -0500 Subject: [PATCH 11/20] Work around mute state updates being slow Since the app already determines when someone is speaking, we can use that information to make it less obvious when to-device messages are being slow to deliver mute state updates. --- src/video-grid/VideoTile.tsx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/video-grid/VideoTile.tsx b/src/video-grid/VideoTile.tsx index 8695a7c..6ed1dd4 100644 --- a/src/video-grid/VideoTile.tsx +++ b/src/video-grid/VideoTile.tsx @@ -137,7 +137,13 @@ export const VideoTile = forwardRef( ) : (
- {audioMuted && !videoMuted && } + { + /* If the user is speaking, it's safe to say they're unmuted. + Mute state is currently sent over to-device messages, which + aren't quite real-time, so this is an important kludge to make + sure no one appears muted when they've clearly begun talking. */ + audioMuted && !videoMuted && !speaking && + } {videoMuted && } {caption}
From f20fc78bd7a4a5b48ed5f36454c5658b148f99ff Mon Sep 17 00:00:00 2001 From: David Baker Date: Thu, 12 Jan 2023 11:28:15 +0000 Subject: [PATCH 12/20] Use branch of js-sdk with Olm debugging Pulls in changes from https://github.com/matrix-org/matrix-js-sdk/pull/3055 Not intended to stay long-term. --- package.json | 2 +- yarn.lock | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index b271f5d..4646ef1 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "i18next": "^21.10.0", "i18next-browser-languagedetector": "^6.1.8", "i18next-http-backend": "^1.4.4", - "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#c3d422f5fb1efac400da4c4ade592db3831445f9", + "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#79575ef3760bb6085b7b770f241b3d32756d5b96", "matrix-widget-api": "^1.0.0", "mermaid": "^8.13.8", "normalize.css": "^8.0.1", diff --git a/yarn.lock b/yarn.lock index bd5b2ce..cf7335d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10362,9 +10362,9 @@ matrix-events-sdk@0.0.1: resolved "https://registry.yarnpkg.com/matrix-events-sdk/-/matrix-events-sdk-0.0.1.tgz#c8c38911e2cb29023b0bbac8d6f32e0de2c957dd" integrity sha512-1QEOsXO+bhyCroIe2/A5OwaxHvBm7EsSQ46DEDn8RBIfQwN5HWBpFvyWWR4QY0KHPPnnJdI99wgRiAl7Ad5qaA== -"matrix-js-sdk@github:matrix-org/matrix-js-sdk#c3d422f5fb1efac400da4c4ade592db3831445f9": +"matrix-js-sdk@github:matrix-org/matrix-js-sdk#79575ef3760bb6085b7b770f241b3d32756d5b96": version "23.0.0" - resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/c3d422f5fb1efac400da4c4ade592db3831445f9" + resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/79575ef3760bb6085b7b770f241b3d32756d5b96" dependencies: "@babel/runtime" "^7.12.5" "@matrix-org/matrix-sdk-crypto-js" "^0.1.0-alpha.2" @@ -10375,7 +10375,6 @@ matrix-events-sdk@0.0.1: matrix-events-sdk "0.0.1" matrix-widget-api "^1.0.0" p-retry "4" - qs "^6.9.6" sdp-transform "^2.14.1" unhomoglyph "^1.0.6" uuid "9" From 30688715cd610c77d51e484396039d4b61512106 Mon Sep 17 00:00:00 2001 From: David Baker Date: Thu, 12 Jan 2023 13:20:11 +0000 Subject: [PATCH 13/20] Revert f20fc78bd7a4a5b48ed5f36454c5658b148f99ff --- package.json | 2 +- yarn.lock | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 4646ef1..b271f5d 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "i18next": "^21.10.0", "i18next-browser-languagedetector": "^6.1.8", "i18next-http-backend": "^1.4.4", - "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#79575ef3760bb6085b7b770f241b3d32756d5b96", + "matrix-js-sdk": "github:matrix-org/matrix-js-sdk#c3d422f5fb1efac400da4c4ade592db3831445f9", "matrix-widget-api": "^1.0.0", "mermaid": "^8.13.8", "normalize.css": "^8.0.1", diff --git a/yarn.lock b/yarn.lock index cf7335d..bd5b2ce 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10362,9 +10362,9 @@ matrix-events-sdk@0.0.1: resolved "https://registry.yarnpkg.com/matrix-events-sdk/-/matrix-events-sdk-0.0.1.tgz#c8c38911e2cb29023b0bbac8d6f32e0de2c957dd" integrity sha512-1QEOsXO+bhyCroIe2/A5OwaxHvBm7EsSQ46DEDn8RBIfQwN5HWBpFvyWWR4QY0KHPPnnJdI99wgRiAl7Ad5qaA== -"matrix-js-sdk@github:matrix-org/matrix-js-sdk#79575ef3760bb6085b7b770f241b3d32756d5b96": +"matrix-js-sdk@github:matrix-org/matrix-js-sdk#c3d422f5fb1efac400da4c4ade592db3831445f9": version "23.0.0" - resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/79575ef3760bb6085b7b770f241b3d32756d5b96" + resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/c3d422f5fb1efac400da4c4ade592db3831445f9" dependencies: "@babel/runtime" "^7.12.5" "@matrix-org/matrix-sdk-crypto-js" "^0.1.0-alpha.2" @@ -10375,6 +10375,7 @@ matrix-events-sdk@0.0.1: matrix-events-sdk "0.0.1" matrix-widget-api "^1.0.0" p-retry "4" + qs "^6.9.6" sdp-transform "^2.14.1" unhomoglyph "^1.0.6" uuid "9" From 5f265344964a2a017b968872475b11d8613884fc Mon Sep 17 00:00:00 2001 From: David Baker Date: Thu, 12 Jan 2023 15:17:46 +0000 Subject: [PATCH 14/20] Use IndexedDB storage in dev mode, just without the worker As per comment, we can't use workers in Vite dev mode. We previously fell back to the memory store but this ends up with it working significantly differently in dev mode to production, eg. dev mode would always start by doing an initial sync, so old to-device messages would arrive again. There's no need to fall all the way back to the memory store though, we can use the IndexedDB store without the worker. --- src/matrix-utils.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/matrix-utils.ts b/src/matrix-utils.ts index 3e01d16..dc55702 100644 --- a/src/matrix-utils.ts +++ b/src/matrix-utils.ts @@ -94,12 +94,17 @@ export async function initClient( const storeOpts = {} as ICreateClientOpts; - if (indexedDB && localStorage && !import.meta.env.DEV) { + if (indexedDB && localStorage) { storeOpts.store = new IndexedDBStore({ indexedDB: window.indexedDB, localStorage, dbName: SYNC_STORE_NAME, - workerFactory: () => new IndexedDBWorker(), + // We can't use the worker in dev mode because Vite simply doesn't bundle workers + // in dev mode: it expects them to use native modules. Ours don't, and even then only + // Chrome supports it. (It bundles them fine in production mode.) + workerFactory: import.meta.env.DEV + ? undefined + : () => new IndexedDBWorker(), }); } else if (localStorage) { storeOpts.store = new MemoryStore({ localStorage }); From d9b0e08ea2a3cb87f79f4507ece3f4bc147d5380 Mon Sep 17 00:00:00 2001 From: David Baker Date: Thu, 12 Jan 2023 16:20:37 +0000 Subject: [PATCH 15/20] Fix caching headers on Docker image --- config/nginx.conf | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/config/nginx.conf b/config/nginx.conf index 2af6c30..f725346 100644 --- a/config/nginx.conf +++ b/config/nginx.conf @@ -2,9 +2,24 @@ server { listen 8080; server_name localhost; + root /app; + location / { - root /app; + # disable cache entriely by default (apart from Etag which is accurate enough) + add_header Cache-Control 'private no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0'; + if_modified_since off; + expires off; + # also turn off last-modified since they are just the timestamps of the file in the docker image + # and may or may not bear any resemblance to when the resource changed + add_header Last-Modified ""; + try_files $uri /$uri /index.html; } + + # assets can be cached because they have hashed filenames + location /assets { + expires 1w; + add_header Cache-Control "public, no-transform"; + } } From 9ba4ce429fbc86f51a0412a529effdfc103f7bbb Mon Sep 17 00:00:00 2001 From: David Baker Date: Thu, 12 Jan 2023 17:31:19 +0000 Subject: [PATCH 16/20] Disable keyboard shortcuts when feedback modal is open --- src/room/GroupCallView.tsx | 2 + src/room/InCallView.tsx | 10 ++++ src/room/useGroupCall.ts | 66 +------------------------- src/useKeyboardShortcuts.ts | 92 +++++++++++++++++++++++++++++++++++++ 4 files changed, 106 insertions(+), 64 deletions(-) create mode 100644 src/useKeyboardShortcuts.ts diff --git a/src/room/GroupCallView.tsx b/src/room/GroupCallView.tsx index e10c4df..8867ed4 100644 --- a/src/room/GroupCallView.tsx +++ b/src/room/GroupCallView.tsx @@ -75,6 +75,7 @@ export function GroupCallView({ toggleLocalVideoMuted, toggleMicrophoneMuted, toggleScreensharing, + setMicrophoneMuted, requestingScreenshare, isScreensharing, screenshareFeeds, @@ -251,6 +252,7 @@ export function GroupCallView({ localVideoMuted={localVideoMuted} toggleLocalVideoMuted={toggleLocalVideoMuted} toggleMicrophoneMuted={toggleMicrophoneMuted} + setMicrophoneMuted={setMicrophoneMuted} userMediaFeeds={userMediaFeeds} activeSpeaker={activeSpeaker} onLeave={onLeave} diff --git a/src/room/InCallView.tsx b/src/room/InCallView.tsx index 232d001..2969c9a 100644 --- a/src/room/InCallView.tsx +++ b/src/room/InCallView.tsx @@ -63,6 +63,7 @@ import { usePrefersReducedMotion } from "../usePrefersReducedMotion"; import { ParticipantInfo } from "./useGroupCall"; import { TileDescriptor } from "../video-grid/TileDescriptor"; import { AudioSink } from "../video-grid/AudioSink"; +import { useKeyboardShortcuts } from "../useKeyboardShortcuts"; const canScreenshare = "getDisplayMedia" in (navigator.mediaDevices ?? {}); // There is currently a bug in Safari our our code with cloning and sending MediaStreams @@ -81,6 +82,7 @@ interface Props { toggleLocalVideoMuted: () => void; toggleMicrophoneMuted: () => void; toggleScreensharing: () => void; + setMicrophoneMuted: (muted: boolean) => void; userMediaFeeds: CallFeed[]; activeSpeaker: CallFeed | null; onLeave: () => void; @@ -101,6 +103,7 @@ export function InCallView({ localVideoMuted, toggleLocalVideoMuted, toggleMicrophoneMuted, + setMicrophoneMuted, userMediaFeeds, activeSpeaker, onLeave, @@ -141,6 +144,13 @@ export function InCallView({ const { hideScreensharing } = useUrlParams(); + useKeyboardShortcuts( + !feedbackModalState.isOpen, + toggleMicrophoneMuted, + toggleLocalVideoMuted, + setMicrophoneMuted + ); + useEffect(() => { widget?.api.transport.send( layout === "freedom" diff --git a/src/room/useGroupCall.ts b/src/room/useGroupCall.ts index 77ef38f..f2d7f27 100644 --- a/src/room/useGroupCall.ts +++ b/src/room/useGroupCall.ts @@ -32,8 +32,6 @@ import { usePageUnload } from "./usePageUnload"; import { PosthogAnalytics } from "../PosthogAnalytics"; import { TranslatedError, translatedError } from "../TranslatedError"; import { ElementWidgetActions, ScreenshareStartData, widget } from "../widget"; -import { getSetting } from "../settings/useSetting"; -import { useEventTarget } from "../useEvents"; export enum ConnectionState { EstablishingCall = "establishing call", // call hasn't been established yet @@ -60,6 +58,7 @@ export interface UseGroupCallReturnType { toggleLocalVideoMuted: () => void; toggleMicrophoneMuted: () => void; toggleScreensharing: () => void; + setMicrophoneMuted: (muted: boolean) => void; requestingScreenshare: boolean; isScreensharing: boolean; screenshareFeeds: CallFeed[]; @@ -472,68 +471,6 @@ export function useGroupCall(groupCall: GroupCall): UseGroupCallReturnType { } }, [t, updateState]); - const [spacebarHeld, setSpacebarHeld] = useState(false); - - useEventTarget( - window, - "keydown", - useCallback( - (event: KeyboardEvent) => { - // Check if keyboard shortcuts are enabled - const keyboardShortcuts = getSetting("keyboard-shortcuts", true); - if (!keyboardShortcuts) { - return; - } - - if (event.key === "m") { - toggleMicrophoneMuted(); - } else if (event.key == "v") { - toggleLocalVideoMuted(); - } else if (event.key === " ") { - setSpacebarHeld(true); - setMicrophoneMuted(false); - } - }, - [ - toggleLocalVideoMuted, - toggleMicrophoneMuted, - setMicrophoneMuted, - setSpacebarHeld, - ] - ) - ); - - useEventTarget( - window, - "keyup", - useCallback( - (event: KeyboardEvent) => { - // Check if keyboard shortcuts are enabled - const keyboardShortcuts = getSetting("keyboard-shortcuts", true); - if (!keyboardShortcuts) { - return; - } - - if (event.key === " ") { - setSpacebarHeld(false); - setMicrophoneMuted(true); - } - }, - [setMicrophoneMuted, setSpacebarHeld] - ) - ); - - useEventTarget( - window, - "blur", - useCallback(() => { - if (spacebarHeld) { - setSpacebarHeld(false); - setMicrophoneMuted(true); - } - }, [setMicrophoneMuted, setSpacebarHeld, spacebarHeld]) - ); - return { state, localCallFeed, @@ -548,6 +485,7 @@ export function useGroupCall(groupCall: GroupCall): UseGroupCallReturnType { toggleLocalVideoMuted, toggleMicrophoneMuted, toggleScreensharing, + setMicrophoneMuted, requestingScreenshare, isScreensharing, screenshareFeeds, diff --git a/src/useKeyboardShortcuts.ts b/src/useKeyboardShortcuts.ts new file mode 100644 index 0000000..b9d69ec --- /dev/null +++ b/src/useKeyboardShortcuts.ts @@ -0,0 +1,92 @@ +/* +Copyright 2022-2023 New Vector 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. +*/ + +import { useCallback, useState } from "react"; + +import { getSetting } from "./settings/useSetting"; +import { useEventTarget } from "./useEvents"; + +export function useKeyboardShortcuts( + enabled: boolean, + toggleMicrophoneMuted: () => void, + toggleLocalVideoMuted: () => void, + setMicrophoneMuted: (muted: boolean) => void +) { + const [spacebarHeld, setSpacebarHeld] = useState(false); + + useEventTarget( + window, + "keydown", + useCallback( + (event: KeyboardEvent) => { + if (!enabled) return; + // Check if keyboard shortcuts are enabled + const keyboardShortcuts = getSetting("keyboard-shortcuts", true); + if (!keyboardShortcuts) { + return; + } + + if (event.key === "m") { + toggleMicrophoneMuted(); + } else if (event.key == "v") { + toggleLocalVideoMuted(); + } else if (event.key === " ") { + setSpacebarHeld(true); + setMicrophoneMuted(false); + } + }, + [ + enabled, + toggleLocalVideoMuted, + toggleMicrophoneMuted, + setMicrophoneMuted, + setSpacebarHeld, + ] + ) + ); + + useEventTarget( + window, + "keyup", + useCallback( + (event: KeyboardEvent) => { + if (!enabled) return; + // Check if keyboard shortcuts are enabled + const keyboardShortcuts = getSetting("keyboard-shortcuts", true); + if (!keyboardShortcuts) { + return; + } + + if (event.key === " ") { + setSpacebarHeld(false); + setMicrophoneMuted(true); + } + }, + [enabled, setMicrophoneMuted, setSpacebarHeld] + ) + ); + + useEventTarget( + window, + "blur", + useCallback(() => { + if (spacebarHeld) { + setSpacebarHeld(false); + setMicrophoneMuted(true); + } + }, [setMicrophoneMuted, setSpacebarHeld, spacebarHeld]) + ); +} From f2193302c12ee247474ee467edcfc7e91f74a847 Mon Sep 17 00:00:00 2001 From: David Baker Date: Thu, 12 Jan 2023 18:26:21 +0000 Subject: [PATCH 17/20] Prevent mute event spam from key repeats --- src/useKeyboardShortcuts.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/useKeyboardShortcuts.ts b/src/useKeyboardShortcuts.ts index b9d69ec..6356b52 100644 --- a/src/useKeyboardShortcuts.ts +++ b/src/useKeyboardShortcuts.ts @@ -43,13 +43,14 @@ export function useKeyboardShortcuts( toggleMicrophoneMuted(); } else if (event.key == "v") { toggleLocalVideoMuted(); - } else if (event.key === " ") { + } else if (event.key === " " && !spacebarHeld) { setSpacebarHeld(true); setMicrophoneMuted(false); } }, [ enabled, + spacebarHeld, toggleLocalVideoMuted, toggleMicrophoneMuted, setMicrophoneMuted, From a5977fc9924235ff007c88ad201b3baf6e6609df Mon Sep 17 00:00:00 2001 From: David Baker Date: Fri, 13 Jan 2023 11:52:40 +0000 Subject: [PATCH 18/20] Rename to useCallViewKeyboardShortcuts --- src/room/InCallView.tsx | 4 ++-- ...seKeyboardShortcuts.ts => useCallViewKeyboardShortcuts.ts} | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) rename src/{useKeyboardShortcuts.ts => useCallViewKeyboardShortcuts.ts} (98%) diff --git a/src/room/InCallView.tsx b/src/room/InCallView.tsx index 2969c9a..2214501 100644 --- a/src/room/InCallView.tsx +++ b/src/room/InCallView.tsx @@ -63,7 +63,7 @@ import { usePrefersReducedMotion } from "../usePrefersReducedMotion"; import { ParticipantInfo } from "./useGroupCall"; import { TileDescriptor } from "../video-grid/TileDescriptor"; import { AudioSink } from "../video-grid/AudioSink"; -import { useKeyboardShortcuts } from "../useKeyboardShortcuts"; +import { useCallViewKeyboardShortcuts } from "../useCallViewKeyboardShortcuts"; const canScreenshare = "getDisplayMedia" in (navigator.mediaDevices ?? {}); // There is currently a bug in Safari our our code with cloning and sending MediaStreams @@ -144,7 +144,7 @@ export function InCallView({ const { hideScreensharing } = useUrlParams(); - useKeyboardShortcuts( + useCallViewKeyboardShortcuts( !feedbackModalState.isOpen, toggleMicrophoneMuted, toggleLocalVideoMuted, diff --git a/src/useKeyboardShortcuts.ts b/src/useCallViewKeyboardShortcuts.ts similarity index 98% rename from src/useKeyboardShortcuts.ts rename to src/useCallViewKeyboardShortcuts.ts index b9d69ec..ccad6a8 100644 --- a/src/useKeyboardShortcuts.ts +++ b/src/useCallViewKeyboardShortcuts.ts @@ -19,7 +19,7 @@ import { useCallback, useState } from "react"; import { getSetting } from "./settings/useSetting"; import { useEventTarget } from "./useEvents"; -export function useKeyboardShortcuts( +export function useCallViewKeyboardShortcuts( enabled: boolean, toggleMicrophoneMuted: () => void, toggleLocalVideoMuted: () => void, From 1b08a5cac33348d2eebe6081582019ba6db02a20 Mon Sep 17 00:00:00 2001 From: David Baker Date: Fri, 13 Jan 2023 11:56:29 +0000 Subject: [PATCH 19/20] Rename file --- src/{useKeyboardShortcuts.ts => useCallViewKeyboardShortcuts.ts} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/{useKeyboardShortcuts.ts => useCallViewKeyboardShortcuts.ts} (100%) diff --git a/src/useKeyboardShortcuts.ts b/src/useCallViewKeyboardShortcuts.ts similarity index 100% rename from src/useKeyboardShortcuts.ts rename to src/useCallViewKeyboardShortcuts.ts From e0f0dccc5511732d58c308c7d43afa10c743e2ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Fri, 13 Jan 2023 17:42:15 +0100 Subject: [PATCH 20/20] Reduce diff MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- src/ClientContext.tsx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/ClientContext.tsx b/src/ClientContext.tsx index bedcbc6..fa83f5d 100644 --- a/src/ClientContext.tsx +++ b/src/ClientContext.tsx @@ -30,7 +30,11 @@ import { logger } from "matrix-js-sdk/src/logger"; import { useTranslation } from "react-i18next"; import { ErrorView } from "./FullScreenView"; -import { initClient, CryptoStoreIntegrityError } from "./matrix-utils"; +import { + initClient, + CryptoStoreIntegrityError, + fallbackICEServerAllowed, +} from "./matrix-utils"; import { widget } from "./widget"; import { PosthogAnalytics, RegistrationType } from "./PosthogAnalytics"; import { translatedError } from "./TranslatedError"; @@ -139,6 +143,7 @@ export const ClientProvider: FC = ({ children }) => { accessToken: access_token, userId: user_id, deviceId: device_id, + fallbackICEServerAllowed: fallbackICEServerAllowed, }, true ), @@ -154,6 +159,7 @@ export const ClientProvider: FC = ({ children }) => { accessToken: access_token, userId: user_id, deviceId: device_id, + fallbackICEServerAllowed: fallbackICEServerAllowed, }, false // Don't need the crypto store just to log out );