2828library aspose_words_cloud;
2929
3030import 'dart:convert' ;
31+ import 'dart:math' ;
3132import 'dart:typed_data' ;
3233
3334import 'package:convert/convert.dart' ;
@@ -457,7 +458,7 @@ class ApiClient {
457458 var batchBody = serializeMultipart (bodyParts, boundary);
458459 batchHeaders['Content-Type' ] = 'multipart/form-data; boundary="$boundary "' ;
459460
460- var batchRequestData = ApiRequestData ('PUT' , batchUrl, batchHeaders, batchBody);
461+ var batchRequestData = ApiRequestData ('PUT' , batchUrl, batchHeaders, batchBody, null , null );
461462 var response = await _callWithChecks (batchRequestData);
462463 var responseParts = deserializeMultipartBatch (response.content);
463464 var result = < dynamic > [];
@@ -501,19 +502,46 @@ class ApiClient {
501502 print (debugMessage);
502503 }
503504
504- var httpRequest = http.Request (requestData.method, Uri .parse (requestData.url));
505+ http.BaseRequest httpRequest;
506+ if (requestData.sendDataProgressCallback != null && requestData.body != null ) {
507+ final streamRequest = httpRequest = http.StreamedRequest (requestData.method, Uri .parse (requestData.url));
508+ streamRequest.sink.addStream (_streamedByteData (requestData.body! , requestData.sendDataProgressCallback! )).then ((_) {
509+ streamRequest.sink.close ();
510+ });
511+ }
512+ else {
513+ final bodyRequest = httpRequest = http.Request (requestData.method, Uri .parse (requestData.url));
514+ if (requestData.body != null ) {
515+ bodyRequest.bodyBytes = requestData.body! .buffer.asUint8List (
516+ requestData.body! .offsetInBytes, requestData.body! .lengthInBytes);
517+ }
518+ }
519+
505520 httpRequest.headers['x-aspose-client' ] = 'dart sdk' ;
506- httpRequest.headers['x-aspose-client-version' ] = '24.7 ' ;
521+ httpRequest.headers['x-aspose-client-version' ] = '24.8 ' ;
507522 httpRequest.headers['Authorization' ] = await _getAuthToken ();
508523 httpRequest.headers.addAll (requestData.headers);
509524
510- if (requestData.body != null ) {
511- httpRequest.bodyBytes = requestData.body! .buffer.asUint8List (requestData.body! .offsetInBytes, requestData.body! .lengthInBytes);
512- }
513-
514525 var response = await httpRequest.send ().timeout (configuration.timeout);
515- var bytes = await response.stream.toBytes ();
516- var responseData = ByteData .view (bytes.buffer);
526+ ByteData responseData;
527+ if (requestData.receiveDataProgressCallback != null ) {
528+ var responseReceivedBytes = 0 ;
529+ final responseTotalBytes = response.contentLength ?? 0 ;
530+ final bytes = BytesBuilder ();
531+ await for (final chunkValue in response.stream) {
532+ final chunk = Uint8List .fromList (chunkValue);
533+ bytes.write (chunk, chunk.offsetInBytes, chunk.lengthInBytes);
534+ responseReceivedBytes += chunk.lengthInBytes;
535+ requestData.receiveDataProgressCallback !(responseReceivedBytes, responseTotalBytes);
536+ }
537+
538+ final totalBytes = bytes.takeBytes ();
539+ responseData = ByteData .view (totalBytes.buffer, totalBytes.offsetInBytes, totalBytes.lengthInBytes);
540+ }
541+ else {
542+ final bytes = await response.stream.toBytes ();
543+ responseData = ByteData .view (bytes.buffer, bytes.offsetInBytes, bytes.lengthInBytes);
544+ }
517545
518546 if (configuration.debugMode == true ) {
519547 var debugMessage = 'RESPONSE STATUS: ${response .statusCode } ${response .reasonPhrase }\r\n ' ;
@@ -532,6 +560,18 @@ class ApiClient {
532560 _handleResponse (response.statusCode, response.reasonPhrase ?? "" , responseData);
533561 return ApiResponseData (response.headers, responseData);
534562 }
563+
564+ Stream <Uint8List > _streamedByteData (ByteData buffer, final SendDataProgressCallback sendDataProgressCallback) async * {
565+ final maxChunkSize = 1024 * 64 ;
566+ final streamTotal = buffer.lengthInBytes;
567+ for (int i = 0 ; i < streamTotal; i += maxChunkSize) {
568+ final chunkProgress = i;
569+ final chunkOffset = buffer.offsetInBytes + i;
570+ final chunkSize = min (maxChunkSize, streamTotal - i);
571+ sendDataProgressCallback (chunkProgress + chunkSize, streamTotal);
572+ yield buffer.buffer.asUint8List (chunkOffset, chunkSize);
573+ }
574+ }
535575}
536576
537577extension IterableExtension <T > on Iterable <T > {
0 commit comments