diff options
| author | Shpuld Shpludson <shp@cock.li> | 2020-09-29 10:18:37 +0000 |
|---|---|---|
| committer | Shpuld Shpludson <shp@cock.li> | 2020-09-29 10:18:37 +0000 |
| commit | 91778a02766602b81ec8737282495aa4b5294d19 (patch) | |
| tree | da6bb6092acfb50b441f3afb5c4cc792e0b2b3a4 /src/components/video_attachment/video_attachment.js | |
| parent | 3781e521e64a59c4e38902601555ae01f99d9fce (diff) | |
| parent | f174f289a93e6bef1182a2face00bb809da49d18 (diff) | |
Merge branch 'feat/custom-virtual-scrolling' into 'develop'
Timeline virtual scrolling
See merge request pleroma/pleroma-fe!1043
Diffstat (limited to 'src/components/video_attachment/video_attachment.js')
| -rw-r--r-- | src/components/video_attachment/video_attachment.js | 47 |
1 files changed, 34 insertions, 13 deletions
diff --git a/src/components/video_attachment/video_attachment.js b/src/components/video_attachment/video_attachment.js index f0ca7e89..107b8985 100644 --- a/src/components/video_attachment/video_attachment.js +++ b/src/components/video_attachment/video_attachment.js @@ -3,27 +3,48 @@ const VideoAttachment = { props: ['attachment', 'controls'], data () { return { - loopVideo: this.$store.getters.mergedConfig.loopVideo + blocksSuspend: false, + // Start from true because removing "loop" property seems buggy in Vue + hasAudio: true + } + }, + computed: { + loopVideo () { + if (this.$store.getters.mergedConfig.loopVideoSilentOnly) { + return !this.hasAudio + } + return this.$store.getters.mergedConfig.loopVideo } }, methods: { - onVideoDataLoad (e) { + onPlaying (e) { + this.setHasAudio(e) + if (this.loopVideo) { + this.$emit('play', { looping: true }) + return + } + this.$emit('play') + }, + onPaused (e) { + this.$emit('pause') + }, + setHasAudio (e) { const target = e.srcElement || e.target + // If hasAudio is false, we've already marked this video to not have audio, + // a video can't gain audio out of nowhere so don't bother checking again. + if (!this.hasAudio) return if (typeof target.webkitAudioDecodedByteCount !== 'undefined') { // non-zero if video has audio track - if (target.webkitAudioDecodedByteCount > 0) { - this.loopVideo = this.loopVideo && !this.$store.getters.mergedConfig.loopVideoSilentOnly - } - } else if (typeof target.mozHasAudio !== 'undefined') { + if (target.webkitAudioDecodedByteCount > 0) return + } + if (typeof target.mozHasAudio !== 'undefined') { // true if video has audio track - if (target.mozHasAudio) { - this.loopVideo = this.loopVideo && !this.$store.getters.mergedConfig.loopVideoSilentOnly - } - } else if (typeof target.audioTracks !== 'undefined') { - if (target.audioTracks.length > 0) { - this.loopVideo = this.loopVideo && !this.$store.getters.mergedConfig.loopVideoSilentOnly - } + if (target.mozHasAudio) return + } + if (typeof target.audioTracks !== 'undefined') { + if (target.audioTracks.length > 0) return } + this.hasAudio = false } } } |
