working jamtrack config

This commit is contained in:
Seth Call 2016-07-17 07:49:41 -05:00
parent 1cf051da0c
commit 708d370013
14 changed files with 295 additions and 171 deletions

View File

@ -1949,7 +1949,7 @@ module JamRuby
end
def can_buy_test_drive?
lesson_purchases.where('lesson_package_type_id in (?)', LessonPackageType.test_drive_package_ids).where('created_at > ?', Rails.application.config.test_drive_wait_period_year.years.ago).count == 0
lesson_purchases.where('lesson_package_type_id in (?)', LessonPackageType.test_drive_package_ids).where('created_at > ?', APP_CONFIG.test_drive_wait_period_year.years.ago).count == 0
end
def lessons_with_teacher(teacher)

View File

@ -20,6 +20,7 @@
var $btnCancel = null;
var $btnAddNewGear = null;
var $btnUpdateTrackSettings = null;
var $btnCloseJamBlasterConfig = null;
var configureTracksHelper = null;
var voiceChatHelper = null;
@ -244,7 +245,10 @@
}
function afterShow() {
if (!window.JamBlasterStore.pairedJamBlaster) {
sessionUtils.SessionPageEnter();
}
window.JamBlasterActions.resyncBonjour()
@ -258,8 +262,10 @@
function afterHide() {
voiceChatHelper.beforeHide();
if(!window.JamBlasterStore.pairedJamBlaster) {
sessionUtils.SessionPageLeave();
}
}
function initialize() {

View File

@ -23,13 +23,24 @@ JamBlasterActions = @JamBlasterActions
localJamBlasters: []
}
closeDialog: (e) ->
e.preventDefault()
if !this.state.waitingOnTracks
@app.layout.closeDialog('configure-tracks')
render: () ->
pairedJamBlaster = this.state.pairedJamBlaster
hasPairedJamBlaster = pairedJamBlaster?
if hasPairedJamBlaster
`<JamBlasterTrackConfig />`
`<div>
<JamBlasterTrackConfig />
<div className="buttons">
<a className="btn-close-jamblaster-config button-orange" disabled={this.state.waitingOnTracks}onClick={this.closeDialog}>CLOSE</a>
</div>
</div>`
else
`<div>
<div className="dialog-tabs">
@ -62,7 +73,8 @@ JamBlasterActions = @JamBlasterActions
<h3>Use Chat Microphone</h3>
<p>I am not using a microphone for acoustic instruments or vocals, so use the input selected to the right
<p>I am not using a microphone for acoustic instruments or vocals, so use the input selected to the
right
for voice chat during my sessions</p>
</div>
</form>

View File

@ -35,7 +35,7 @@ JamBlasterActions = @JamBlasterActions
@setState(jamblasterState)
componentDidMount: () ->
@checkboxes = [{selector: 'input.dhcp', stateKey: 'dhcp'}]
@checkboxes = [{selector: 'input.dhcp', stateKey: 'userdhcp'}]
@root = $(@getDOMNode())
@iCheckify()
@ -279,14 +279,17 @@ JamBlasterActions = @JamBlasterActions
onSaveNetworkSettings: (e) ->
e.preventDefault()
JamBlasterActions.saveNetworkSettings({
settings = {
dhcp: this.state.userdhcp,
addr: this.state.useraddr,
gateway: this.state.usergateway,
subnet: this.state.usersubnet,
dns1: this.state.userdns1,
dns2: this.state.userdns2
})
}
logger.debug("saving network settings", settings)
JamBlasterActions.saveNetworkSettings(settings)
@networkStale = true
usb: () ->

View File

@ -53,7 +53,7 @@ JamBlasterActions = @JamBlasterActions
value = $(e.target).val()
name = $(e.target).attr('name')
console.log("checkbox changed: ", value)
console.log("checkbox changed: ", checked, value)
if $(e.target).attr('type') == 'checkbox'
state = {}
@ -97,6 +97,7 @@ JamBlasterActions = @JamBlasterActions
hasPairedJamBlaster = pairedJamBlaster?
masterDisabled = this.props.disabled
if !hasPairedJamBlaster
return `<div className="jamblaster-track-config">
You have no paired JamBlaster currently. If you've paired the JamBlaster in the past, be sure it's plugged in
@ -108,7 +109,7 @@ JamBlasterActions = @JamBlasterActions
for instrument in context.JK.server_to_client_instrument_alpha
instruments.push(`<option key={instrument.server_id} value={instrument.server_id}>{instrument.display}</option>`)
console.log("JAMBLASTERTRACKCONFIG", pairedJamBlaster )
#console.log("JAMBLASTERTRACKCONFIG", pairedJamBlaster)
combined = @state.combined
track1Active = @state.track1Active
@ -118,23 +119,33 @@ JamBlasterActions = @JamBlasterActions
track1Phantom = @state.track1Phantom
track2Phantom = @state.track2Phantom
micActive = @state.micActive
track1Instrument = context.JK.convertClientInstrumentToServer(@state.track1Instrument)
track2Instrument = context.JK.convertClientInstrumentToServer(@state.track2Instrument)
track1Instrument = @state.track1Instrument #context.JK.convertClientInstrumentToServer(@state.track1Instrument)
track2Instrument = @state.track2Instrument #context.JK.convertClientInstrumentToServer(@state.track2Instrument)
console.log("track1Active", track1Active)
`<div className="jamblaster-track-config">
if this.state.waitingOnTracks
contents = `<div className="waiting-on-tracks">
<div className="spinner spinner-large">
</div>
<br/>
<p>Please wait as the JamBlaster reconfigures it's settings.</p>
</div>`
else
contents = `<div>
<div className="input-1">
<h3>Input 1</h3>
<div className="input-type-section">
<h4>Type</h4>
<div className="input-type field">
<div className="input-type-choice">
<input className="input-type inputTypeTrack1" type="radio" name="inputTypeTrack1" readOnly={true} value="line" disabled={masterDisabled}
<input className="input-type inputTypeTrack1" type="radio" name="inputTypeTrack1" readOnly={true}
value="line" disabled={masterDisabled}
defaultChecked={inputTypeTrack1}/><label>Line</label>
</div>
<div className="input-type-choice">
<input className="input-type inputTypeTrack1" type="radio" name="inputTypeTrack1" readOnly={true} value="instrument" disabled={masterDisabled}
<input className="input-type inputTypeTrack1" type="radio" name="inputTypeTrack1" readOnly={true}
value="instrument" disabled={masterDisabled}
defaultChecked={!inputTypeTrack1}/><label>Instrument</label>
</div>
</div>
@ -150,7 +161,8 @@ JamBlasterActions = @JamBlasterActions
</div>
<div className="instrument-section">
<h4>Instrument</h4>
<select name="track1Instrument" value={track1Instrument} disabled={masterDisabled} onChange={this.instrumentChanged.bind(this, 'track1Instrument')} >
<select name="track1Instrument" value={track1Instrument} disabled={masterDisabled}
onChange={this.instrumentChanged.bind(this, 'track1Instrument')}>
{instruments}
</select>
</div>
@ -163,11 +175,13 @@ JamBlasterActions = @JamBlasterActions
<div className="input-type field">
<div className="input-type-choice">
<input className="input-type inputTypeTrack2" type="radio" name="inputTypeTrack2" readOnly={true} value="line" disabled={masterDisabled}
<input className="input-type inputTypeTrack2" type="radio" name="inputTypeTrack2" readOnly={true}
value="line" disabled={masterDisabled || combined}
defaultChecked={inputTypeTrack2}/><label>Line</label>
</div>
<div className="input-type-choice">
<input className="input-type inputTypeTrack2" type="radio" name="inputTypeTrack2" readOnly={true} value="instrument" disabled={masterDisabled}
<input className="input-type inputTypeTrack2" type="radio" name="inputTypeTrack2" readOnly={true}
value="instrument" disabled={masterDisabled || combined}
defaultChecked={!inputTypeTrack2}/><label>Instrument</label>
</div>
</div>
@ -177,13 +191,14 @@ JamBlasterActions = @JamBlasterActions
<h4>Power</h4>
<div className="phantom field">
<input className="phantom track2Phantom" name="track2Phantom" type="checkbox" disabled={masterDisabled}
<input className="phantom track2Phantom" name="track2Phantom" type="checkbox" disabled={masterDisabled || combined}
value={track2Phantom}/><label>Phantom power</label>
</div>
</div>
<div className="instrument-section">
<h4>Instrument</h4>
<select name="track2Instrument" value={track2Instrument} disabled={masterDisabled} onChange={this.instrumentChanged.bind(this, 'track2Instrument')}>
<select name="track2Instrument" value={track2Instrument} disabled={masterDisabled || combined}
onChange={this.instrumentChanged.bind(this, 'track2Instrument')}>
{instruments}
</select>
</div>
@ -191,7 +206,11 @@ JamBlasterActions = @JamBlasterActions
<br className="clearall"/>
<div className="combined-option">
<input className="combined" type="checkbox" name="combined" value={combined} disabled={masterDisabled} ></input><label>Combined inputs 1 &amp; 2 into a single stereo track</label>
<input className="combined" type="checkbox" name="combined" value={combined}
disabled={masterDisabled}></input><label>Combined inputs 1 &amp; 2 into a single stereo track</label>
</div>
</div>`
`<div className="jamblaster-track-config">
{contents}
</div>`
})

View File

@ -15,6 +15,9 @@ context = window
for participant in session.otherParticipants()
if participant.is_jamblaster
continue
name = participant.user.name;
if participant.tracks.length > 0

View File

@ -16,6 +16,9 @@ MixerActions = context.MixerActions
for participant in session.otherParticipants()
if participant.is_jamblaster
continue
if participant.client_id == @app.clientId
participant.user.possessive = "Your"
participant.self = true

View File

@ -6,5 +6,6 @@ context = window
saveNetworkSettings: {},
pairState: {},
setAutoPair: {},
updateAudio: {}
updateAudio: {},
jamblasterTracksUpdated: {}
})

View File

@ -4,6 +4,9 @@ logger = context.JK.logger
SessionActions = @SessionActions
JamBlasterActions = @JamBlasterActions
#window.StupidCallback: () =>
# alert("STUPID CALLBACK")
@CallbackStore = Reflux.createStore(
{
init: () ->
@ -12,13 +15,18 @@ JamBlasterActions = @JamBlasterActions
onAppInit: (@app) ->
if context.jamClient.RegisterGenericCallBack?
context.jamClient.RegisterGenericCallBack('CallbackActions.genericCallback')
console.log("REGISTERING GENERIC CALLBACK")
context.jamClient.RegisterGenericCallBack('CallbackStore.onGenericCallback')
#context.jamClient.RegisterGenericCallBack('StupidCallback')
onGenericCallback: (map) ->
console.log("GENERIC CALLBACK CALLED: ", map)
if map.cmd == 'join_session'
SessionActions.joinSession(map['music_session_id'])
else if map.cmd == 'client_pair_state'
JamBlasterActions.pairState(map)
else if map.cmd == 'jamblaster_tracks_updated'
JamBlasterActions.jamblasterTracksUpdated()
}
)

View File

@ -9,6 +9,7 @@ logger = context.JK.logger
userJamBlasters: []
localJamBlasters: []
allJamBlasters: []
waitingOnTracks: false
init: () ->
# Register with the app store to get @app
@ -18,8 +19,11 @@ logger = context.JK.logger
postSimpleChange: (result, msg) ->
if result
setTimeout(()=>
@lastClientTrackState = null
@getLocalClients(@userJamBlasters)
, 1000)
else
context.JK.Banner.showAlert('unable to update the JamBlaster', msg)
@ -55,6 +59,16 @@ logger = context.JK.logger
@postSimpleChange(result, 'Unable to set the phantom power for Track 2')
return
#else if name == 'track1Instrument'
# result = context.jamClient.set48vAndLineInstState({input2_48V: value})
# @postSimpleChange(result, 'Unable to set the phantom power for Track 2')
# return
#else if name == 'track1Instrument'
# result = context.jamClient.set48vAndLineInstState({input2_48V: value})
# @postSimpleChange(result, 'Unable to set the phantom power for Track 2')
# return
audio = $.extend({}, @pairedJamBlaster.tracks)
if name == 'inputTypeTrack1'
@ -68,6 +82,7 @@ logger = context.JK.logger
else if name == 'micActive'
audio.has_chat = value
#track1Active = @pairedJamBlaster.tracks.track1Active
#if name == 'track1Active'
# track1Active = value
@ -78,6 +93,10 @@ logger = context.JK.logger
track1Active = true
track2Active = true
has_chat = true
audio.has_chat = true
combined = @pairedJamBlaster.tracks.combined
if name == 'combined'
@ -90,10 +109,17 @@ logger = context.JK.logger
if name == 'track2Instrument'
track2Instrument = @convertToClientInstrument(value)
if !track1Instrument
track1Instrument = context.JK.server_to_client_instrument_map.Other.client_id
if !track2Instrument
track2Instrument = context.JK.server_to_client_instrument_map.Other.client_id
if combined
# user has chosen to combine both inputs into one track. stereo=true is the key flag her
audio.track1 = {stereo: true, left: true, inst: track1Instrument}
delete audio.track2 # backend will treat null as present
else
@ -105,21 +131,42 @@ logger = context.JK.logger
else if track1Active #(means track)
audio.track1 = {stereo: false, left: true, inst: track1Instrument}
delete audio.track2 # backend will treat null as present
else # input2Active
audio.track2 = {stereo: false, right: true, inst: track2Instrument}
delete audio.track1 # backend will treat null as present
logger.debug("updating JamBlaster track state", audio)
context.jamClient.setJbTrackState(audio);
@lastClientTrackState = null
#@waitOnTracksDone()
@waitOnTracks()
else
context.JK.Banner.showAlert('no paired JamBlaster', 'it seems your JamBlaster has become disconnected. Please ensure it is powered on and connected via an ethernet cable.')
waitOnTracksDone: () ->
@waitingOnTracksDone = true
@waitingOnTracksInterval = setInterval()
waitOnTracks: () ->
@lastClientTrackState = null
@waitingOnTracks = true
if @waitingOnTracksTimeout
clearTimeout(@waitingOnTracksTimeout)
@changed()
@waitingOnTracksTimeout = setTimeout(() =>
@waitingOnTracksTimeout = null
if @waitingOnTracks
@waitingOnTracks = false
@changed()
context.JK.Banner.showAlert('something went wrong', 'A notice that the changes were finally applied has not been sent. Leave the session, restart the JamBlaster, and get into a session again.')
, 10000)
# called from backend after track thrashing
jamblasterTracksUpdated: () ->
if @waitingOnTracksTimeout
clearTimeout(@waitingOnTracksTimeout)
@waitingOnTracksTimeout = null
@waitingOnTracks = false
@getLocalClients(@userJamBlasters)
@changed()
convertToClientInstrument: (instrumentId) ->
clientInstrumentId = null
if instrumentId != null && instrumentId != ''
@ -167,8 +214,11 @@ logger = context.JK.logger
else
context.JK.Banner.showAlert('network settings updated', 'Please reboot the JamBlaster.')
# it will be refreshed by backend
setTimeout(()=>
@onClearNetworkState()
@onResyncBonjour()
, 1000)
onResyncBonjour: () ->
@ -293,7 +343,7 @@ logger = context.JK.logger
# combined
track1 = client.tracks.track1
track2 = client.tracks.track1
track2 = client.tracks.track2
if track1?
client.tracks.combined = track1.stereo
@ -368,8 +418,12 @@ logger = context.JK.logger
@refreshingBonjour = false
@changed()
get48vAndLineState: () ->
@phantomAndLineState = context.jamClient.get48vAndLineInstState()
console.log("get48vAndLineInstState", @phantomAndLineState)
changed: () ->
@trigger({userJamBlasters: @userJamBlasters, allJamBlasters: @clients, localJamBlasters: @localClients, refreshingBonjour: @refreshingBonjour, pairedJamBlaster: @pairedJamBlaster})
@trigger({userJamBlasters: @userJamBlasters, allJamBlasters: @clients, localJamBlasters: @localClients, refreshingBonjour: @refreshingBonjour, pairedJamBlaster: @pairedJamBlaster, waitingOnTracks: @waitingOnTracks})
}
)

View File

@ -77,4 +77,16 @@
margin-bottom:10px;
}
}
.waiting-on-tracks {
text-align:center;
}
.spinner-large {
width:200px;
height:200px;
line-height: 200px;
position:relative;
margin:25px auto;
display:inline-block;
}
}

View File

@ -78,7 +78,7 @@
.userinfo ul {
clear:both;
background: scale-lightness($ColorUIBackground, 10%);
background: #4A4A4A;
display:none;
position:relative;
}
@ -87,6 +87,6 @@
display:block;
margin: 2px;
padding: 2px;
background: scale-lightness($ColorUIBackground, 20%);
background: #4A4A4A;
}

View File

@ -50,7 +50,7 @@ else
child(:connections => :participants) {
collection @music_sessions, :object_root => false
attributes :ip_address, :client_id, :joined_session_at, :audio_latency, :id, :metronome_open
attributes :ip_address, :client_id, :joined_session_at, :audio_latency, :id, :metronome_open, :is_jamblaster
node :user do |connection|
{ :id => connection.user.id, :photo_url => connection.user.photo_url, :name => connection.user.name, :is_friend => connection.user.friends?(current_user), :connection_state => connection.aasm_state }

View File

@ -151,6 +151,9 @@ def web_config
def email_partners_alias
"partner-dev@jamkazam.com"
end
def test_drive_wait_period_year
1
end
end
klass.new
end