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

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

Issue 9500002: Rename blahHandler to onBlah throughout dart:io. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Address comments. Created 8 years, 9 months 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
« no previous file with comments | « runtime/bin/directory.dart ('k') | runtime/bin/file.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 5
6 // Used for holding error code and error message for failed OS system calls. 6 // Used for holding error code and error message for failed OS system calls.
7 class _OSStatus { 7 class _OSStatus {
8 int _errorCode; 8 int _errorCode;
9 String _errorMessage; 9 String _errorMessage;
10 } 10 }
11 11
12 12
13 class _Directory implements Directory { 13 class _Directory implements Directory {
14 static final kCreateRequest = 0; 14 static final kCreateRequest = 0;
15 static final kDeleteRequest = 1; 15 static final kDeleteRequest = 1;
16 static final kExistsRequest = 2; 16 static final kExistsRequest = 2;
17 static final kCreateTempRequest = 3; 17 static final kCreateTempRequest = 3;
18 static final kListRequest = 4; 18 static final kListRequest = 4;
19 19
20 _Directory(String this._path); 20 _Directory(String this._path);
21 21
22 static String _createTemp(String template, 22 static String _createTemp(String template,
23 _OSStatus status) native "Directory_CreateTemp"; 23 _OSStatus status) native "Directory_CreateTemp";
24 static int _exists(String path) native "Directory_Exists"; 24 static int _exists(String path) native "Directory_Exists";
25 static bool _create(String path) native "Directory_Create"; 25 static bool _create(String path) native "Directory_Create";
26 static bool _delete(String path, bool recursive) native "Directory_Delete"; 26 static bool _delete(String path, bool recursive) native "Directory_Delete";
27 static SendPort _newServicePort() native "Directory_NewServicePort"; 27 static SendPort _newServicePort() native "Directory_NewServicePort";
28 28
29 void exists() { 29 void exists(void callback(bool exists)) {
30 if (_directoryService == null) { 30 if (_directoryService == null) {
31 _directoryService = _newServicePort(); 31 _directoryService = _newServicePort();
32 } 32 }
33 List request = new List(2); 33 List request = new List(2);
34 request[0] = kExistsRequest; 34 request[0] = kExistsRequest;
35 request[1] = _path; 35 request[1] = _path;
36 _directoryService.call(request).receive((result, replyTo) { 36 _directoryService.call(request).receive((result, replyTo) {
37 var handler =
38 (_existsHandler != null) ? _existsHandler : (result) => null;
39 if (result < 0) { 37 if (result < 0) {
40 if (_errorHandler != null) { 38 if (_onError != null) {
41 _errorHandler("Diretory exists test failed: $_path"); 39 _onError("Diretory exists test failed: $_path");
42 } 40 }
43 } else { 41 } else {
44 handler(result == 1); 42 callback(result == 1);
45 } 43 }
46 }); 44 });
47 } 45 }
48 46
49 bool existsSync() { 47 bool existsSync() {
50 int exists = _exists(_path); 48 int exists = _exists(_path);
51 if (exists < 0) { 49 if (exists < 0) {
52 throw new DirectoryException("Diretory exists test failed: $_path"); 50 throw new DirectoryException("Diretory exists test failed: $_path");
53 } 51 }
54 return (exists == 1); 52 return (exists == 1);
55 } 53 }
56 54
57 void create() { 55 void create(void callback()) {
58 if (_directoryService == null) { 56 if (_directoryService == null) {
59 _directoryService = _newServicePort(); 57 _directoryService = _newServicePort();
60 } 58 }
61 List request = new List(2); 59 List request = new List(2);
62 request[0] = kCreateRequest; 60 request[0] = kCreateRequest;
63 request[1] = _path; 61 request[1] = _path;
64 _directoryService.call(request).receive((result, replyTo) { 62 _directoryService.call(request).receive((result, replyTo) {
65 if (result) { 63 if (result) {
66 if (_createHandler != null) _createHandler(); 64 callback();
67 } else if (_errorHandler != null) { 65 } else if (_onError != null) {
68 _errorHandler("Directory creation failed: $_path"); 66 _onError("Directory creation failed: $_path");
69 } 67 }
70 }); 68 });
71 } 69 }
72 70
73 void createSync() { 71 void createSync() {
74 if (!_create(_path)) { 72 if (!_create(_path)) {
75 throw new DirectoryException("Directory creation failed: $_path"); 73 throw new DirectoryException("Directory creation failed: $_path");
76 } 74 }
77 } 75 }
78 76
79 void createTemp() { 77 void createTemp(void callback()) {
80 if (_directoryService == null) { 78 if (_directoryService == null) {
81 _directoryService = _newServicePort(); 79 _directoryService = _newServicePort();
82 } 80 }
83 List request = new List(2); 81 List request = new List(2);
84 request[0] = kCreateTempRequest; 82 request[0] = kCreateTempRequest;
85 request[1] = _path; 83 request[1] = _path;
86 _directoryService.call(request).receive((result, replyTo) { 84 _directoryService.call(request).receive((result, replyTo) {
87 if (result is !List) { 85 if (result is !List) {
88 _path = result; 86 _path = result;
89 if (_createTempHandler != null) _createTempHandler(); 87 callback();
90 } else if (_errorHandler != null) { 88 } else if (_onError != null) {
91 _errorHandler("Could not create temporary directory [$_path]: " + 89 _onError("Could not create temporary directory [$_path]: " +
92 "${result[1]}"); 90 "${result[1]}");
93 } 91 }
94 }); 92 });
95 } 93 }
96 94
97 void createTempSync() { 95 void createTempSync() {
98 var status = new _OSStatus(); 96 var status = new _OSStatus();
99 var result = _createTemp(path, status); 97 var result = _createTemp(path, status);
100 if (result != null) { 98 if (result != null) {
101 _path = result; 99 _path = result;
102 } else { 100 } else {
103 throw new DirectoryException( 101 throw new DirectoryException(
104 "Could not create temporary directory [$_path]: " + 102 "Could not create temporary directory [$_path]: " +
105 "${status._errorMessage}", 103 "${status._errorMessage}",
106 status._errorCode); 104 status._errorCode);
107 } 105 }
108 } 106 }
109 107
110 void delete([bool recursive = false]) { 108 void _deleteHelper(bool recursive, String errorMsg, void callback()) {
111 if (_directoryService == null) { 109 if (_directoryService == null) {
112 _directoryService = _newServicePort(); 110 _directoryService = _newServicePort();
113 } 111 }
114 List request = new List(3); 112 List request = new List(3);
115 request[0] = kDeleteRequest; 113 request[0] = kDeleteRequest;
116 request[1] = _path; 114 request[1] = _path;
117 request[2] = recursive; 115 request[2] = recursive;
118 _directoryService.call(request).receive((result, replyTo) { 116 _directoryService.call(request).receive((result, replyTo) {
119 if (result) { 117 if (result) {
120 if (_deleteHandler != null) _deleteHandler(); 118 callback();
121 } else if (_errorHandler != null) { 119 } else if (_onError != null) {
122 if (recursive) { 120 _onError("${errorMsg}: $_path");
123 _errorHandler("Recursive directory deletion failed: $_path");
124 } else {
125 _errorHandler("Non-recursive directory deletion failed: $_path");
126 }
127 } 121 }
128 }); 122 });
129 } 123 }
130 124
131 void deleteSync([bool recursive = false]) { 125 void delete(void callback()) {
126 _deleteHelper(false, "Directory deletion failed", callback);
127 }
128
129 void deleteRecursively(void callback()) {
130 _deleteHelper(true, "Recursive directory deletion failed", callback);
131 }
132
133 void deleteSync() {
134 bool recursive = false;
132 if (!_delete(_path, recursive)) { 135 if (!_delete(_path, recursive)) {
133 throw new DirectoryException("Directory deletion failed: $_path"); 136 throw new DirectoryException("Directory deletion failed: $_path");
134 } 137 }
135 } 138 }
136 139
140 void deleteRecursivelySync() {
141 bool recursive = true;
142 if (!_delete(_path, recursive)) {
143 throw new DirectoryException(
144 "Recursive directory deletion failed: $_path");
145 }
146 }
147
137 void list([bool recursive = false]) { 148 void list([bool recursive = false]) {
138 final int kListDirectory = 0; 149 final int kListDirectory = 0;
139 final int kListFile = 1; 150 final int kListFile = 1;
140 final int kListError = 2; 151 final int kListError = 2;
141 final int kListDone = 3; 152 final int kListDone = 3;
142 153
143 List request = new List(3); 154 List request = new List(3);
144 request[0] = kListRequest; 155 request[0] = kListRequest;
145 request[1] = _path; 156 request[1] = _path;
146 request[2] = recursive; 157 request[2] = recursive;
147 ReceivePort responsePort = new ReceivePort(); 158 ReceivePort responsePort = new ReceivePort();
148 // Use a separate directory service port for each listing as 159 // Use a separate directory service port for each listing as
149 // listing operations on the same directory can run in parallel. 160 // listing operations on the same directory can run in parallel.
150 _newServicePort().send(request, responsePort.toSendPort()); 161 _newServicePort().send(request, responsePort.toSendPort());
151 responsePort.receive((message, replyTo) { 162 responsePort.receive((message, replyTo) {
152 if (message is !List || message[0] is !int) { 163 if (message is !List || message[0] is !int) {
153 responsePort.close(); 164 responsePort.close();
154 if (_errorHandler != null) _errorHandler("Internal error"); 165 if (_onError != null) _onError("Internal error");
155 return; 166 return;
156 } 167 }
157 switch (message[0]) { 168 switch (message[0]) {
158 case kListDirectory: 169 case kListDirectory:
159 if (_dirHandler != null) _dirHandler(message[1]); 170 if (_onDir != null) _onDir(message[1]);
160 break; 171 break;
161 case kListFile: 172 case kListFile:
162 if (_fileHandler != null) _fileHandler(message[1]); 173 if (_onFile != null) _onFile(message[1]);
163 break; 174 break;
164 case kListError: 175 case kListError:
165 if (_errorHandler != null) _errorHandler(message[1]); 176 if (_onError != null) _onError(message[1]);
166 break; 177 break;
167 case kListDone: 178 case kListDone:
168 responsePort.close(); 179 responsePort.close();
169 if (_doneHandler != null) _doneHandler(message[1]); 180 if (_onDone != null) _onDone(message[1]);
170 break; 181 break;
171 } 182 }
172 }); 183 });
173 } 184 }
174 185
175 void set dirHandler(void dirHandler(String dir)) { 186 void set onDir(void onDir(String dir)) {
176 _dirHandler = dirHandler; 187 _onDir = onDir;
177 } 188 }
178 189
179 void set fileHandler(void fileHandler(String file)) { 190 void set onFile(void onFile(String file)) {
180 _fileHandler = fileHandler; 191 _onFile = onFile;
181 } 192 }
182 193
183 void set doneHandler(void doneHandler(bool completed)) { 194 void set onDone(void onDone(bool completed)) {
184 _doneHandler = doneHandler; 195 _onDone = onDone;
185 } 196 }
186 197
187 void set existsHandler(void existsHandler(bool exists)) { 198 void set onError(void onError(String error)) {
188 _existsHandler = existsHandler; 199 _onError = onError;
189 }
190
191 void set createHandler(void createHandler()) {
192 _createHandler = createHandler;
193 }
194
195 void set createTempHandler(void createTempHandler()) {
196 _createTempHandler = createTempHandler;
197 }
198
199 void set deleteHandler(void deleteHandler()) {
200 _deleteHandler = deleteHandler;
201 }
202
203 void set errorHandler(void errorHandler(String error)) {
204 _errorHandler = errorHandler;
205 } 200 }
206 201
207 void _closePort(ReceivePort port) { 202 void _closePort(ReceivePort port) {
208 if (port !== null) { 203 if (port !== null) {
209 port.close(); 204 port.close();
210 } 205 }
211 } 206 }
212 207
213 String get path() { return _path; } 208 String get path() { return _path; }
214 209
215 var _dirHandler; 210 var _onDir;
216 var _fileHandler; 211 var _onFile;
217 var _doneHandler; 212 var _onDone;
218 var _existsHandler; 213 var _onError;
219 var _createHandler;
220 var _createTempHandler;
221 var _deleteHandler;
222 var _errorHandler;
223 214
224 String _path; 215 String _path;
225 SendPort _directoryService; 216 SendPort _directoryService;
226 } 217 }
OLDNEW
« no previous file with comments | « runtime/bin/directory.dart ('k') | runtime/bin/file.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698