Files
@ 22c1b5c60a64
Branch filter:
Location: light9/web/light9-music.coffee - annotation
22c1b5c60a64
1.9 KiB
text/coffeescript
turn on udmx output of collector
4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 | log = debug('music')
# port of light9/curvecalc/musicaccess.py
coffeeElementSetup(class Music extends Polymer.Element
@is: "light9-music",
@getter_properties:
status: { type: String, notify: true }
statusTitle: { type: String, notify: true }
turboSign: { type: String, notify: true }
duration: { type: Number, notify: true }
song: { type: String, notify: true }
# It does not yet work to write back to the playing/t
# properties. See seekPlayOrPause.
playing: { type: Boolean, notify: true }
t: { type: Number, notify: true }
ready: ->
super.ready()
@turboUntil = 0
@poll()
setInterval(@estimateTimeLoop.bind(@), 30)
onError: (e) ->
req = @$.getTime.lastRequest
@status = "✘"
@statusTitle = "GET "+req.url+ " -> " + req.status + " " + req.statusText
setTimeout(@poll.bind(@), 2000)
estimateTimeLoop: ->
if @playing
@t = @remoteT + (Date.now() - @remoteAsOfMs) / 1000
else
@t = @remoteT
poll: ->
if not @$?.getTime?
setTimeout(@poll.bind(@), 200)
return
clearTimeout(@nextPoll) if @nextPoll
@$.getTime.generateRequest()
@status = "♫"
onResponse: ->
@status = " "
@lastResponse = @$.getTime.lastResponse
now = Date.now()
if !@lastResponse.playing && @lastResponse.t != @remoteT
# likely seeking in another tool
@turboUntil = now + 1000
if now < @turboUntil
@turboSign = "⚡"
delay = 20
else
@turboSign = " "
delay = 700
@nextPoll = setTimeout(@poll.bind(@), delay)
@duration = @lastResponse.duration
@playing = @lastResponse.playing
@song = @lastResponse.song
@remoteT = @lastResponse.t
@remoteAsOfMs = now
seekPlayOrPause: (t) ->
@$.seek.body = {t: t}
@$.seek.generateRequest()
@turboUntil = Date.now() + 1000
@poll()
)
|