diff options
Diffstat (limited to 'www/js/importer.js')
-rw-r--r-- | www/js/importer.js | 213 |
1 files changed, 118 insertions, 95 deletions
diff --git a/www/js/importer.js b/www/js/importer.js index ab702e5..fbf4955 100644 --- a/www/js/importer.js +++ b/www/js/importer.js @@ -32,24 +32,18 @@ Rivendell.Importer = function() { Rivendell.Importer.prototype.resetModal = function() { $('div.modal-header h4', this.$el).text("Datei auswählen..."); - $('.modal-body', this.$el).css("background-image", "url('/img/dz-backdrop.png')"); + $('.modal-body', this.$el).empty().css("background-image", "url('/img/dz-backdrop.png')"); $('#uploadModal-confirm', this.$el).attr('disabled','disabled').off('click'); }; -Rivendell.Importer.prototype.openModal = function(group, groupView, createCart, useMetadata) { - this.resetModal(); - - if (createCart === undefined) { - createCart = false; - } +Rivendell.Importer.prototype.openModal = function(group, groupView, createCart, newCartNumber, useMetadata) { + createCart = typeof createCart === 'undefined' ? false : createCart; + useMetadata = typeof useMetadata === 'undefined' ? false : useMetadata; - if (useMetadata === undefined) { - useMetadata = false; - } + this.resetModal(); + $('.modal-body', this.$el).append($('<form>')); - var $form = $('<form>'); - var self = this; - var dropzone = $form.dropzone({ + var dropzone = new Dropzone('#uploadModal form', { url: '/rd-bin/rdxport.cgi', parallelUploads: 1, maxFilesize: 2048, @@ -58,98 +52,133 @@ Rivendell.Importer.prototype.openModal = function(group, groupView, createCart, clickable: true, createImageThumbnails: false, acceptedFiles: '.flac,.wav,.ogg,.mp3', - autoProcessQueue: false, - init: function() { - this.on('addedfile', function(file) { - self.importFileAdded(this, file, group, groupView, createCart, useMetadata); - }); - } + autoProcessQueue: false }); - this.uploads.push(dropzone); + var self = this; + dropzone.on('addedfile', function(file) { + $('div.modal-header h4', self.$el).text(file.name); + $('div.modal-body', self.$el).css("background-image", "url('/img/audio_file.png')"); + + $('#uploadModal-confirm', self.$el).off('click').on('click', function() { + var upload = new Rivendell.Upload(group, groupView, createCart, newCartNumber, useMetadata, dropzone); + self.uploads.push(upload); - $('.modal-body', this.$el).empty().append($form); + self.$el.modal('hide'); + }) + .removeAttr('disabled'); + }); this.$el.modal({keyboard: true}); }; -Rivendell.Importer.prototype.importFileAdded = function(dropzone, file, group, groupView, createCart, useMetadata) { - // wtf? remove accepted files? - /*$(dropzone.getAcceptedFiles()).each(function(index, elem) { - dropzone.removeFile(elem); - });*/ - - $('div.modal-body', this.$el).css("background-image", "url('/img/audio_file.png')"); - $('div.modal-header h4', this.$el).text(file.name); +Rivendell.Importer.prototype.cancelAllUploads = function() { + var self = this; + $.each(this.uploads, function(index, upload){ + upload.cancel(); + }); +}; +Rivendell.Importer.prototype.removeUpload = function(upload) { var self = this; - $('#uploadModal-confirm', this.$el).off('click').on('click', function() { - self.importCartConfirm(dropzone, group, groupView, createCart, useMetadata); - }).removeAttr('disabled'); + $.each(this.uploads, function(index, currentUpload){ + if(currentUpload === upload) { + self.uploads.splice(index, 1); + } + }); }; -Rivendell.Importer.prototype.importCartConfirm = function(dropzone, group, groupView, createCart, useMetadata) { - this.$el.modal('hide'); +Rivendell.Upload = function(group, groupView, createCart, newCartNumber, useMetadata, dropzone) { + this.group = group; + this.groupView = groupView; + this.createCart = createCart; + this.newCartNumber = newCartNumber; + this.useMetadata = useMetadata; + this.dropzone = dropzone; + + this.cart = null; + this.cut = null; + + this.import(); +}; + +Rivendell.Upload.prototype.cancel = function() { + this.dropzone.removeAllFiles(); + this.dropzone.disable(); + + var self = this; + if (this.createCart && this.cart !== null) { + rdxport.removeCart(this.cart.number, function() { + self.group.fetchCarts(); + }); + this.cart = null; + } else if (this.cart !== null && this.cut !== null) { + rdxport.removeCut(this.cart.number, this.cut.number, function() { + self.group.fetchCarts(); + }); + this.cut = null; + } - //var cart_row = $('#show-cart-' + cart); - //cart_row.find('.btn').attr('disabled','disabled'); - //var importing_row = jingles_newImportingEntry(cart); - //importing_row.find('button').unbind('click').click(function() { jingles_importCartCancel(cart, dropzone); }); - //cart_row.replaceWith(importing_row); + importer.removeUpload(this); +}; - var files = dropzone.getAcceptedFiles(); - //importing_row.find('.file-name').text(files[0].name); - //jingles_importUpdateProgress(files[0], importing_row); +Rivendell.Upload.prototype.import = function() { var self = this; - dropzone.on('uploadprogress', function(file) { - groupView.uploadProgress(file); + + this.dropzone.off('uploadprogress').on('uploadprogress', function(file) { + self.groupView.uploadProgress(self, file); }); - dropzone.on('success', function(file) { - self.importFileUploadSuccess(dropzone, file, group); + this.dropzone.off('success').on('success', function(file) { + self.importFileUploadSuccess(); }); - dropzone.off('error').on('error', function(file, msg, xhr) { - self.importFileUploadError(this, file, msg, xhr); + this.dropzone.off('error').on('error', function(file, msg, xhr) { + self.importFileUploadError(file, msg, xhr); }); - /*$(files).each(function(index, file) { - self.importAddCut(dropzone, group, file); - });*/ - - if (createCart) { - rdxport.addCart(group.groupName, 'audio', null, function(cartXML) { - var cart = new Rivendell.Cart(cartXML, group); - self.importAddCut(dropzone, group, files[0], createCart, cart, useMetadata); + // debug + //self.importFileUploadError({cartNumber: 100000}, '<?xml version="1.0" encoding="UTF-8"?><woot><ResponseCode>123</ResponseCode><ErrorString>Fake error</ErrorString></woot>', null); + + this.addCart(function(file) { + self.addCut(file); + }); +}; + +Rivendell.Upload.prototype.addCart = function(success) { + var files = this.dropzone.getAcceptedFiles(); + + var self = this; + if (this.createCart) { + rdxport.addCart(this.group.groupName, 'audio', this.newCartNumber, function(cartXML) { + self.cart = new Rivendell.Cart(cartXML, self.group); + success(files[0]); + }).fail(function() { + //self.importFileUploadError(files[0], 'Failed to add Cart.'); }); } else { - var cart = group.mainCart; - self.importAddCut(dropzone, group, files[0], createCart, cart, useMetadata); + this.cart = this.group.carts[0]; + success(files[0]); } }; -Rivendell.Importer.prototype.importFileUploadSuccess = function(dropzone, file, group) { - dropzone.disable(); - this.uploads = $.grep(this.uploads, function(element) { - return element !== dropzone; - }); - group.fetchCarts(); +Rivendell.Upload.prototype.importFileUploadSuccess = function() { + this.dropzone.removeAllFiles(); + this.dropzone.disable(); + + this.group.fetchCarts(); + + importer.removeUpload(this); }; -Rivendell.Importer.prototype.importFileUploadError = function(dropzone, file, msg, xhr) { - //var error_row = jingles_newImportErrorEntry(cart, msg); - //error_row.find('button').unbind('click').click(function() { - //jingles_deleteCart(cart); - //}); - //$('#show-cart-' + cart).replaceWith(error_row); - //error_row.find('.file-name').text(file.name); - dropzone.removeFile(file); - dropzone.disable(); - this.uploads = $.grep(this.uploads, function(element) { - return element !== dropzone; - }); +Rivendell.Upload.prototype.importFileUploadError = function(file, msg, xhr) { + this.groupView.uploadError(self, file, msg); + this.cancel(); }; -Rivendell.Importer.prototype.importAddCut = function(dropzone, group, file, createCart, cart, useMetadata) { - rdxport.addAndEditCut(cart.number, {DESCRIPTION: file.name}, function(cutXml) { - group.fetchCarts(); - dropzone.on('sending', function(file, xhr, formData) { +Rivendell.Upload.prototype.addCut = function(file) { + var self = this; + + rdxport.addAndEditCut(this.cart.number, {DESCRIPTION: file.name}, function(cutXml) { + self.cut = new Rivendell.Cut(cutXml, self.cart); + + self.dropzone.on('sending', function(file, xhr, formData) { var cutNumber = $('cutNumber', cutXml).text(); var cutNumberLeading = cutNumber; switch (cutNumber.toString().length) { @@ -158,28 +187,22 @@ Rivendell.Importer.prototype.importAddCut = function(dropzone, group, file, crea case 2: cutNumberLeading = '0' + cutNumber; break; case 3: default: cutNumberLeading = cutNumber; break; } - file.cartNumber = cart.number; + file.cartNumber = self.cart.number; file.cutNumber = cutNumberLeading; formData.append('COMMAND', 2); formData.append('LOGIN_NAME', auth_username); formData.append('PASSWORD', auth_token); - formData.append('CART_NUMBER', cart.number); + formData.append('CART_NUMBER', self.cart.number); formData.append('CUT_NUMBER', cutNumber); formData.append('CHANNELS', 2); - formData.append('NORMALIZATION_LEVEL', cart.normlevel); - formData.append('AUTOTRIM_LEVEL', cart.trimlevel); - if (useMetadata) { - formData.append('USE_METADATA', 1); - } else { - formData.append('USE_METADATA', 0); - } + formData.append('NORMALIZATION_LEVEL', self.cart.normlevel); + formData.append('AUTOTRIM_LEVEL', self.cart.trimlevel); + formData.append('USE_METADATA', (self.useMetadata ? 1 : 0)); }); - dropzone.processQueue(); - }).fail(function(xhr, status, err) { - self.importFileUploadError(dropzone, file, err, xhr); - if (createCart) { - rdxport.removeCart(cart.number); - } + + self.dropzone.processQueue(); + self.group.fetchCarts(); + }); }; |