mirror of
https://github.com/boxgaming/qbjs.git
synced 2024-09-20 04:24:45 +00:00
112 lines
3.5 KiB
QBasic
112 lines
3.5 KiB
QBasic
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 == "/") {
|
|
parentDir = QB.vfs().rootDirectory();
|
|
destpath = "";
|
|
}
|
|
else 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
|