app commands works

This commit is contained in:
Jan Prochazka
2022-01-27 17:01:58 +01:00
parent 595c9424df
commit a76ba60272
10 changed files with 174 additions and 25 deletions

View File

@@ -1,7 +1,9 @@
const fs = require('fs-extra');
const _ = require('lodash');
const path = require('path');
const { appdir } = require('../utility/directories');
const socket = require('../utility/socket');
const connections = require('./connections');
module.exports = {
folders_meta: true,
@@ -50,6 +52,16 @@ module.exports = {
return [...refsType(), ...fileType('.command.sql', 'command.sql'), ...fileType('.query.sql', 'query.sql')];
},
async emitChangedDbApp(folder) {
for (const conn of await connections.list()) {
for (const db of conn.databases || []) {
if (db[`useApp:${folder}`]) {
socket.emitChanged(`db-apps-changed-${conn._id}-${db.name}`);
}
}
}
},
refreshFiles_meta: true,
async refreshFiles({ folder }) {
socket.emitChanged(`app-files-changed-${folder}`);
@@ -64,6 +76,7 @@ module.exports = {
async deleteFile({ folder, file, fileType }) {
await fs.unlink(path.join(appdir(), folder, `${file}.${fileType}`));
socket.emitChanged(`app-files-changed-${folder}`);
this.emitChangedDbApp(folder);
},
renameFile_meta: true,
@@ -73,6 +86,7 @@ module.exports = {
path.join(path.join(appdir(), folder), `${newFile}.${fileType}`)
);
socket.emitChanged(`app-files-changed-${folder}`);
this.emitChangedDbApp(folder);
},
renameFolder_meta: true,
@@ -97,4 +111,54 @@ module.exports = {
}
return `${name}${index}`;
},
getAppsForDb_meta: true,
async getAppsForDb({ conid, database }) {
const connection = await connections.get({ conid });
if (!connection) return [];
const db = (connection.databases || []).find(x => x.name == database);
const apps = [];
const res = [];
if (db) {
for (const key of _.keys(db || {})) {
if (key.startsWith('useApp:') && db[key]) {
apps.push(key.substring('useApp:'.length));
}
}
}
console.log('APPS', apps);
for (const folder of apps) {
res.push(await this.loadApp({ folder }));
}
return res;
},
loadApp_meta: true,
async loadApp({ folder }) {
const res = {
queries: [],
commands: [],
name: folder,
};
const dir = path.join(appdir(), folder);
if (await fs.exists(dir)) {
const files = await fs.readdir(dir);
async function processType(ext, field) {
for (const file of files) {
if (file.endsWith(ext)) {
res[field].push({
name: file.slice(0, -ext.length),
sql: await fs.readFile(path.join(dir, file), { encoding: 'utf-8' }),
});
}
}
}
await processType('.command.sql', 'commands');
await processType('.query.sql', 'queries');
}
return res;
},
};

View File

@@ -178,6 +178,9 @@ module.exports = {
res = await this.datastore.insert(encrypted);
}
socket.emitChanged('connection-list-changed');
for (const db of connection.databases || []) {
socket.emitChanged(`db-apps-changed-${connection._id}-${db.name}`);
}
return res;
},
@@ -201,6 +204,7 @@ module.exports = {
}
const res = await this.datastore.update({ _id: conid }, { $set: { databases } });
socket.emitChanged('connection-list-changed');
socket.emitChanged(`db-apps-changed-${conid}-${database}`);
return res;
},

View File

@@ -7,6 +7,7 @@ const hasPermission = require('../utility/hasPermission');
const socket = require('../utility/socket');
const scheduler = require('./scheduler');
const getDiagramExport = require('../utility/getDiagramExport');
const apps = require('./apps');
function serialize(format, data) {
if (format == 'text') return data;
@@ -94,8 +95,10 @@ module.exports = {
socket.emitChanged(`archive-files-changed-${folder.substring('archive:'.length)}`);
return true;
} else if (folder.startsWith('app:')) {
await fs.writeFile(path.join(appdir(), folder.substring('app:'.length), file), serialize(format, data));
socket.emitChanged(`app-files-changed-${folder.substring('app:'.length)}`);
const app = folder.substring('app:'.length);
await fs.writeFile(path.join(appdir(), app, file), serialize(format, data));
socket.emitChanged(`app-files-changed-${app}`);
apps.emitChangedDbApp(folder);
return true;
} else {
if (!hasPermission(`files/${folder}/write`)) return false;