diff --git a/src/index.tsx b/src/index.tsx index 166f7f4..0af1d28 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -61,7 +61,7 @@ window.addEventListener('load', async () => { registerCustomAppHeightCSSProperty(); - const fs = await createEditorFS({prefix: '/', allowPersistence: isInStandaloneMode}); + const fs = await createEditorFS({prefix: '/libraries/', allowPersistence: isInStandaloneMode}); await registerOpenSCADLanguage(fs, '/', zipArchives); diff --git a/src/runner/openscad-worker.ts b/src/runner/openscad-worker.ts index cdaae72..aba0d6d 100644 --- a/src/runner/openscad-worker.ts +++ b/src/runner/openscad-worker.ts @@ -93,6 +93,11 @@ addEventListener('message', async (e) => { if (inputs) { for (const source of inputs) { try { + if (source.path.startsWith('/libraries/')) { + console.log(`Skipping ${source.path}`); + continue; + } + console.log(`Writing ${source.path}`); instance.FS.writeFile(source.path, await fetchSource(source)); } catch (e) { console.trace(e); diff --git a/src/state/model.ts b/src/state/model.ts index 7ea8ce5..85dbaeb 100644 --- a/src/state/model.ts +++ b/src/state/model.ts @@ -118,17 +118,24 @@ export class Model { } openFile(path: string) { - // alert(`TODO: open ${path}`); + // console.log(`openFile: ${path}`); if (this.mutate(s => { if (s.params.activePath != path) { - s.params.activePath = path; - if (!s.params.sources.find(src => src.path === path)) { - let content = ''; + const readSource = (path: string) => { try { - content = new TextDecoder("utf-8").decode(this.fs.readFileSync(path)); + return new TextDecoder("utf-8").decode(this.fs.readFileSync(path)); } catch (e) { console.error('Error while reading file:', e); + return ''; } + }; + // Remove source of previous active path if it's unmodified + const activePathContent = readSource(s.params.activePath); + s.params.sources = s.params.sources.filter(src => src.path !== s.params.activePath || src.content != activePathContent); + + s.params.activePath = path; + if (!s.params.sources.find(src => src.path === path)) { + const content = readSource(path); s.params.sources = [...s.params.sources, {path, content}]; } s.lastCheckerRun = undefined; @@ -307,6 +314,7 @@ export class Model { } async render({isPreview, mountArchives, now, retryInOtherDim}: {isPreview: boolean, mountArchives?: boolean, now: boolean, retryInOtherDim?: boolean}) { + // console.log(JSON.stringify(this.state, null, 2)); mountArchives ??= true; retryInOtherDim ??= true; const setRendering = (s: State, value: boolean) => {