Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(502)

Side by Side Diff: runtime/bin/directory_impl.dart

Issue 8588029: Add Directory.createTemp() to asynchronously create a temporary directory. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Use snprintf. Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2011, 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 5
6 class _DirectoryListingIsolate extends Isolate { 6 class _DirectoryListingIsolate extends Isolate {
7 7
8 _DirectoryListingIsolate() : super.heavy(); 8 _DirectoryListingIsolate() : super.heavy();
9 9
10 void main() { 10 void main() {
(...skipping 11 matching lines...) Expand all
22 22
23 bool _list(String dir, 23 bool _list(String dir,
24 bool recursive, 24 bool recursive,
25 SendPort dirPort, 25 SendPort dirPort,
26 SendPort filePort, 26 SendPort filePort,
27 SendPort donePort, 27 SendPort donePort,
28 SendPort errorPort) native "Directory_List"; 28 SendPort errorPort) native "Directory_List";
29 } 29 }
30 30
31 31
32 class _DirectoryCreateTempIsolate extends Isolate {
33
34 _DirectoryCreateTempIsolate() : super.heavy();
35
36 void main() {
37 port.receive((path, replyTo) {
38 // Call function to get file name
39 replyTo.send(_createTemp(path, (Math.random() * 0x8000000).toInt()));
40 port.close();
41 });
42 }
43
44 String _createTemp(String template, int num) native "Directory_CreateTemp";
45 }
46
47
32 class _Directory implements Directory { 48 class _Directory implements Directory {
33 49
34 _Directory(String this._path); 50 _Directory(String this._path);
35 51
36 bool existsSync() { 52 bool existsSync() {
37 int exists = _exists(_path); 53 int exists = _exists(_path);
38 if (exists < 0) { 54 if (exists < 0) {
39 throw new DirectoryException("Diretory exists test failed: $_path"); 55 throw new DirectoryException("Diretory exists test failed: $_path");
40 } 56 }
41 return (exists == 1); 57 return (exists == 1);
42 } 58 }
43 59
44 void createSync() { 60 void createSync() {
45 if (!_create(_path)) { 61 if (!_create(_path)) {
46 throw new DirectoryException("Directory creation failed: $_path"); 62 throw new DirectoryException("Directory creation failed: $_path");
47 } 63 }
48 } 64 }
49 65
66 void createTemp() {
67 new _DirectoryCreateTempIsolate().spawn().then((port) {
68 port.call(_path).receive((result, ignored) {
69 if (result != '') {
70 _path = result;
71 if (_createTempHandler !== null) {
72 _createTempHandler();
73 }
74 } else {
75 if (_errorHandler !== null) {
76 _errorHandler("Could not create temporary directory: $_path");
77 }
78 }
79 });
80 });
81 }
82
50 void deleteSync() { 83 void deleteSync() {
51 if (!_delete(_path)) { 84 if (!_delete(_path)) {
52 throw new DirectoryException("Directory deletion failed: $_path"); 85 throw new DirectoryException("Directory deletion failed: $_path");
53 } 86 }
54 } 87 }
55 88
56 void list([bool recursive = false]) { 89 void list([bool recursive = false]) {
57 new _DirectoryListingIsolate().spawn().then((port) { 90 new _DirectoryListingIsolate().spawn().then((port) {
58 // Build a map of parameters to the directory listing isolate. 91 // Build a map of parameters to the directory listing isolate.
59 Map listingParameters = new Map(); 92 Map listingParameters = new Map();
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 } 155 }
123 156
124 void set fileHandler(void fileHandler(String file)) { 157 void set fileHandler(void fileHandler(String file)) {
125 _fileHandler = fileHandler; 158 _fileHandler = fileHandler;
126 } 159 }
127 160
128 void set doneHandler(void doneHandler(bool completed)) { 161 void set doneHandler(void doneHandler(bool completed)) {
129 _doneHandler = doneHandler; 162 _doneHandler = doneHandler;
130 } 163 }
131 164
165 void set createTempHandler(void createTempHandler()) {
166 _createTempHandler = createTempHandler;
167 }
168
132 void set errorHandler(void errorHandler(String error)) { 169 void set errorHandler(void errorHandler(String error)) {
133 _errorHandler = errorHandler; 170 _errorHandler = errorHandler;
134 } 171 }
135 172
136 void _closePort(ReceivePort port) { 173 void _closePort(ReceivePort port) {
137 if (port !== null) { 174 if (port !== null) {
138 port.close(); 175 port.close();
139 } 176 }
140 } 177 }
141 178
142 String get path() { return _path; } 179 String get path() { return _path; }
143 180
144 int _exists(String path) native "Directory_Exists"; 181 int _exists(String path) native "Directory_Exists";
145 bool _create(String path) native "Directory_Create"; 182 bool _create(String path) native "Directory_Create";
146 bool _delete(String path) native "Directory_Delete"; 183 bool _delete(String path) native "Directory_Delete";
147 184
148 var _dirHandler; 185 var _dirHandler;
149 var _fileHandler; 186 var _fileHandler;
150 var _doneHandler; 187 var _doneHandler;
188 var _createTempHandler;
151 var _errorHandler; 189 var _errorHandler;
152 190
153 String _path; 191 String _path;
154 } 192 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698