| 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 part of dart.io; | 5 part of dart.io; | 
| 6 | 6 | 
| 7 class _Directory extends FileSystemEntity implements Directory { | 7 class _Directory extends FileSystemEntity implements Directory { | 
| 8   final String path; | 8   final String path; | 
| 9 | 9 | 
| 10   _Directory(this.path) { | 10   _Directory(this.path) { | 
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 65     } | 65     } | 
| 66     return (result == 1); | 66     return (result == 1); | 
| 67   } | 67   } | 
| 68 | 68 | 
| 69   Directory get absolute => new Directory(_absolutePath); | 69   Directory get absolute => new Directory(_absolutePath); | 
| 70 | 70 | 
| 71   Future<FileStat> stat() => FileStat.stat(path); | 71   Future<FileStat> stat() => FileStat.stat(path); | 
| 72 | 72 | 
| 73   FileStat statSync() => FileStat.statSync(path); | 73   FileStat statSync() => FileStat.statSync(path); | 
| 74 | 74 | 
|  | 75   // Compute the index of the first directory in the list that exists. If | 
|  | 76   // none of the directories exist dirsToCreate.length is returned. | 
|  | 77   Future<int> _computeExistingIndex(List dirsToCreate) { | 
|  | 78     var future; | 
|  | 79     var notFound = dirsToCreate.length; | 
|  | 80     for (var i = 0; i < dirsToCreate.length; i++) { | 
|  | 81       if (future == null) { | 
|  | 82         future = dirsToCreate[i].exists().then((e) => e ? i : notFound); | 
|  | 83       } else { | 
|  | 84         future = future.then((index) { | 
|  | 85           if (index != notFound) { | 
|  | 86             return new Future.value(index); | 
|  | 87           } | 
|  | 88           return dirsToCreate[i].exists().then((e) => e ? i : notFound); | 
|  | 89         }); | 
|  | 90       } | 
|  | 91     } | 
|  | 92     if (future == null) { | 
|  | 93       return new Future.value(notFound); | 
|  | 94     } else { | 
|  | 95       return future; | 
|  | 96     } | 
|  | 97   } | 
|  | 98 | 
| 75   Future<Directory> create({bool recursive: false}) { | 99   Future<Directory> create({bool recursive: false}) { | 
| 76     if (recursive) { | 100     if (recursive) { | 
| 77       return exists().then((exists) { | 101       return exists().then((exists) { | 
| 78         if (exists) return this; | 102         if (exists) return this; | 
| 79         if (path != parent.path) { | 103         if (path != parent.path) { | 
| 80           return parent.create(recursive: true).then((_) { | 104           return parent.create(recursive: true).then((_) { | 
| 81             return create(); | 105             return create(); | 
| 82           }); | 106           }); | 
| 83         } else { | 107         } else { | 
| 84           return create(); | 108           return create(); | 
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 249 | 273 | 
| 250   static const int RESPONSE_TYPE = 0; | 274   static const int RESPONSE_TYPE = 0; | 
| 251   static const int RESPONSE_PATH = 1; | 275   static const int RESPONSE_PATH = 1; | 
| 252   static const int RESPONSE_COMPLETE = 1; | 276   static const int RESPONSE_COMPLETE = 1; | 
| 253   static const int RESPONSE_ERROR = 2; | 277   static const int RESPONSE_ERROR = 2; | 
| 254 | 278 | 
| 255   final String path; | 279   final String path; | 
| 256   final bool recursive; | 280   final bool recursive; | 
| 257   final bool followLinks; | 281   final bool followLinks; | 
| 258 | 282 | 
| 259   StreamController<FileSystemEntity> controller; | 283   StreamController controller; | 
| 260   bool canceled = false; | 284   bool canceled = false; | 
| 261   bool nextRunning = false; | 285   bool nextRunning = false; | 
| 262   bool closed = false; | 286   bool closed = false; | 
| 263   _AsyncDirectoryListerOps _ops; | 287   _AsyncDirectoryListerOps _ops; | 
| 264   Completer closeCompleter = new Completer(); | 288   Completer closeCompleter = new Completer(); | 
| 265 | 289 | 
| 266   _AsyncDirectoryLister(this.path, this.recursive, this.followLinks) { | 290   _AsyncDirectoryLister(this.path, this.recursive, this.followLinks) { | 
| 267     controller = new StreamController<FileSystemEntity>(onListen: onListen, | 291     controller = new StreamController(onListen: onListen, | 
| 268                                                         onResume: onResume, | 292                                       onResume: onResume, | 
| 269                                                         onCancel: onCancel, | 293                                       onCancel: onCancel, | 
| 270                                                         sync: true); | 294                                       sync: true); | 
| 271   } | 295   } | 
| 272 | 296 | 
| 273   // Calling this function will increase the reference count on the native | 297   // Calling this function will increase the reference count on the native | 
| 274   // object that implements the async directory lister operations. It should | 298   // object that implements the async directory lister operations. It should | 
| 275   // only be called to pass the pointer to the IO Service, which will decrement | 299   // only be called to pass the pointer to the IO Service, which will decrement | 
| 276   // the reference count when it is finished with it. | 300   // the reference count when it is finished with it. | 
| 277   int _pointer() { | 301   int _pointer() { | 
| 278     return (_ops == null) ? null : _ops.getPointer(); | 302     return (_ops == null) ? null : _ops.getPointer(); | 
| 279   } | 303   } | 
| 280 | 304 | 
| 281   Stream<FileSystemEntity> get stream => controller.stream; | 305   Stream get stream => controller.stream; | 
| 282 | 306 | 
| 283   void onListen() { | 307   void onListen() { | 
| 284     _IOService._dispatch(_DIRECTORY_LIST_START, [path, recursive, followLinks]) | 308     _IOService._dispatch(_DIRECTORY_LIST_START, [path, recursive, followLinks]) | 
| 285         .then((response) { | 309         .then((response) { | 
| 286           if (response is int) { | 310           if (response is int) { | 
| 287             _ops = new _AsyncDirectoryListerOps(response); | 311             _ops = new _AsyncDirectoryListerOps(response); | 
| 288             next(); | 312             next(); | 
| 289           } else if (response is Error) { | 313           } else if (response is Error) { | 
| 290             controller.addError(response, response.stackTrace); | 314             controller.addError(response, response.stackTrace); | 
| 291             close(); | 315             close(); | 
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 395       controller.addError( | 419       controller.addError( | 
| 396           new FileSystemException("Directory listing failed", | 420           new FileSystemException("Directory listing failed", | 
| 397                                   errorPath, | 421                                   errorPath, | 
| 398                                   err)); | 422                                   err)); | 
| 399     } else { | 423     } else { | 
| 400       controller.addError( | 424       controller.addError( | 
| 401           new FileSystemException("Internal error")); | 425           new FileSystemException("Internal error")); | 
| 402     } | 426     } | 
| 403   } | 427   } | 
| 404 } | 428 } | 
| OLD | NEW | 
|---|