| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 part of dart.io; | 5 part of dart.io; |
| 6 | 6 |
| 7 // Read the file in blocks of size 64k. | 7 // Read the file in blocks of size 64k. |
| 8 const int _BLOCK_SIZE = 64 * 1024; | 8 const int _BLOCK_SIZE = 64 * 1024; |
| 9 | 9 |
| 10 | 10 |
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 183 | 183 |
| 184 _FileStreamConsumer.fromStdio(int fd) { | 184 _FileStreamConsumer.fromStdio(int fd) { |
| 185 assert(1 <= fd && fd <= 2); | 185 assert(1 <= fd && fd <= 2); |
| 186 _openFuture = new Future.value(_File._openStdioSync(fd)); | 186 _openFuture = new Future.value(_File._openStdioSync(fd)); |
| 187 } | 187 } |
| 188 | 188 |
| 189 Future<File> addStream(Stream<List<int>> stream) { | 189 Future<File> addStream(Stream<List<int>> stream) { |
| 190 Completer<File> completer = new Completer<File>(); | 190 Completer<File> completer = new Completer<File>(); |
| 191 _openFuture | 191 _openFuture |
| 192 .then((openedFile) { | 192 .then((openedFile) { |
| 193 void error(e, [StackTrace stackTrace]) { |
| 194 _subscription.cancel(); |
| 195 openedFile.close(); |
| 196 completer.completeError(e, stackTrace); |
| 197 } |
| 193 _subscription = stream.listen( | 198 _subscription = stream.listen( |
| 194 (d) { | 199 (d) { |
| 195 _subscription.pause(); | 200 _subscription.pause(); |
| 196 openedFile.writeFrom(d, 0, d.length) | 201 try { |
| 197 .then((_) => _subscription.resume()) | 202 openedFile.writeFrom(d, 0, d.length) |
| 198 .catchError((e) { | 203 .then((_) => _subscription.resume(), |
| 199 openedFile.close(); | 204 onError: error); |
| 200 completer.completeError(e); | 205 } catch (e, stackTrace) { |
| 201 }); | 206 error(e, stackTrace); |
| 207 } |
| 202 }, | 208 }, |
| 203 onDone: () { | 209 onDone: () { |
| 204 completer.complete(_file); | 210 completer.complete(_file); |
| 205 }, | 211 }, |
| 206 onError: (e, [StackTrace stackTrace]) { | 212 onError: error, |
| 207 openedFile.close(); | |
| 208 completer.completeError(e, stackTrace); | |
| 209 }, | |
| 210 cancelOnError: true); | 213 cancelOnError: true); |
| 211 }) | 214 }) |
| 212 .catchError((e) { | 215 .catchError((e) { |
| 213 completer.completeError(e); | 216 completer.completeError(e); |
| 214 }); | 217 }); |
| 215 return completer.future; | 218 return completer.future; |
| 216 } | 219 } |
| 217 | 220 |
| 218 Future<File> close() => | 221 Future<File> close() => |
| 219 _openFuture.then((openedFile) => openedFile.close()); | 222 _openFuture.then((openedFile) => openedFile.close()); |
| (...skipping 683 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 903 | 906 |
| 904 void _checkAvailable() { | 907 void _checkAvailable() { |
| 905 if (_asyncDispatched) { | 908 if (_asyncDispatched) { |
| 906 throw new FileSystemException("An async operation is currently pending", p
ath); | 909 throw new FileSystemException("An async operation is currently pending", p
ath); |
| 907 } | 910 } |
| 908 if (closed) { | 911 if (closed) { |
| 909 throw new FileSystemException("File closed", path); | 912 throw new FileSystemException("File closed", path); |
| 910 } | 913 } |
| 911 } | 914 } |
| 912 } | 915 } |
| OLD | NEW |