Skip to content

Commit

Permalink
yes
Browse files Browse the repository at this point in the history
  • Loading branch information
nova committed Nov 1, 2024
1 parent 69ce024 commit b657aeb
Show file tree
Hide file tree
Showing 4 changed files with 982 additions and 1,036 deletions.
321 changes: 163 additions & 158 deletions assets/code/fs.js
Original file line number Diff line number Diff line change
@@ -1,158 +1,163 @@
var wfs = new Worker('./assets/code/wfs.js');

wfs.onmessage = function (event) {
const { type, data, requestId } = event.data;
if (pendingRequests[requestId]) {
if (type === 'result') {
pendingRequests[requestId].resolve(data);
} else if (type === 'error') {
pendingRequests[requestId].reject(data);
}
delete pendingRequests[requestId];
} else if (type === 'db_ready') {
boot();
} else if (type === "reboot") {
window.location.reload();
} else {
console.warn('Unknown message type or requestId from wfs:', type);
}
};

const pendingRequests = {};
let requestIdCounter = 0;
/**
* A file system utility object for performing read, write, delete, erase, list, and make directory operations
* on either OPFS (Origin Private File System) or IDBFS (IndexedDB File System).
* @namespace
*/
var fs = {
send: function (message, transferList) {
wfs.postMessage(message, transferList);
},
sendopfs: function (message, transferList) {
wfs.postMessage(message, transferList);
},
askwfs: function (operation, params, opt) {
const requestId = requestIdCounter++;
return new Promise((resolve, reject) => {
pendingRequests[requestId] = { resolve, reject };
if (operation === 'write' && opt instanceof ArrayBuffer) {
fs.send({ type: 'fs', operation, params, opt, requestId }, [p2]);
} else {
fs.send({ type: 'fs', operation, params, opt, requestId });
}
});
},
askwfsOPFS: function (operation, params, opt) {
const requestId = requestIdCounter++;
return new Promise((resolve, reject) => {
pendingRequests[requestId] = { resolve, reject };
if (operation === 'write' && opt instanceof ArrayBuffer) {
fs.sendopfs({ type: 'opfs', operation, params, opt, requestId }, [p2]);
} else {
fs.sendopfs({ type: 'opfs', operation, params, opt, requestId });
}
});
},
/**
* Reads a file from the specified path in the chosen filesystem.
* @param {string} path - The path of the file to read.
* @param {string} [filesystem="opfs"] - The filesystem to use ("opfs" or "idbfs").
* @returns {Promise<any>} A promise that resolves with the file's content.
*/
read: function (path, filesystem = "opfs") {
if(filesystem == "opfs") {
return this.askwfsOPFS('read', path);
}
else if(filesystem == "idbfs") {
return this.askwfs('read', path);
}
},
/**
* Writes data to a file at the specified path in the chosen filesystem.
* @param {string} path - The path of the file to write.
* @param {any} data - The data to write to the file.
* @param {string} [filesystem="opfs"] - The filesystem to use ("opfs" or "idbfs").
* @returns {Promise<any>} A promise that resolves when the write operation is complete.
*/
write: function (path, data, filesystem = "opfs") {
if(filesystem == "opfs") {
return this.askwfsOPFS('write', path, data);
}
else if(filesystem == "idbfs") {
return this.askwfs('write', path, data);
}
},
/**
* Deletes a file at the specified path in the chosen filesystem.
* @param {string} path - The path of the file to delete.
* @param {string} [filesystem="opfs"] - The filesystem to use ("opfs" or "idbfs").
* @returns {Promise<any>} A promise that resolves when the delete operation is complete.
*/
del: function (path, filesystem = "opfs") {
if(filesystem == "opfs") {
return this.askwfsOPFS('delete', path);
}
else if(filesystem == "idbfs") {
return this.askwfs('delete', path);
}
},
/**
* Erases the entire filesystem.
* @param {string} [filesystem="idbfs"] - The filesystem to erase ("opfs" or "idbfs").
* @returns {Promise<any>} A promise that resolves when the erase operation is complete.
*/
erase: function (filesystem = "idbfs") {
if(filesystem == "opfs") {
return this.askwfsOPFS('erase', path);
} else if(filesystem == "idbfs") {
return this.askwfs('erase', path);
}
},
/**
* Lists the contents of a directory at the specified path in the chosen filesystem.
* @param {string} path - The path of the directory to list.
* @param {string} [filesystem="opfs"] - The filesystem to use ("opfs" or "idbfs").
* @returns {Promise<any>} A promise that resolves with the contents of the directory.
*/
ls: function (path, filesystem = "opfs") {
if(filesystem == "opfs") {
return this.askwfsOPFS('ls', path);
} else if(filesystem == "idbfs") {
return this.askwfs('ls', path);
}
},
/**
* Creates a directory at the specified path in the chosen filesystem.
* @param {string} path - The path of the directory to create.
* @param {string} [filesystem="opfs"] - The filesystem to use ("opfs" or "idbfs").
* @returns {Promise<any>} A promise that resolves when the directory is created.
*/
mkdir: function (path, filesystem = "opfs") {
if(filesystem == "opfs") {
return this.askwfsOPFS('mkdir', path);
} else if(filesystem == "idbfs") {
fs.write("/user/Documents/.", '', "idbfs");
}
}
};
window.servicesStarted = []
setTimeout(function () {
fs.ls("/user/info/name").then(async (namefile) => {
// get count of items in app json object
var apps = 0
for (var key in app) {if (app[key].hasOwnProperty("onstartup")) {apps++}}
console.log(apps)
// document.querySelector("#currentComponent").max = apps;
var counter = 0;
for (var key in app) {
if (app[key].hasOwnProperty("onstartup")) {
wm.notifSys("Services", `Loading ${app[key].name || key}`, 5000);
var appResponse = await app[key].onstartup(); // this is where each compontent is called
wm.notifSys("Services", `${app[key].name || key} says:<br>"${appResponse}"`, 5000);
window.servicesStarted.push(key);
counter++;
}
}
});
}, 1000)
var wfs = new Worker("./assets/code/wfs.js");

wfs.onmessage = function (event) {
const { type, data, requestId } = event.data;
if (pendingRequests[requestId]) {
if (type === "result") {
pendingRequests[requestId].resolve(data);
} else if (type === "error") {
pendingRequests[requestId].reject(data);
}
delete pendingRequests[requestId];
} else if (type === "db_ready") {
boot();
} else if (type === "reboot") {
window.location.reload();
} else {
console.warn("Unknown message type or requestId from wfs:", type);
}
};

const pendingRequests = {};
let requestIdCounter = 0;
/**
* A file system utility object for performing read, write, delete, erase, list, and make directory operations
* on either OPFS (Origin Private File System) or IDBFS (IndexedDB File System).
* @namespace
*/
var fs = {
send: function (message, transferList) {
wfs.postMessage(message, transferList);
},
sendopfs: function (message, transferList) {
wfs.postMessage(message, transferList);
},
askwfs: function (operation, params, opt) {
const requestId = requestIdCounter++;
return new Promise((resolve, reject) => {
pendingRequests[requestId] = { resolve, reject };
if (operation === "write" && opt instanceof ArrayBuffer) {
fs.send({ type: "fs", operation, params, opt, requestId }, [p2]);
} else {
fs.send({ type: "fs", operation, params, opt, requestId });
}
});
},
askwfsOPFS: function (operation, params, opt) {
const requestId = requestIdCounter++;
return new Promise((resolve, reject) => {
pendingRequests[requestId] = { resolve, reject };
if (operation === "write" && opt instanceof ArrayBuffer) {
fs.sendopfs({ type: "opfs", operation, params, opt, requestId }, [p2]);
} else {
fs.sendopfs({ type: "opfs", operation, params, opt, requestId });
}
});
},
/**
* Reads a file from the specified path in the chosen filesystem.
* @param {string} path - The path of the file to read.
* @param {string} [filesystem="opfs"] - The filesystem to use ("opfs" or "idbfs").
* @returns {Promise<any>} A promise that resolves with the file's content.
*/
read: function (path, filesystem = "opfs") {
if (filesystem == "opfs") {
return this.askwfsOPFS("read", path);
} else if (filesystem == "idbfs") {
return this.askwfs("read", path);
}
},
/**
* Writes data to a file at the specified path in the chosen filesystem.
* @param {string} path - The path of the file to write.
* @param {any} data - The data to write to the file.
* @param {string} [filesystem="opfs"] - The filesystem to use ("opfs" or "idbfs").
* @returns {Promise<any>} A promise that resolves when the write operation is complete.
*/
write: function (path, data, filesystem = "opfs") {
if (filesystem == "opfs") {
return this.askwfsOPFS("write", path, data);
} else if (filesystem == "idbfs") {
return this.askwfs("write", path, data);
}
},
/**
* Deletes a file at the specified path in the chosen filesystem.
* @param {string} path - The path of the file to delete.
* @param {string} [filesystem="opfs"] - The filesystem to use ("opfs" or "idbfs").
* @returns {Promise<any>} A promise that resolves when the delete operation is complete.
*/
del: function (path, filesystem = "opfs") {
if (filesystem == "opfs") {
return this.askwfsOPFS("delete", path);
} else if (filesystem == "idbfs") {
return this.askwfs("delete", path);
}
},
/**
* Erases the entire filesystem.
* @param {string} [filesystem="idbfs"] - The filesystem to erase ("opfs" or "idbfs").
* @returns {Promise<any>} A promise that resolves when the erase operation is complete.
*/
erase: function (filesystem = "opfs") {
if (filesystem == "opfs") {
return this.askwfsOPFS("erase");
} else if (filesystem == "idbfs") {
return this.askwfs("erase");
}
},
/**
* Lists the contents of a directory at the specified path in the chosen filesystem.
* @param {string} path - The path of the directory to list.
* @param {string} [filesystem="opfs"] - The filesystem to use ("opfs" or "idbfs").
* @returns {Promise<any>} A promise that resolves with the contents of the directory.
*/
ls: function (path, filesystem = "opfs") {
if (filesystem == "opfs") {
return this.askwfsOPFS("ls", path);
} else if (filesystem == "idbfs") {
return this.askwfs("ls", path);
}
},
/**
* Creates a directory at the specified path in the chosen filesystem.
* @param {string} path - The path of the directory to create.
* @param {string} [filesystem="opfs"] - The filesystem to use ("opfs" or "idbfs").
* @returns {Promise<any>} A promise that resolves when the directory is created.
*/
mkdir: function (path, filesystem = "opfs") {
if (filesystem == "opfs") {
return this.askwfsOPFS("mkdir", path);
} else if (filesystem == "idbfs") {
fs.write("/user/Documents/.", "", "idbfs");
}
},
};
window.servicesStarted = [];
setTimeout(function () {
fs.ls("/user/info/name").then(async (namefile) => {
// get count of items in app json object
var apps = 0;
for (var key in app) {
if (app[key].hasOwnProperty("onstartup")) {
apps++;
}
}
console.log(apps);
// document.querySelector("#currentComponent").max = apps;
var counter = 0;
for (var key in app) {
if (app[key].hasOwnProperty("onstartup")) {
wm.notifSys("Services", `Loading ${app[key].name || key}`, 5000);
var appResponse = await app[key].onstartup(); // this is where each compontent is called
wm.notifSys(
"Services",
`${app[key].name || key} says:<br>"${appResponse}"`,
5000,
);
window.servicesStarted.push(key);
counter++;
}
}
});
}, 1000);
Loading

0 comments on commit b657aeb

Please sign in to comment.