johnspackman / UploadMgr

Uploads files with background uploads and progress feedback on modern browsers
10 stars 14 forks source link

file listener `changeProgress` state never reaches `uploaded` #22

Open MakotoNinja opened 3 years ago

MakotoNinja commented 3 years ago

I have found that when listening to a file's changeProgress event, the file's state never becomes the final state of uploaded'. So something like the following will never execute the the code when the state is uploaded.

let uploader = new com.zenesis.qx.upload.UploadMgr(this.upload, uploadUrl);
uploader.addListener('addFile', function(evt) {
  let file = evt.getData();
  let progressListenerId = file.addListener('changeProgress', function(evt) {
    let file = evt.getTarget();
    let uploadedSize = evt.getData();
    if(file.getState() === 'uploading')
    {
      console.log('uploading...');
    }
    else if(file.getState() === 'uploaded')
    {
      // this is never executed...
      console.log('finished uploading!');
    }
  }
});

I have made a fix by firing the changeProgress data event in File.js _applyState function:

// property apply
_applyState: function(value, oldValue) {
  qx.core.Assert.assertTrue((!oldValue && value == "not-started")
    || (oldValue == "not-started" && (value == "cancelled" || value == "uploading"))
    || (oldValue == "uploading" && (value == "cancelled" || value == "uploaded")));
  // fire the event!
  this.fireDataEvent('changeProgress', value);
}