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

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

Issue 9570004: Revert "Rename blahHandler to onBlah throughout dart:io." (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: 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(void callback(bool exists)) { 29 void 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;
37 if (result < 0) { 39 if (result < 0) {
38 if (_onError != null) { 40 if (_errorHandler != null) {
39 _onError("Diretory exists test failed: $_path"); 41 _errorHandler("Diretory exists test failed: $_path");
40 } 42 }
41 } else { 43 } else {
42 callback(result == 1); 44 handler(result == 1);
43 } 45 }
44 }); 46 });
45 } 47 }
46 48
47 bool existsSync() { 49 bool existsSync() {
48 int exists = _exists(_path); 50 int exists = _exists(_path);
49 if (exists < 0) { 51 if (exists < 0) {
50 throw new DirectoryException("Diretory exists test failed: $_path"); 52 throw new DirectoryException("Diretory exists test failed: $_path");
51 } 53 }
52 return (exists == 1); 54 return (exists == 1);
53 } 55 }
54 56
55 void create(void callback()) { 57 void create() {
56 if (_directoryService == null) { 58 if (_directoryService == null) {
57 _directoryService = _newServicePort(); 59 _directoryService = _newServicePort();
58 } 60 }
59 List request = new List(2); 61 List request = new List(2);
60 request[0] = kCreateRequest; 62 request[0] = kCreateRequest;
61 request[1] = _path; 63 request[1] = _path;
62 _directoryService.call(request).receive((result, replyTo) { 64 _directoryService.call(request).receive((result, replyTo) {
63 if (result) { 65 if (result) {
64 callback(); 66 if (_createHandler != null) _createHandler();
65 } else if (_onError != null) { 67 } else if (_errorHandler != null) {
66 _onError("Directory creation failed: $_path"); 68 _errorHandler("Directory creation failed: $_path");
67 } 69 }
68 }); 70 });
69 } 71 }
70 72
71 void createSync() { 73 void createSync() {
72 if (!_create(_path)) { 74 if (!_create(_path)) {
73 throw new DirectoryException("Directory creation failed: $_path"); 75 throw new DirectoryException("Directory creation failed: $_path");
74 } 76 }
75 } 77 }
76 78
77 void createTemp(void callback()) { 79 void createTemp() {
78 if (_directoryService == null) { 80 if (_directoryService == null) {
79 _directoryService = _newServicePort(); 81 _directoryService = _newServicePort();
80 } 82 }
81 List request = new List(2); 83 List request = new List(2);
82 request[0] = kCreateTempRequest; 84 request[0] = kCreateTempRequest;
83 request[1] = _path; 85 request[1] = _path;
84 _directoryService.call(request).receive((result, replyTo) { 86 _directoryService.call(request).receive((result, replyTo) {
85 if (result is !List) { 87 if (result is !List) {
86 _path = result; 88 _path = result;
87 callback(); 89 if (_createTempHandler != null) _createTempHandler();
88 } else if (_onError != null) { 90 } else if (_errorHandler != null) {
89 _onError("Could not create temporary directory [$_path]: " + 91 _errorHandler("Could not create temporary directory [$_path]: " +
90 "${result[1]}"); 92 "${result[1]}");
91 } 93 }
92 }); 94 });
93 } 95 }
94 96
95 void createTempSync() { 97 void createTempSync() {
96 var status = new _OSStatus(); 98 var status = new _OSStatus();
97 var result = _createTemp(path, status); 99 var result = _createTemp(path, status);
98 if (result != null) { 100 if (result != null) {
99 _path = result; 101 _path = result;
100 } else { 102 } else {
101 throw new DirectoryException( 103 throw new DirectoryException(
102 "Could not create temporary directory [$_path]: " + 104 "Could not create temporary directory [$_path]: " +
103 "${status._errorMessage}", 105 "${status._errorMessage}",
104 status._errorCode); 106 status._errorCode);
105 } 107 }
106 } 108 }
107 109
108 void _deleteHelper(bool recursive, String errorMsg, void callback()) { 110 void delete([bool recursive = false]) {
109 if (_directoryService == null) { 111 if (_directoryService == null) {
110 _directoryService = _newServicePort(); 112 _directoryService = _newServicePort();
111 } 113 }
112 List request = new List(3); 114 List request = new List(3);
113 request[0] = kDeleteRequest; 115 request[0] = kDeleteRequest;
114 request[1] = _path; 116 request[1] = _path;
115 request[2] = recursive; 117 request[2] = recursive;
116 _directoryService.call(request).receive((result, replyTo) { 118 _directoryService.call(request).receive((result, replyTo) {
117 if (result) { 119 if (result) {
118 callback(); 120 if (_deleteHandler != null) _deleteHandler();
119 } else if (_onError != null) { 121 } else if (_errorHandler != null) {
120 _onError("${errorMsg}: $_path"); 122 if (recursive) {
123 _errorHandler("Recursive directory deletion failed: $_path");
124 } else {
125 _errorHandler("Non-recursive directory deletion failed: $_path");
126 }
121 } 127 }
122 }); 128 });
123 } 129 }
124 130
125 void delete(void callback()) { 131 void deleteSync([bool recursive = false]) {
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;
135 if (!_delete(_path, recursive)) { 132 if (!_delete(_path, recursive)) {
136 throw new DirectoryException("Directory deletion failed: $_path"); 133 throw new DirectoryException("Directory deletion failed: $_path");
137 } 134 }
138 } 135 }
139 136
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
148 void list([bool recursive = false]) { 137 void list([bool recursive = false]) {
149 final int kListDirectory = 0; 138 final int kListDirectory = 0;
150 final int kListFile = 1; 139 final int kListFile = 1;
151 final int kListError = 2; 140 final int kListError = 2;
152 final int kListDone = 3; 141 final int kListDone = 3;
153 142
154 List request = new List(3); 143 List request = new List(3);
155 request[0] = kListRequest; 144 request[0] = kListRequest;
156 request[1] = _path; 145 request[1] = _path;
157 request[2] = recursive; 146 request[2] = recursive;
158 ReceivePort responsePort = new ReceivePort(); 147 ReceivePort responsePort = new ReceivePort();
159 // Use a separate directory service port for each listing as 148 // Use a separate directory service port for each listing as
160 // listing operations on the same directory can run in parallel. 149 // listing operations on the same directory can run in parallel.
161 _newServicePort().send(request, responsePort.toSendPort()); 150 _newServicePort().send(request, responsePort.toSendPort());
162 responsePort.receive((message, replyTo) { 151 responsePort.receive((message, replyTo) {
163 if (message is !List || message[0] is !int) { 152 if (message is !List || message[0] is !int) {
164 responsePort.close(); 153 responsePort.close();
165 if (_onError != null) _onError("Internal error"); 154 if (_errorHandler != null) _errorHandler("Internal error");
166 return; 155 return;
167 } 156 }
168 switch (message[0]) { 157 switch (message[0]) {
169 case kListDirectory: 158 case kListDirectory:
170 if (_onDir != null) _onDir(message[1]); 159 if (_dirHandler != null) _dirHandler(message[1]);
171 break; 160 break;
172 case kListFile: 161 case kListFile:
173 if (_onFile != null) _onFile(message[1]); 162 if (_fileHandler != null) _fileHandler(message[1]);
174 break; 163 break;
175 case kListError: 164 case kListError:
176 if (_onError != null) _onError(message[1]); 165 if (_errorHandler != null) _errorHandler(message[1]);
177 break; 166 break;
178 case kListDone: 167 case kListDone:
179 responsePort.close(); 168 responsePort.close();
180 if (_onDone != null) _onDone(message[1]); 169 if (_doneHandler != null) _doneHandler(message[1]);
181 break; 170 break;
182 } 171 }
183 }); 172 });
184 } 173 }
185 174
186 void set onDir(void onDir(String dir)) { 175 void set dirHandler(void dirHandler(String dir)) {
187 _onDir = onDir; 176 _dirHandler = dirHandler;
188 } 177 }
189 178
190 void set onFile(void onFile(String file)) { 179 void set fileHandler(void fileHandler(String file)) {
191 _onFile = onFile; 180 _fileHandler = fileHandler;
192 } 181 }
193 182
194 void set onDone(void onDone(bool completed)) { 183 void set doneHandler(void doneHandler(bool completed)) {
195 _onDone = onDone; 184 _doneHandler = doneHandler;
196 } 185 }
197 186
198 void set onError(void onError(String error)) { 187 void set existsHandler(void existsHandler(bool exists)) {
199 _onError = onError; 188 _existsHandler = existsHandler;
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;
200 } 205 }
201 206
202 void _closePort(ReceivePort port) { 207 void _closePort(ReceivePort port) {
203 if (port !== null) { 208 if (port !== null) {
204 port.close(); 209 port.close();
205 } 210 }
206 } 211 }
207 212
208 String get path() { return _path; } 213 String get path() { return _path; }
209 214
210 var _onDir; 215 var _dirHandler;
211 var _onFile; 216 var _fileHandler;
212 var _onDone; 217 var _doneHandler;
213 var _onError; 218 var _existsHandler;
219 var _createHandler;
220 var _createTempHandler;
221 var _deleteHandler;
222 var _errorHandler;
214 223
215 String _path; 224 String _path;
216 SendPort _directoryService; 225 SendPort _directoryService;
217 } 226 }
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