jam-cloud/web/app/assets/javascripts/react-components/mixins/SessionMyTracksMixin.js.coffee

97 lines
3.1 KiB
CoffeeScript

context = window
ChannelGroupIds = context.JK.ChannelGroupIds
MIDI_TRACK = context.JK.MIDI_TRACK
@SessionMyTracksMixin = {
onInputsChanged: (sessionMixers) ->
@sessionMixers = sessionMixers
@recompute()
onConfigureTracksChanged: (configureTracks) ->
@configureTracks = configureTracks
@recompute()
recompute: () ->
return if !@sessionMixers?
session = @sessionMixers.session
mixers = @sessionMixers.mixers
tracks = []
if session.inSession()
participant = session.getParticipant(@app.clientId)
connStatsClientId = @app.clientId
if participant.client_role == 'child' && participant.parent_client_id?
participant.parent = session.getParticipant(participant.parent_client_id)
connStatsClientId = participant.parent_client_id
if participant
photoUrl = context.JK.resolveAvatarUrl(participant.user.photo_url);
chatMixer = mixers.chatMixer
chat = null
if chatMixer
chat =
mixers: chatMixer
mode: @props.mode
photoUrl: photoUrl
name = participant.user.name;
for track in participant.tracks
# try to find mixer info for this track
mixerFinder = [participant.client_id, track, true] # so that other callers can re-find their mixer data
mixerData = mixers.findMixerForTrack(participant.client_id, track, true, @props.mode)
hasMixer = mixerData.mixer?
# todo: sessionModel.setAudioEstablished
instrumentIcon = context.JK.getInstrumentIcon45(track.instrument_id);
trackName = "#{name}: #{track.instrument}"
no_pan = false
associatedVst = null
# find any VST info
if hasMixer && @configureTracks?
vstAssignments = @configureTracks?.vstTrackAssignments?.vsts ? []
# bug in the backend; track is wrong for personal mixers (always 1), but correct for master mix
trackAssignment = -1
if @props.mode == context.JK.MIX_MODES.MASTER
if mixerData.mixer.group_id == ChannelGroupIds.MidiInputMusicGroup
trackAssignment = MIDI_TRACK
else
trackAssignment = mixerData.mixer.track
else
if mixerData.mixer.group_id == ChannelGroupIds.MidiInputMusicGroup
trackAssignment = MIDI_TRACK
else
trackAssignment = mixerData.oppositeMixer?.track
for vst in vstAssignments
if vst.track == trackAssignment - 1 && vst.name != 'NONE'
logger.debug("found VST on track", vst, track)
associatedVst = vst
break
tracks.push({track: track, mixerFinder: mixerFinder, mixers: mixerData, hasMixer:hasMixer, name: name, trackName: trackName, instrumentIcon: instrumentIcon, photoUrl: photoUrl, clientId: participant.client_id, associatedVst: associatedVst, connStatsClientId: connStatsClientId})
else
logger.warn("SessionMyTracks: unable to find participant")
this.setState(tracks: tracks, mySession:session, chat: chat)
}