| 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 patch class _File { | 5 patch class _File { |
| 6 /* patch */ static _exists(String path) native "File_Exists"; | 6 /* patch */ static _exists(String path) native "File_Exists"; |
| 7 /* patch */ static _create(String path) native "File_Create"; | 7 /* patch */ static _create(String path) native "File_Create"; |
| 8 /* patch */ static _createLink(String path, String target) | 8 /* patch */ static _createLink(String path, String target) |
| 9 native "File_CreateLink"; | 9 native "File_CreateLink"; |
| 10 /* patch */ static _linkTarget(String path) native "File_LinkTarget"; | 10 /* patch */ static _linkTarget(String path) native "File_LinkTarget"; |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 143 // Called when a new path is being watched. | 143 // Called when a new path is being watched. |
| 144 Stream _pathWatched() {} | 144 Stream _pathWatched() {} |
| 145 // Called when a path is no longer being watched. | 145 // Called when a path is no longer being watched. |
| 146 void _donePathWatched() {} | 146 void _donePathWatched() {} |
| 147 | 147 |
| 148 static _WatcherPath _pathFromPathId(int pathId) { | 148 static _WatcherPath _pathFromPathId(int pathId) { |
| 149 return _idMap[pathId]; | 149 return _idMap[pathId]; |
| 150 } | 150 } |
| 151 | 151 |
| 152 static Stream _listenOnSocket(int socketId, int id, int pathId) { | 152 static Stream _listenOnSocket(int socketId, int id, int pathId) { |
| 153 var socket = new _RawSocket(new _NativeSocket.watch(socketId)); | 153 var native = new _NativeSocket.watch(socketId); |
| 154 var socket = new _RawSocket(native); |
| 154 return socket.expand((event) { | 155 return socket.expand((event) { |
| 155 var stops = []; | 156 var stops = []; |
| 156 var events = []; | 157 var events = []; |
| 157 var pair = {}; | 158 var pair = {}; |
| 158 if (event == RawSocketEvent.READ) { | 159 if (event == RawSocketEvent.READ) { |
| 159 String getPath(event) { | 160 String getPath(event) { |
| 160 var path = _pathFromPathId(event[4]).path; | 161 var path = _pathFromPathId(event[4]).path; |
| 161 if (event[2] != null && event[2].isNotEmpty) { | 162 if (event[2] != null && event[2].isNotEmpty) { |
| 162 path += Platform.pathSeparator; | 163 path += Platform.pathSeparator; |
| 163 path += event[2]; | 164 path += event[2]; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 175 if ((event.type & _pathFromPathId(id).events) == 0) return; | 176 if ((event.type & _pathFromPathId(id).events) == 0) return; |
| 176 events.add([id, event]); | 177 events.add([id, event]); |
| 177 } | 178 } |
| 178 void rewriteMove(event, isDir) { | 179 void rewriteMove(event, isDir) { |
| 179 if (event[3]) { | 180 if (event[3]) { |
| 180 add(event[4], new FileSystemCreateEvent._(getPath(event), isDir)); | 181 add(event[4], new FileSystemCreateEvent._(getPath(event), isDir)); |
| 181 } else { | 182 } else { |
| 182 add(event[4], new FileSystemDeleteEvent._(getPath(event), isDir)); | 183 add(event[4], new FileSystemDeleteEvent._(getPath(event), isDir)); |
| 183 } | 184 } |
| 184 } | 185 } |
| 185 while (socket.available() > 0) { | 186 int eventCount; |
| 187 do { |
| 188 eventCount = 0; |
| 186 for (var event in _readEvents(id, pathId)) { | 189 for (var event in _readEvents(id, pathId)) { |
| 187 if (event == null) continue; | 190 if (event == null) continue; |
| 191 eventCount++; |
| 188 int pathId = event[4]; | 192 int pathId = event[4]; |
| 189 bool isDir = getIsDir(event); | 193 bool isDir = getIsDir(event); |
| 190 var path = getPath(event); | 194 var path = getPath(event); |
| 191 if ((event[0] & FileSystemEvent.CREATE) != 0) { | 195 if ((event[0] & FileSystemEvent.CREATE) != 0) { |
| 192 add(event[4], new FileSystemCreateEvent._(path, isDir)); | 196 add(event[4], new FileSystemCreateEvent._(path, isDir)); |
| 193 } | 197 } |
| 194 if ((event[0] & FileSystemEvent.MODIFY) != 0) { | 198 if ((event[0] & FileSystemEvent.MODIFY) != 0) { |
| 195 add(event[4], new FileSystemModifyEvent._(path, isDir, true)); | 199 add(event[4], new FileSystemModifyEvent._(path, isDir, true)); |
| 196 } | 200 } |
| 197 if ((event[0] & FileSystemEvent._MODIFY_ATTRIBUTES) != 0) { | 201 if ((event[0] & FileSystemEvent._MODIFY_ATTRIBUTES) != 0) { |
| (...skipping 17 matching lines...) Expand all Loading... |
| 215 } | 219 } |
| 216 if ((event[0] & FileSystemEvent.DELETE) != 0) { | 220 if ((event[0] & FileSystemEvent.DELETE) != 0) { |
| 217 add(event[4], new FileSystemDeleteEvent._(path, isDir)); | 221 add(event[4], new FileSystemDeleteEvent._(path, isDir)); |
| 218 } | 222 } |
| 219 if ((event[0] & FileSystemEvent._DELETE_SELF) != 0) { | 223 if ((event[0] & FileSystemEvent._DELETE_SELF) != 0) { |
| 220 add(event[4], new FileSystemDeleteEvent._(path, isDir)); | 224 add(event[4], new FileSystemDeleteEvent._(path, isDir)); |
| 221 // Signal done event. | 225 // Signal done event. |
| 222 stops.add([event[4], null]); | 226 stops.add([event[4], null]); |
| 223 } | 227 } |
| 224 } | 228 } |
| 225 } | 229 } while (eventCount > 0); |
| 230 // Be sure to clear this manually, as the sockets are not read through |
| 231 // the _NativeSocket interface. |
| 232 native.available = 0; |
| 226 for (var map in pair.values) { | 233 for (var map in pair.values) { |
| 227 for (var event in map.values) { | 234 for (var event in map.values) { |
| 228 rewriteMove(event, getIsDir(event)); | 235 rewriteMove(event, getIsDir(event)); |
| 229 } | 236 } |
| 230 } | 237 } |
| 231 } else if (event == RawSocketEvent.CLOSED) { | 238 } else if (event == RawSocketEvent.CLOSED) { |
| 232 } else if (event == RawSocketEvent.READ_CLOSED) { | 239 } else if (event == RawSocketEvent.READ_CLOSED) { |
| 233 } else { | 240 } else { |
| 234 assert(false); | 241 assert(false); |
| 235 } | 242 } |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 351 void _pathWatchedEnd() { | 358 void _pathWatchedEnd() { |
| 352 _subscription.cancel(); | 359 _subscription.cancel(); |
| 353 _controller.close(); | 360 _controller.close(); |
| 354 } | 361 } |
| 355 } | 362 } |
| 356 | 363 |
| 357 | 364 |
| 358 Uint8List _makeUint8ListView(Uint8List source, int offsetInBytes, int length) { | 365 Uint8List _makeUint8ListView(Uint8List source, int offsetInBytes, int length) { |
| 359 return new Uint8List.view(source.buffer, offsetInBytes, length); | 366 return new Uint8List.view(source.buffer, offsetInBytes, length); |
| 360 } | 367 } |
| OLD | NEW |