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 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
64 return closeFuture; | 64 return closeFuture; |
65 } else { | 65 } else { |
66 return new Future.value(); | 66 return new Future.value(); |
67 } | 67 } |
68 } | 68 } |
69 | 69 |
70 void _readBlock() { | 70 void _readBlock() { |
71 // Don't start a new read if one is already in progress. | 71 // Don't start a new read if one is already in progress. |
72 if (_readInProgress) return; | 72 if (_readInProgress) return; |
73 _readInProgress = true; | 73 _readInProgress = true; |
74 _openedFile.length() | 74 _openedFile.read(_BLOCK_SIZE) |
75 .then((length) { | 75 .then((block) { |
76 if (_position >= length) { | 76 _readInProgress = false; |
77 _readInProgress = false; | 77 if (block.length == 0) { |
78 if (!_unsubscribed) { | 78 if (!_unsubscribed) { |
79 _closeFile().then((_) { _controller.close(); }); | 79 _closeFile().then((_) { _controller.close(); }); |
80 _unsubscribed = true; | 80 _unsubscribed = true; |
81 } | 81 } |
82 return null; | |
83 } else { | |
84 return _openedFile.read(_BLOCK_SIZE); | |
85 } | |
86 }) | |
87 .then((block) { | |
88 _readInProgress = false; | |
89 if (block == null || _unsubscribed) { | |
90 return; | 82 return; |
91 } | 83 } |
92 _position += block.length; | 84 _position += block.length; |
93 if (_paused) { | 85 if (_paused) { |
94 _currentBlock = block; | 86 _currentBlock = block; |
95 } else { | 87 } else { |
96 _controller.add(block); | 88 _controller.add(block); |
97 _readBlock(); | 89 _readBlock(); |
98 } | 90 } |
99 }) | 91 }) |
(...skipping 937 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1037 new FileIOException("File closed '$_path'")); | 1029 new FileIOException("File closed '$_path'")); |
1038 }); | 1030 }); |
1039 return completer.future; | 1031 return completer.future; |
1040 } | 1032 } |
1041 | 1033 |
1042 final String _path; | 1034 final String _path; |
1043 int _id; | 1035 int _id; |
1044 | 1036 |
1045 SendPort _fileService; | 1037 SendPort _fileService; |
1046 } | 1038 } |
OLD | NEW |