implement pause/resume for chunk upload

This commit is contained in:
j 2013-04-17 10:01:57 +00:00
parent 4bff07f054
commit 7738d13679

View file

@ -30,10 +30,14 @@ pandora.chunkupload = function(options) {
chunkURL, chunkURL,
file = options.file, file = options.file,
maxRetry = -1, maxRetry = -1,
nextChunkId,
paused = false,
retries = 0, retries = 0,
request, request,
that = Ox.Element(); that = Ox.Element();
options.data = options.data || {};
initUpload(); initUpload();
function done() { function done() {
@ -143,7 +147,12 @@ pandora.chunkupload = function(options) {
// reset retry counter // reset retry counter
retries = 0; retries = 0;
// start uploading next chunk // start uploading next chunk
uploadChunk(chunkId + 1); if (paused) {
nextChunkId = chunkId + 1;
that.triggerEvent('paused', {next: nextChunkId});
} else {
uploadChunk(chunkId + 1);
}
} else { } else {
// failed to upload, try again in 5 second // failed to upload, try again in 5 second
retries++; retries++;
@ -153,7 +162,12 @@ pandora.chunkupload = function(options) {
done(); done();
} else { } else {
setTimeout(function() { setTimeout(function() {
uploadChunk(chunkId); if (paused) {
nextChunkId = chunkId;
that.triggerEvent('paused', {next: nextChunkId});
} else {
uploadChunk(chunkId);
}
}, 5000); }, 5000);
} }
} }
@ -167,7 +181,12 @@ pandora.chunkupload = function(options) {
done(); done();
} else { } else {
setTimeout(function() { setTimeout(function() {
uploadChunk(chunkId); if (paused) {
nextChunkId = chunkId;
that.triggerEvent('paused', {next: nextChunkId});
} else {
uploadChunk(chunkId);
}
}, 3000); }, 3000);
} }
}, false); }, false);
@ -200,6 +219,21 @@ pandora.chunkupload = function(options) {
request.abort(); request.abort();
request = null; request = null;
} }
return that;
};
that.pause = function() {
paused = true;
return that;
};
that.resume = function() {
if (paused) {
paused = false;
if (nextChunkId) {
uploadChunk(nextChunkId);
nextChunkId = null;
}
}
return that;
}; };
return that; return that;