mastoradio/src/components/Viewer.svelte

62 lines
1.4 KiB
Svelte
Raw Normal View History

2020-01-10 03:02:46 +01:00
<div>
<div bind:this={element}></div>
</div>
<script>
import { onMount } from 'svelte'
import { get } from 'svelte/store'
import YoutubePlayer from 'yt-player'
2020-01-10 03:42:02 +01:00
import { entry, playing, muted, volume } from '/store.js'
2020-01-10 03:02:46 +01:00
let element
let player
$: updateEntry($entry)
$: updatePlaying($playing)
$: updateMuted($muted)
2020-01-10 03:42:02 +01:00
$: updateVolume($volume)
2020-01-10 03:02:46 +01:00
const updateEntry = (entry) => {
2020-01-10 14:30:17 +01:00
if (player && entry) player.load(entry.data.id, get(playing))
2020-01-10 03:02:46 +01:00
}
const updatePlaying = (playing) => {
if (player) playing ? player.play() : player.pause()
}
const updateMuted = (muted) => {
if (player) muted ? player.mute() : player.unMute()
}
2020-01-10 03:42:02 +01:00
const updateVolume = (volume) => {
if (player) player.setVolume(volume)
}
2020-01-10 03:02:46 +01:00
onMount(() => {
player = new YoutubePlayer(element, {
width: 300,
height: 300,
autoplay: $playing,
2020-01-10 14:30:17 +01:00
controls: false,
2020-01-10 03:02:46 +01:00
keyboard: false,
fullscreen: false,
modestBranding: true,
related: false
})
2020-01-10 03:42:02 +01:00
updatePlaying($playing)
updateMuted($muted)
updateVolume($volume)
2020-01-10 03:02:46 +01:00
player.on('ended', () => entry.next())
2020-01-10 14:30:17 +01:00
player.on('unplayable', (...args) => {
console.log('unplayable', ...args)
entry.next()
})
2020-01-10 03:02:46 +01:00
})
</script>
<style>
</style>