Update: Python Online板卡下支持挂载本地文件夹到pyodide

This commit is contained in:
王立帮
2024-11-26 23:09:41 +08:00
parent 5411a188f7
commit b984af1998
18 changed files with 660 additions and 84 deletions

View File

@@ -9,8 +9,8 @@ const { FileTree, Web } = Mixly;
const { FS } = Web;
class FileTreeExt extends FileTree {
constructor(element, mprogress) {
super(element, mprogress, FS);
constructor() {
super(FS);
}
async readFolder(inPath) {

View File

@@ -20,20 +20,13 @@ FS.showOpenFilePicker = async () => {
}
FS.showDirectoryPicker = async () => {
return new Promise((resolve, reject) => {
window.showDirectoryPicker({
mode: 'readwrite'
})
.then((filesystem) => {
return FS.pool.exec('addFileSystemHandler', [filesystem]);
})
.then((folderPath) => {
resolve(folderPath);
})
.catch((error) => {
reject(error);
});
});
const directoryHandle = await window.showDirectoryPicker({ mode: 'readwrite' });
const permissionStatus = await directoryHandle.requestPermission({ mode: 'readwrite' });
if (permissionStatus !== 'granted') {
throw new Error('readwrite access to directory not granted');
}
await FS.pool.exec('addFileSystemHandler', [directoryHandle]);
return directoryHandle;
}
FS.showSaveFilePicker = async () => {
@@ -75,6 +68,43 @@ FS.isFile = (path) => {
});
}
FS.renameFile = (oldFilePath, newFilePath) => {
return new Promise(async (resolve, reject) => {
const [error] = await FS.pool.exec('rename', [oldFilePath, newFilePath]);
if (error) {
reject(error);
} else {
resolve();
}
});
}
FS.moveFile = (oldFilePath, newFilePath) => {
return FS.renameFile(oldFilePath, newFilePath);
}
FS.deleteFile = (filePath) => {
return new Promise(async (resolve, reject) => {
const [error] = await FS.pool.exec('unlink', [filePath]);
if (error) {
reject(error);
} else {
resolve();
}
});
}
FS.createDirectory = (folderPath) => {
return new Promise(async (resolve, reject) => {
const [error] = await FS.pool.exec('mkdir', [folderPath, 0o777]);
if (error) {
reject(error);
} else {
resolve();
}
});
}
FS.readDirectory = (path) => {
return new Promise(async (resolve, reject) => {
const [error, entries] = await FS.pool.exec('readdir', [path]);