From f2f74219718d041ad74f30d12a2b84ada2ea2b08 Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Thu, 21 Jul 2022 07:27:28 +0200 Subject: [PATCH 1/4] new diagram, new query design added to menu --- app/src/mainMenuDefinition.js | 2 ++ packages/web/src/commands/stdCommands.ts | 20 +++++++++++++++++++- packages/web/src/query/newQuery.ts | 4 ++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/app/src/mainMenuDefinition.js b/app/src/mainMenuDefinition.js index 8efc4c7d0..a86a569f7 100644 --- a/app/src/mainMenuDefinition.js +++ b/app/src/mainMenuDefinition.js @@ -6,6 +6,8 @@ module.exports = ({ editMenu }) => [ { command: 'new.sqliteDatabase', hideDisabled: true }, { divider: true }, { command: 'new.query', hideDisabled: true }, + { command: 'new.queryDesign', hideDisabled: true }, + { command: 'new.diagram', hideDisabled: true }, { command: 'new.freetable', hideDisabled: true }, { command: 'new.shell', hideDisabled: true }, { command: 'new.jsonl', hideDisabled: true }, diff --git a/packages/web/src/commands/stdCommands.ts b/packages/web/src/commands/stdCommands.ts index df85f8ebc..4d04aa598 100644 --- a/packages/web/src/commands/stdCommands.ts +++ b/packages/web/src/commands/stdCommands.ts @@ -6,7 +6,7 @@ import SettingsModal from '../settings/SettingsModal.svelte'; import ImportExportModal from '../modals/ImportExportModal.svelte'; import SqlGeneratorModal from '../modals/SqlGeneratorModal.svelte'; import { showModal } from '../modals/modalTools'; -import newQuery from '../query/newQuery'; +import newQuery, { newDiagram, newQueryDesign } from '../query/newQuery'; import saveTabFile from '../utility/saveTabFile'; import openNewTab from '../utility/openNewTab'; import getElectron from '../utility/getElectron'; @@ -120,6 +120,24 @@ registerCommand({ }, }); +registerCommand({ + id: 'new.queryDesign', + category: 'New', + icon: 'img query-design', + name: 'Query design', + menuName: 'New query design', + onClick: () => newQueryDesign(), +}); + +registerCommand({ + id: 'new.diagram', + category: 'New', + icon: 'img diagram', + name: 'ER Diagram', + menuName: 'New ER diagram', + onClick: () => newDiagram(), +}); + registerCommand({ id: 'new.archiveFolder', category: 'New', diff --git a/packages/web/src/query/newQuery.ts b/packages/web/src/query/newQuery.ts index 256d7dbbf..8c5c05aaa 100644 --- a/packages/web/src/query/newQuery.ts +++ b/packages/web/src/query/newQuery.ts @@ -36,3 +36,7 @@ export default function newQuery({ export function newQueryDesign() { return newQuery({ tabComponent: 'QueryDesignTab', icon: 'img query-design' }); } + +export function newDiagram() { + return newQuery({ tabComponent: 'DiagramTab', icon: 'img diagram', title: 'Diagram #' }); +} From 8dd90ce5e49ec02bfa6a4f17809742fe538dea83 Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Thu, 21 Jul 2022 07:49:55 +0200 Subject: [PATCH 2/4] fixed problem with SSE #323 --- packages/api/package.json | 1 + packages/api/src/main.js | 6 ++++- packages/api/src/utility/socket.js | 43 ++++++++++++++---------------- yarn.lock | 7 +++++ 4 files changed, 33 insertions(+), 24 deletions(-) diff --git a/packages/api/package.json b/packages/api/package.json index 25cd1c693..c90456c24 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -46,6 +46,7 @@ "lodash": "^4.17.21", "ncp": "^2.0.0", "node-cron": "^2.0.3", + "on-finished": "^2.4.1", "portfinder": "^1.0.28", "simple-encryptor": "^4.0.0", "ssh2": "^1.11.0", diff --git a/packages/api/src/main.js b/packages/api/src/main.js index ead1c4350..eec93c02a 100644 --- a/packages/api/src/main.js +++ b/packages/api/src/main.js @@ -25,6 +25,7 @@ const plugins = require('./controllers/plugins'); const files = require('./controllers/files'); const scheduler = require('./controllers/scheduler'); const queryHistory = require('./controllers/queryHistory'); +const onFinished = require('on-finished'); const { rundir } = require('./utility/directories'); const platformInfo = require('./utility/platformInfo'); @@ -63,7 +64,10 @@ function start() { // Tell the client to retry every 10 seconds if connectivity is lost res.write('retry: 10000\n\n'); - socket.setSseResponse(res); + socket.addSseResponse(res); + onFinished(req, () => { + socket.removeSseResponse(res); + }); }); app.use(bodyParser.json({ limit: '50mb' })); diff --git a/packages/api/src/utility/socket.js b/packages/api/src/utility/socket.js index 34723ade1..5b519f107 100644 --- a/packages/api/src/utility/socket.js +++ b/packages/api/src/utility/socket.js @@ -1,36 +1,33 @@ -let sseResponse = null; +const _ = require('lodash'); + +const sseResponses = []; let electronSender = null; -let init = []; +let pingConfigured = false; module.exports = { - setSseResponse(value) { - sseResponse = value; - setInterval(() => this.emit('ping'), 29 * 1000); + ensurePing() { + if (!pingConfigured) { + setInterval(() => this.emit('ping'), 29 * 1000); + pingConfigured = true; + } + }, + addSseResponse(value) { + sseResponses.push(value); + this.ensurePing(); + }, + removeSseResponse(value) { + _.remove(sseResponses, x => x == value); }, setElectronSender(value) { electronSender = value; + this.ensurePing(); }, emit(message, data) { if (electronSender) { - if (init.length > 0) { - for (const item of init) { - electronSender.send(item.message, item.data == null ? null : item.data); - } - init = []; - } electronSender.send(message, data == null ? null : data); - } else if (sseResponse) { - if (init.length > 0) { - for (const item of init) { - sseResponse.write( - `event: ${item.message}\ndata: ${JSON.stringify(item.data == null ? null : item.data)}\n\n` - ); - } - init = []; - } - sseResponse.write(`event: ${message}\ndata: ${JSON.stringify(data == null ? null : data)}\n\n`); - } else { - init.push([{ message, data }]); + } + for (const res of sseResponses) { + res.write(`event: ${message}\ndata: ${JSON.stringify(data == null ? null : data)}\n\n`); } }, emitChanged(key) { diff --git a/yarn.lock b/yarn.lock index ef005b6ce..0bf59659a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8257,6 +8257,13 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" +on-finished@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" From 29257f9bf97a99e67225a71152e15b00cd948507 Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Thu, 21 Jul 2022 09:31:02 +0200 Subject: [PATCH 3/4] added missing dependency --- packages/tools/package.json | 3 ++- yarn.lock | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/tools/package.json b/packages/tools/package.json index 8a3b68a65..6dfaab9ea 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -31,9 +31,10 @@ "typescript": "^4.4.3" }, "dependencies": { - "lodash": "^4.17.21", "dbgate-query-splitter": "^4.9.0", "dbgate-sqltree": "^5.0.0-alpha.1", + "json-stable-stringify": "^1.0.1", + "lodash": "^4.17.21", "uuid": "^3.4.0" } } diff --git a/yarn.lock b/yarn.lock index 0bf59659a..85ecf4f01 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6870,7 +6870,7 @@ json-stable-stringify-without-jsonify@^1.0.1: json-stable-stringify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" - integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8= + integrity sha512-i/J297TW6xyj7sDFa7AmBPkQvLIxWr2kKPWI26tXydnZrzVAocNqn5DMNT1Mzk0vit1V5UkRM7C1KdVNp7Lmcg== dependencies: jsonify "~0.0.0" From 93e264e9ecc9db8fcf0ccca511f588a7da94cca2 Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Thu, 21 Jul 2022 09:33:11 +0200 Subject: [PATCH 4/4] v5.0.9-beta.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ff4b11d4d..a7312f0c8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "private": true, - "version": "5.0.8", + "version": "5.0.9-beta.1", "name": "dbgate-all", "workspaces": [ "packages/*",