Index: sdk/lib/io/directory_impl.dart |
diff --git a/sdk/lib/io/directory_impl.dart b/sdk/lib/io/directory_impl.dart |
index c1fc540c52958929299e98e68f6314a51e1494b6..52cf54824ecf4e8ed14a4b5491ade076c4a32471 100644 |
--- a/sdk/lib/io/directory_impl.dart |
+++ b/sdk/lib/io/directory_impl.dart |
@@ -72,6 +72,30 @@ class _Directory extends FileSystemEntity implements Directory { |
FileStat statSync() => FileStat.statSync(path); |
+ // Compute the index of the first directory in the list that exists. If |
+ // none of the directories exist dirsToCreate.length is returned. |
+ Future<int> _computeExistingIndex(List dirsToCreate) { |
+ var future; |
+ var notFound = dirsToCreate.length; |
+ for (var i = 0; i < dirsToCreate.length; i++) { |
+ if (future == null) { |
+ future = dirsToCreate[i].exists().then((e) => e ? i : notFound); |
+ } else { |
+ future = future.then((index) { |
+ if (index != notFound) { |
+ return new Future.value(index); |
+ } |
+ return dirsToCreate[i].exists().then((e) => e ? i : notFound); |
+ }); |
+ } |
+ } |
+ if (future == null) { |
+ return new Future.value(notFound); |
+ } else { |
+ return future; |
+ } |
+ } |
+ |
Future<Directory> create({bool recursive: false}) { |
if (recursive) { |
return exists().then((exists) { |
@@ -256,7 +280,7 @@ class _AsyncDirectoryLister { |
final bool recursive; |
final bool followLinks; |
- StreamController<FileSystemEntity> controller; |
+ StreamController controller; |
bool canceled = false; |
bool nextRunning = false; |
bool closed = false; |
@@ -264,10 +288,10 @@ class _AsyncDirectoryLister { |
Completer closeCompleter = new Completer(); |
_AsyncDirectoryLister(this.path, this.recursive, this.followLinks) { |
- controller = new StreamController<FileSystemEntity>(onListen: onListen, |
- onResume: onResume, |
- onCancel: onCancel, |
- sync: true); |
+ controller = new StreamController(onListen: onListen, |
+ onResume: onResume, |
+ onCancel: onCancel, |
+ sync: true); |
} |
// Calling this function will increase the reference count on the native |
@@ -278,7 +302,7 @@ class _AsyncDirectoryLister { |
return (_ops == null) ? null : _ops.getPointer(); |
} |
- Stream<FileSystemEntity> get stream => controller.stream; |
+ Stream get stream => controller.stream; |
void onListen() { |
_IOService._dispatch(_DIRECTORY_LIST_START, [path, recursive, followLinks]) |