From f9f35183af4339e6d1c5534397e10b46b9d5d83b Mon Sep 17 00:00:00 2001 From: Kurt Hutten Date: Sun, 21 Mar 2021 14:48:54 +1100 Subject: [PATCH 1/3] Send console message with healthy render --- api/src/docker/aws-emulator.js | 15 ++------------- api/src/docker/openscad/openscad.js | 10 +++++----- api/src/docker/openscad/runScad.js | 4 ++-- web/src/components/IdeConsole/IdeConsole.js | 6 +++--- web/src/components/IdeViewer/IdeViewer.js | 3 +-- web/src/helpers/cadPackages/openScadController.js | 15 ++++++++++----- 6 files changed, 23 insertions(+), 30 deletions(-) diff --git a/api/src/docker/aws-emulator.js b/api/src/docker/aws-emulator.js index de0fec3..4c722e2 100644 --- a/api/src/docker/aws-emulator.js +++ b/api/src/docker/aws-emulator.js @@ -14,19 +14,8 @@ app.post('/render', async (req, res) => { const { data } = await axios.post(invocationURL(5052), { body: Buffer.from(JSON.stringify(req.body)).toString('base64'), }) - if (data.statusCode !== 200) { - res.status(data.statusCode) - res.send(res.body) - } else { - const fileContents = Buffer.from(data.body, 'base64') - - const readStream = new stream.PassThrough() - readStream.end(fileContents) - - res.set('Content-disposition', 'attachment; filename=' + 'output') - res.set('Content-Type', 'image/png') - readStream.pipe(res) - } + res.status(data.statusCode) + res.send(data.body) }) app.listen(port, () => { diff --git a/api/src/docker/openscad/openscad.js b/api/src/docker/openscad/openscad.js index bde2d5d..1edb2ef 100644 --- a/api/src/docker/openscad/openscad.js +++ b/api/src/docker/openscad/openscad.js @@ -45,11 +45,11 @@ const render = async (req, _context, callback) => { console.log(image, 'encoded image') const response = { statusCode: 200, - headers: { - 'content-type': 'image/png', - }, - body: image, - isBase64Encoded: true, + body: JSON.stringify({ + imageBase64: image, + result, + tempFile, + }), } callback(null, response) } diff --git a/api/src/docker/openscad/runScad.js b/api/src/docker/openscad/runScad.js index a7e8929..c23e0b6 100644 --- a/api/src/docker/openscad/runScad.js +++ b/api/src/docker/openscad/runScad.js @@ -64,11 +64,11 @@ async function runCommand(command, timeout = 5000) { } if (stderr) { console.log(`stderr: ${stderr}`) - resolve(`stderr: ${stderr}`) + resolve(stderr) return } console.log(`stdout: ${stdout}`) - resolve(`stdout: ${stdout}`) + resolve(stdout) }) setTimeout(() => { reject('timeout') diff --git a/web/src/components/IdeConsole/IdeConsole.js b/web/src/components/IdeConsole/IdeConsole.js index 6483e23..0b62f9c 100644 --- a/web/src/components/IdeConsole/IdeConsole.js +++ b/web/src/components/IdeConsole/IdeConsole.js @@ -7,12 +7,12 @@ const IdeConsole = () => {
{state.consoleMessages?.map(({ type, message }, index) => ( -
- -> {message} -
+ {message} + ))}
diff --git a/web/src/components/IdeViewer/IdeViewer.js b/web/src/components/IdeViewer/IdeViewer.js index c2248ee..2790d4d 100644 --- a/web/src/components/IdeViewer/IdeViewer.js +++ b/web/src/components/IdeViewer/IdeViewer.js @@ -124,8 +124,7 @@ const IdeViewer = () => { useEffect(() => { setImage( state.objectData?.type === 'png' && - state.objectData?.data && - window.URL.createObjectURL(state.objectData?.data) + 'data:image/png;base64,' + state.objectData?.data ) setIsDragging(false) }, [state.objectData]) diff --git a/web/src/helpers/cadPackages/openScadController.js b/web/src/helpers/cadPackages/openScadController.js index bbab21f..167174b 100644 --- a/web/src/helpers/cadPackages/openScadController.js +++ b/web/src/helpers/cadPackages/openScadController.js @@ -50,20 +50,20 @@ export const render = async ({ code, settings }) => { status: 'error', message: { type: 'error', - message: cleanedErrorMessage, + message: addDateToLog(cleanedErrorMessage), }, } } - const data = await response.blob() + const data = await response.json() return { status: 'healthy', objectData: { type: 'png', - data, + data: data.imageBase64, }, message: { type: 'message', - message: 'successful render', + message: addDateToLog(data.result), }, } } catch (e) { @@ -75,7 +75,7 @@ export const render = async ({ code, settings }) => { status: 'error', message: { type: 'error', - message: 'network issue', + message: addDateToLog('network issue'), }, } } @@ -87,3 +87,8 @@ const openScad = { } export default openScad + +function addDateToLog(message) { + return `-> ${new Date().toLocaleString()} +${message}` +} From fef69917f5f9186aa0f84f85bc842a7e6cc95e30 Mon Sep 17 00:00:00 2001 From: Kurt Hutten Date: Sun, 21 Mar 2021 14:59:47 +1100 Subject: [PATCH 2/3] Add storage for openscad code --- web/src/components/IdeEditor/IdeEditor.js | 2 ++ web/src/components/IdeToolbarNew/IdeToolbarNew.js | 3 ++- web/src/helpers/hooks/useIdeState.js | 5 ++++- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/web/src/components/IdeEditor/IdeEditor.js b/web/src/components/IdeEditor/IdeEditor.js index 918138f..7ad5ad5 100644 --- a/web/src/components/IdeEditor/IdeEditor.js +++ b/web/src/components/IdeEditor/IdeEditor.js @@ -1,6 +1,7 @@ import { useContext, useEffect, Suspense, lazy } from 'react' import { isBrowser } from '@redwoodjs/prerender/browserUtils' import { IdeContext } from 'src/components/IdeToolbarNew' +import { codeStorageKey } from 'src/helpers/hooks/useIdeState' const Editor = lazy(() => import('@monaco-editor/react')) const IdeEditor = () => { @@ -34,6 +35,7 @@ const IdeEditor = () => { if (key === 's' && (ctrlKey || metaKey)) { event.preventDefault() dispatch({ type: 'render', payload: { code: state.code } }) + localStorage.setItem(codeStorageKey, state.code) } } diff --git a/web/src/components/IdeToolbarNew/IdeToolbarNew.js b/web/src/components/IdeToolbarNew/IdeToolbarNew.js index 70b9e8c..6587bdc 100644 --- a/web/src/components/IdeToolbarNew/IdeToolbarNew.js +++ b/web/src/components/IdeToolbarNew/IdeToolbarNew.js @@ -1,7 +1,7 @@ import { createContext } from 'react' import IdeContainer from 'src/components/IdeContainer' import { isBrowser } from '@redwoodjs/prerender/browserUtils' -import { useIdeState } from 'src/helpers/hooks/useIdeState' +import { useIdeState, codeStorageKey } from 'src/helpers/hooks/useIdeState' import { copyTextToClipboard } from 'src/helpers/clipboard' export const IdeContext = createContext() @@ -12,6 +12,7 @@ const IdeToolbarNew = () => { } function handleRender() { dispatch({ type: 'render', payload: { code: state.code } }) + localStorage.setItem(codeStorageKey, state.code) } function handleMakeLink() { if (isBrowser) { diff --git a/web/src/helpers/hooks/useIdeState.js b/web/src/helpers/hooks/useIdeState.js index aba8d30..a6e123b 100644 --- a/web/src/helpers/hooks/useIdeState.js +++ b/web/src/helpers/hooks/useIdeState.js @@ -16,11 +16,14 @@ module stick(basewid, angl){ } }` +export const codeStorageKey = 'Last-openscad-code' + export const useIdeState = () => { + const code = localStorage.getItem(codeStorageKey) || donutInitCode const initialState = { ideType: 'openScad', consoleMessages: [{ type: 'message', message: 'Initialising OpenSCAD' }], - code: donutInitCode, + code, objectData: { type: 'stl', data: 'some binary', From ab394ed564fca3c0694fcb8d718ba007cb11d8fd Mon Sep 17 00:00:00 2001 From: Kurt Hutten Date: Sun, 21 Mar 2021 15:30:27 +1100 Subject: [PATCH 3/3] Make the ide more full screen like --- .../components/IdeContainer/IdeContainer.js | 2 +- .../components/IdeToolbarNew/IdeToolbarNew.js | 2 +- web/src/layouts/MainLayout/MainLayout.js | 2 +- web/src/pages/DevIdePage/DevIdePage.js | 42 ++++++++++--------- 4 files changed, 26 insertions(+), 22 deletions(-) diff --git a/web/src/components/IdeContainer/IdeContainer.js b/web/src/components/IdeContainer/IdeContainer.js index 08127d6..4100e09 100644 --- a/web/src/components/IdeContainer/IdeContainer.js +++ b/web/src/components/IdeContainer/IdeContainer.js @@ -32,7 +32,7 @@ const IdeContainer = () => { } return ( -
+
( diff --git a/web/src/components/IdeToolbarNew/IdeToolbarNew.js b/web/src/components/IdeToolbarNew/IdeToolbarNew.js index 6587bdc..4920515 100644 --- a/web/src/components/IdeToolbarNew/IdeToolbarNew.js +++ b/web/src/components/IdeToolbarNew/IdeToolbarNew.js @@ -24,7 +24,7 @@ const IdeToolbarNew = () => { return ( -
+