mkdir implementation.
This commit is contained in:
parent
46821604fb
commit
920bf44cae
|
@ -17,6 +17,7 @@ require(["../../javascript-debug/debug", "src/filesystem"], function(debug, File
|
||||||
debug.log("filesystem state: ", fs.state);
|
debug.log("filesystem state: ", fs.state);
|
||||||
fs.then(function(fs) {
|
fs.then(function(fs) {
|
||||||
debug.log("filesystem state: ", fs.state);
|
debug.log("filesystem state: ", fs.state);
|
||||||
|
fs.mkdir("/tmp");
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -47,65 +47,26 @@ define(function(require) {
|
||||||
FileError.TYPE_MISMATCH_ERR = 11;
|
FileError.TYPE_MISMATCH_ERR = 11;
|
||||||
FileError.PATH_EXISTS_ERR = 12;
|
FileError.PATH_EXISTS_ERR = 12;
|
||||||
|
|
||||||
function Entry() {}
|
function DirectoryError(code) {
|
||||||
Entry.prototype.move = function move(parent, newName, successCallback, errorCallback) {
|
this.code = code;
|
||||||
};
|
// FIXME: add a message field with the text error
|
||||||
Entry.prototype.copy = function copy(parent, newName, successCallback, errorCallback) {
|
|
||||||
};
|
|
||||||
Entry.prototype.remove = function remove(successCallback, errorCallback) {
|
|
||||||
};
|
|
||||||
Entry.prototype.getParent = function getParent(successCallback, errorCallback) {
|
|
||||||
};
|
|
||||||
Entry.prototype.getMetadata = function getMetadata(successCallback, errorCallback) {
|
|
||||||
};
|
|
||||||
/*Entry.prototype.toUrl = function toUrl(mimeType) {
|
|
||||||
};*/
|
|
||||||
|
|
||||||
function DirectoryEntry(fs, path, name, parent) {
|
|
||||||
this.isFile = false;
|
|
||||||
this.isDirectory = true;
|
|
||||||
this.name = name;
|
|
||||||
this.path = path; // FIXME: account for the parent path
|
|
||||||
this.filesystem = fs;
|
|
||||||
this.parent = parent;
|
|
||||||
}
|
|
||||||
DirectoryEntry.prototype = new Entry();
|
|
||||||
DirectoryEntry.prototype.createReader = function createReader() {
|
|
||||||
};
|
|
||||||
DirectoryEntry.prototype.removeRecursively = function removeRecursively(successCallback, errorCallback) {
|
|
||||||
};
|
|
||||||
DirectoryEntry.prototype.getFile = function getFile(path, options, successCallback, errorCallback) {
|
|
||||||
};
|
|
||||||
DirectoryEntry.prototype.getDirectory = function getDirectory(path, options, successCallback, errorCallback) {
|
|
||||||
};
|
|
||||||
|
|
||||||
function FileEntry(fs, path, name, parent) {
|
|
||||||
this.isFile = true;
|
|
||||||
this.isDirectory = false;
|
|
||||||
this.name = name;
|
|
||||||
this.path = path; // FIXME: account for the parent path
|
|
||||||
this.filesystem = fs;
|
|
||||||
this.parent = parent;
|
|
||||||
}
|
|
||||||
FileEntry.prototype = new Entry();
|
|
||||||
FileEntry.prototype.createWriter = function createWriter(successCallback, errorCallback) {
|
|
||||||
};
|
|
||||||
FileEntry.prototype.file = function file(successCallback, errorCallback) {
|
|
||||||
};
|
};
|
||||||
|
DirectoryError.PATH_EXISTS_ERR = 1;
|
||||||
|
DirectoryError.MISSING_PATH_COMPONENT_ERR = 2;
|
||||||
|
|
||||||
var RO = "readonly",
|
var RO = "readonly",
|
||||||
RW = "readwrite";
|
RW = "readwrite";
|
||||||
|
|
||||||
function FileSystem(name, optFormat) {
|
function FileSystem(name, optFormat) {
|
||||||
var fs = this;
|
var fs = this;
|
||||||
var FILES = "files";
|
fs.OBJECT_STORE_NAME = "files";
|
||||||
fs.name = name || "default";
|
fs.name = name || "default";
|
||||||
fs.pending = {};
|
fs.pending = {};
|
||||||
|
|
||||||
fs.state = FileSystem.UNINITIALIZED;
|
fs.state = FileSystem.UNINITIALIZED;
|
||||||
var deferred;
|
var deferred;
|
||||||
fs.then;
|
fs.then;
|
||||||
fs.root;
|
fs.db;
|
||||||
|
|
||||||
function updateState() {
|
function updateState() {
|
||||||
if(FileSystem.READY === fs.state && Object.keys(fs.pending).length > 0) {
|
if(FileSystem.READY === fs.state && Object.keys(fs.pending).length > 0) {
|
||||||
|
@ -145,7 +106,6 @@ define(function(require) {
|
||||||
return request;
|
return request;
|
||||||
}
|
}
|
||||||
|
|
||||||
var db;
|
|
||||||
var format = undefined !== optFormat ? optFormat : false;
|
var format = undefined !== optFormat ? optFormat : false;
|
||||||
var deferred = when.defer();
|
var deferred = when.defer();
|
||||||
fs.then = deferred.promise.then;
|
fs.then = deferred.promise.then;
|
||||||
|
@ -155,11 +115,12 @@ define(function(require) {
|
||||||
fs.state = FileSystem.PENDING;
|
fs.state = FileSystem.PENDING;
|
||||||
|
|
||||||
openRequest.onsuccess = function(e) {
|
openRequest.onsuccess = function(e) {
|
||||||
db = e.target.result;
|
fs.db = e.target.result;
|
||||||
|
var db = fs.db;
|
||||||
|
var transaction = db.transaction([fs.OBJECT_STORE_NAME], RW);
|
||||||
|
var store = transaction.objectStore(fs.OBJECT_STORE_NAME);
|
||||||
if(format) {
|
if(format) {
|
||||||
debug.info("format required");
|
debug.info("format required");
|
||||||
var transaction = db.transaction([FILES], RW);
|
|
||||||
var store = transaction.objectStore(FILES);
|
|
||||||
var formatRequest = queuePending(store.put({}, "/"));
|
var formatRequest = queuePending(store.put({}, "/"));
|
||||||
formatRequest.onsuccess = function(e) {
|
formatRequest.onsuccess = function(e) {
|
||||||
debug.info("format complete");
|
debug.info("format complete");
|
||||||
|
@ -175,8 +136,8 @@ define(function(require) {
|
||||||
db.deleteObjectStore("files");
|
db.deleteObjectStore("files");
|
||||||
}
|
}
|
||||||
var store = db.createObjectStore("files");
|
var store = db.createObjectStore("files");
|
||||||
store.createIndex("parent", "parent");
|
store.createIndex("parent", "parent", {unique: false});
|
||||||
store.createIndex("name", "name");
|
store.createIndex("name", "name", {unique: true});
|
||||||
|
|
||||||
format = true;
|
format = true;
|
||||||
};
|
};
|
||||||
|
@ -184,6 +145,35 @@ define(function(require) {
|
||||||
openRequest.onerror = function(e) {
|
openRequest.onerror = function(e) {
|
||||||
clearPending(openRequest);
|
clearPending(openRequest);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// API
|
||||||
|
|
||||||
|
this.mkdir = function mkdir(path) {
|
||||||
|
debug.info("mkdir");
|
||||||
|
var db = fs.db;
|
||||||
|
var d = when.defer();
|
||||||
|
var transaction = db.transaction([this.OBJECT_STORE_NAME], RW);
|
||||||
|
var store = transaction.objectStore(fs.OBJECT_STORE_NAME);
|
||||||
|
var nameIndex = store.index("name");
|
||||||
|
|
||||||
|
var getRequest = queuePending(nameIndex.get(path));
|
||||||
|
getRequest.onsuccess = function(e) {
|
||||||
|
clearPending(getRequest);
|
||||||
|
var result = e.target.result;
|
||||||
|
if(result) {
|
||||||
|
debug.info("mkdir PATH_EXISTS_ERR");
|
||||||
|
d.reject(new DirectoryError(DirectoryError.PATH_EXISTS_ERR));
|
||||||
|
} else {
|
||||||
|
var directoryRequest = queuePending(store.put({}, path));
|
||||||
|
directoryRequest.onsuccess = function(e) {
|
||||||
|
debug.info("mkdir complete");
|
||||||
|
clearPending(directoryRequest);
|
||||||
|
d.resolve();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return d.promise;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
FileSystem.READY = 0;
|
FileSystem.READY = 0;
|
||||||
FileSystem.PENDING = 1;
|
FileSystem.PENDING = 1;
|
||||||
|
|
Loading…
Reference in New Issue