diff --git a/front/src/Components/EnableCamera/HorizontalSoundMeterWidget.svelte b/front/src/Components/EnableCamera/HorizontalSoundMeterWidget.svelte index e7f721c1..84352ebb 100644 --- a/front/src/Components/EnableCamera/HorizontalSoundMeterWidget.svelte +++ b/front/src/Components/EnableCamera/HorizontalSoundMeterWidget.svelte @@ -10,9 +10,11 @@ let timeout; const soundMeter = new SoundMeter(); + let display = false; $: { if (stream && stream.getAudioTracks().length > 0) { + display = true; soundMeter.connectToSource(stream, new AudioContext()); if (timeout) { @@ -28,6 +30,8 @@ } }, 100); + } else { + display = false; } } @@ -53,7 +57,7 @@ -
0}> +
{#each [...Array(NB_BARS).keys()] as i}
{/each} diff --git a/front/src/Components/SoundMeterWidget.svelte b/front/src/Components/SoundMeterWidget.svelte index d96b9681..40c467b1 100644 --- a/front/src/Components/SoundMeterWidget.svelte +++ b/front/src/Components/SoundMeterWidget.svelte @@ -10,9 +10,11 @@ let timeout; const soundMeter = new SoundMeter(); + let display = false; $: { if (stream && stream.getAudioTracks().length > 0) { + display = true; soundMeter.connectToSource(stream, new AudioContext()); if (timeout) { @@ -28,6 +30,8 @@ } }, 100); + } else { + display = false; } } @@ -40,7 +44,7 @@ -
0}> +
1}> 2}> 3}> diff --git a/front/src/Stores/MediaStore.ts b/front/src/Stores/MediaStore.ts index 6d6fb4a8..7d1911a4 100644 --- a/front/src/Stores/MediaStore.ts +++ b/front/src/Stores/MediaStore.ts @@ -418,13 +418,15 @@ export const localStreamStore = derived, LocalS error: new Error('Unable to access your camera or microphone. You need to use a HTTPS connection.'), constraints }); + return; } else { //throw new Error('Unable to access your camera or microphone. Your browser is too old.'); set({ type: 'error', - error: new Error('Unable to access your camera or microphone. Your browser is too old.'), + error: new Error('Unable to access your camera or microphone. Your browser is too old. Please consider upgrading your browser or try using a recent version of Chrome.'), constraints }); + return; } } diff --git a/front/src/WebRtc/MediaManager.ts b/front/src/WebRtc/MediaManager.ts index 180b5746..7b527962 100644 --- a/front/src/WebRtc/MediaManager.ts +++ b/front/src/WebRtc/MediaManager.ts @@ -440,12 +440,32 @@ export class MediaManager { public getNotification(){ //Get notification if (!DISABLE_NOTIFICATIONS && window.Notification && Notification.permission !== "granted") { - Notification.requestPermission().catch((err) => { - console.error(`Notification permission error`, err); - }); + if (this.checkNotificationPromise()) { + Notification.requestPermission().catch((err) => { + console.error(`Notification permission error`, err); + }); + } else { + Notification.requestPermission(); + } } } + /** + * Return true if the browser supports the modern version of the Notification API (which is Promise based) or false + * if we are on Safari... + * + * See https://developer.mozilla.org/en-US/docs/Web/API/Notifications_API/Using_the_Notifications_API + */ + private checkNotificationPromise(): boolean { + try { + Notification.requestPermission().then(); + } catch(e) { + return false; + } + + return true; + } + public createNotification(userName: string){ if(this.focused){ return;