| 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 26 matching lines...) Expand all Loading... |
| 37 if (path is Directory) path = path.path; | 37 if (path is Directory) path = path.path; |
| 38 var result = _setCurrent(path); | 38 var result = _setCurrent(path); |
| 39 if (result is ArgumentError) throw result; | 39 if (result is ArgumentError) throw result; |
| 40 if (result is OSError) { | 40 if (result is OSError) { |
| 41 throw new FileSystemException( | 41 throw new FileSystemException( |
| 42 "Setting current working directory failed", path, result); | 42 "Setting current working directory failed", path, result); |
| 43 } | 43 } |
| 44 } | 44 } |
| 45 | 45 |
| 46 Future<bool> exists() { | 46 Future<bool> exists() { |
| 47 return _IOService.dispatch(_DIRECTORY_EXISTS, [path]).then((response) { | 47 return _IOService._dispatch(_DIRECTORY_EXISTS, [path]).then((response) { |
| 48 if (_isErrorResponse(response)) { | 48 if (_isErrorResponse(response)) { |
| 49 throw _exceptionOrErrorFromResponse(response, "Exists failed"); | 49 throw _exceptionOrErrorFromResponse(response, "Exists failed"); |
| 50 } | 50 } |
| 51 return response == 1; | 51 return response == 1; |
| 52 }); | 52 }); |
| 53 } | 53 } |
| 54 | 54 |
| 55 bool existsSync() { | 55 bool existsSync() { |
| 56 var result = _exists(path); | 56 var result = _exists(path); |
| 57 if (result is OSError) { | 57 if (result is OSError) { |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 96 if (exists) return this; | 96 if (exists) return this; |
| 97 if (path != parent.path) { | 97 if (path != parent.path) { |
| 98 return parent.create(recursive: true).then((_) { | 98 return parent.create(recursive: true).then((_) { |
| 99 return create(); | 99 return create(); |
| 100 }); | 100 }); |
| 101 } else { | 101 } else { |
| 102 return create(); | 102 return create(); |
| 103 } | 103 } |
| 104 }); | 104 }); |
| 105 } else { | 105 } else { |
| 106 return _IOService.dispatch(_DIRECTORY_CREATE, [path]).then((response) { | 106 return _IOService._dispatch(_DIRECTORY_CREATE, [path]).then((response) { |
| 107 if (_isErrorResponse(response)) { | 107 if (_isErrorResponse(response)) { |
| 108 throw _exceptionOrErrorFromResponse(response, "Creation failed"); | 108 throw _exceptionOrErrorFromResponse(response, "Creation failed"); |
| 109 } | 109 } |
| 110 return this; | 110 return this; |
| 111 }); | 111 }); |
| 112 } | 112 } |
| 113 } | 113 } |
| 114 | 114 |
| 115 void createSync({bool recursive: false}) { | 115 void createSync({bool recursive: false}) { |
| 116 if (recursive) { | 116 if (recursive) { |
| (...skipping 16 matching lines...) Expand all Loading... |
| 133 throw new ArgumentError( | 133 throw new ArgumentError( |
| 134 "Directory.createTemp called with an empty path. " | 134 "Directory.createTemp called with an empty path. " |
| 135 "To use the system temp directory, use Directory.systemTemp"); | 135 "To use the system temp directory, use Directory.systemTemp"); |
| 136 } | 136 } |
| 137 String fullPrefix; | 137 String fullPrefix; |
| 138 if (path.endsWith('/') || (Platform.isWindows && path.endsWith('\\'))) { | 138 if (path.endsWith('/') || (Platform.isWindows && path.endsWith('\\'))) { |
| 139 fullPrefix = "$path$prefix"; | 139 fullPrefix = "$path$prefix"; |
| 140 } else { | 140 } else { |
| 141 fullPrefix = "$path${Platform.pathSeparator}$prefix"; | 141 fullPrefix = "$path${Platform.pathSeparator}$prefix"; |
| 142 } | 142 } |
| 143 return _IOService.dispatch(_DIRECTORY_CREATE_TEMP, [fullPrefix]) | 143 return _IOService._dispatch(_DIRECTORY_CREATE_TEMP, [fullPrefix]) |
| 144 .then((response) { | 144 .then((response) { |
| 145 if (_isErrorResponse(response)) { | 145 if (_isErrorResponse(response)) { |
| 146 throw _exceptionOrErrorFromResponse( | 146 throw _exceptionOrErrorFromResponse( |
| 147 response, "Creation of temporary directory failed"); | 147 response, "Creation of temporary directory failed"); |
| 148 } | 148 } |
| 149 return new Directory(response); | 149 return new Directory(response); |
| 150 }); | 150 }); |
| 151 } | 151 } |
| 152 | 152 |
| 153 Directory createTempSync([String prefix]) { | 153 Directory createTempSync([String prefix]) { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 166 var result = _createTemp(fullPrefix); | 166 var result = _createTemp(fullPrefix); |
| 167 if (result is OSError) { | 167 if (result is OSError) { |
| 168 throw new FileSystemException("Creation of temporary directory failed", | 168 throw new FileSystemException("Creation of temporary directory failed", |
| 169 fullPrefix, | 169 fullPrefix, |
| 170 result); | 170 result); |
| 171 } | 171 } |
| 172 return new Directory(result); | 172 return new Directory(result); |
| 173 } | 173 } |
| 174 | 174 |
| 175 Future<Directory> _delete({bool recursive: false}) { | 175 Future<Directory> _delete({bool recursive: false}) { |
| 176 return _IOService.dispatch(_DIRECTORY_DELETE, [path, recursive]) | 176 return _IOService._dispatch(_DIRECTORY_DELETE, [path, recursive]) |
| 177 .then((response) { | 177 .then((response) { |
| 178 if (_isErrorResponse(response)) { | 178 if (_isErrorResponse(response)) { |
| 179 throw _exceptionOrErrorFromResponse(response, "Deletion failed"); | 179 throw _exceptionOrErrorFromResponse(response, "Deletion failed"); |
| 180 } | 180 } |
| 181 return this; | 181 return this; |
| 182 }); | 182 }); |
| 183 } | 183 } |
| 184 | 184 |
| 185 void _deleteSync({bool recursive: false}) { | 185 void _deleteSync({bool recursive: false}) { |
| 186 var result = _deleteNative(path, recursive); | 186 var result = _deleteNative(path, recursive); |
| 187 if (result is OSError) { | 187 if (result is OSError) { |
| 188 throw new FileSystemException("Deletion failed", path, result); | 188 throw new FileSystemException("Deletion failed", path, result); |
| 189 } | 189 } |
| 190 } | 190 } |
| 191 | 191 |
| 192 Future<Directory> rename(String newPath) { | 192 Future<Directory> rename(String newPath) { |
| 193 return _IOService.dispatch(_DIRECTORY_RENAME, [path, newPath]) | 193 return _IOService._dispatch(_DIRECTORY_RENAME, [path, newPath]) |
| 194 .then((response) { | 194 .then((response) { |
| 195 if (_isErrorResponse(response)) { | 195 if (_isErrorResponse(response)) { |
| 196 throw _exceptionOrErrorFromResponse(response, "Rename failed"); | 196 throw _exceptionOrErrorFromResponse(response, "Rename failed"); |
| 197 } | 197 } |
| 198 return new Directory(newPath); | 198 return new Directory(newPath); |
| 199 }); | 199 }); |
| 200 } | 200 } |
| 201 | 201 |
| 202 Directory renameSync(String newPath) { | 202 Directory renameSync(String newPath) { |
| 203 if (newPath is !String) { | 203 if (newPath is !String) { |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 274 _AsyncDirectoryLister(this.path, this.recursive, this.followLinks) { | 274 _AsyncDirectoryLister(this.path, this.recursive, this.followLinks) { |
| 275 controller = new StreamController(onListen: onListen, | 275 controller = new StreamController(onListen: onListen, |
| 276 onResume: onResume, | 276 onResume: onResume, |
| 277 onCancel: onCancel, | 277 onCancel: onCancel, |
| 278 sync: true); | 278 sync: true); |
| 279 } | 279 } |
| 280 | 280 |
| 281 Stream get stream => controller.stream; | 281 Stream get stream => controller.stream; |
| 282 | 282 |
| 283 void onListen() { | 283 void onListen() { |
| 284 _IOService.dispatch(_DIRECTORY_LIST_START, [path, recursive, followLinks]) | 284 _IOService._dispatch(_DIRECTORY_LIST_START, [path, recursive, followLinks]) |
| 285 .then((response) { | 285 .then((response) { |
| 286 if (response is int) { | 286 if (response is int) { |
| 287 id = response; | 287 id = response; |
| 288 next(); | 288 next(); |
| 289 } else if (response is Error) { | 289 } else if (response is Error) { |
| 290 controller.addError(response); | 290 controller.addError(response); |
| 291 close(); | 291 close(); |
| 292 } else { | 292 } else { |
| 293 error(response); | 293 error(response); |
| 294 close(); | 294 close(); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 312 | 312 |
| 313 void next() { | 313 void next() { |
| 314 if (canceled) { | 314 if (canceled) { |
| 315 close(); | 315 close(); |
| 316 return; | 316 return; |
| 317 } | 317 } |
| 318 if (id == null) return; | 318 if (id == null) return; |
| 319 if (controller.isPaused) return; | 319 if (controller.isPaused) return; |
| 320 if (nextRunning) return; | 320 if (nextRunning) return; |
| 321 nextRunning = true; | 321 nextRunning = true; |
| 322 _IOService.dispatch(_DIRECTORY_LIST_NEXT, [id]).then((result) { | 322 _IOService._dispatch(_DIRECTORY_LIST_NEXT, [id]).then((result) { |
| 323 nextRunning = false; | 323 nextRunning = false; |
| 324 if (result is List) { | 324 if (result is List) { |
| 325 next(); | 325 next(); |
| 326 assert(result.length % 2 == 0); | 326 assert(result.length % 2 == 0); |
| 327 for (int i = 0; i < result.length; i++) { | 327 for (int i = 0; i < result.length; i++) { |
| 328 assert(i % 2 == 0); | 328 assert(i % 2 == 0); |
| 329 switch (result[i++]) { | 329 switch (result[i++]) { |
| 330 case LIST_FILE: | 330 case LIST_FILE: |
| 331 controller.add(new File(result[i])); | 331 controller.add(new File(result[i])); |
| 332 break; | 332 break; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 352 | 352 |
| 353 void close() { | 353 void close() { |
| 354 if (closed) return; | 354 if (closed) return; |
| 355 if (nextRunning) return; | 355 if (nextRunning) return; |
| 356 void cleanup() { | 356 void cleanup() { |
| 357 controller.close(); | 357 controller.close(); |
| 358 closeCompleter.complete(); | 358 closeCompleter.complete(); |
| 359 } | 359 } |
| 360 closed = true; | 360 closed = true; |
| 361 if (id != null) { | 361 if (id != null) { |
| 362 _IOService.dispatch(_DIRECTORY_LIST_STOP, [id]).whenComplete(cleanup); | 362 _IOService._dispatch(_DIRECTORY_LIST_STOP, [id]).whenComplete(cleanup); |
| 363 } else { | 363 } else { |
| 364 cleanup(); | 364 cleanup(); |
| 365 } | 365 } |
| 366 } | 366 } |
| 367 | 367 |
| 368 void error(message) { | 368 void error(message) { |
| 369 var errorType = | 369 var errorType = |
| 370 message[RESPONSE_ERROR][_ERROR_RESPONSE_ERROR_TYPE]; | 370 message[RESPONSE_ERROR][_ERROR_RESPONSE_ERROR_TYPE]; |
| 371 if (errorType == _ILLEGAL_ARGUMENT_RESPONSE) { | 371 if (errorType == _ILLEGAL_ARGUMENT_RESPONSE) { |
| 372 controller.addError(new ArgumentError()); | 372 controller.addError(new ArgumentError()); |
| 373 } else if (errorType == _OSERROR_RESPONSE) { | 373 } else if (errorType == _OSERROR_RESPONSE) { |
| 374 var responseError = message[RESPONSE_ERROR]; | 374 var responseError = message[RESPONSE_ERROR]; |
| 375 var err = new OSError( | 375 var err = new OSError( |
| 376 responseError[_OSERROR_RESPONSE_MESSAGE], | 376 responseError[_OSERROR_RESPONSE_MESSAGE], |
| 377 responseError[_OSERROR_RESPONSE_ERROR_CODE]); | 377 responseError[_OSERROR_RESPONSE_ERROR_CODE]); |
| 378 var errorPath = message[RESPONSE_PATH]; | 378 var errorPath = message[RESPONSE_PATH]; |
| 379 if (errorPath == null) errorPath = path; | 379 if (errorPath == null) errorPath = path; |
| 380 controller.addError( | 380 controller.addError( |
| 381 new FileSystemException("Directory listing failed", | 381 new FileSystemException("Directory listing failed", |
| 382 errorPath, | 382 errorPath, |
| 383 err)); | 383 err)); |
| 384 } else { | 384 } else { |
| 385 controller.addError( | 385 controller.addError( |
| 386 new FileSystemException("Internal error")); | 386 new FileSystemException("Internal error")); |
| 387 } | 387 } |
| 388 } | 388 } |
| 389 } | 389 } |
| OLD | NEW |