301 lines
8.9 KiB
CoffeeScript
301 lines
8.9 KiB
CoffeeScript
context = window
|
|
logger = context.JK.logger
|
|
rest = context.JK.Rest()
|
|
EVENTS = context.JK.EVENTS
|
|
NAMED_MESSAGES = context.JK.NAMED_MESSAGES
|
|
|
|
VideoLiveStreamActions = @VideoLiveStreamActions
|
|
|
|
@VideoLiveStreamStore = Reflux.createStore(
|
|
{
|
|
listenables: VideoLiveStreamActions
|
|
logger: context.JK.logger
|
|
creatingBroadcast: false
|
|
|
|
init: ->
|
|
this.listenTo(context.AppStore, this.onAppInit)
|
|
|
|
onAppInit: (@app) ->
|
|
|
|
onPopupClosed: () ->
|
|
|
|
if @childWindow?
|
|
@childWindow = null
|
|
|
|
logger.debug("Popup closed")
|
|
context.jamClient.StopLiveStreaming()
|
|
@streaming = false
|
|
@onRefresh()
|
|
|
|
|
|
onRefresh: () ->
|
|
@state = {
|
|
creatingBroadcast: @creatingBroadcast,
|
|
createdStream: @createdStream,
|
|
createStreamError: @createStreamError,
|
|
waitingForReady: @waitingForReady,
|
|
waitingOnTesting: @waitingOnTesting,
|
|
waitingOnActiveStream: @waitingOnActiveStream,
|
|
waitingOnLive: @waitingOnLive,
|
|
transitioningTesting: @transitioningTesting,
|
|
streaming: @streaming,
|
|
errorMessage: @errorMessage,
|
|
broadcast: @broadcast
|
|
}
|
|
this.trigger(@state)
|
|
|
|
onStartLiveStream: () ->
|
|
@creatingBroadcast = false
|
|
@createdStream = false
|
|
@createStreamError = false
|
|
@transitioningTesting = false
|
|
@waitingForReady = false
|
|
@waitingOnLive = false
|
|
@waitingOnTesting = false
|
|
@waitingOnActiveStream = false
|
|
@errorMessage = null
|
|
@streaming = false
|
|
|
|
@logger.debug("onStartLiveStream")
|
|
@onRefresh()
|
|
|
|
if @childWindow?
|
|
logger.debug("show live stream popup being closed automatically")
|
|
@childWindow.close()
|
|
@childWindow = null
|
|
|
|
@childWindow = window.open("/popups/video/stream/" + context.SessionStore.id(), 'Video Live Stream', 'scrollbars=yes,toolbar=no,status=no,height=155,width=350')
|
|
|
|
startLiveStreaming: () ->
|
|
@logger.debug("user requests live stream")
|
|
@createLiveStream()
|
|
|
|
# do not use; here until can remove
|
|
startGoogleLogin: (e) ->
|
|
|
|
@logger.debug("Starting google login")
|
|
window._oauth_win = window.open("/auth/google_login", "Log In to Google", "height=700,width=500,menubar=no,resizable=no,status=no");
|
|
window._oauth_callback = @oauthCallback
|
|
|
|
oauthCallback: () ->
|
|
@creatingBroadcast = true
|
|
@logger.debug("oauthCallback... checking auth")
|
|
window._oauth_win.close()
|
|
@checkAuth()
|
|
|
|
checkAuth:() ->
|
|
rest.getGoogleAuth()
|
|
.done((auth) =>
|
|
@logger.debug("check Auth is done", auth)
|
|
if auth.auth?
|
|
@createLiveStream()
|
|
else
|
|
@creatingBroadcast = false
|
|
@onRefresh()
|
|
# alert to user
|
|
)
|
|
.fail(() =>
|
|
@creatingBroadcast = false
|
|
@onRefresh()
|
|
# lert to user
|
|
)
|
|
|
|
loadBroadcast: (sessionId) ->
|
|
@broadcast = null
|
|
@onRefresh()
|
|
@fetchBroadcast(sessionId)
|
|
|
|
fetchBroadcast: (sessionId) ->
|
|
rest.getLiveStream(sessionId)
|
|
.done((broadcast) =>
|
|
@broadcast = broadcast
|
|
@onRefresh()
|
|
)
|
|
.fail((jqXHR) =>
|
|
logger.error("unable to fetch broadcast", jqXHR.responseText)
|
|
@onRefresh()
|
|
)
|
|
|
|
createLiveStream: () ->
|
|
|
|
@creatingBroadcast = true
|
|
|
|
rest.createLiveStream(context.SessionStore.id())
|
|
.done((broadcast) =>
|
|
@creatingBroadcast = false
|
|
@broadcast = broadcast
|
|
@onRefresh()
|
|
success = context.jamClient.StartLiveStreaming(broadcast.stream_name)
|
|
|
|
if success
|
|
@createdStream = true
|
|
@waitingForReady = true
|
|
@transitionTimeout = new Date().getTime() + 60000 # die in 10 seconds
|
|
@onRefresh()
|
|
setTimeout(() =>
|
|
@waitForReady()
|
|
, 1000)
|
|
|
|
else
|
|
@createStreamError = true
|
|
@onRefresh()
|
|
)
|
|
.fail(() =>
|
|
@creatingBroadcast = false
|
|
@onRefresh()
|
|
)
|
|
|
|
waitForReady: () ->
|
|
rest.getLiveStream(context.SessionStore.id())
|
|
.done((broadcast) =>
|
|
@broadcast = broadcast
|
|
if broadcast.broadcast_status == 'ready' || broadcast.broadcast_status == 'live'
|
|
@waitingForReady = false
|
|
@transitionTimeout = new Date().getTime() + 60000 # die in 20 seconds
|
|
@waitForActiveStream()
|
|
else
|
|
if new Date().getTime() > @transitionTimeout
|
|
# uh oh. waited fo ra while; broadcast never becam ready
|
|
@errorMessage = 'YouTube never indicated broadcast is ready'
|
|
@waitingForReady = false
|
|
@onRefresh()
|
|
else
|
|
setTimeout(() =>
|
|
@waitForReady()
|
|
, 1000)
|
|
)
|
|
.fail(() =>
|
|
@waitingForReady = false
|
|
@errorMessage = 'Could not check status of YouTube broadcast'
|
|
context.jamClient.StopLiveStreaming()
|
|
@streaming = false
|
|
@onRefresh()
|
|
)
|
|
|
|
transitionTesting: () ->
|
|
@transitioningTesting = true
|
|
@onRefresh()
|
|
|
|
rest.liveStreamTransition(context.SessionStore.id(), 'testing')
|
|
.done((broadcast) =>
|
|
@broadcast = broadcast
|
|
@transitioningTesting = false
|
|
@waitingOnTesting = true
|
|
@transitionTimeout = new Date().getTime() + 60000 # die in 20 seconds
|
|
setTimeout(() =>
|
|
@waitForTesting()
|
|
, 1000)
|
|
)
|
|
.fail(() =>
|
|
@transitioningTesting = false
|
|
@errorMessage = 'Could not transition live stream to "testing"'
|
|
context.jamClient.StopLiveStreaming()
|
|
@streaming = false
|
|
@onRefresh()
|
|
)
|
|
|
|
transitionLive: () ->
|
|
@transitioningLive = true
|
|
@onRefresh()
|
|
|
|
rest.liveStreamTransition(context.SessionStore.id(), 'live')
|
|
.done((broadcast) =>
|
|
@broadcast = broadcast
|
|
@transitioningLive = false
|
|
@waitingOnLive = true
|
|
@transitionTimeout = new Date().getTime() + 60000 # die in 20 seconds
|
|
setTimeout(() =>
|
|
@waitForLive()
|
|
, 1000)
|
|
)
|
|
.fail(() =>
|
|
@transitioningLive = false
|
|
@errorMessage = 'Could not transition live stream to "live"'
|
|
context.jamClient.StopLiveStreaming()
|
|
@streaming = false
|
|
@onRefresh()
|
|
)
|
|
|
|
|
|
waitForActiveStream: () ->
|
|
rest.getLiveStream(context.SessionStore.id())
|
|
.done((broadcast) =>
|
|
@broadcast = broadcast
|
|
if broadcast.stream_status == 'active'
|
|
@waitingOnActiveStream = false
|
|
@transitionTimeout = new Date().getTime() + 60000 # die in 20 seconds
|
|
@transitionTesting()
|
|
else
|
|
if new Date().getTime() > @transitionTimeout
|
|
# uh oh. waited fo ra while; stream never became ready
|
|
@errorMessage = 'YouTube never indicated stream came from the JamKazam application'
|
|
@waitingOnActiveStream = false
|
|
@onRefresh()
|
|
else
|
|
setTimeout(() =>
|
|
@waitForActiveStream()
|
|
, 1000)
|
|
)
|
|
.fail(() =>
|
|
@waitingOnActiveStream = false
|
|
@errorMessage = 'Could not check status of YouTube broadcast'
|
|
context.jamClient.StopLiveStreaming()
|
|
@streaming = false
|
|
@onRefresh()
|
|
)
|
|
|
|
waitForTesting: () ->
|
|
rest.getLiveStream(context.SessionStore.id())
|
|
.done((broadcast) =>
|
|
@broadcast = broadcast
|
|
if broadcast.broadcast_status == 'testing' || broadcast.broadcast_status == 'live'
|
|
@waitingOnTesting = false
|
|
@transitionTimeout = new Date().getTime() + 60000 # die in 20 seconds
|
|
@transitionLive()
|
|
else
|
|
if new Date().getTime() > @transitionTimeout
|
|
# uh oh. waited fo ra while; stream never became ready
|
|
@errorMessage = 'YouTube never indicated stream converted to testing'
|
|
@waitingOnTesting = false
|
|
@onRefresh()
|
|
else
|
|
setTimeout(() =>
|
|
@waitForTesting()
|
|
, 1000)
|
|
)
|
|
.fail(() =>
|
|
@waitingForTesting = false
|
|
@errorMessage = 'Could not check status of YouTube broadcast'
|
|
context.jamClient.StopLiveStreaming()
|
|
@streaming = false
|
|
@onRefresh()
|
|
)
|
|
|
|
waitForLive: () ->
|
|
rest.getLiveStream(context.SessionStore.id())
|
|
.done((broadcast) =>
|
|
if broadcast.broadcast_status == 'live'
|
|
@waitingOnLive = false
|
|
@streaming = true
|
|
console.log("BROADCAST TIME", broadcast)
|
|
@onRefresh()
|
|
else
|
|
if new Date().getTime() > @transitionTimeout
|
|
# uh oh. waited fo ra while; stream never became ready
|
|
@errorMessage = 'YouTube never indicated stream converted to live'
|
|
@waitingOnLive = false
|
|
@onRefresh()
|
|
else
|
|
setTimeout(() =>
|
|
@waitForLive()
|
|
, 1000)
|
|
)
|
|
.fail(() =>
|
|
@waitingForLive = false
|
|
@errorMessage = 'Could not check status of YouTube broadcast'
|
|
context.jamClient.StopLiveStreaming()
|
|
@streaming = false
|
|
@onRefresh()
|
|
)
|
|
}
|
|
) |