cherryext/orun/extjs/static/extjs-upload-widget/lib/upload/Manager.js

154 lines
3.8 KiB
JavaScript

/**
* The object is responsible for uploading the queue.
*
*/
Ext.define('Ext.ux.upload.Manager', {
mixins : {
observable : 'Ext.util.Observable'
},
requires : [
'Ext.ux.upload.uploader.AbstractUploader'
],
uploader : null,
uploaderOptions : null,
synchronous : true,
filenameEncoder : null,
DEFAULT_UPLOADER_CLASS : 'Ext.ux.upload.uploader.ExtJsUploader',
constructor : function(config) {
this.mixins.observable.constructor.call(this);
this.initConfig(config);
if (!(this.uploader instanceof Ext.ux.upload.uploader.AbstractUploader)) {
var uploaderClass = this.DEFAULT_UPLOADER_CLASS;
if (Ext.isString(this.uploader)) {
uploaderClass = this.uploader;
}
var uploaderOptions = this.uploaderOptions || {};
Ext.applyIf(uploaderOptions, {
success : this.onUploadSuccess,
failure : this.onUploadFailure,
progress : this.onUploadProgress,
filenameEncoder : this.filenameEncoder
});
this.uploader = Ext.create(uploaderClass, uploaderOptions);
}
this.mon(this.uploader, 'uploadsuccess', this.onUploadSuccess, this);
this.mon(this.uploader, 'uploadfailure', this.onUploadFailure, this);
this.mon(this.uploader, 'uploadprogress', this.onUploadProgress, this);
Ext.apply(this, {
syncQueue : null,
currentQueue : null,
uploadActive : false,
errorCount : 0
});
},
uploadQueue : function(queue) {
if (this.uploadActive) {
return;
}
this.startUpload(queue);
if (this.synchronous) {
this.uploadQueueSync(queue);
return;
}
this.uploadQueueAsync(queue);
},
uploadQueueSync : function(queue) {
this.uploadNextItemSync();
},
uploadNextItemSync : function() {
if (!this.uploadActive) {
return;
}
var item = this.currentQueue.getFirstReadyItem();
if (!item) {
return;
}
this.uploader.uploadItem(item);
},
uploadQueueAsync : function(queue) {
var i;
var num = queue.getCount();
for (i = 0; i < num; i++) {
this.uploader.uploadItem(queue.getAt(i));
}
},
startUpload : function(queue) {
queue.reset();
this.uploadActive = true;
this.currentQueue = queue;
this.fireEvent('beforeupload', this, queue);
},
finishUpload : function() {
this.fireEvent('uploadcomplete', this, this.currentQueue, this.errorCount);
},
resetUpload : function() {
this.currentQueue = null;
this.uploadActive = false;
this.errorCount = 0;
},
abortUpload : function() {
this.uploader.abortUpload();
this.currentQueue.recoverAfterAbort();
this.resetUpload();
this.fireEvent('abortupload', this, this.currentQueue);
},
afterItemUpload : function(item, info) {
if (this.synchronous) {
this.uploadNextItemSync();
}
if (!this.currentQueue.existUploadingItems()) {
this.finishUpload();
}
},
onUploadSuccess : function(item, info) {
item.setUploaded();
this.fireEvent('itemuploadsuccess', this, item, info);
this.afterItemUpload(item, info);
},
onUploadFailure : function(item, info) {
item.setUploadError(info.message);
this.fireEvent('itemuploadfailure', this, item, info);
this.errorCount++;
this.afterItemUpload(item, info);
},
onUploadProgress : function(item, event) {
item.setProgress(event.loaded);
}
});