context = window rest = context.JK.Rest() SessionActions = @SessionActions MixerActions = @MixerActions JamTrackActions = @JamTrackActions MIX_MODES = context.JK.MIX_MODES EVENTS = context.JK.EVENTS ChannelGroupIds = context.JK.ChannelGroupIds @SessionMediaTracks = React.createClass({ mixins: [@SessionMediaTracksMixin, Reflux.listenTo(@SessionMediaTracksStore,"onInputsChanged"), Reflux.listenTo(@AppStore,"onAppInit"), Reflux.listenTo(@JamTrackStore, "onJamTrackStateChanged")] onJamTrackStateChanged: (jamTrackState) -> @setState({jamTrackState: jamTrackState}) if jamTrackState.fullTrackActivated || jamTrackState.opened && jamTrackState.jamTrack.activeMixdown == null @loadJamTrack(jamTrackState.jamTrack) else if jamTrackState.closed logger.debug("SessionMediaTracks: jamtrack has been closed", jamTrackState) if @state.downloadJamTrack? logger.debug("closing DownloadJamTrack widget") @state.downloadJamTrack.root.remove() @state.downloadJamTrack.destroy() SessionActions.downloadingJamTrack(false) @setState({downloadJamTrack: null}) MixerActions.closeMedia.trigger(true) #inputsChangedProcessed: (state) -> closeWindow: () -> if @childWindow? @childWindow.DontAutoCloseMedia = true @childWindow.close() closeAudio: (e) -> e.preventDefault() logger.debug("SessionMediaTracks.closeAudio") MixerActions.closeMedia(false) cancelDownloadJamTrack: (e) -> e.preventDefault() logger.debug("closing DownloadJamTrack widget") @state.downloadJamTrack.root.remove() @state.downloadJamTrack.destroy() SessionActions.downloadingJamTrack(false) @setState({downloadJamTrack: null}) openRecording: (e) -> e.preventDefault() # just ignore the click if they are currently recording for now if @state.isRecording @app.notify({ "title": "Currently Recording", "text": "You can't open a recording while creating a recording.", "icon_url": "/assets/content/icon_alert_big.png" }) return @app.layout.showDialog('localRecordings') unless @app.layout.isDialogShowing('localRecordings') # openBackingTrack: (e) -> # e.preventDefault() # if @state.backingTrackDialogOpen # logger.debug("backing track dialog already open") # return # # just ignore the click if they are currently recording for now # if @state.isRecording # @app.notify({ # "title": "Currently Recording", # "text": "You can't open a backing track while creating a recording.", # "icon_url": "/assets/content/icon_alert_big.png" # }); # return # @setState({backingTrackDialogOpen: true}) # context.jamClient.ShowSelectBackingTrackDialog("window.JK.HandleBackingTrackSelectedCallback2"); openBackingTrack: `async function(e) { e.preventDefault(); if (this.state.backingTrackDialogOpen) { logger.debug("backing track dialog already open"); return; } // just ignore the click if they are currently recording for now if (this.state.isRecording) { this.app.notify({ "title": "Currently Recording", "text": "You can't open a backing track while creating a recording.", "icon_url": "/assets/content/icon_alert_big.png" }); return; } this.setState({backingTrackDialogOpen: true}); await context.jamClient.ShowSelectBackingTrackDialog("window.JK.HandleBackingTrackSelectedCallback2"); }` openMetronome: (e) -> if @state.isRecording @app.notify({ "title": "Currently Recording", "text": "You can't open a metronome while creating a recording.", "icon_url": "/assets/content/icon_alert_big.png" }) return SessionActions.openMetronome() openJamTrack: (e) -> e.preventDefault() if @state.isRecording @app.notify({ "title": "Currently Recording", "text": "You can't open a jam track while creating a recording.", "icon_url": "/assets/content/icon_alert_big.png" }) return @app.layout.showDialog('open-jam-track-dialog').one(EVENTS.DIALOG_CLOSED, (e, data) => # once the dialog is closed, see if the user has a jamtrack selected if !data.canceled && data.result.jamTrack JamTrackActions.open(data.result.jamTrack) else logger.debug("OpenJamTrack dialog closed with no selection; ignoring", data) ) # loadJamTrack: (jamTrack) -> # if @state.downloadJamTrack # # if there was one showing before somehow, destroy it. # logger.warn("destroying existing JamTrack") # @state.downloadJamTrack.root.remove() # @state.downloadJamTrack.destroy() # #set to null # downloadJamTrack = new context.JK.DownloadJamTrack(@app, jamTrack, 'large'); # # the widget indicates when it gets to any transition; we can hide it once it reaches completion # $(downloadJamTrack).on(EVENTS.JAMTRACK_DOWNLOADER_STATE_CHANGED, (e, data) => # if data.state == downloadJamTrack.states.synchronized # logger.debug("jamtrack synchronized; hide widget and show tracks") # downloadJamTrack.root.remove() # downloadJamTrack.destroy() # downloadJamTrack = null # this.setState({downloadJamTrack: null}) # # XXX: test with this removed; it should be unnecessary # context.jamClient.JamTrackStopPlay(); # sampleRate = context.jamClient.GetSampleRate() # sampleRateForFilename = if sampleRate == 48 then '48' else '44' # fqId = jamTrack.id + '-' + sampleRateForFilename # if jamTrack.jmep # logger.debug("setting jmep data") # context.jamClient.JamTrackLoadJmep(fqId, jamTrack.jmep) # else # logger.debug("no jmep data for jamtrack") # # JamTrackPlay means 'load' # result = context.jamClient.JamTrackPlay(fqId); # SessionActions.downloadingJamTrack(false) # console.log("JamTrackPlay: result", result) # if !result # @app.notify( # { # title: "JamTrack Can Not Open", # text: "Unable to open your JamTrack. Please contact support@jamkazam.com" # } # , null, true) # else # participantCnt = context.SessionStore.participants().length # rest.playJamTrack(jamTrack.id) # .done(() => # @app.refreshUser(); # ) # context.stats.write('web.jamtrack.open', { # value: 1, # session_size: participantCnt, # user_id: context.JK.currentUserId, # user_name: context.JK.currentUserName # }) # ) # @setState({downloadJamTrack: downloadJamTrack}) loadJamTrack: `async function(jamTrack) { if (this.state.downloadJamTrack) { // if there was one showing before somehow, destroy it. logger.warn("destroying existing JamTrack"); this.state.downloadJamTrack.root.remove(); this.state.downloadJamTrack.destroy(); } //set to null let downloadJamTrack = new context.JK.DownloadJamTrack(this.app, jamTrack, 'large'); // the widget indicates when it gets to any transition; we can hide it once it reaches completion $(downloadJamTrack).on(EVENTS.JAMTRACK_DOWNLOADER_STATE_CHANGED, async (e, data) => { if (data.state === downloadJamTrack.states.synchronized) { logger.debug("jamtrack synchronized; hide widget and show tracks"); downloadJamTrack.root.remove(); downloadJamTrack.destroy(); downloadJamTrack = null; this.setState({downloadJamTrack: null}); //XXX: test with this removed; it should be unnecessary await context.jamClient.JamTrackStopPlay(); const sampleRate = await context.jamClient.GetSampleRate(); const sampleRateForFilename = sampleRate === 48 ? '48' : '44'; const fqId = jamTrack.id + '-' + sampleRateForFilename; if (jamTrack.jmep) { logger.debug("setting jmep data"); await context.jamClient.JamTrackLoadJmep(fqId, jamTrack.jmep); } else { logger.debug("no jmep data for jamtrack"); } // JamTrackPlay means 'load' const result = await context.jamClient.JamTrackPlay(fqId); SessionActions.downloadingJamTrack(false); console.log("JamTrackPlay: result", result); if (!result) { return this.app.notify( { title: "JamTrack Can Not Open", text: "Unable to open your JamTrack. Please contact support@jamkazam.com" } , null, true); } else { const participantCnt = context.SessionStore.participants().length; rest.playJamTrack(jamTrack.id) .done(() => { return this.app.refreshUser(); }); return context.stats.write('web.jamtrack.open', { value: 1, session_size: participantCnt, user_id: context.JK.currentUserId, user_name: context.JK.currentUserName }); } } }); return this.setState({downloadJamTrack}); }` render: () -> content = null scrollerClassData = {'session-tracks-scroller': true} mediaOptions = `
` contents = null mediaTracks = [] mediaTracks.push `` if this.state.downloadJamTrack? closeOptions = `` contents = closeOptions else if this.state.mediaSummary.mediaOpen || @state.jamTrackState?.jamTrack? only_opener = false # give the users options to close it if this.state.mediaSummary.recordingOpen mediaType = "Recording" only_opener = true else if this.state.mediaSummary.jamTrackOpen || @state.jamTrackState?.jamTrack? mediaType = "JamTrack" only_opener = true else if this.state.mediaSummary.backingTrackOpen mediaType = "Audio File" only_opener = true else if this.state.mediaSummary.metronomeOpen mediaType = "Metronome" else mediaType = "" if !only_opener || this.state.mediaSummary.isOpener closeOptions = `