diff --git a/ruby/lib/jam_ruby/models/jam_track_mixdown_package.rb b/ruby/lib/jam_ruby/models/jam_track_mixdown_package.rb index c6ca812a2..94de78c66 100644 --- a/ruby/lib/jam_ruby/models/jam_track_mixdown_package.rb +++ b/ruby/lib/jam_ruby/models/jam_track_mixdown_package.rb @@ -78,6 +78,7 @@ module JamRuby self.error_detail = error_detail self.should_retry = self.error_count < 5 self.signing = false + self.signing_queued_at = nil # if left set, throws off signing_state on subsequent signing attempts if save Notification.send_mixdown_sign_failed(self) @@ -166,7 +167,7 @@ module JamRuby if signed state = 'SIGNED' - elsif signing_started_at + elsif signing_started_at && signing # the maximum amount of time the packaging job can take is 10 seconds * num steps. For a 10 track song, this will be 110 seconds. It's a bit long. if Time.now - signing_started_at > APP_CONFIG.signing_job_signing_max_time state = 'SIGNING_TIMEOUT' diff --git a/ruby/lib/jam_ruby/resque/jam_track_mixdown_packager.rb b/ruby/lib/jam_ruby/resque/jam_track_mixdown_packager.rb index dc6c36489..20b13dc2b 100644 --- a/ruby/lib/jam_ruby/resque/jam_track_mixdown_packager.rb +++ b/ruby/lib/jam_ruby/resque/jam_track_mixdown_packager.rb @@ -63,7 +63,7 @@ module JamRuby # track that it's started ( and avoid db validations ) signing_started_at = Time.now last_step_at = Time.now - JamTrackMixdownPackage.where(:id => @mixdown_package.id).update_all(:signing_started_at => signing_started_at, :should_retry => false, packaging_steps: total_steps, current_packaging_step: 0, last_step_at: last_step_at, :signing => true) + #JamTrackMixdownPackage.where(:id => @mixdown_package.id).update_all(:signing_started_at => signing_started_at, :should_retry => false, packaging_steps: total_steps, current_packaging_step: 0, last_step_at: last_step_at, :signing => true) # because we are skipping 'after_save', we have to keep the model current for the notification. A bit ugly... @@ -72,7 +72,8 @@ module JamRuby @mixdown_package.signing_started_at = signing_started_at @mixdown_package.signing = true @mixdown_package.should_retry = false - @mixdown_package.last_step_at = Time.now + @mixdown_package.last_step_at = last_step_at + @mixdown_package.save SubscriptionMessage.mixdown_signing_job_change(@mixdown_package) @@ -83,6 +84,8 @@ module JamRuby rescue Exception => e # record the error in the database post_error(e) + + #SubscriptionMessage.mixdown_signing_job_change(@mixdown_package) # and let the job fail, alerting ops too raise end @@ -441,7 +444,7 @@ module JamRuby # set @error_reason before you raise an exception, and it will be sent back as the error reason # otherwise, the error_reason will be unhandled-job-exception def post_error(e) - #begin + begin # if error_reason is null, assume this is an unhandled error unless @error_reason @error_reason = "unhandled-job-exception" @@ -449,9 +452,9 @@ module JamRuby end @mixdown_package.finish_errored(@error_reason, @error_detail) - #rescue Exception => e - # log.error "unable to post back to the database the error #{e}" - #end + rescue Exception => e + log.error "unable to post back to the database the error #{e}" + end end end end diff --git a/web/app/assets/javascripts/react-components/PopupMediaControls.js.jsx.coffee b/web/app/assets/javascripts/react-components/PopupMediaControls.js.jsx.coffee index 1794fea7d..97bf2f218 100644 --- a/web/app/assets/javascripts/react-components/PopupMediaControls.js.jsx.coffee +++ b/web/app/assets/javascripts/react-components/PopupMediaControls.js.jsx.coffee @@ -112,15 +112,15 @@ mixins.push(Reflux.listenTo(JamTrackStore, 'onJamTrackChanged')) if selectedMixdown.client_state? switch selectedMixdown.client_state when 'cant_open' - customMixName = `
L: {selectedMixdown.name}
` + customMixName = `
{selectedMixdown.name}
` when 'keying_timeout' - customMixName = `
K: {selectedMixdown.name}
` + customMixName = `
{selectedMixdown.name}
` when 'download_fail' - customMixName = `
D: {selectedMixdown.name}
` + customMixName = `
{selectedMixdown.name}
` when 'keying' - customMixName = `
K: Loading selected mix...
` + customMixName = `
Loading selected mix...
` when 'downloading' - customMixName = `
D: Loading selected mix...
` + customMixName = `
Loading selected mix...
` when 'ready' customMixName = `
{selectedMixdown.name}
` disabled = false @@ -128,7 +128,6 @@ mixins.push(Reflux.listenTo(JamTrackStore, 'onJamTrackChanged')) customMixName = `
Creating mixdown...
` else - logger.debug("STATE!", @state.downloadingJamTrack) if SessionStore.downloadingJamTrack downloader = `` @@ -374,8 +373,7 @@ mixins.push(Reflux.listenTo(JamTrackStore, 'onJamTrackChanged')) e.preventDefault() if @disableLoading - $target = $(e.target) - context.JK.prodBubble($target, 'no-change-while-loading', {}, {positions:['left', 'top']}) + alert('Certain actions are disabled while a track is being loaded.') return # make this package the active one @@ -386,8 +384,7 @@ mixins.push(Reflux.listenTo(JamTrackStore, 'onJamTrackChanged')) # user wants to select the full track if @disableLoading - $target = $(e.target) - context.JK.prodBubble($target, 'no-change-while-loading', {}, {positions:['left', 'top']}) + alert('Certain actions are disabled while a track is being loaded.') return JamTrackActions.activateNoMixdown(jamtrack) @@ -411,14 +408,35 @@ mixins.push(Reflux.listenTo(JamTrackStore, 'onJamTrackChanged')) @setState({editingMixdownId: null}) mixdownDelete: (mixdown) -> - if confirm("Delete this custom mix?") - + if @state.editingMixdownId? @setState({editingMixdownId:null}) + return + + if confirm("Delete this custom mix?") JamTrackMixdownActions.deleteMixdown(mixdown) mixdownError: (mixdown) -> - alert("error") + + myPackage = mixdown.myPackage + + if myPackage? + switch myPackage.signing_state + when 'QUIET_TIMEOUT' + action = 'Custom mix never got created. Retry?' + when 'QUEUED_TIMEOUT' + action = 'Custom mix was never built. Retry?' + when 'SIGNING_TIMEOUT' + action = 'Custom mix took took long to build. Retry?' + when 'ERROR' + action = 'Custom mix failed to build. Retry?' + else + action = 'Custom mix never got created. Retry?' + + return unless action? + + if confirm(action) + JamTrackMixdownActions.enqueueMixdown(mixdown) createMix: (e) -> e.preventDefault() @@ -451,9 +469,7 @@ mixins.push(Reflux.listenTo(JamTrackStore, 'onJamTrackChanged')) mixdown = {jamTrackID: @state.jamTrackState.jamTrack.id, name: name, settings: {speed:speed, pitch: pitch}} - package_settings = {file_type: 'ogg', encrypt_type: 'jkz'} - - JamTrackMixdownActions.createMixdown(mixdown, package_settings, @createMixdownDone, @createMixdownFail) + JamTrackMixdownActions.createMixdown(mixdown, @createMixdownDone, @createMixdownFail) @setState({creatingMixdown: true, createMixdownErrors: null}) @@ -471,6 +487,7 @@ mixins.push(Reflux.listenTo(JamTrackStore, 'onJamTrackChanged')) @setState({createMixdownErrors: response}) + componentDidMount: () -> $(window).unload(@windowUnloaded) @@ -496,6 +513,7 @@ mixins.push(Reflux.listenTo(JamTrackStore, 'onJamTrackChanged')) componentDidUpdate: () -> @resizeWindow() + setTimeout(@resizeWindow, 1000) resizeWindow: () => $container = $('#minimal-container') diff --git a/web/app/assets/javascripts/react-components/stores/JamTrackStore.js.coffee b/web/app/assets/javascripts/react-components/stores/JamTrackStore.js.coffee index c92666e2e..048489037 100644 --- a/web/app/assets/javascripts/react-components/stores/JamTrackStore.js.coffee +++ b/web/app/assets/javascripts/react-components/stores/JamTrackStore.js.coffee @@ -275,7 +275,7 @@ JamTrackActions = @JamTrackActions @requestedFilter = null requested - onCreateMixdown: (mixdown, package_settings, done, fail) -> + onCreateMixdown: (mixdown, done, fail) -> volumeSettings = context.jamClient.GetJamTrackSettings(); @@ -286,7 +286,7 @@ JamTrackActions = @JamTrackActions mixdown.settings.tracks = track_settings - logger.debug("creating mixdown", mixdown, package_settings) + logger.debug("creating mixdown", mixdown) rest.createMixdown(mixdown) .done((created) => @@ -295,26 +295,13 @@ JamTrackActions = @JamTrackActions logger.debug("created mixdown", created) - package_settings.id = created.id - - # we have to determine sample rate here, in the store, because child windows don't have access to jamClient - package_settings.sample_rate = @sampleRate - - rest.enqueueMixdown(package_settings) - .done((enqueued) => - logger.debug("enqueued mixdown package", package_settings) - @addOrUpdatePackage(enqueued) - done(enqueued) - ) - .fail((jqxhr) => - @app.layout.notify({title:'Unable to Create Custom Mix', text: 'You can push the RETRY button.'}) - fail(jqxhr) - ) + @onEnqueueMixdown({id: created.id}, done, fail) ) .fail((jqxhr) => fail(jqxhr) ) + onEditMixdown: (mixdown) -> logger.debug("editing mixdown", mixdown) @@ -379,9 +366,23 @@ JamTrackActions = @JamTrackActions onCloseMixdown: (mixdown) -> logger.debug("closing mixdown", mixdown) - onEnqueueMixdown: (mixdown) -> + onEnqueueMixdown: (mixdown, done, fail) -> logger.debug("enqueuing mixdown", mixdown) + package_settings = {file_type: 'ogg', encrypt_type: 'jkz', sample_rate: @sampleRate} + package_settings.id = mixdown.id + + rest.enqueueMixdown(package_settings) + .done((enqueued) => + logger.debug("enqueued mixdown package", package_settings) + @addOrUpdatePackage(enqueued) + done(enqueued) if done + ) + .fail((jqxhr) => + @app.layout.notify({title:'Unable to Create Custom Mix', text: 'Click the error icon to retry.'}) + fail(jqxhr) if fail? + ) + onDownloadMixdown: (mixdown) -> logger.debug("download mixdown", mixdown) diff --git a/web/app/assets/stylesheets/minimal/media_controls.css.scss b/web/app/assets/stylesheets/minimal/media_controls.css.scss index 960f5b4ab..ee4290fd6 100644 --- a/web/app/assets/stylesheets/minimal/media_controls.css.scss +++ b/web/app/assets/stylesheets/minimal/media_controls.css.scss @@ -143,6 +143,8 @@ body.media-controls-popup.popup { vertical-align: middle; margin-left:10px; width:100px; + white-space:nowrap; + min-width:100px; } .mixdown-stateful { diff --git a/web/config/application.rb b/web/config/application.rb index 8b9eb2ceb..139cd75c9 100644 --- a/web/config/application.rb +++ b/web/config/application.rb @@ -232,6 +232,7 @@ if defined?(Bundler) config.signing_job_queue_max_time = 300; # amount of time to allow before giving up on a single step in packaging job config.mixdown_step_max_time = 300; + config.mixdown_job_queue_max_time = 300; config.email_alerts_alias = 'alerts@jamkazam.com' # should be used for 'oh no' server down/service down sorts of emails config.email_generic_from = 'nobody@jamkazam.com'