| 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 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 83 // Don't start a new read if one is already in progress. | 83 // Don't start a new read if one is already in progress. |
| 84 if (_readInProgress) return; | 84 if (_readInProgress) return; |
| 85 _readInProgress = true; | 85 _readInProgress = true; |
| 86 int readBytes = _BLOCK_SIZE; | 86 int readBytes = _BLOCK_SIZE; |
| 87 if (_end != null) { | 87 if (_end != null) { |
| 88 readBytes = min(readBytes, _end - _position); | 88 readBytes = min(readBytes, _end - _position); |
| 89 if (readBytes < 0) { | 89 if (readBytes < 0) { |
| 90 _readInProgress = false; | 90 _readInProgress = false; |
| 91 if (!_unsubscribed) { | 91 if (!_unsubscribed) { |
| 92 _controller.addError(new RangeError("Bad end position: $_end")); | 92 _controller.addError(new RangeError("Bad end position: $_end")); |
| 93 _closeFile().then((_) { _controller.close(); }); | 93 _closeFile(); |
| 94 _unsubscribed = true; | 94 _unsubscribed = true; |
| 95 } | 95 } |
| 96 return; | 96 return; |
| 97 } | 97 } |
| 98 } | 98 } |
| 99 _openedFile.read(readBytes) | 99 _openedFile.read(readBytes) |
| 100 .whenComplete(() { | 100 .whenComplete(() { |
| 101 _readInProgress = false; | 101 _readInProgress = false; |
| 102 }) | 102 }) |
| 103 .then((block) { | 103 .then((block) { |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 136 _controller.addError(new RangeError("Bad start position: $_position")); | 136 _controller.addError(new RangeError("Bad start position: $_position")); |
| 137 _controller.close(); | 137 _controller.close(); |
| 138 return; | 138 return; |
| 139 } | 139 } |
| 140 Future<RandomAccessFile> openFuture; | 140 Future<RandomAccessFile> openFuture; |
| 141 if (_path != null) { | 141 if (_path != null) { |
| 142 openFuture = new File(_path).open(mode: FileMode.READ); | 142 openFuture = new File(_path).open(mode: FileMode.READ); |
| 143 } else { | 143 } else { |
| 144 openFuture = new Future.value(_File._openStdioSync(0)); | 144 openFuture = new Future.value(_File._openStdioSync(0)); |
| 145 } | 145 } |
| 146 _readInProgress = true; |
| 146 openFuture | 147 openFuture |
| 147 .then((RandomAccessFile opened) { | 148 .then((RandomAccessFile opened) { |
| 148 _openedFile = opened; | 149 _openedFile = opened; |
| 149 if (_position > 0) { | 150 if (_position > 0) { |
| 150 return opened.setPosition(_position); | 151 return opened.setPosition(_position); |
| 151 } | 152 } |
| 152 }) | 153 }) |
| 154 .whenComplete(() { |
| 155 _readInProgress = false; |
| 156 }) |
| 153 .then((_) => _readBlock()) | 157 .then((_) => _readBlock()) |
| 154 .catchError((e) { | 158 .catchError((e) { |
| 155 _controller.addError(e); | 159 _controller.addError(e); |
| 156 _controller.close(); | 160 _closeFile(); |
| 157 }); | 161 }); |
| 158 } | 162 } |
| 159 | 163 |
| 160 void _resume() { | 164 void _resume() { |
| 161 _paused = false; | 165 _paused = false; |
| 162 if (_currentBlock != null) { | 166 if (_currentBlock != null) { |
| 163 _controller.add(_currentBlock); | 167 _controller.add(_currentBlock); |
| 164 _currentBlock = null; | 168 _currentBlock = null; |
| 165 } | 169 } |
| 166 // Resume reading unless we are already done. | 170 // Resume reading unless we are already done. |
| (...skipping 702 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 869 | 873 |
| 870 void _checkAvailable() { | 874 void _checkAvailable() { |
| 871 if (_asyncDispatched) { | 875 if (_asyncDispatched) { |
| 872 throw new FileSystemException("An async operation is currently pending", p
ath); | 876 throw new FileSystemException("An async operation is currently pending", p
ath); |
| 873 } | 877 } |
| 874 if (closed) { | 878 if (closed) { |
| 875 throw new FileSystemException("File closed", path); | 879 throw new FileSystemException("File closed", path); |
| 876 } | 880 } |
| 877 } | 881 } |
| 878 } | 882 } |
| OLD | NEW |