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

@@ -56,6 +56,7 @@ class FileTree extends Component {
#mprogress_ = null;
#rootFolderOpened_ = false;
#rootPath_ = '';
#rootName_ = '';
#fs_ = null;
#contextMenu_ = null;
#selected_ = null;
@@ -483,9 +484,14 @@ class FileTree extends Component {
}
setRootFolderName(name) {
this.#rootName_ = name;
this.#$name_.text(name);
}
getRootFolderName() {
return this.#rootName_;
}
refreshFolder(folderPath) {
// 延迟刷新节点防止过于频繁的IO操作
let eventId = this.delayRefreshRegistry.getItem(folderPath);

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]);

View File

@@ -22,7 +22,7 @@ const addFileSystemHandler = function(filesystem) {
return;
}
fs = BrowserFS.fs;
resolve('/' + filesystem.name);
resolve();
});
});
}