| OLD | NEW |
| (Empty) |
| 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 | |
| 3 // BSD-style license that can be found in the LICENSE file. | |
| 4 | |
| 5 #library('file_system_dom'); | |
| 6 | |
| 7 #import('dart:dom_deprecated'); | |
| 8 #import('file_system.dart'); | |
| 9 | |
| 10 /** | |
| 11 * [FileSystem] implementation using XHRs for reading files and an in memory | |
| 12 * cache for writing them. | |
| 13 */ | |
| 14 class DomFileSystem implements FileSystem { | |
| 15 Map<String, String> _fileCache; | |
| 16 String _path; | |
| 17 | |
| 18 DomFileSystem([this._path = null]) : _fileCache = {}; | |
| 19 | |
| 20 // TODO(vsm): Move this to FileSystem. | |
| 21 String absPath(String filename) { | |
| 22 if (_path != null && !filename.startsWith('/') | |
| 23 && !filename.startsWith('file:///') && !filename.startsWith('http://') | |
| 24 && !filename.startsWith('dart:')) { | |
| 25 filename = joinPaths(_path, filename); | |
| 26 } | |
| 27 return filename; | |
| 28 } | |
| 29 | |
| 30 String readAll(String filename) { | |
| 31 filename = absPath(filename); | |
| 32 var result = _fileCache[filename]; | |
| 33 if (result == null) { | |
| 34 final xhr = new XMLHttpRequest(); | |
| 35 // TODO(jimhug): Fix API so we can get multiple files at once. | |
| 36 // Use a sychronous XHR to match the current API. | |
| 37 xhr.open('GET', filename, false); | |
| 38 try { | |
| 39 xhr.send(null); | |
| 40 } catch (var e) { | |
| 41 // TODO(vsm): This XHR appears to fail if the URL is a | |
| 42 // directory. Return something to make fileExists work. | |
| 43 // Handle this better. | |
| 44 return "_directory($filename)_"; | |
| 45 } | |
| 46 | |
| 47 if (xhr.status == 0 || xhr.status == 200) { | |
| 48 result = xhr.responseText; | |
| 49 if (result.isEmpty()) { | |
| 50 // TODO(vsm): Figure out why a non-existent file is not giving | |
| 51 // an error code. | |
| 52 print('Error: $filename is not found or empty'); | |
| 53 return null; | |
| 54 } | |
| 55 } else { | |
| 56 // TODO(jimhug): Better error handling. | |
| 57 print("Error: ${xhr.statusText}"); | |
| 58 } | |
| 59 _fileCache[filename] = result; | |
| 60 } | |
| 61 return result; | |
| 62 } | |
| 63 | |
| 64 void writeString(String outfile, String text) { | |
| 65 outfile = absPath(outfile); | |
| 66 _fileCache[outfile] = text; | |
| 67 } | |
| 68 | |
| 69 // Note: this is not a perf nightmare only because of caching. | |
| 70 bool fileExists(String filename) => readAll(filename) != null; | |
| 71 | |
| 72 void createDirectory(String path, [bool recursive = false]) { | |
| 73 // TODO(rnystrom): Implement. | |
| 74 throw 'createDirectory() is not implemented by DomFileSystem yet.'; | |
| 75 } | |
| 76 | |
| 77 void removeDirectory(String path, [bool recursive = false]) { | |
| 78 // TODO(rnystrom): Implement. | |
| 79 throw 'removeDirectory() is not implemented by DomFileSystem yet.'; | |
| 80 } | |
| 81 } | |
| OLD | NEW |