ultimix
swfupload.queue.js
Go to the documentation of this file.
1 /*
2  Queue Plug-in
3 
4  Features:
5  *Adds a cancelQueue() method for cancelling the entire queue.
6  *All queued files are uploaded when startUpload() is called.
7  *If false is returned from uploadComplete then the queue upload is stopped.
8  If false is not returned (strict comparison) then the queue upload is continued.
9  *Adds a QueueComplete event that is fired when all the queued files have finished uploading.
10  Set the event handler with the queue_complete_handler setting.
11 
12  */
13 
15 if (typeof(SWFUpload) === "function") {
16  SWFUpload.queue = {};
17 
18  SWFUpload.prototype.initSettings = (function (oldInitSettings) {
19  return function () {
20  if (typeof(oldInitSettings) === "function") {
21  oldInitSettings.call(this);
22  }
23 
24  this.queueSettings = {};
25 
26  this.queueSettings.queue_cancelled_flag = false;
27  this.queueSettings.queue_upload_count = 0;
28 
29  this.queueSettings.user_upload_complete_handler = this.settings.upload_complete_handler;
30  this.queueSettings.user_upload_start_handler = this.settings.upload_start_handler;
31  this.settings.upload_complete_handler = SWFUpload.queue.uploadCompleteHandler;
32  this.settings.upload_start_handler = SWFUpload.queue.uploadStartHandler;
33 
34  this.settings.queue_complete_handler = this.settings.queue_complete_handler || null;
35  };
36  })(SWFUpload.prototype.initSettings);
37 
38  SWFUpload.prototype.startUpload = function (fileID) {
39  this.queueSettings.queue_cancelled_flag = false;
40  this.callFlash("StartUpload", [fileID]);
41  };
42 
43  SWFUpload.prototype.cancelQueue = function () {
44  this.queueSettings.queue_cancelled_flag = true;
45  this.stopUpload();
46 
47  var stats = this.getStats();
48  while (stats.files_queued > 0) {
49  this.cancelUpload();
50  stats = this.getStats();
51  }
52  };
53 
54  SWFUpload.queue.uploadStartHandler = function (file) {
55  var returnValue;
56  if (typeof(this.queueSettings.user_upload_start_handler) === "function") {
57  returnValue = this.queueSettings.user_upload_start_handler.call(this, file);
58  }
59 
60  // To prevent upload a real "FALSE" value must be returned, otherwise default to a real "TRUE" value.
61  returnValue = (returnValue === false) ? false : true;
62 
63  this.queueSettings.queue_cancelled_flag = !returnValue;
64 
65  return returnValue;
66  };
67 
68  SWFUpload.queue.uploadCompleteHandler = function (file) {
69  var user_upload_complete_handler = this.queueSettings.user_upload_complete_handler;
70  var continueUpload;
71 
72  if (file.filestatus === SWFUpload.FILE_STATUS.COMPLETE) {
73  this.queueSettings.queue_upload_count++;
74  }
75 
76  if (typeof(user_upload_complete_handler) === "function") {
77  continueUpload = (user_upload_complete_handler.call(this, file) === false) ? false : true;
78  } else if (file.filestatus === SWFUpload.FILE_STATUS.QUEUED) {
79  // If the file was stopped and re-queued don't restart the upload
80  continueUpload = false;
81  } else {
82  continueUpload = true;
83  }
84 
85  if (continueUpload) {
86  var stats = this.getStats();
87  if (stats.files_queued > 0 && this.queueSettings.queue_cancelled_flag === false) {
88  this.startUpload();
89  } else if (this.queueSettings.queue_cancelled_flag === false) {
90  this.queueEvent("queue_complete_handler", [this.queueSettings.queue_upload_count]);
91  this.queueSettings.queue_upload_count = 0;
92  } else {
93  this.queueSettings.queue_cancelled_flag = false;
94  this.queueSettings.queue_upload_count = 0;
95  }
96  }
97  };
98 }