-
+
-
-
-
{
+ this.qualityWarningInGracePeriodTimeout = null
+ }, 10000)
+ },
+ },
+
created() {
// The standard "getDisplayMedia" does not support pre-filtering the
// type of display sources, so the unified menu is used in that case
@@ -476,10 +560,6 @@ export default {
this.isQualityWarningTooltipDismissed = true
}
},
-
- handleStopFollowing() {
- this.$store.dispatch('selectedVideoPeerId', null)
- },
},
}
@@ -507,14 +587,7 @@ export default {
border-bottom-color: transparent;
}
-.nameIndicator {
- position: absolute;
- right: 20px;
- bottom: 12px;
- z-index: 1;
-}
-
-.nameIndicator button {
+.buttons-bar button, .buttons-bar button:active {
background-color: transparent;
border: none;
margin: 0;
@@ -523,34 +596,34 @@ export default {
background-size: 24px;
}
-.nameIndicator #screensharing-menu button {
+.buttons-bar #screensharing-menu button {
width: 100%;
height: auto;
}
-.nameIndicator button.audio-disabled,
-.nameIndicator button.video-disabled,
-.nameIndicator button.screensharing-disabled {
+.buttons-bar button.audio-disabled,
+.buttons-bar button.video-disabled,
+.buttons-bar button.screensharing-disabled {
opacity: .7;
}
-.nameIndicator button.audio-disabled:not(.no-audio-available),
-.nameIndicator button.video-disabled:not(.no-video-available),
-.nameIndicator button.screensharing-disabled {
+.buttons-bar button.audio-disabled:not(.no-audio-available),
+.buttons-bar button.video-disabled:not(.no-video-available),
+.buttons-bar button.screensharing-disabled {
&:hover,
&:focus {
opacity: 1;
}
}
-.nameIndicator button.no-audio-available,
-.nameIndicator button.no-video-available {
+.buttons-bar button.no-audio-available,
+.buttons-bar button.no-video-available {
opacity: .7;
cursor: not-allowed;
}
-.nameIndicator button.no-audio-available:active,
-.nameIndicator button.no-video-available:active {
+.buttons-bar button.no-audio-available:active,
+.buttons-bar button.no-video-available:active {
background-color: transparent;
}
@@ -585,11 +658,10 @@ export default {
.network-connection-state {
position: absolute;
- bottom: 0;
- right: 16px;
+ bottom: 3px;
+ right: 45px;
width: 32px;
height: 32px;
- filter: drop-shadow(1px 1px 4px var(--color-box-shadow));
}
.hint {
@@ -606,29 +678,4 @@ export default {
height: $clickable-area;
}
}
-
-.bottom-bar {
- position: absolute;
- bottom: 0;
- width: 100%;
- padding: 0 20px 12px 24px;
- display: flex;
- justify-content: center;
- align-items: center;
- height: 40px;
- &--big {
- justify-content: center;
- height: 48px;
- }
- &__button {
- opacity: 0.8;
- margin-left: 4px;
- border: none;
- &:hover,
- &:focus {
- opacity: 1;
- border: none;
- }
- }
-}
diff --git a/src/components/CallView/shared/LocalVideo.vue b/src/components/CallView/shared/LocalVideo.vue
index 8adab864e65..8a045b0ffbe 100644
--- a/src/components/CallView/shared/LocalVideo.vue
+++ b/src/components/CallView/shared/LocalVideo.vue
@@ -50,16 +50,22 @@
+ @switch-screen-to-id="$emit('switchScreenToId', $event)" />
+
+
+
@@ -76,8 +82,6 @@ import {
} from '@nextcloud/dialogs'
import video from '../../../mixins/video.js'
import VideoBackground from './VideoBackground'
-import { callAnalyzer } from '../../../utils/webrtc/index'
-import { CONNECTION_QUALITY } from '../../../utils/webrtc/analyzers/PeerConnectionAnalyzer'
export default {
@@ -112,13 +116,10 @@ export default {
type: Boolean,
default: false,
},
- },
-
- data() {
- return {
- callAnalyzer: callAnalyzer,
- qualityWarningInGracePeriodTimeout: null,
- }
+ showControls: {
+ type: Boolean,
+ default: true,
+ },
},
computed: {
@@ -168,94 +169,6 @@ export default {
return this.localMediaModel.attributes.localStream && this.localMediaModel.attributes.localStreamRequestVideoError
},
- showQualityWarning() {
- return this.senderConnectionQualityIsBad || this.qualityWarningInGracePeriodTimeout
- },
-
- senderConnectionQualityIsBad() {
- return this.senderConnectionQualityAudioIsBad
- || this.senderConnectionQualityVideoIsBad
- || this.senderConnectionQualityScreenIsBad
- },
-
- senderConnectionQualityAudioIsBad() {
- return callAnalyzer
- && (callAnalyzer.attributes.senderConnectionQualityAudio === CONNECTION_QUALITY.VERY_BAD
- || callAnalyzer.attributes.senderConnectionQualityAudio === CONNECTION_QUALITY.NO_TRANSMITTED_DATA)
- },
-
- senderConnectionQualityVideoIsBad() {
- return callAnalyzer
- && (callAnalyzer.attributes.senderConnectionQualityVideo === CONNECTION_QUALITY.VERY_BAD
- || callAnalyzer.attributes.senderConnectionQualityVideo === CONNECTION_QUALITY.NO_TRANSMITTED_DATA)
- },
-
- senderConnectionQualityScreenIsBad() {
- return callAnalyzer
- && (callAnalyzer.attributes.senderConnectionQualityScreen === CONNECTION_QUALITY.VERY_BAD
- || callAnalyzer.attributes.senderConnectionQualityScreen === CONNECTION_QUALITY.NO_TRANSMITTED_DATA)
- },
-
- qualityWarningAriaLabel() {
- let label = ''
- if (!this.localMediaModel.attributes.audioEnabled && this.localMediaModel.attributes.videoEnabled && this.localMediaModel.attributes.localScreen) {
- label = t('spreed', 'Bad sent video and screen quality.')
- } else if (!this.localMediaModel.attributes.audioEnabled && this.localMediaModel.attributes.localScreen) {
- label = t('spreed', 'Bad sent screen quality.')
- } else if (!this.localMediaModel.attributes.audioEnabled && this.localMediaModel.attributes.videoEnabled) {
- label = t('spreed', 'Bad sent video quality.')
- } else if (this.localMediaModel.attributes.videoEnabled && this.localMediaModel.attributes.localScreen) {
- label = t('spreed', 'Bad sent audio, video and screen quality.')
- } else if (this.localMediaModel.attributes.localScreen) {
- label = t('spreed', 'Bad sent audio and screen quality.')
- } else if (this.localMediaModel.attributes.videoEnabled) {
- label = t('spreed', 'Bad sent audio and video quality.')
- } else {
- label = t('spreed', 'Bad sent audio quality.')
- }
-
- return label
- },
-
- qualityWarningTooltip() {
- if (!this.showQualityWarning) {
- return null
- }
-
- const tooltip = {}
- if (!this.localMediaModel.attributes.audioEnabled && this.localMediaModel.attributes.videoEnabled && this.localMediaModel.attributes.localScreen) {
- tooltip.content = t('spreed', 'Your internet connection or computer are busy and other participants might be unable to see you. To improve the situation try to disable your video while doing a screenshare.')
- tooltip.actionLabel = t('spreed', 'Disable video')
- tooltip.action = 'disableVideo'
- } else if (!this.localMediaModel.attributes.audioEnabled && this.localMediaModel.attributes.localScreen) {
- tooltip.content = t('spreed', 'Your internet connection or computer are busy and other participants might be unable to see your screen.')
- tooltip.actionLabel = ''
- tooltip.action = ''
- } else if (!this.localMediaModel.attributes.audioEnabled && this.localMediaModel.attributes.videoEnabled) {
- tooltip.content = t('spreed', 'Your internet connection or computer are busy and other participants might be unable to see you.')
- tooltip.actionLabel = ''
- tooltip.action = ''
- } else if (this.localMediaModel.attributes.videoEnabled && this.localMediaModel.attributes.localScreen) {
- tooltip.content = t('spreed', 'Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare.')
- tooltip.actionLabel = t('spreed', 'Disable video')
- tooltip.action = 'disableVideo'
- } else if (this.localMediaModel.attributes.localScreen) {
- tooltip.content = t('spreed', 'Your internet connection or computer are busy and other participants might be unable to understand and see your screen. To improve the situation try to disable your screenshare.')
- tooltip.actionLabel = t('spreed', 'Disable screenshare')
- tooltip.action = 'disableScreenShare'
- } else if (this.localMediaModel.attributes.videoEnabled) {
- tooltip.content = t('spreed', 'Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video.')
- tooltip.actionLabel = t('spreed', 'Disable video')
- tooltip.action = 'disableVideo'
- } else {
- tooltip.content = t('spreed', 'Your internet connection or computer are busy and other participants might be unable to understand you.')
- tooltip.actionLabel = ''
- tooltip.action = ''
- }
-
- return tooltip
- },
-
hasLocalVideo() {
return this.localMediaModel.attributes.videoEnabled
},
@@ -301,20 +214,6 @@ export default {
},
},
- senderConnectionQualityIsBad: function(senderConnectionQualityIsBad) {
- if (!senderConnectionQualityIsBad) {
- return
- }
-
- if (this.qualityWarningInGracePeriodTimeout) {
- window.clearTimeout(this.qualityWarningInGracePeriodTimeout)
- }
-
- this.qualityWarningInGracePeriodTimeout = window.setTimeout(() => {
- this.qualityWarningInGracePeriodTimeout = null
- }, 10000)
- },
-
},
mounted() {
@@ -354,6 +253,9 @@ export default {
attachMediaStream(localStream, this.$refs.video, options)
},
+ handleStopFollowing() {
+ this.$store.dispatch('selectedVideoPeerId', null)
+ },
},
}
@@ -417,4 +319,39 @@ export default {
box-shadow: inset 0 0 0 3px white;
cursor: pointer;
}
+
+.bottom-bar {
+ position: absolute;
+ bottom: 0;
+ width: 100%;
+ padding: 0 20px 12px 24px;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: 40px;
+ &--big {
+ justify-content: center;
+ height: 48px;
+ }
+ &__button {
+ opacity: 0.8;
+ margin-left: 4px;
+ border: none;
+ &:hover,
+ &:focus {
+ opacity: 1;
+ border: none;
+ }
+ }
+}
+
+.local-media-controls {
+ position: absolute;
+ text-align: center;
+ right: 0;
+ bottom: 4px;
+ z-index: 10;
+ width: 100%;
+}
+