Fix: 修复Python Online板卡下对本地目录操作对象的缓存没有在退出后清除

This commit is contained in:
王立帮
2024-11-27 22:26:45 +08:00
parent b6c400790d
commit 42d62f5632
3 changed files with 22 additions and 9 deletions

View File

@@ -33,13 +33,13 @@ export default class FileSystemFS extends FS {
if (permissionStatus !== 'granted') {
throw new Error('readwrite access to directory not granted');
}
await set('mixly-pyodide-fs', directoryHandle);
await this.setFSCache(directoryHandle);
this.#fs_ = new WebAccessFSExt(directoryHandle);
return directoryHandle;
}
async loadFS() {
let directoryHandle = await get('mixly-pyodide-fs');
let directoryHandle = await this.getFSCache();
if (!directoryHandle) {
return null;
}
@@ -51,6 +51,14 @@ export default class FileSystemFS extends FS {
return directoryHandle;
}
async getFSCache() {
return get('mixly-pyodide-fs');
}
async setFSCache(data) {
await set('mixly-pyodide-fs', data);
}
async createFile(filePath) {
return this.#fs_.createFile(filePath, '');
}

View File

@@ -428,13 +428,18 @@ export default class StatusBarFileSystem extends PageBase {
}
closeFS() {
const rootPath = '/' + this.#fileTree_.getRootFolderTitle();
const lookup = window.pyodide.FS.lookupPath(rootPath, {
follow_mount: false
});
if (window.pyodide.FS.isMountpoint(lookup.node)) {
window.pyodide.FS.unmount(rootPath);
const rootPath = this.#fileTree_.getRootFolderTitle();
const rootContents = Object.keys(window.pyodide.FS.root.contents);
if (rootContents.includes(path.basename(rootPath))) {
const lookup = window.pyodide.FS.lookupPath(rootPath, {
follow_mount: false
});
if (window.pyodide.FS.isMountpoint(lookup.node)) {
window.pyodide.FS.unmount(rootPath);
}
}
const fs = this.#fileTree_.getFS();
fs.setFSCache(null);
this.#fileTree_.deselectAll();
this.hideFileTree();
this.hideEditor();