1
1
Fork 0
mirror of https://github.com/boxgaming/qbjs.git synced 2024-09-19 20:14:58 +00:00
qbjs/lib/io/fs.bas

109 lines
3.3 KiB
QBasic
Raw Normal View History

2023-04-18 19:33:06 +00:00
Const ALL = 0
Const FILE = 1
Const DIRECTORY = 2
Export ALL, FILE, DIRECTORY
Export ListDirectory, DownloadFile, UploadFile
Function ListDirectory(dirpath As String, listMode As Integer)
If dirpath = undefined Then dirpath = ""
If listMode = undefined Then listMode = ALL
Dim children As Object
$If Javascript Then
var vfs = QB.vfs();
var pnode = null;
if (dirpath == "") {
pnode = QB.vfsCwd();
}
else {
pnode = vfs.getNode(dirpath, QB.vfsCwd());
}
if (!pnode) {
throw Object.assign(new Error("Path not found: [" + dirpath + "]"), { _stackDepth: 1 });
}
var mode = null;
if (listMode == DIRECTORY) {
mode = vfs.DIRECTORY;
}
else if (listMode == FILE) {
mode = vfs.FILE;
}
children = vfs.getChildren(pnode, mode);
$End If
Dim type, i As Integer
Dim results(children.length) As Object
For i = 0 To children.length - 1
results(i+1).name = children[i].name
$If Javascript Then
if (children[i].type == vfs.FILE) {
type = FILE;
}
else {
type = DIRECTORY;
}
$End If
results(i+1).type = type
Next i
ListDirectory = results
End Function
Sub DownloadFile(filepath As String)
$If Javascript Then
var vfs = QB.vfs();
var file = vfs.getNode(filepath, QB.vfsCwd());
if (!file || file.type != vfs.FILE) {
throw Object.assign(new Error("File not found: [" + filepath + "]"), { _stackDepth: 1 });
}
await QB.downloadFile(new Blob([file.data]), file.name);
$End If
End Sub
Sub UploadFile(destpath As String, filter As String, fnCallback)
$If Javascript Then
var vfs = QB.vfs();
var parentDir = null;
if (destpath == undefined || destpath == "") {
parentDir = QB.vfsCwd();
}
else {
parentDir = vfs.getNode(destpath, QB.vfsCwd());
if (!parentDir) {
throw Object.assign(new Error("Path not found: [" + destpath + "]"), { _stackDepth: 1 });
}
else if (parentDir && parentDir.type != vfs.DIRECTORY) {
throw Object.assign(new Error("Path is not a directory: [" + destpath + "]"), { _stackDepth: 1 });
}
}
var fileInput = document.getElementById("upload-file-input");
if (fileInput == null) {
fileInput = document.createElement("input");
fileInput.id = "upload-file-input";
fileInput.type = "file";
}
fileInput.value = null;
if (filter != undefined) {
fileInput.accept = filter;
}
fileInput.onchange = function(event) {
if (event.target.files.length > 0) {
var f = event.target.files[0];
var fr = new FileReader();
fr.onload = function() {
var file = vfs.createFile(f.name, parentDir);
vfs.writeData(file, fr.result);
if (fnCallback) {
fnCallback(vfs.fullPath(file));
}
}
fr.readAsArrayBuffer(f);
}
};
fileInput.click();
$End If
End Sub