Index: runtime/bin/directory_impl.dart |
diff --git a/runtime/bin/directory_impl.dart b/runtime/bin/directory_impl.dart |
index 485dfadfcac5e6b83b22824b6f9ee4ff70552399..ee4cbaa9c04282743e4d22ff3b1f4e0803a1a256 100644 |
--- a/runtime/bin/directory_impl.dart |
+++ b/runtime/bin/directory_impl.dart |
@@ -29,6 +29,22 @@ class _DirectoryListingIsolate extends Isolate { |
} |
+class _DirectoryCreateTempIsolate extends Isolate { |
+ |
+ _DirectoryCreateTempIsolate() : super.heavy(); |
+ |
+ void main() { |
+ port.receive((path, replyTo) { |
+ // Call function to get file name |
+ replyTo.send(_createTemp(path, (Math.random() * 0x8000000).toInt())); |
+ port.close(); |
+ }); |
+ } |
+ |
+ String _createTemp(String template, int num) native "Directory_CreateTemp"; |
+} |
+ |
+ |
class _Directory implements Directory { |
_Directory(String this._path); |
@@ -47,6 +63,23 @@ class _Directory implements Directory { |
} |
} |
+ void createTemp() { |
+ new _DirectoryCreateTempIsolate().spawn().then((port) { |
+ port.call(_path).receive((result, ignored) { |
+ if (result != '') { |
+ _path = result; |
+ if (_createTempHandler !== null) { |
+ _createTempHandler(); |
+ } |
+ } else { |
+ if (_errorHandler !== null) { |
+ _errorHandler("Could not create temporary directory: $_path"); |
+ } |
+ } |
+ }); |
+ }); |
+ } |
+ |
void deleteSync() { |
if (!_delete(_path)) { |
throw new DirectoryException("Directory deletion failed: $_path"); |
@@ -129,6 +162,10 @@ class _Directory implements Directory { |
_doneHandler = doneHandler; |
} |
+ void set createTempHandler(void createTempHandler()) { |
+ _createTempHandler = createTempHandler; |
+ } |
+ |
void set errorHandler(void errorHandler(String error)) { |
_errorHandler = errorHandler; |
} |
@@ -148,6 +185,7 @@ class _Directory implements Directory { |
var _dirHandler; |
var _fileHandler; |
var _doneHandler; |
+ var _createTempHandler; |
var _errorHandler; |
String _path; |