components_mediaPlayers_AudioPlayer.bs

import "pkg:/source/api/ApiClient.bs"
import "pkg:/source/api/apiPool.bs"
import "pkg:/source/utils/misc.bs"

sub init()
  m.isPlayReported = false
  m.top.observeField("state", "audioStateChanged")
end sub

' State Change Event Handler
sub audioStateChanged()
  currentState = LCase(m.top.state)

  reportedPlaybackState = "update"

  m.top.disableScreenSaver = (currentState = "playing")

  if currentState = "playing" and not m.isPlayReported
    reportedPlaybackState = "start"
    m.isPlayReported = true
  else if currentState = "stopped" or currentState = "finished"
    reportedPlaybackState = "stop"
    m.isPlayReported = false
  end if

  reportPlayback(reportedPlaybackState)
end sub

' Report playback to server
sub reportPlayback(state as string)

  if not isValid(m.top.position) then return

  params = {
    "ItemId": m.global.queueManager.callFunc("getCurrentItem").id,
    "PlaySessionId": m.top.content.id,
    "PositionTicks": int(m.top.position) * 10000000&, 'Ensure a LongInteger is used
    "IsPaused": (LCase(m.top.state) = "paused")
  }

  ' Report playstate via side-effect task
  req = GetApi().BuildPlaystateRequest(state, params)
  SubmitSideEffect(req)
end sub