@@ -45,7 +45,7 @@ module.exports = function Uploader(config) {
45
45
46
46
var state = { } ;
47
47
var file = null ;
48
-
48
+
49
49
this . setFile = function ( f ) {
50
50
file = f ;
51
51
} ;
@@ -58,13 +58,13 @@ module.exports = function Uploader(config) {
58
58
log ( { type : 'log' , logType : 'error' , message : message } ) ;
59
59
}
60
60
} ;
61
-
61
+
62
62
this . logger = logger ;
63
63
64
64
function error ( data , status ) {
65
65
this . log ( { type : 'error' , fatal : true , data : data , status : status } ) ;
66
66
}
67
-
67
+
68
68
function Block ( index , blockId , pointer , end ) {
69
69
this . index = index ;
70
70
this . blockId = blockId ;
@@ -79,6 +79,7 @@ module.exports = function Uploader(config) {
79
79
this . md5 = null ;
80
80
this . uploading = false ;
81
81
this . retries = 0 ;
82
+ this . startedAt = null ;
82
83
83
84
this . incrementRetry = function ( ) {
84
85
this . retries ++ ;
@@ -172,6 +173,7 @@ module.exports = function Uploader(config) {
172
173
173
174
function blockUploading ( block ) {
174
175
block . uploading = true ;
176
+ block . startedAt = Date . now ( ) ;
175
177
176
178
var getReadAndUnprocessed = function ( ) {
177
179
return state . blocks . filter ( function ( b ) {
@@ -231,7 +233,7 @@ module.exports = function Uploader(config) {
231
233
232
234
return deferred . promise ;
233
235
}
234
-
236
+
235
237
function commitBlockList ( ) {
236
238
var uri = state . blobUri + '&comp=blocklist' ;
237
239
@@ -244,14 +246,13 @@ module.exports = function Uploader(config) {
244
246
atomic . put ( uri , requestBody , {
245
247
'x-ms-blob-content-type' : state . file . type ,
246
248
} ) . success ( function ( data , req ) {
247
- complete ( { data : data , md5 : state . fileMd5 . finalize ( ) . toString ( CryptoJS . enc . Base64 ) } ) ;
249
+ complete ( { data : data , md5 : state . fileMd5 . finalize ( ) . toString ( CryptoJS . enc . Base64 ) , startedAt : state . startedAt } ) ;
248
250
logger . debug ( 'Upload took ' + ( performance . now ( ) - state . startedUpload ) + 'ms' ) ;
249
- } )
250
- . error ( function ( data , req ) {
251
- logger . error ( 'Put block list error ' + req . status ) ;
252
- logger . error ( data ) ;
253
- error ( data , req . status ) ;
254
- } ) ;
251
+ } ) . error ( function ( data , req ) {
252
+ logger . error ( 'Put block list error ' + req . status ) ;
253
+ logger . error ( data ) ;
254
+ error ( data , req . status ) ;
255
+ } ) ;
255
256
}
256
257
257
258
function pad ( number , length ) {
@@ -312,12 +313,16 @@ module.exports = function Uploader(config) {
312
313
cancelled : false ,
313
314
calculateFileMd5 : config . calculateFileMd5 || false ,
314
315
fileMd5 : arrayBufferUtils . getArrayBufferMd5Iterative ( ) ,
315
- readingNextSetOfBlocks : false
316
+ readingNextSetOfBlocks : false ,
317
+ percentComplete : null ,
318
+ startedAt : null
316
319
} ;
317
320
} ;
318
321
319
322
this . upload = function ( ) {
320
323
state . blocks = [ ] ;
324
+ state . startedAt = Date . now ( ) ;
325
+
321
326
var numberOfBlocks = state . numberOfBlocks ;
322
327
var index = 0 ;
323
328
var totalFileSize = state . fileSize ;
@@ -354,15 +359,23 @@ module.exports = function Uploader(config) {
354
359
} ) ;
355
360
} ;
356
361
357
- var removeProcessedAction = function ( action , result ) {
362
+ var removeProcessedAction = function ( block , action , result ) {
358
363
action . resolved = true ;
359
364
360
365
state . bytesUploaded += result . requestLength ;
361
366
state . totalBytesRemaining -= result . requestLength ;
362
367
363
368
var percentComplete = ( ( parseFloat ( state . bytesUploaded ) / parseFloat ( state . file . size ) ) * 100 ) . toFixed ( 2 ) ;
364
369
365
- progress ( { percentComplete : percentComplete , result : result } ) ;
370
+ progress ( {
371
+ result : result ,
372
+ previousPercentComplete : state . percentComplete ,
373
+ percentComplete : percentComplete ,
374
+ startedAt : block . startedAt ,
375
+ blockSize : block . size
376
+ } ) ;
377
+
378
+ state . percentComplete = percentComplete ;
366
379
367
380
removeFromCurrentlyProcessing ( action ) ;
368
381
@@ -396,7 +409,7 @@ module.exports = function Uploader(config) {
396
409
397
410
action . then ( function ( result ) {
398
411
block . resolved = true ;
399
- removeProcessedAction ( action , result ) ;
412
+ removeProcessedAction ( block , action , result ) ;
400
413
} , function ( rejectReason ) {
401
414
block . resolved = false ;
402
415
processRejectedAction ( block , action , rejectReason ) ;
@@ -422,7 +435,7 @@ module.exports = function Uploader(config) {
422
435
}
423
436
} ) ;
424
437
} ;
425
-
438
+
426
439
this . getState = function ( ) {
427
440
return _ . clone ( state ) ;
428
441
} ;
0 commit comments