Index: runtime/bin/directory_impl.dart |
diff --git a/runtime/bin/directory_impl.dart b/runtime/bin/directory_impl.dart |
index 8262e592f5f526b5655c209539b7a863f3607107..6d9ad0cc72ff0593191905f98ad7f30ca0945c3a 100644 |
--- a/runtime/bin/directory_impl.dart |
+++ b/runtime/bin/directory_impl.dart |
@@ -9,6 +9,7 @@ class _Directory implements Directory { |
static final kExistsRequest = 2; |
static final kCreateTempRequest = 3; |
static final kListRequest = 4; |
+ static final kRenameRequest = 5; |
static final kSuccessResponse = 0; |
static final kIllegalArgumentResponse = 1; |
@@ -22,23 +23,20 @@ class _Directory implements Directory { |
static int _exists(String path) native "Directory_Exists"; |
static _create(String path) native "Directory_Create"; |
static _delete(String path, bool recursive) native "Directory_Delete"; |
+ static _rename(String path, String newPath) native "Directory_Rename"; |
static SendPort _newServicePort() native "Directory_NewServicePort"; |
Future<bool> exists() { |
_ensureDirectoryService(); |
- Completer<bool> completer = new Completer<bool>(); |
List request = new List(2); |
request[0] = kExistsRequest; |
request[1] = _path; |
- _directoryService.call(request).then((response) { |
+ return _directoryService.call(request).transform((response) { |
if (_isErrorResponse(response)) { |
- var e = _exceptionFromResponse(response, "Exists failed"); |
- completer.completeException(e); |
- } else { |
- completer.complete(response == 1); |
+ throw _exceptionFromResponse(response, "Exists failed"); |
} |
+ return response == 1; |
}); |
- return completer.future; |
} |
bool existsSync() { |
@@ -54,19 +52,15 @@ class _Directory implements Directory { |
Future<Directory> create() { |
_ensureDirectoryService(); |
- Completer<Directory> completer = new Completer<Directory>(); |
List request = new List(2); |
request[0] = kCreateRequest; |
request[1] = _path; |
- _directoryService.call(request).then((response) { |
+ return _directoryService.call(request).transform((response) { |
if (_isErrorResponse(response)) { |
- var e = _exceptionFromResponse(response, "Creation failed"); |
- completer.completeException(e); |
- } else { |
- completer.complete(this); |
+ throw _exceptionFromResponse(response, "Creation failed"); |
} |
+ return this; |
}); |
- return completer.future; |
} |
void createSync() { |
@@ -81,21 +75,16 @@ class _Directory implements Directory { |
Future<Directory> createTemp() { |
_ensureDirectoryService(); |
- Completer<Directory> completer = new Completer<Directory>(); |
List request = new List(2); |
request[0] = kCreateTempRequest; |
request[1] = _path; |
- _directoryService.call(request).then((response) { |
+ return _directoryService.call(request).transform((response) { |
if (_isErrorResponse(response)) { |
- var e = |
- _exceptionFromResponse(response, |
- "Creation of temporary directory failed"); |
- completer.completeException(e); |
- } else { |
- completer.complete(new Directory(response)); |
+ throw _exceptionFromResponse(response, |
+ "Creation of temporary directory failed"); |
} |
+ return new Directory(response); |
}); |
- return completer.future; |
} |
void createTempSync() { |
@@ -113,18 +102,15 @@ class _Directory implements Directory { |
Future<Directory> _deleteHelper(bool recursive, String errorMsg) { |
_ensureDirectoryService(); |
- Completer<Directory> completer = new Completer<Directory>(); |
List request = new List(3); |
request[0] = kDeleteRequest; |
request[1] = _path; |
request[2] = recursive; |
- _directoryService.call(request).then((response) { |
+ return _directoryService.call(request).transform((response) { |
if (_isErrorResponse(response)) { |
- var e = _exceptionFromResponse(response, errorMsg); |
- completer.completeException(e); |
- } else { |
- completer.complete(this); |
+ throw _exceptionFromResponse(response, errorMsg); |
} |
+ return this; |
}); |
return completer.future; |
} |
@@ -133,10 +119,6 @@ class _Directory implements Directory { |
return _deleteHelper(false, "Deletion failed"); |
} |
- Future<Directory> deleteRecursively() { |
- return _deleteHelper(true, "Deletion failed"); |
- } |
- |
void deleteSync() { |
if (_path is !String) { |
throw new IllegalArgumentException(); |
@@ -147,6 +129,10 @@ class _Directory implements Directory { |
} |
} |
+ Future<Directory> deleteRecursively() { |
+ return _deleteHelper(true, "Deletion failed"); |
+ } |
+ |
void deleteRecursivelySync() { |
if (_path is !String) { |
throw new IllegalArgumentException(); |
@@ -157,6 +143,31 @@ class _Directory implements Directory { |
} |
} |
+ Future<Directory> rename(String newPath) { |
+ _ensureDirectoryService(); |
+ List request = new List(3); |
+ request[0] = kRenameRequest; |
+ request[1] = _path; |
+ request[2] = newPath; |
+ return _directoryService.call(request).transform((response) { |
+ if (_isErrorResponse(response)) { |
+ throw _exceptionFromResponse(response, "Rename failed"); |
+ } |
+ return new Directory(newPath); |
+ }); |
+ } |
+ |
+ Directory renameSync(String newPath) { |
+ if (_path is !String || newPath is !String) { |
+ throw new IllegalArgumentException(); |
+ } |
+ var result = _rename(_path, newPath); |
+ if (result is OSError) { |
+ throw new DirectoryIOException("Rename failed", _path, result); |
+ } |
+ return new Directory(newPath); |
+ } |
+ |
DirectoryLister list([bool recursive = false]) { |
return new _DirectoryLister(_path, recursive); |
} |