From 5b56cc0aee0c558728677b1cb191589021c8c36d Mon Sep 17 00:00:00 2001 From: Chema Date: Sat, 8 Dec 2012 12:00:25 +0100 Subject: [PATCH 1/6] Basic DOMError implementation --- src/file/NativeFileSystem.js | 96 ++++++++++++++++-------------- test/spec/NativeFileSystem-test.js | 22 +++---- 2 files changed, 63 insertions(+), 55 deletions(-) diff --git a/src/file/NativeFileSystem.js b/src/file/NativeFileSystem.js index 7b6c3d82723..8f75d73ca15 100644 --- a/src/file/NativeFileSystem.js +++ b/src/file/NativeFileSystem.js @@ -27,22 +27,6 @@ define(function (require, exports, module) { "use strict"; - //define FileError as currently ONLY Chrome implements the File API W3C Working Draft - window.FileError = window.FileError || { - NOT_FOUND_ERR: 1, - SECURITY_ERR: 2, - ABORT_ERR: 3, - NOT_READABLE_ERR: 4, - ENCODING_ERR: 5, - NO_MODIFICATION_ALLOWED_ERR: 6, - INVALID_STATE_ERR: 7, - SYNTAX_ERR: 8, - INVALID_MODIFICATION_ERR: 9, - QUOTA_EXCEEDED_ERR: 10, - TYPE_MISMATCH_ERR: 11, - PATH_EXISTS_ERR: 12 - }; - var Async = require("utils/Async"); /* @@ -133,33 +117,34 @@ define(function (require, exports, module) { // since there aren't specific mappings for these. case brackets.fs.ERR_UNKNOWN: case brackets.fs.ERR_INVALID_PARAMS: - error = FileError.SECURITY_ERR; + error = NativeFileSystem.FileError.SECURITY_ERR; break; case brackets.fs.ERR_NOT_FOUND: - error = FileError.NOT_FOUND_ERR; + error = NativeFileSystem.FileError.NOT_FOUND_ERR; break; case brackets.fs.ERR_CANT_READ: - error = FileError.NOT_READABLE_ERR; + error = NativeFileSystem.FileError.NOT_READABLE_ERR; break; // It might seem like you should use FileError.ENCODING_ERR for this, // but according to the spec that's for malformed URLs. case brackets.fs.ERR_UNSUPPORTED_ENCODING: - error = FileError.SECURITY_ERR; + error = NativeFileSystem.FileError.SECURITY_ERR; break; case brackets.fs.ERR_CANT_WRITE: - error = FileError.NO_MODIFICATION_ALLOWED_ERR; + error = NativeFileSystem.FileError.NO_MODIFICATION_ALLOWED_ERR; break; case brackets.fs.ERR_OUT_OF_SPACE: - error = FileError.QUOTA_EXCEEDED_ERR; + error = NativeFileSystem.FileError.QUOTA_EXCEEDED_ERR; break; case brackets.fs.PATH_EXISTS_ERR: - error = FileError.PATH_EXISTS_ERR; + error = NativeFileSystem.FileError.PATH_EXISTS_ERR; break; default: // The HTML file spec says SECURITY_ERR is a catch-all to be used in situations // not covered by other error codes. - error = FileError.SECURITY_ERR; + error = NativeFileSystem.FileError.SECURITY_ERR; } + console.log(error); return new NativeFileSystem.FileError(error); } }; @@ -507,7 +492,7 @@ define(function (require, exports, module) { // TODO (issue #241): Terminate any steps having to do with writing a file. // Set the error attribute to a FileError object with the code ABORT_ERR. - this._error = new NativeFileSystem.FileError(FileError.ABORT_ERR); + this._error = new NativeFileSystem.FileError(NativeFileSystem.FileError.ABORT_ERR); // Set readyState to DONE. this._readyState = NativeFileSystem.FileSaver.DONE; @@ -586,7 +571,7 @@ define(function (require, exports, module) { // throw error if the file the path is not a directory if (!stats.isDirectory()) { if (errorCallback) { - errorCallback(new NativeFileSystem.FileError(FileError.TYPE_MISMATCH_ERR)); + errorCallback(new NativeFileSystem.FileError(NativeFileSystem.FileError.TYPE_MISMATCH_ERR)); } return; @@ -595,7 +580,7 @@ define(function (require, exports, module) { // throw error if the file exists but create is exclusive if (options.create && options.exclusive) { if (errorCallback) { - errorCallback(new NativeFileSystem.FileError(FileError.PATH_EXISTS_ERR)); + errorCallback(new NativeFileSystem.FileError(NativeFileSystem.FileError.PATH_EXISTS_ERR)); } return; @@ -623,7 +608,7 @@ define(function (require, exports, module) { // throw error if file not found and the create == false if (errorCallback) { - errorCallback(new NativeFileSystem.FileError(FileError.NOT_FOUND_ERR)); + errorCallback(new NativeFileSystem.FileError(NativeFileSystem.FileError.NOT_FOUND_ERR)); } } else { // all other brackets.fs.stat() errors @@ -695,7 +680,7 @@ define(function (require, exports, module) { // throw error if the file the path is a directory if (stats.isDirectory()) { if (errorCallback) { - errorCallback(new NativeFileSystem.FileError(FileError.TYPE_MISMATCH_ERR)); + errorCallback(new NativeFileSystem.FileError(NativeFileSystem.FileError.TYPE_MISMATCH_ERR)); } return; @@ -704,7 +689,7 @@ define(function (require, exports, module) { // throw error if the file exists but create is exclusive if (options.create && options.exclusive) { if (errorCallback) { - errorCallback(new NativeFileSystem.FileError(FileError.PATH_EXISTS_ERR)); + errorCallback(new NativeFileSystem.FileError(NativeFileSystem.FileError.PATH_EXISTS_ERR)); } return; @@ -731,7 +716,7 @@ define(function (require, exports, module) { // throw error if file not found and the create == false if (errorCallback) { - errorCallback(new NativeFileSystem.FileError(FileError.NOT_FOUND_ERR)); + errorCallback(new NativeFileSystem.FileError(NativeFileSystem.FileError.NOT_FOUND_ERR)); } } else { // all other brackets.fs.stat() errors @@ -807,7 +792,7 @@ define(function (require, exports, module) { if (err === Async.ERROR_TIMEOUT) { // SECURITY_ERR is the HTML5 File catch-all error, and there isn't anything // more fitting for a timeout. - err = new NativeFileSystem.FileError(FileError.SECURITY_ERR); + err = new NativeFileSystem.FileError(NativeFileSystem.FileError.SECURITY_ERR); } else { err = lastError; } @@ -1009,21 +994,44 @@ define(function (require, exports, module) { writable: false }); }; - - /** class: FileError - * - * Implementation of HTML file API error code return class. Note that we don't - * actually define the error codes here--we rely on the browser's built-in FileError - * class's constants. In other words, external clients of this API should always - * use FileError., not NativeFileSystem.FileError.. + + /** + * Implementation of w3 DOMError interface + * http://www.w3.org/TR/2012/WD-dom-20120105/#interface-domerror * - * @constructor - * @param {number} code The error code to return with this FileError. Must be - * one of the codes defined in the FileError class. + * A DOMError is intended for other specifications that want to + * introduce error handling through other means than exceptions. */ - NativeFileSystem.FileError = function (code) { - this.code = code || 0; + NativeFileSystem.FileError = function (name) { + + /** + * The name of the error. A type DOMError means a DOMError + * object whose name attribute is initialized to type + * @const + * @type {string} + */ + Object.defineProperty(this, "name", { + value: name, + writable: false + }); }; + + /** + * Possible error name constants for NativeFileSystem operations. For details check: + * http://www.w3.org/TR/file-system-api/#definitions + * http://dev.w3.org/2009/dap/file-system/file-writer.html#definitions + */ + NativeFileSystem.FileError.NOT_FOUND_ERR = "NotFoundError"; + NativeFileSystem.FileError.SECURITY_ERR = "SecurityError"; + NativeFileSystem.FileError.ABORT_ERR = "AbortError"; + NativeFileSystem.FileError.NOT_READABLE_ERR = "NotReadableError"; + NativeFileSystem.FileError.NO_MODIFICATION_ALLOWED_ERR = "NoModificationAllowedError"; + NativeFileSystem.FileError.INVALID_STATE_ERR = "InvalidStateError"; + NativeFileSystem.FileError.SYNTAX_ERR = "SyntaxError"; + NativeFileSystem.FileError.INVALID_MODIFICATION_ERR = "InvalidModificationError"; + NativeFileSystem.FileError.QUOTA_EXCEEDED_ERR = "QuotaExceededError"; + NativeFileSystem.FileError.TYPE_MISMATCH_ERR = "TypeMismatchError"; + NativeFileSystem.FileError.PATH_EXISTS_ERR = "PathExistsError"; // Define public API exports.NativeFileSystem = NativeFileSystem; diff --git a/test/spec/NativeFileSystem-test.js b/test/spec/NativeFileSystem-test.js index 15962dc9827..cc8f6353040 100644 --- a/test/spec/NativeFileSystem-test.js +++ b/test/spec/NativeFileSystem-test.js @@ -122,7 +122,7 @@ define(function (require, exports, module) { }); runs(function () { - expect(error.code).toBe(FileError.NOT_FOUND_ERR); + expect(error.name).toBe(NativeFileSystem.FileError.NOT_FOUND_ERR); }); }); @@ -146,7 +146,7 @@ define(function (require, exports, module) { }); runs(function () { - expect(error.code).toBe(FileError.SECURITY_ERR); + expect(error.name).toBe(NativeFileSystem.FileError.SECURITY_ERR); }); }); @@ -277,7 +277,7 @@ define(function (require, exports, module) { expect(readComplete).toBe(true); expect(statCalled).toBe(true); expect(gotError).toBe(true); - expect(theError.code).toBe(FileError.SECURITY_ERR); + expect(theError.name).toBe(NativeFileSystem.FileError.SECURITY_ERR); }); }); }); @@ -318,7 +318,7 @@ define(function (require, exports, module) { it("should return an error if the file is not found", function () { var deferred = new $.Deferred(), - errorCode; + errorName; runs(function () { var fileEntry = new NativeFileSystem.FileEntry(this.path + "/idontexist"); @@ -328,7 +328,7 @@ define(function (require, exports, module) { deferred.resolve(); }; reader.onerror = function (event) { - errorCode = event.target.error.code; + errorName = event.target.error.name; deferred.reject(); }; reader.readAsText(file, Encodings.UTF8); @@ -338,7 +338,7 @@ define(function (require, exports, module) { }); runs(function () { - expect(errorCode).toBe(FileError.NOT_FOUND_ERR); + expect(errorName).toBe(NativeFileSystem.FileError.NOT_FOUND_ERR); }); }); @@ -533,7 +533,7 @@ define(function (require, exports, module) { // fileEntry is null on error runs(function () { expect(fileEntry).toBe(null); - expect(error.code).toBe(FileError.NOT_FOUND_ERR); + expect(error.name).toBe(NativeFileSystem.FileError.NOT_FOUND_ERR); }); }); @@ -564,7 +564,7 @@ define(function (require, exports, module) { expect(fileEntry).toBe(null); // errorCallback should be called with PATH_EXISTS_ERR - expect(error.code).toEqual(FileError.PATH_EXISTS_ERR); + expect(error.name).toEqual(NativeFileSystem.FileError.PATH_EXISTS_ERR); }); }); @@ -595,7 +595,7 @@ define(function (require, exports, module) { expect(fileEntry).toBe(null); // errorCallback should be called with TYPE_MISMATCH_ERR - expect(error.code).toEqual(FileError.TYPE_MISMATCH_ERR); + expect(error.name).toEqual(NativeFileSystem.FileError.TYPE_MISMATCH_ERR); }); }); @@ -737,7 +737,7 @@ define(function (require, exports, module) { runs(function () { expect(complete).toBeFalsy(); - expect(error.code).toBe(FileError.NOT_READABLE_ERR); + expect(error.name).toBe(NativeFileSystem.FileError.NOT_READABLE_ERR); }); }); @@ -772,7 +772,7 @@ define(function (require, exports, module) { function () { return writeComplete && error - && (error.code === FileError.NO_MODIFICATION_ALLOWED_ERR); + && (error.name === NativeFileSystem.FileError.NO_MODIFICATION_ALLOWED_ERR); }, 1000 ); From 1e692910fa74b42397a0140de4ffd2890cbe0258 Mon Sep 17 00:00:00 2001 From: Chema Date: Sat, 8 Dec 2012 20:18:48 +0100 Subject: [PATCH 2/6] Fix jsdocs and change _nativeToFileError signature --- src/file/NativeFileSystem.js | 41 ++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/src/file/NativeFileSystem.js b/src/file/NativeFileSystem.js index 8f75d73ca15..b481932f9ba 100644 --- a/src/file/NativeFileSystem.js +++ b/src/file/NativeFileSystem.js @@ -22,7 +22,7 @@ */ /*jslint vars: true, plusplus: true, devel: true, nomen: true, indent: 4, maxerr: 50*/ -/*global $, define, brackets, FileError, InvalidateStateError, window */ +/*global $, define, brackets, InvalidateStateError, window */ define(function (require, exports, module) { "use strict"; @@ -58,7 +58,7 @@ define(function (require, exports, module) { * @param {string} initialPath * @param {Array.} fileTypes * @param {!function(Array.)} successCallback - * @param {!function(number)} errorCallback (TODO #2057: should this pass a FileError?) + * @param {!function(DOMError)} errorCallback * @constructor */ showOpenDialog: function (allowMultipleSelection, @@ -82,7 +82,7 @@ define(function (require, exports, module) { if (!err) { successCallback(data); } else if (errorCallback) { - errorCallback(NativeFileSystem._nativeToFileError(err)); + errorCallback(new NativeFileSystem.FileError(NativeFileSystem._nativeToFileError(err))); } } ); @@ -92,14 +92,14 @@ define(function (require, exports, module) { * * @param {!string} path * @param {!function(FileSystem)} successCallback - * @param {!function(number)} errorCallback (TODO #2057: should pass a FileError) + * @param {!function(DOMError)} errorCallback */ requestNativeFileSystem: function (path, successCallback, errorCallback) { brackets.fs.stat(path, function (err, data) { if (!err) { successCallback(new NativeFileSystem.FileSystem(path)); } else if (errorCallback) { - errorCallback(NativeFileSystem._nativeToFileError(err)); + errorCallback(new NativeFileSystem.FileError(NativeFileSystem._nativeToFileError(err))); } }); }, @@ -144,8 +144,7 @@ define(function (require, exports, module) { // not covered by other error codes. error = NativeFileSystem.FileError.SECURITY_ERR; } - console.log(error); - return new NativeFileSystem.FileError(error); + return error; } }; @@ -251,7 +250,7 @@ define(function (require, exports, module) { /** * @param {!function(Metadata)} successCallBack - * @param {!function(number)} errorCallback (TODO #2057: should pass a FileError) + * @param {!function(DOMError)} errorCallback */ NativeFileSystem.Entry.prototype.getMetadata = function (successCallBack, errorCallback) { brackets.fs.stat(this.fullPath, function (err, stat) { @@ -259,7 +258,7 @@ define(function (require, exports, module) { var metadata = new NativeFileSystem.Metadata(stat.mtime); successCallBack(metadata); } else { - errorCallback(NativeFileSystem._nativeToFileError(err)); + errorCallback(new NativeFileSystem.FileError(NativeFileSystem._nativeToFileError(err))); } }); }; @@ -294,7 +293,7 @@ define(function (require, exports, module) { * Creates a new FileWriter associated with the file that this FileEntry represents. * * @param {!function(FileWriter)} successCallback - * @param {!function(number)} errorCallback (TODO #2057: should pass a FileError) + * @param {!function(DOMError)} errorCallback */ NativeFileSystem.FileEntry.prototype.createWriter = function (successCallback, errorCallback) { var fileEntry = this; @@ -339,7 +338,7 @@ define(function (require, exports, module) { brackets.fs.writeFile(fileEntry.fullPath, data, _FSEncodings.UTF8, function (err) { if ((err !== brackets.fs.NO_ERROR) && self.onerror) { - var fileError = NativeFileSystem._nativeToFileError(err); + var fileError = new NativeFileSystem.FileError(NativeFileSystem._nativeToFileError(err)); // TODO (issue #241): set readonly FileSaver.error attribute // self._error = fileError; @@ -396,7 +395,7 @@ define(function (require, exports, module) { result.done(function () { if (fileWriter._err && (errorCallback !== undefined)) { - errorCallback(NativeFileSystem._nativeToFileError(fileWriter._err)); + errorCallback(new NativeFileSystem.FileError(NativeFileSystem._nativeToFileError(fileWriter._err))); } else if (successCallback !== undefined) { successCallback(fileWriter); } @@ -407,7 +406,7 @@ define(function (require, exports, module) { * Obtains the File objecte for a FileEntry object * * @param {!function(File)} successCallback - * @param {!function(FileError)} errorCallback + * @param {!function(DOMError)} errorCallback */ NativeFileSystem.FileEntry.prototype.file = function (successCallback, errorCallback) { var newFile = new NativeFileSystem.File(this); @@ -529,7 +528,7 @@ define(function (require, exports, module) { * @param {!string} path * @param {!{create:?boolean, exclusive:?boolean}} options * @param {!function(DirectoryEntry)} successCallback - * @param {!function(FileError|number)} errorCallback (TODO #2057: should consistently pass a FileError) + * @param {!function(DOMError)} errorCallback */ NativeFileSystem.DirectoryEntry.prototype.getDirectory = function (path, options, successCallback, errorCallback) { var directoryFullPath = path, @@ -559,7 +558,7 @@ define(function (require, exports, module) { var createDirectoryError = function (err) { if (errorCallback) { - errorCallback(NativeFileSystem._nativeToFileError(err)); + errorCallback(new NativeFileSystem.FileError(NativeFileSystem._nativeToFileError(err))); } }; @@ -638,7 +637,7 @@ define(function (require, exports, module) { * exist. * @param {!{create:?boolean, exclusive:?boolean}} options * @param {!function(FileEntry)} successCallback - * @param {!function(FileError|number)} errorCallback (TODO #2057: should consistently pass a FileError) + * @param {!function(DOMError} errorCallback */ NativeFileSystem.DirectoryEntry.prototype.getFile = function (path, options, successCallback, errorCallback) { var fileFullPath = path, @@ -668,7 +667,7 @@ define(function (require, exports, module) { var createFileError = function (err) { if (errorCallback) { - errorCallback(NativeFileSystem._nativeToFileError(err)); + errorCallback(new NativeFileSystem.FileError(NativeFileSystem._nativeToFileError(err))); } }; @@ -734,7 +733,7 @@ define(function (require, exports, module) { /** readEntries * * @param {!function(Array.)} successCallback - * @param {!function(FileError|number)} errorCallback (TODO #2057: should consistently pass a FileError) + * @param {!function(DOMError} errorCallback * @returns {Array.} */ NativeFileSystem.DirectoryReader.prototype.readEntries = function (successCallback, errorCallback) { @@ -763,7 +762,7 @@ define(function (require, exports, module) { } deferred.resolve(); } else { - lastError = NativeFileSystem._nativeToFileError(statErr); + lastError = new NativeFileSystem.FileError(NativeFileSystem._nativeToFileError(statErr)); deferred.reject(lastError); } }); @@ -804,7 +803,7 @@ define(function (require, exports, module) { ); } else { // There was an error reading the initial directory. - errorCallback(NativeFileSystem._nativeToFileError(err)); + errorCallback(new NativeFileSystem.FileError(NativeFileSystem._nativeToFileError(err))); } }); }; @@ -894,7 +893,7 @@ define(function (require, exports, module) { // The target for this event is the FileReader and the data/err result is stored in the FileReader fakeEvent.target = self; self.result = data; - self.error = NativeFileSystem._nativeToFileError(err); + self.error = new NativeFileSystem.FileError(NativeFileSystem._nativeToFileError(err)); if (err) { self.readyState = self.DONE; From 300ff9cefcffda45596329318e98bdd60828da77 Mon Sep 17 00:00:00 2001 From: Chema Date: Sun, 9 Dec 2012 14:21:43 +0100 Subject: [PATCH 3/6] External NativeFileError --- src/file/NativeFileError.js | 73 ++++++++++++++++++++ src/file/NativeFileSystem.js | 103 +++++++++-------------------- test/spec/NativeFileSystem-test.js | 19 +++--- 3 files changed, 116 insertions(+), 79 deletions(-) create mode 100644 src/file/NativeFileError.js diff --git a/src/file/NativeFileError.js b/src/file/NativeFileError.js new file mode 100644 index 00000000000..4010d9812a2 --- /dev/null +++ b/src/file/NativeFileError.js @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2012 Adobe Systems Incorporated. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +/*jslint vars: true, plusplus: true, devel: true, nomen: true, indent: 4, maxerr: 50*/ +/*global define */ + +define(function () { + "use strict"; + + /** + * Implementation of w3 DOMError interface + * http://www.w3.org/TR/2012/WD-dom-20120105/#interface-domerror + * + * NativeFileError describes possible errors occurred during NativeFileSystem + * operations. It is inteneded to be used in error handling through other means + * than exceptions. + * @constructor + * @implements {DOMError} + * + */ + var NativeFileError = function (name) { + + /** + * The name of the error + * @const + * @type {string} + */ + Object.defineProperty(this, "name", { + value: name, + writable: false + }); + }; + + /** + * Possible error name constants for NativeFileSystem operations. For details check: + * http://www.w3.org/TR/file-system-api/#definitions + * http://dev.w3.org/2009/dap/file-system/file-writer.html#definitions + */ + NativeFileError.NOT_FOUND_ERR = "NotFoundError"; + NativeFileError.SECURITY_ERR = "SecurityError"; + NativeFileError.ABORT_ERR = "AbortError"; + NativeFileError.NOT_READABLE_ERR = "NotReadableError"; + NativeFileError.NO_MODIFICATION_ALLOWED_ERR = "NoModificationAllowedError"; + NativeFileError.INVALID_STATE_ERR = "InvalidStateError"; + NativeFileError.SYNTAX_ERR = "SyntaxError"; + NativeFileError.INVALID_MODIFICATION_ERR = "InvalidModificationError"; + NativeFileError.QUOTA_EXCEEDED_ERR = "QuotaExceededError"; + NativeFileError.TYPE_MISMATCH_ERR = "TypeMismatchError"; + NativeFileError.PATH_EXISTS_ERR = "PathExistsError"; + + // Define public API + return NativeFileError; +}); \ No newline at end of file diff --git a/src/file/NativeFileSystem.js b/src/file/NativeFileSystem.js index b481932f9ba..e5c12a92ae9 100644 --- a/src/file/NativeFileSystem.js +++ b/src/file/NativeFileSystem.js @@ -27,8 +27,9 @@ define(function (require, exports, module) { "use strict"; - var Async = require("utils/Async"); - + var Async = require("utils/Async"), + NativeFileError = require("file/NativeFileError"); + /* * Generally NativeFileSystem mimics the File API working draft * http://www.w3.org/TR/file-system-api/. The w3 entry point @@ -82,7 +83,7 @@ define(function (require, exports, module) { if (!err) { successCallback(data); } else if (errorCallback) { - errorCallback(new NativeFileSystem.FileError(NativeFileSystem._nativeToFileError(err))); + errorCallback(new NativeFileError(NativeFileSystem._nativeToFileError(err))); } } ); @@ -99,15 +100,15 @@ define(function (require, exports, module) { if (!err) { successCallback(new NativeFileSystem.FileSystem(path)); } else if (errorCallback) { - errorCallback(new NativeFileSystem.FileError(NativeFileSystem._nativeToFileError(err))); + errorCallback(new NativeFileError(NativeFileSystem._nativeToFileError(err))); } }); }, /** - * Converts a brackets.fs.ERR_* error code to a FileError.* error code - * @param {number} nativeErr - * @return {number} + * Converts a brackets.fs.ERR_* error code to a NativeFileError.* error name + * @param {!number} nativeErr A brackets.fs error code + * @return {string} An error name out of the possible NativeFileError.* names */ _nativeToFileError: function (nativeErr) { var error; @@ -117,32 +118,32 @@ define(function (require, exports, module) { // since there aren't specific mappings for these. case brackets.fs.ERR_UNKNOWN: case brackets.fs.ERR_INVALID_PARAMS: - error = NativeFileSystem.FileError.SECURITY_ERR; + error = NativeFileError.SECURITY_ERR; break; case brackets.fs.ERR_NOT_FOUND: - error = NativeFileSystem.FileError.NOT_FOUND_ERR; + error = NativeFileError.NOT_FOUND_ERR; break; case brackets.fs.ERR_CANT_READ: - error = NativeFileSystem.FileError.NOT_READABLE_ERR; + error = NativeFileError.NOT_READABLE_ERR; break; - // It might seem like you should use FileError.ENCODING_ERR for this, + // It might seem like you should use NativeFileError.ENCODING_ERR for this, // but according to the spec that's for malformed URLs. case brackets.fs.ERR_UNSUPPORTED_ENCODING: - error = NativeFileSystem.FileError.SECURITY_ERR; + error = NativeFileError.SECURITY_ERR; break; case brackets.fs.ERR_CANT_WRITE: - error = NativeFileSystem.FileError.NO_MODIFICATION_ALLOWED_ERR; + error = NativeFileError.NO_MODIFICATION_ALLOWED_ERR; break; case brackets.fs.ERR_OUT_OF_SPACE: - error = NativeFileSystem.FileError.QUOTA_EXCEEDED_ERR; + error = NativeFileError.QUOTA_EXCEEDED_ERR; break; case brackets.fs.PATH_EXISTS_ERR: - error = NativeFileSystem.FileError.PATH_EXISTS_ERR; + error = NativeFileError.PATH_EXISTS_ERR; break; default: // The HTML file spec says SECURITY_ERR is a catch-all to be used in situations // not covered by other error codes. - error = NativeFileSystem.FileError.SECURITY_ERR; + error = NativeFileError.SECURITY_ERR; } return error; } @@ -258,7 +259,7 @@ define(function (require, exports, module) { var metadata = new NativeFileSystem.Metadata(stat.mtime); successCallBack(metadata); } else { - errorCallback(new NativeFileSystem.FileError(NativeFileSystem._nativeToFileError(err))); + errorCallback(new NativeFileError(NativeFileSystem._nativeToFileError(err))); } }); }; @@ -338,7 +339,7 @@ define(function (require, exports, module) { brackets.fs.writeFile(fileEntry.fullPath, data, _FSEncodings.UTF8, function (err) { if ((err !== brackets.fs.NO_ERROR) && self.onerror) { - var fileError = new NativeFileSystem.FileError(NativeFileSystem._nativeToFileError(err)); + var fileError = new NativeFileError(NativeFileSystem._nativeToFileError(err)); // TODO (issue #241): set readonly FileSaver.error attribute // self._error = fileError; @@ -395,7 +396,7 @@ define(function (require, exports, module) { result.done(function () { if (fileWriter._err && (errorCallback !== undefined)) { - errorCallback(new NativeFileSystem.FileError(NativeFileSystem._nativeToFileError(fileWriter._err))); + errorCallback(new NativeFileError(NativeFileSystem._nativeToFileError(fileWriter._err))); } else if (successCallback !== undefined) { successCallback(fileWriter); } @@ -491,7 +492,7 @@ define(function (require, exports, module) { // TODO (issue #241): Terminate any steps having to do with writing a file. // Set the error attribute to a FileError object with the code ABORT_ERR. - this._error = new NativeFileSystem.FileError(NativeFileSystem.FileError.ABORT_ERR); + this._error = new NativeFileError(NativeFileError.ABORT_ERR); // Set readyState to DONE. this._readyState = NativeFileSystem.FileSaver.DONE; @@ -558,7 +559,7 @@ define(function (require, exports, module) { var createDirectoryError = function (err) { if (errorCallback) { - errorCallback(new NativeFileSystem.FileError(NativeFileSystem._nativeToFileError(err))); + errorCallback(new NativeFileError(NativeFileSystem._nativeToFileError(err))); } }; @@ -570,7 +571,7 @@ define(function (require, exports, module) { // throw error if the file the path is not a directory if (!stats.isDirectory()) { if (errorCallback) { - errorCallback(new NativeFileSystem.FileError(NativeFileSystem.FileError.TYPE_MISMATCH_ERR)); + errorCallback(new NativeFileError(NativeFileError.TYPE_MISMATCH_ERR)); } return; @@ -579,7 +580,7 @@ define(function (require, exports, module) { // throw error if the file exists but create is exclusive if (options.create && options.exclusive) { if (errorCallback) { - errorCallback(new NativeFileSystem.FileError(NativeFileSystem.FileError.PATH_EXISTS_ERR)); + errorCallback(new NativeFileError(NativeFileError.PATH_EXISTS_ERR)); } return; @@ -607,7 +608,7 @@ define(function (require, exports, module) { // throw error if file not found and the create == false if (errorCallback) { - errorCallback(new NativeFileSystem.FileError(NativeFileSystem.FileError.NOT_FOUND_ERR)); + errorCallback(new NativeFileError(NativeFileError.NOT_FOUND_ERR)); } } else { // all other brackets.fs.stat() errors @@ -667,7 +668,7 @@ define(function (require, exports, module) { var createFileError = function (err) { if (errorCallback) { - errorCallback(new NativeFileSystem.FileError(NativeFileSystem._nativeToFileError(err))); + errorCallback(new NativeFileError(NativeFileSystem._nativeToFileError(err))); } }; @@ -679,7 +680,7 @@ define(function (require, exports, module) { // throw error if the file the path is a directory if (stats.isDirectory()) { if (errorCallback) { - errorCallback(new NativeFileSystem.FileError(NativeFileSystem.FileError.TYPE_MISMATCH_ERR)); + errorCallback(new NativeFileError(NativeFileError.TYPE_MISMATCH_ERR)); } return; @@ -688,7 +689,7 @@ define(function (require, exports, module) { // throw error if the file exists but create is exclusive if (options.create && options.exclusive) { if (errorCallback) { - errorCallback(new NativeFileSystem.FileError(NativeFileSystem.FileError.PATH_EXISTS_ERR)); + errorCallback(new NativeFileError(NativeFileError.PATH_EXISTS_ERR)); } return; @@ -715,7 +716,7 @@ define(function (require, exports, module) { // throw error if file not found and the create == false if (errorCallback) { - errorCallback(new NativeFileSystem.FileError(NativeFileSystem.FileError.NOT_FOUND_ERR)); + errorCallback(new NativeFileError(NativeFileError.NOT_FOUND_ERR)); } } else { // all other brackets.fs.stat() errors @@ -762,7 +763,7 @@ define(function (require, exports, module) { } deferred.resolve(); } else { - lastError = new NativeFileSystem.FileError(NativeFileSystem._nativeToFileError(statErr)); + lastError = new NativeFileError(NativeFileSystem._nativeToFileError(statErr)); deferred.reject(lastError); } }); @@ -791,7 +792,7 @@ define(function (require, exports, module) { if (err === Async.ERROR_TIMEOUT) { // SECURITY_ERR is the HTML5 File catch-all error, and there isn't anything // more fitting for a timeout. - err = new NativeFileSystem.FileError(NativeFileSystem.FileError.SECURITY_ERR); + err = new NativeFileError(NativeFileError.SECURITY_ERR); } else { err = lastError; } @@ -803,7 +804,7 @@ define(function (require, exports, module) { ); } else { // There was an error reading the initial directory. - errorCallback(new NativeFileSystem.FileError(NativeFileSystem._nativeToFileError(err))); + errorCallback(new NativeFileError(NativeFileSystem._nativeToFileError(err))); } }); }; @@ -893,7 +894,7 @@ define(function (require, exports, module) { // The target for this event is the FileReader and the data/err result is stored in the FileReader fakeEvent.target = self; self.result = data; - self.error = new NativeFileSystem.FileError(NativeFileSystem._nativeToFileError(err)); + self.error = new NativeFileError(NativeFileSystem._nativeToFileError(err)); if (err) { self.readyState = self.DONE; @@ -993,44 +994,6 @@ define(function (require, exports, module) { writable: false }); }; - - /** - * Implementation of w3 DOMError interface - * http://www.w3.org/TR/2012/WD-dom-20120105/#interface-domerror - * - * A DOMError is intended for other specifications that want to - * introduce error handling through other means than exceptions. - */ - NativeFileSystem.FileError = function (name) { - - /** - * The name of the error. A type DOMError means a DOMError - * object whose name attribute is initialized to type - * @const - * @type {string} - */ - Object.defineProperty(this, "name", { - value: name, - writable: false - }); - }; - - /** - * Possible error name constants for NativeFileSystem operations. For details check: - * http://www.w3.org/TR/file-system-api/#definitions - * http://dev.w3.org/2009/dap/file-system/file-writer.html#definitions - */ - NativeFileSystem.FileError.NOT_FOUND_ERR = "NotFoundError"; - NativeFileSystem.FileError.SECURITY_ERR = "SecurityError"; - NativeFileSystem.FileError.ABORT_ERR = "AbortError"; - NativeFileSystem.FileError.NOT_READABLE_ERR = "NotReadableError"; - NativeFileSystem.FileError.NO_MODIFICATION_ALLOWED_ERR = "NoModificationAllowedError"; - NativeFileSystem.FileError.INVALID_STATE_ERR = "InvalidStateError"; - NativeFileSystem.FileError.SYNTAX_ERR = "SyntaxError"; - NativeFileSystem.FileError.INVALID_MODIFICATION_ERR = "InvalidModificationError"; - NativeFileSystem.FileError.QUOTA_EXCEEDED_ERR = "QuotaExceededError"; - NativeFileSystem.FileError.TYPE_MISMATCH_ERR = "TypeMismatchError"; - NativeFileSystem.FileError.PATH_EXISTS_ERR = "PathExistsError"; // Define public API exports.NativeFileSystem = NativeFileSystem; diff --git a/test/spec/NativeFileSystem-test.js b/test/spec/NativeFileSystem-test.js index cc8f6353040..61bfcd493b3 100644 --- a/test/spec/NativeFileSystem-test.js +++ b/test/spec/NativeFileSystem-test.js @@ -32,6 +32,7 @@ define(function (require, exports, module) { // Load dependent modules var NativeFileSystem = require("file/NativeFileSystem").NativeFileSystem, + NativeFileError = require("file/NativeFileError"), SpecRunnerUtils = require("spec/SpecRunnerUtils"); var Encodings = NativeFileSystem.Encodings; @@ -122,7 +123,7 @@ define(function (require, exports, module) { }); runs(function () { - expect(error.name).toBe(NativeFileSystem.FileError.NOT_FOUND_ERR); + expect(error.name).toBe(NativeFileError.NOT_FOUND_ERR); }); }); @@ -146,7 +147,7 @@ define(function (require, exports, module) { }); runs(function () { - expect(error.name).toBe(NativeFileSystem.FileError.SECURITY_ERR); + expect(error.name).toBe(NativeFileError.SECURITY_ERR); }); }); @@ -277,7 +278,7 @@ define(function (require, exports, module) { expect(readComplete).toBe(true); expect(statCalled).toBe(true); expect(gotError).toBe(true); - expect(theError.name).toBe(NativeFileSystem.FileError.SECURITY_ERR); + expect(theError.name).toBe(NativeFileError.SECURITY_ERR); }); }); }); @@ -338,7 +339,7 @@ define(function (require, exports, module) { }); runs(function () { - expect(errorName).toBe(NativeFileSystem.FileError.NOT_FOUND_ERR); + expect(errorName).toBe(NativeFileError.NOT_FOUND_ERR); }); }); @@ -533,7 +534,7 @@ define(function (require, exports, module) { // fileEntry is null on error runs(function () { expect(fileEntry).toBe(null); - expect(error.name).toBe(NativeFileSystem.FileError.NOT_FOUND_ERR); + expect(error.name).toBe(NativeFileError.NOT_FOUND_ERR); }); }); @@ -564,7 +565,7 @@ define(function (require, exports, module) { expect(fileEntry).toBe(null); // errorCallback should be called with PATH_EXISTS_ERR - expect(error.name).toEqual(NativeFileSystem.FileError.PATH_EXISTS_ERR); + expect(error.name).toEqual(NativeFileError.PATH_EXISTS_ERR); }); }); @@ -595,7 +596,7 @@ define(function (require, exports, module) { expect(fileEntry).toBe(null); // errorCallback should be called with TYPE_MISMATCH_ERR - expect(error.name).toEqual(NativeFileSystem.FileError.TYPE_MISMATCH_ERR); + expect(error.name).toEqual(NativeFileError.TYPE_MISMATCH_ERR); }); }); @@ -737,7 +738,7 @@ define(function (require, exports, module) { runs(function () { expect(complete).toBeFalsy(); - expect(error.name).toBe(NativeFileSystem.FileError.NOT_READABLE_ERR); + expect(error.name).toBe(NativeFileError.NOT_READABLE_ERR); }); }); @@ -772,7 +773,7 @@ define(function (require, exports, module) { function () { return writeComplete && error - && (error.name === NativeFileSystem.FileError.NO_MODIFICATION_ALLOWED_ERR); + && (error.name === NativeFileError.NO_MODIFICATION_ALLOWED_ERR); }, 1000 ); From abc02e64099886e229a0aeb3258e9d458a21b63b Mon Sep 17 00:00:00 2001 From: Chema Date: Sun, 9 Dec 2012 14:49:03 +0100 Subject: [PATCH 4/6] Global FileError.* and error.code refactor --- src/LiveDevelopment/LiveDevelopment.js | 7 ++++--- src/document/DocumentCommandHandlers.js | 12 ++++++------ src/document/DocumentManager.js | 2 +- src/editor/EditorUtils.js | 2 +- src/file/FileUtils.js | 19 ++++++++++--------- src/project/FileSyncManager.js | 17 +++++++++-------- src/project/ProjectManager.js | 15 ++++++++------- 7 files changed, 39 insertions(+), 35 deletions(-) diff --git a/src/LiveDevelopment/LiveDevelopment.js b/src/LiveDevelopment/LiveDevelopment.js index 56dbdea6af7..f11d3654ac2 100644 --- a/src/LiveDevelopment/LiveDevelopment.js +++ b/src/LiveDevelopment/LiveDevelopment.js @@ -22,7 +22,7 @@ */ /*jslint vars: true, plusplus: true, devel: true, nomen: true, indent: 4, forin: true, maxerr: 50, regexp: true */ -/*global define, $, FileError, brackets, window */ +/*global define, $, brackets, window */ /** * LiveDevelopment manages the Inspector, all Agents, and the active LiveDocument @@ -68,6 +68,7 @@ define(function LiveDevelopment(require, exports, module) { DocumentManager = require("document/DocumentManager"), EditorManager = require("editor/EditorManager"), FileUtils = require("file/FileUtils"), + NativeFileError = require("file/NativeFileError"), NativeApp = require("utils/NativeApp"), PreferencesDialogs = require("preferences/PreferencesDialogs"), ProjectManager = require("project/ProjectManager"), @@ -558,7 +559,7 @@ define(function LiveDevelopment(require, exports, module) { // --remote-debugging-port flag set. NativeApp.openLiveBrowser( url, - err !== FileError.ERR_NOT_FOUND + err !== NativeFileError.ERR_NOT_FOUND ) .done(function () { browserStarted = true; @@ -567,7 +568,7 @@ define(function LiveDevelopment(require, exports, module) { var message; _setStatus(STATUS_ERROR); - if (err === FileError.NOT_FOUND_ERR) { + if (err === NativeFileError.NOT_FOUND_ERR) { message = Strings.ERROR_CANT_FIND_CHROME; } else { message = StringUtils.format(Strings.ERROR_LAUNCHING_BROWSER, err); diff --git a/src/document/DocumentCommandHandlers.js b/src/document/DocumentCommandHandlers.js index 2bc6c283c38..75256e639a4 100644 --- a/src/document/DocumentCommandHandlers.js +++ b/src/document/DocumentCommandHandlers.js @@ -154,7 +154,7 @@ define(function (require, exports, module) { result.resolve(doc); }) .fail(function (fileError) { - FileUtils.showFileOpenError(fileError.code, fullPath).done(function () { + FileUtils.showFileOpenError(fileError.name, fullPath).done(function () { // For performance, we do lazy checking of file existence, so it may be in working set DocumentManager.removeFromWorkingSet(new NativeFileSystem.FileEntry(fullPath)); EditorManager.focusEditor(); @@ -365,14 +365,14 @@ define(function (require, exports, module) { _handleNewItemInProject(true); } - function showSaveFileError(code, path) { + function showSaveFileError(name, path) { return Dialogs.showModalDialog( Dialogs.DIALOG_ID_ERROR, Strings.ERROR_SAVING_FILE_TITLE, StringUtils.format( Strings.ERROR_SAVING_FILE, StringUtils.htmlEscape(path), - FileUtils.getFileErrorString(code) + FileUtils.getFileErrorString(name) ) ); } @@ -382,7 +382,7 @@ define(function (require, exports, module) { var result = new $.Deferred(); function handleError(error, fileEntry) { - showSaveFileError(error.code, fileEntry.fullPath) + showSaveFileError(error.name, fileEntry.fullPath) .always(function () { result.reject(error); }); @@ -486,7 +486,7 @@ define(function (require, exports, module) { * Reverts the Document to the current contents of its file on disk. Discards any unsaved changes * in the Document. * @param {Document} doc - * @return {$.Promise} a Promise that's resolved when done, or rejected with a FileError if the + * @return {$.Promise} a Promise that's resolved when done, or rejected with a NativeFileError if the * file cannot be read (after showing an error dialog to the user). */ function doRevert(doc) { @@ -498,7 +498,7 @@ define(function (require, exports, module) { result.resolve(); }) .fail(function (error) { - FileUtils.showFileOpenError(error.code, doc.file.fullPath) + FileUtils.showFileOpenError(error.name, doc.file.fullPath) .always(function () { result.reject(error); }); diff --git a/src/document/DocumentManager.js b/src/document/DocumentManager.js index ecf022fff9f..cb56a2923b1 100644 --- a/src/document/DocumentManager.js +++ b/src/document/DocumentManager.js @@ -911,7 +911,7 @@ define(function (require, exports, module) { * * @param {!string} fullPath * @return {$.Promise} A promise object that will be resolved with the Document, or rejected - * with a FileError if the file is not yet open and can't be read from disk. + * with a NativeFileError if the file is not yet open and can't be read from disk. */ function getDocumentForPath(fullPath) { var doc = _openDocuments[fullPath], diff --git a/src/editor/EditorUtils.js b/src/editor/EditorUtils.js index 6189644a8c2..ba305baac6a 100644 --- a/src/editor/EditorUtils.js +++ b/src/editor/EditorUtils.js @@ -23,7 +23,7 @@ /*jslint vars: true, plusplus: true, devel: true, nomen: true, regexp: true, indent: 4, maxerr: 50 */ -/*global define, PathUtils, FileError, brackets */ +/*global define, PathUtils, brackets */ /** * Set of utilites for working with the code editor diff --git a/src/file/FileUtils.js b/src/file/FileUtils.js index c002c539304..7892c557003 100644 --- a/src/file/FileUtils.js +++ b/src/file/FileUtils.js @@ -34,6 +34,7 @@ define(function (require, exports, module) { require("utils/Global"); var NativeFileSystem = require("file/NativeFileSystem").NativeFileSystem, + NativeFileError = require("file/NativeFileError"), PerfUtils = require("utils/PerfUtils"), Dialogs = require("widgets/Dialogs"), Strings = require("strings"), @@ -44,7 +45,7 @@ define(function (require, exports, module) { /** * Asynchronously reads a file as UTF-8 encoded text. * @return {$.Promise} a jQuery promise that will be resolved with the - * file's text content plus its timestamp, or rejected with a FileError if + * file's text content plus its timestamp, or rejected with a NativeFileError if * the file can not be read. */ function readAsText(fileEntry) { @@ -88,7 +89,7 @@ define(function (require, exports, module) { * @param {!FileEntry} fileEntry * @param {!string} text * @return {$.Promise} a jQuery promise that will be resolved when - * file writing completes, or rejected with a FileError. + * file writing completes, or rejected with a NativeFileError. */ function writeText(fileEntry, text) { var result = new $.Deferred(); @@ -156,32 +157,32 @@ define(function (require, exports, module) { return text.replace(findAnyEol, eolStr); } - function getFileErrorString(code) { + function getFileErrorString(name) { // There are a few error codes that we have specific error messages for. The rest are // displayed with a generic "(error N)" message. var result; - if (code === FileError.NOT_FOUND_ERR) { + if (name === NativeFileError.NOT_FOUND_ERR) { result = Strings.NOT_FOUND_ERR; - } else if (code === FileError.NOT_READABLE_ERR) { + } else if (name === NativeFileError.NOT_READABLE_ERR) { result = Strings.NOT_READABLE_ERR; - } else if (code === FileError.NO_MODIFICATION_ALLOWED_ERR) { + } else if (name === NativeFileError.NO_MODIFICATION_ALLOWED_ERR) { result = Strings.NO_MODIFICATION_ALLOWED_ERR_FILE; } else { - result = StringUtils.format(Strings.GENERIC_ERROR, code); + result = StringUtils.format(Strings.GENERIC_ERROR, name); } return result; } - function showFileOpenError(code, path) { + function showFileOpenError(name, path) { return Dialogs.showModalDialog( Dialogs.DIALOG_ID_ERROR, Strings.ERROR_OPENING_FILE_TITLE, StringUtils.format( Strings.ERROR_OPENING_FILE, StringUtils.htmlEscape(path), - getFileErrorString(code) + getFileErrorString(name) ) ); } diff --git a/src/project/FileSyncManager.js b/src/project/FileSyncManager.js index 958d95af599..61553b850aa 100644 --- a/src/project/FileSyncManager.js +++ b/src/project/FileSyncManager.js @@ -23,7 +23,7 @@ /*jslint vars: true, plusplus: true, devel: true, nomen: true, indent: 4, maxerr: 50 */ -/*global define, $, brackets, FileError */ +/*global define, $, brackets */ /** * FileSyncManager is a set of utilities to help track external modifications to the files and folders @@ -49,7 +49,8 @@ define(function (require, exports, module) { Dialogs = require("widgets/Dialogs"), Strings = require("strings"), StringUtils = require("utils/StringUtils"), - FileUtils = require("file/FileUtils"); + FileUtils = require("file/FileUtils"), + NativeFileError = require("file/NativeFileError"); /** @@ -112,7 +113,7 @@ define(function (require, exports, module) { }, function (error) { // File has been deleted externally - if (error.code === FileError.NOT_FOUND_ERR) { + if (error.name === NativeFileError.NOT_FOUND_ERR) { if (doc.isDirty) { deleteConflicts.push(doc); } else { @@ -121,7 +122,7 @@ define(function (require, exports, module) { result.resolve(); } else { // Some other error fetching metadata: treat as a real error - console.log("Error checking modification status of " + doc.file.fullPath, error.code); + console.log("Error checking modification status of " + doc.file.fullPath, error.name); result.reject(); } } @@ -154,12 +155,12 @@ define(function (require, exports, module) { }, function (error) { // File has been deleted externally - if (error.code === FileError.NOT_FOUND_ERR) { + if (error.name === NativeFileError.NOT_FOUND_ERR) { DocumentManager.notifyFileDeleted(file); result.resolve(); } else { // Some other error fetching metadata: treat as a real error - console.log("Error checking for deletion of " + file.fullPath, error.code); + console.log("Error checking for deletion of " + file.fullPath, error.name); result.reject(); } } @@ -187,7 +188,7 @@ define(function (require, exports, module) { doc.refreshText(text, readTimestamp); }); promise.fail(function (error) { - console.log("Error reloading contents of " + doc.file.fullPath, error.code); + console.log("Error reloading contents of " + doc.file.fullPath, error.name); }); return promise; } @@ -215,7 +216,7 @@ define(function (require, exports, module) { StringUtils.format( Strings.ERROR_RELOADING_FILE, StringUtils.htmlEscape(doc.file.fullPath), - FileUtils.getFileErrorString(error.code) + FileUtils.getFileErrorString(error.name) ) ); } diff --git a/src/project/ProjectManager.js b/src/project/ProjectManager.js index 5ab381ff8ec..a1acef3d7b9 100644 --- a/src/project/ProjectManager.js +++ b/src/project/ProjectManager.js @@ -63,6 +63,7 @@ define(function (require, exports, module) { ViewUtils = require("utils/ViewUtils"), CollectionUtils = require("utils/CollectionUtils"), FileUtils = require("file/FileUtils"), + NativeFileError = require("file/NativeFileError"), Urls = require("i18n!nls/urls"), KeyEvent = require("utils/KeyEvent"); @@ -655,7 +656,7 @@ define(function (require, exports, module) { Strings.ERROR_LOADING_PROJECT, StringUtils.format(Strings.READ_DIRECTORY_ENTRIES_ERROR, StringUtils.htmlEscape(dirEntry.fullPath), - error.code) + error.name) ); } ); @@ -789,7 +790,7 @@ define(function (require, exports, module) { StringUtils.format( Strings.REQUEST_NATIVE_FILE_SYSTEM_ERROR, StringUtils.htmlEscape(rootPath), - error.code + error.name ) ).done(function () { // The project folder stored in preference doesn't exist, so load the default @@ -928,7 +929,7 @@ define(function (require, exports, module) { Dialogs.showModalDialog( Dialogs.DIALOG_ID_ERROR, Strings.ERROR_LOADING_PROJECT, - StringUtils.format(Strings.OPEN_DIALOG_ERROR, error.code) + StringUtils.format(Strings.OPEN_DIALOG_ERROR, error.name) ); result.reject(); } @@ -1079,8 +1080,8 @@ define(function (require, exports, module) { }; var errorCallback = function (error) { - if ((error.code === FileError.PATH_EXISTS_ERR) - || (error.code === FileError.TYPE_MISMATCH_ERR)) { + if ((error.name === NativeFileError.PATH_EXISTS_ERR) + || (error.name === NativeFileError.TYPE_MISMATCH_ERR)) { Dialogs.showModalDialog( Dialogs.DIALOG_ID_ERROR, Strings.INVALID_FILENAME_TITLE, @@ -1088,9 +1089,9 @@ define(function (require, exports, module) { StringUtils.htmlEscape(data.rslt.name)) ); } else { - var errString = error.code === FileError.NO_MODIFICATION_ALLOWED_ERR ? + var errString = error.name === NativeFileError.NO_MODIFICATION_ALLOWED_ERR ? Strings.NO_MODIFICATION_ALLOWED_ERR : - StringUtils.format(Strings.GENERIC_ERROR, error.code); + StringUtils.format(Strings.GENERIC_ERROR, error.name); var errMsg = StringUtils.format(Strings.ERROR_CREATING_FILE, StringUtils.htmlEscape(data.rslt.name), From b57b509b1eb977480703930edc09fe09c31ffe25 Mon Sep 17 00:00:00 2001 From: Chema Date: Mon, 10 Dec 2012 21:46:26 +0100 Subject: [PATCH 5/6] Rename _nativeToFileError to _fsErrorToDOMErrorName --- src/file/NativeFileSystem.js | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/file/NativeFileSystem.js b/src/file/NativeFileSystem.js index e5c12a92ae9..be052b004e8 100644 --- a/src/file/NativeFileSystem.js +++ b/src/file/NativeFileSystem.js @@ -83,7 +83,7 @@ define(function (require, exports, module) { if (!err) { successCallback(data); } else if (errorCallback) { - errorCallback(new NativeFileError(NativeFileSystem._nativeToFileError(err))); + errorCallback(new NativeFileError(NativeFileSystem._fsErrorToDOMErrorName(err))); } } ); @@ -100,7 +100,7 @@ define(function (require, exports, module) { if (!err) { successCallback(new NativeFileSystem.FileSystem(path)); } else if (errorCallback) { - errorCallback(new NativeFileError(NativeFileSystem._nativeToFileError(err))); + errorCallback(new NativeFileError(NativeFileSystem._fsErrorToDOMErrorName(err))); } }); }, @@ -110,10 +110,10 @@ define(function (require, exports, module) { * @param {!number} nativeErr A brackets.fs error code * @return {string} An error name out of the possible NativeFileError.* names */ - _nativeToFileError: function (nativeErr) { + _fsErrorToDOMErrorName: function (fsErr) { var error; - switch (nativeErr) { + switch (fsErr) { // We map ERR_UNKNOWN and ERR_INVALID_PARAMS to SECURITY_ERR, // since there aren't specific mappings for these. case brackets.fs.ERR_UNKNOWN: @@ -259,7 +259,7 @@ define(function (require, exports, module) { var metadata = new NativeFileSystem.Metadata(stat.mtime); successCallBack(metadata); } else { - errorCallback(new NativeFileError(NativeFileSystem._nativeToFileError(err))); + errorCallback(new NativeFileError(NativeFileSystem._fsErrorToDOMErrorName(err))); } }); }; @@ -339,7 +339,7 @@ define(function (require, exports, module) { brackets.fs.writeFile(fileEntry.fullPath, data, _FSEncodings.UTF8, function (err) { if ((err !== brackets.fs.NO_ERROR) && self.onerror) { - var fileError = new NativeFileError(NativeFileSystem._nativeToFileError(err)); + var fileError = new NativeFileError(NativeFileSystem._fsErrorToDOMErrorName(err)); // TODO (issue #241): set readonly FileSaver.error attribute // self._error = fileError; @@ -396,7 +396,7 @@ define(function (require, exports, module) { result.done(function () { if (fileWriter._err && (errorCallback !== undefined)) { - errorCallback(new NativeFileError(NativeFileSystem._nativeToFileError(fileWriter._err))); + errorCallback(new NativeFileError(NativeFileSystem._fsErrorToDOMErrorName(fileWriter._err))); } else if (successCallback !== undefined) { successCallback(fileWriter); } @@ -559,7 +559,7 @@ define(function (require, exports, module) { var createDirectoryError = function (err) { if (errorCallback) { - errorCallback(new NativeFileError(NativeFileSystem._nativeToFileError(err))); + errorCallback(new NativeFileError(NativeFileSystem._fsErrorToDOMErrorName(err))); } }; @@ -668,7 +668,7 @@ define(function (require, exports, module) { var createFileError = function (err) { if (errorCallback) { - errorCallback(new NativeFileError(NativeFileSystem._nativeToFileError(err))); + errorCallback(new NativeFileError(NativeFileSystem._fsErrorToDOMErrorName(err))); } }; @@ -763,7 +763,7 @@ define(function (require, exports, module) { } deferred.resolve(); } else { - lastError = new NativeFileError(NativeFileSystem._nativeToFileError(statErr)); + lastError = new NativeFileError(NativeFileSystem._fsErrorToDOMErrorName(statErr)); deferred.reject(lastError); } }); @@ -804,7 +804,7 @@ define(function (require, exports, module) { ); } else { // There was an error reading the initial directory. - errorCallback(new NativeFileError(NativeFileSystem._nativeToFileError(err))); + errorCallback(new NativeFileError(NativeFileSystem._fsErrorToDOMErrorName(err))); } }); }; @@ -894,7 +894,7 @@ define(function (require, exports, module) { // The target for this event is the FileReader and the data/err result is stored in the FileReader fakeEvent.target = self; self.result = data; - self.error = new NativeFileError(NativeFileSystem._nativeToFileError(err)); + self.error = new NativeFileError(NativeFileSystem._fsErrorToDOMErrorName(err)); if (err) { self.readyState = self.DONE; From 1cd358c05369290594c35c2ace71b3f6327862d8 Mon Sep 17 00:00:00 2001 From: Chema Date: Tue, 11 Dec 2012 01:43:58 +0100 Subject: [PATCH 6/6] Small jsdoc fix in _fsErrorToDOMErrorName --- src/file/NativeFileSystem.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/file/NativeFileSystem.js b/src/file/NativeFileSystem.js index be052b004e8..fdd29a88638 100644 --- a/src/file/NativeFileSystem.js +++ b/src/file/NativeFileSystem.js @@ -107,7 +107,7 @@ define(function (require, exports, module) { /** * Converts a brackets.fs.ERR_* error code to a NativeFileError.* error name - * @param {!number} nativeErr A brackets.fs error code + * @param {!number} fsErr A brackets.fs error code * @return {string} An error name out of the possible NativeFileError.* names */ _fsErrorToDOMErrorName: function (fsErr) {