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"); 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}) render: () -> content = null scrollerClassData = {'session-tracks-scroller': true} mediaOptions = `
Open:
Use Metronome
` contents = null mediaTracks = [] mediaTracks.push `
` if this.state.downloadJamTrack? closeOptions = `
Close JamTrack
` 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 = ` Close {mediaType} ` else if @state.popupOpen closeOptions = ` ` else closeOptions = ` Reopen Popup ` content = null if this.state.mediaSummary.backingTrackOpen for backingTrack in @state.backingTracks backingTrack.mode = @props.mode mediaTracks.push(``) else if this.state.mediaSummary.recordingOpen mediaTracks.push(``) for recordedTrack in @state.recordedTracks recordedTrack.mode = @props.mode mediaTracks.push(``) # if a JamTrack is also open (meaning the Recording was made with a Jamtrack), show it's mixers as well if this.state.mediaSummary.jamTrackOpen for jamTrack in @state.jamTracks jamTrack.mode = @props.mode mediaTracks.push(``) else if this.state.mediaSummary.jamTrackOpen # JamTrack shows in this order: # The Category mixer # The Metronome # All the JamTracks mediaTracks.push(``) if @state.metronome? # && @state.jamTrackMixdown.id == null @state.metronome.mode = @props.mode mediaTracks.push(``) for jamTrack in @state.jamTracks jamTrack.mode = @props.mode mediaTracks.push(``) else if this.state.mediaSummary.metronomeOpen @state.metronome.mode = @props.mode mediaTracks.push(``) contents = closeOptions else scrollerClassData['media-options-showing'] = true contents = mediaOptions scrollerClasses = classNames(scrollerClassData) `

recorded audio ?

{contents}
{content} {mediaTracks}
` getInitialState:() -> {mediaSummary:{mediaOpen: false}, isRecording: false, backingTracks: [], jamTracks: [], recordedTracks: [], metronome: null, jamTrackState: {}, popupOpen: false} onAppInit: (app) -> @app = app $(context.AppStore).on('SessionEnded', @onSessionEnded) onSessionEnded: () -> @closeWindow() handleBackingTrackSelectedCallback: (result) -> @setState({backingTrackDialogOpen: false}) SessionActions.openBackingTrack(result) componentDidMount: () -> context.JK.HandleBackingTrackSelectedCallback2 = @handleBackingTrackSelectedCallback $root = $(@getDOMNode()) context.JK.helpBubble($root.find(".session-tracks-help"), "session-media-tracks-instructions", {}, {offsetParent:$root.closest('.top-parent'), positions: ['right', 'bottom'], width:450}) componentDidUpdate: () -> if @state.downloadJamTrack? $holder = $(@getDOMNode()).find('.download-jamtrack-holder') if $holder.find('.download-jamtrack').length == 0 SessionActions.downloadingJamTrack(true) $holder.append(@state.downloadJamTrack.root) # kick off the download JamTrack process @state.downloadJamTrack.init() @handlePopup() windowUnloaded: () -> logger.debug('SessionMediaTracks: window unloaded') @setState({popupOpen: false}) @childWindow = null handlePopup: () -> if @state.mediaSummary.userNeedsMediaControls || @state.jamTrackState?.jamTrack? unless @childWindow? logger.debug("opening media control window") @childWindow = window.open("/popups/media-controls", 'Media Controls', 'scrollbars=yes,toolbar=no,status=no,height=155,width=350') @childWindow.PopupProps = {media: @state, jamTrackState: context.JamTrackStore.getState(), downloadingJamTrack: context.SessionStore.downloadingJamTrack, windowUnloaded: @windowUnloaded } if !@state.popupOpen setTimeout(() => @setState({popupOpen: true}) , 1) else if @childWindow? @childWindow.DontAutoCloseMedia = true @childWindow.close() @childWindow = null if @state.popupOpen setTimeout(() => @setState({popupOpen: false}) , 1) })