| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library entry; | 5 library entry; |
| 6 | 6 |
| 7 import 'dart:io'; | 7 import 'dart:io'; |
| 8 import 'archive.dart' as archive; | 8 import 'archive.dart' as archive; |
| 9 import 'entry_request.dart'; | 9 import 'entry_request.dart'; |
| 10 import 'read_request.dart' as read; | 10 import 'read_request.dart' as read; |
| (...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 265 } else if (_input != null) { | 265 } else if (_input != null) { |
| 266 throw new UnsupportedError("An input stream has already been" | 266 throw new UnsupportedError("An input stream has already been" |
| 267 "opened for archive entry $pathname."); | 267 "opened for archive entry $pathname."); |
| 268 } | 268 } |
| 269 | 269 |
| 270 var inputCompleter = new Completer(); | 270 var inputCompleter = new Completer(); |
| 271 inputComplete = inputCompleter.future; | 271 inputComplete = inputCompleter.future; |
| 272 | 272 |
| 273 _input = new ListInputStream(); | 273 _input = new ListInputStream(); |
| 274 // TODO(nweiz): Report errors once issue 3657 is fixed | 274 // TODO(nweiz): Report errors once issue 3657 is fixed |
| 275 var future = _consumeInput().chain((_) { | 275 var future = _consumeInput().then((_) { |
| 276 if (!_input.closed) _input.markEndOfStream(); | 276 if (!_input.closed) _input.markEndOfStream(); |
| 277 // Asynchronously complete to give the InputStream callbacks a chance to | 277 // Asynchronously complete to give the InputStream callbacks a chance to |
| 278 // fire. | 278 // fire. |
| 279 return async(); | 279 return async(); |
| 280 }).then((_) => inputCompleter.complete(null)); | 280 }).then((_) => inputCompleter.complete(null)); |
| 281 | 281 |
| 282 future.handleException((e) { | 282 future.handleException((e) { |
| 283 print(e); | 283 print(e); |
| 284 print(future.stackTrace); | 284 print(future.stackTrace); |
| 285 }); | 285 }); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 300 /** | 300 /** |
| 301 * Read all data from the archive and write it to [_input]. Returns a future | 301 * Read all data from the archive and write it to [_input]. Returns a future |
| 302 * that completes once this is done. | 302 * that completes once this is done. |
| 303 * | 303 * |
| 304 * This assumes that both [_input] and [_archiveId] are non-null and that | 304 * This assumes that both [_input] and [_archiveId] are non-null and that |
| 305 * [_input] is open, although if that changes before this completes it will | 305 * [_input] is open, although if that changes before this completes it will |
| 306 * handle it gracefully. | 306 * handle it gracefully. |
| 307 */ | 307 */ |
| 308 Future _consumeInput() { | 308 Future _consumeInput() { |
| 309 var data; | 309 var data; |
| 310 return call(read.DATA_BLOCK, _archiveId).chain((_data) { | 310 return call(read.DATA_BLOCK, _archiveId).then((_data) { |
| 311 data = _data; | 311 data = _data; |
| 312 // TODO(nweiz): This async() call is only necessary because of issue 4222. | 312 // TODO(nweiz): This async() call is only necessary because of issue 4222. |
| 313 return async(); | 313 return async(); |
| 314 }).chain((_) { | 314 }).then((_) { |
| 315 if (_input.closed || _archiveId == null || data == null) { | 315 if (_input.closed || _archiveId == null || data == null) { |
| 316 return new Future.immediate(null); | 316 return new Future.immediate(null); |
| 317 } | 317 } |
| 318 _input.write(data); | 318 _input.write(data); |
| 319 return _consumeInput(); | 319 return _consumeInput(); |
| 320 }); | 320 }); |
| 321 } | 321 } |
| 322 } | 322 } |
| 323 | 323 |
| 324 /** | 324 /** |
| 325 * An [ArchiveEntry] that contains the complete decompressed contents of the | 325 * An [ArchiveEntry] that contains the complete decompressed contents of the |
| 326 * file. | 326 * file. |
| 327 */ | 327 */ |
| 328 class CompleteArchiveEntry extends ArchiveEntry { | 328 class CompleteArchiveEntry extends ArchiveEntry { |
| 329 /** The contents of the entry as bytes. */ | 329 /** The contents of the entry as bytes. */ |
| 330 final List<int> contentBytes; | 330 final List<int> contentBytes; |
| 331 | 331 |
| 332 /** The contents of the entry as a string. */ | 332 /** The contents of the entry as a string. */ |
| 333 String get contents => new String.fromCharCodes(contentBytes); | 333 String get contents => new String.fromCharCodes(contentBytes); |
| 334 | 334 |
| 335 CompleteArchiveEntry._(List properties, this.contentBytes) | 335 CompleteArchiveEntry._(List properties, this.contentBytes) |
| 336 : super.internal(properties, null); | 336 : super.internal(properties, null); |
| 337 } | 337 } |
| OLD | NEW |