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 = `





`
@@ -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'