232 lines
7.2 KiB
CoffeeScript
232 lines
7.2 KiB
CoffeeScript
$ = jQuery
|
|
context = window
|
|
logger = context.JK.logger
|
|
|
|
rest = context.JK.Rest()
|
|
|
|
AttachmentActions = @AttachmentActions
|
|
|
|
|
|
@AttachmentStore = Reflux.createStore(
|
|
{
|
|
listenables: AttachmentActions
|
|
lessonId: null
|
|
uploading: false
|
|
|
|
init: ->
|
|
# Register with the app store to get @app
|
|
this.listenTo(context.AppStore, this.onAppInit)
|
|
|
|
onAppInit: (@app) ->
|
|
@ui = new context.JK.UIHelper(@app);
|
|
|
|
recordingsSelected: (recordings) ->
|
|
logger.debug("recording selected", recordings)
|
|
|
|
if @lessonId
|
|
options = {id: @lessonId}
|
|
options.recordings = recordings
|
|
rest.attachRecordingToLesson(options).done((response) => @attachedRecordingsToLesson(response)).fail((jqXHR) => @attachedRecordingsFail(jqXHR))
|
|
else if @sessionId
|
|
options = {id: @sessionId}
|
|
options.recordings = recordings
|
|
rest.attachRecordingToSession(options).done((response) => @attachedRecordingsToSession(response)).fail((jqXHR) => @attachedRecordingsFail(jqXHR))
|
|
|
|
attachedRecordingsToLesson: (response) ->
|
|
context.JK.Banner.showNotice('Recording Attached', 'Your recording has been associated with this lesson, and can be accessed from the Messages window for this lesson.')
|
|
|
|
attachedRecordingsToSession: (response) ->
|
|
context.JK.Banner.showNotice('Recording Attached', 'Your recording has been associated with this session.')
|
|
|
|
attachedRecordingsFail: (jqXHR) ->
|
|
@app.ajaxError(jqXHR)
|
|
|
|
onStartAttachRecording: (lessonId, sessionId = null) ->
|
|
if @uploading
|
|
logger.warn("rejecting startAttachRecording attempt as currently busy")
|
|
return
|
|
@lessonId = lessonId
|
|
@sessionId = sessionId
|
|
|
|
@ui.launchRecordingSelectorDialog([], (recordings) =>
|
|
@recordingsSelected(recordings)
|
|
)
|
|
@changed()
|
|
|
|
onStartAttachNotation: (lessonId, sessionId = null) ->
|
|
if @uploading
|
|
logger.warn("rejecting onStartAttachNotation attempt as currently busy")
|
|
return
|
|
@lessonId = lessonId
|
|
@sessionId = sessionId
|
|
|
|
|
|
logger.debug("notation upload started for lesson: " + lessonId)
|
|
@triggerNotation()
|
|
@changed()
|
|
|
|
onStartAttachAudio: (lessonId, sessionId = null) ->
|
|
if @uploading
|
|
logger.warn("rejecting onStartAttachAudio attempt as currently busy")
|
|
return
|
|
@lessonId = lessonId
|
|
@sessionId = sessionId
|
|
|
|
logger.debug("audio upload started for lesson: " + lessonId)
|
|
@triggerAudio()
|
|
@changed()
|
|
|
|
triggerNotation: () ->
|
|
if !@attachNotationBtn?
|
|
@attachNotationBtn = $('input.attachment-notation').eq(0)
|
|
console.log("@attachNotationBtn", @attachNotationBtn)
|
|
@attachNotationBtn.trigger('click')
|
|
|
|
triggerAudio: () ->
|
|
if !@attachAudioBtn?
|
|
@attachAudioBtn = $('input.attachment-audio').eq(0)
|
|
console.log("@@attachAudioBtn", @attachAudioBtn)
|
|
@attachAudioBtn.trigger('click')
|
|
|
|
|
|
onUploadNotations: (notations, doneCallback, failCallback) ->
|
|
logger.debug("beginning upload of notations", notations)
|
|
@uploading = true
|
|
@changed()
|
|
|
|
formData = new FormData()
|
|
maxExceeded = false;
|
|
$.each(notations, (i, file) => (
|
|
max = 10 * 1024 * 1024;
|
|
if file.size > max
|
|
maxExceeded = true
|
|
return false
|
|
|
|
formData.append('files[]', file)
|
|
))
|
|
|
|
if maxExceeded
|
|
@app.notify({
|
|
title: "Maximum Music Notation Size Exceeded",
|
|
text: "You can only upload files up to 10 megabytes in size."
|
|
})
|
|
failCallback()
|
|
@uploading = false
|
|
@changed()
|
|
return
|
|
|
|
|
|
if @lessonId
|
|
formData.append('lesson_session_id', @lessonId)
|
|
else if @sessionId
|
|
formData.append('session_id', @sessionId)
|
|
|
|
formData.append('attachment_type', 'notation')
|
|
|
|
@app.layout.showDialog('music-notation-upload-dialog')
|
|
|
|
rest.uploadMusicNotations(formData)
|
|
.done((response) => @doneUploadingNotatations(notations, response, doneCallback, failCallback))
|
|
.fail((jqXHR) => @failUploadingNotations(jqXHR, failCallback))
|
|
|
|
doneUploadingNotatations: (notations, response, doneCallback, failCallback) ->
|
|
@uploading = false
|
|
@changed()
|
|
error_files = [];
|
|
$.each(response, (i, music_notation) => (
|
|
if music_notation.errors
|
|
error_files.push(notations[i].name)
|
|
)
|
|
)
|
|
if error_files.length > 0
|
|
failCallback()
|
|
@app.notifyAlert("Failed to upload notations.", error_files.join(', '));
|
|
else
|
|
doneCallback()
|
|
|
|
failUploadingNotations: (jqXHR, failCallback) ->
|
|
@uploading = false
|
|
@changed()
|
|
if jqXHR.status == 413
|
|
# the file is too big. Let the user know.
|
|
# This should happen when they select the file, but a misconfiguration on the server could cause this.
|
|
@app.notify({
|
|
title: "Maximum Music Notation Size Exceeded",
|
|
text: "You can only upload files up to 10 megabytes in size."
|
|
})
|
|
else
|
|
@app.notifyServerError(jqXHR, "Unable to upload music notations");
|
|
|
|
onUploadAudios: (notations, doneCallback, failCallback) ->
|
|
logger.debug("beginning upload of audio", notations)
|
|
@uploading = true
|
|
@changed()
|
|
|
|
formData = new FormData()
|
|
maxExceeded = false;
|
|
$.each(notations, (i, file) => (
|
|
max = 10 * 1024 * 1024;
|
|
if file.size > max
|
|
maxExceeded = true
|
|
return false
|
|
|
|
formData.append('files[]', file)
|
|
))
|
|
|
|
if maxExceeded
|
|
@app.notify({
|
|
title: "Maximum Music Audio Size Exceeded",
|
|
text: "You can only upload files up to 10 megabytes in size."
|
|
})
|
|
failCallback()
|
|
@uploading = false
|
|
@changed()
|
|
return
|
|
|
|
|
|
if @lessonId
|
|
formData.append('lesson_session_id', @lessonId)
|
|
else if @sessionId
|
|
formData.append('session_id', @sessionId)
|
|
|
|
formData.append('attachment_type', 'audio')
|
|
|
|
@app.layout.showDialog('music-notation-upload-dialog')
|
|
|
|
rest.uploadMusicNotations(formData)
|
|
.done((response) => @doneUploadingAudios(notations, response, doneCallback, failCallback))
|
|
.fail((jqXHR) => @failUploadingAudios(jqXHR, failCallback))
|
|
|
|
doneUploadingAudios: (notations, response, doneCallback, failCallback) ->
|
|
@uploading = false
|
|
@changed()
|
|
error_files = [];
|
|
$.each(response, (i, music_notation) => (
|
|
if music_notation.errors
|
|
error_files.push(notations[i].name)
|
|
)
|
|
)
|
|
if error_files.length > 0
|
|
failCallback()
|
|
@app.notifyAlert("Failed to upload audio files.", error_files.join(', '));
|
|
else
|
|
doneCallback()
|
|
|
|
failUploadingAudios: (jqXHR, failCallback) ->
|
|
@uploading = false
|
|
@changed()
|
|
if jqXHR.status == 413
|
|
# the file is too big. Let the user know.
|
|
# This should happen when they select the file, but a misconfiguration on the server could cause this.
|
|
@app.notify({
|
|
title: "Maximum Music Audio Size Exceeded",
|
|
text: "You can only upload files up to 10 megabytes in size."
|
|
})
|
|
else
|
|
@app.notifyServerError(jqXHR, "Unable to upload music audio files");
|
|
|
|
|
|
changed: () ->
|
|
this.trigger({lessonId: @lessonId, uploading: @uploading})
|
|
}
|
|
) |