Update: Python Online板卡下支持挂载本地文件夹到pyodide
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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]);
|
||||
|
||||
@@ -22,7 +22,7 @@ const addFileSystemHandler = function(filesystem) {
|
||||
return;
|
||||
}
|
||||
fs = BrowserFS.fs;
|
||||
resolve('/' + filesystem.name);
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user