107 lines
2.8 KiB
CoffeeScript
107 lines
2.8 KiB
CoffeeScript
window.TwitchPlayer = class TwitchPlayer extends Player
|
|
constructor: (data) ->
|
|
if not (this instanceof TwitchPlayer)
|
|
return new TwitchPlayer(data)
|
|
|
|
@setMediaProperties(data)
|
|
waitUntilDefined(window, 'Twitch', =>
|
|
waitUntilDefined(Twitch, 'Player', =>
|
|
@init(data)
|
|
)
|
|
)
|
|
|
|
init: (data) ->
|
|
removeOld()
|
|
if data.type is 'tv'
|
|
# VOD
|
|
options =
|
|
video: data.id
|
|
else
|
|
# Livestream
|
|
options =
|
|
channel: data.id
|
|
@twitch = new Twitch.Player('ytapiplayer', options)
|
|
@twitch.addEventListener(Twitch.Player.READY, =>
|
|
@setVolume(VOLUME)
|
|
@twitch.setQuality(@mapQuality(USEROPTS.default_quality))
|
|
@twitch.addEventListener(Twitch.Player.PLAY, =>
|
|
@paused = false
|
|
if CLIENT.leader
|
|
sendVideoUpdate()
|
|
)
|
|
@twitch.addEventListener(Twitch.Player.PAUSE, =>
|
|
@paused = true
|
|
if CLIENT.leader
|
|
sendVideoUpdate()
|
|
)
|
|
@twitch.addEventListener(Twitch.Player.ENDED, =>
|
|
if CLIENT.leader
|
|
socket.emit('playNext')
|
|
)
|
|
)
|
|
|
|
load: (data) ->
|
|
@setMediaProperties(data)
|
|
try
|
|
if data.type is 'tv'
|
|
# VOD
|
|
@twitch.setVideo(data.id)
|
|
else
|
|
# Livestream
|
|
@twitch.setChannel(data.id)
|
|
catch error
|
|
console.error(error)
|
|
|
|
pause: ->
|
|
try
|
|
@twitch.pause()
|
|
@paused = true
|
|
catch error
|
|
console.error(error)
|
|
|
|
play: ->
|
|
try
|
|
@twitch.play()
|
|
@paused = false
|
|
catch error
|
|
console.error(error)
|
|
|
|
seekTo: (time) ->
|
|
try
|
|
@twitch.seek(time)
|
|
catch error
|
|
console.error(error)
|
|
|
|
getTime: (cb) ->
|
|
try
|
|
cb(@twitch.getCurrentTime())
|
|
catch error
|
|
console.error(error)
|
|
|
|
setVolume: (volume) ->
|
|
try
|
|
@twitch.setVolume(volume)
|
|
if volume > 0
|
|
@twitch.setMuted(false)
|
|
catch error
|
|
console.error(error)
|
|
|
|
getVolume: (cb) ->
|
|
try
|
|
if @twitch.isPaused()
|
|
cb(0)
|
|
else
|
|
cb(@twitch.getVolume())
|
|
catch error
|
|
console.error(error)
|
|
|
|
mapQuality: (quality) ->
|
|
switch String(quality)
|
|
when '1080' then 'chunked'
|
|
when '720' then 'high'
|
|
when '480' then 'medium'
|
|
when '360' then 'low'
|
|
when '240' then 'mobile'
|
|
when 'best' then 'chunked'
|
|
else ''
|