archive folder supports links

This commit is contained in:
Jan Prochazka
2021-10-14 19:51:46 +02:00
parent 8f54a6b03d
commit 2e196178ab
12 changed files with 74 additions and 22 deletions

View File

@@ -3,7 +3,7 @@ const stream = require('stream');
const readline = require('readline');
const path = require('path');
const { formatWithOptions } = require('util');
const { archivedir } = require('../utility/directories');
const { archivedir, clearArchiveLinksCache, resolveArchiveFolder } = require('../utility/directories');
const socket = require('../utility/socket');
const JsonLinesDatastore = require('../utility/JsonLinesDatastore');
const { saveFreeTableData } = require('../utility/freeTableStorage');
@@ -33,9 +33,18 @@ module.exports = {
return true;
},
createLink_meta: 'post',
async createLink({ linkedFolder }) {
const folder = await this.getNewArchiveFolder({ database: path.parse(linkedFolder).name + '.link' });
fs.writeFile(path.join(archivedir(), folder), linkedFolder);
clearArchiveLinksCache();
socket.emitChanged('archive-folders-changed');
return true;
},
files_meta: 'get',
async files({ folder }) {
const dir = path.join(archivedir(), folder);
const dir = resolveArchiveFolder(folder);
if (!(await fs.exists(dir))) return [];
const files = await fs.readdir(dir);
@@ -71,27 +80,31 @@ module.exports = {
deleteFile_meta: 'post',
async deleteFile({ folder, file }) {
await fs.unlink(path.join(archivedir(), folder, `${file}.jsonl`));
await fs.unlink(path.join(resolveArchiveFolder(folder), `${file}.jsonl`));
socket.emitChanged(`archive-files-changed-${folder}`);
},
deleteFolder_meta: 'post',
async deleteFolder({ folder }) {
if (!folder) throw new Error('Missing folder parameter');
await fs.rmdir(path.join(archivedir(), folder), { recursive: true });
if (folder.endsWith('.link')) {
await fs.unlink(path.join(archivedir(), folder));
} else {
await fs.rmdir(path.join(archivedir(), folder), { recursive: true });
}
socket.emitChanged(`archive-folders-changed`);
},
saveFreeTable_meta: 'post',
async saveFreeTable({ folder, file, data }) {
saveFreeTableData(path.join(archivedir(), folder, `${file}.jsonl`), data);
saveFreeTableData(path.join(resolveArchiveFolder(folder), `${file}.jsonl`), data);
return true;
},
loadFreeTable_meta: 'post',
async loadFreeTable({ folder, file }) {
return new Promise((resolve, reject) => {
const fileStream = fs.createReadStream(path.join(archivedir(), folder, `${file}.jsonl`));
const fileStream = fs.createReadStream(path.join(resolveArchiveFolder(folder), `${file}.jsonl`));
const liner = readline.createInterface({
input: fileStream,
});

View File

@@ -8,7 +8,7 @@ const { handleProcessCommunication } = require('../utility/processComm');
const config = require('./config');
const fs = require('fs-extra');
const exportDbModel = require('../utility/exportDbModel');
const { archivedir } = require('../utility/directories');
const { archivedir, resolveArchiveFolder } = require('../utility/directories');
const path = require('path');
const importDbModel = require('../utility/importDbModel');
const requireEngineDriver = require('../utility/requireEngineDriver');
@@ -262,7 +262,7 @@ module.exports = {
return generateDeploySql({
connection,
analysedStructure: await this.structure({ conid, database }),
modelFolder: path.join(archivedir(), archiveFolder),
modelFolder: resolveArchiveFolder(archiveFolder),
});
// const deployedModel = generateDbPairingId(await importDbModel(path.join(archivedir(), archiveFolder)));
// const currentModel = generateDbPairingId(await this.structure({ conid, database }));

View File

@@ -1,6 +1,6 @@
const fs = require('fs-extra');
const path = require('path');
const { filesdir, archivedir } = require('../utility/directories');
const { filesdir, archivedir, resolveArchiveFolder } = require('../utility/directories');
const hasPermission = require('../utility/hasPermission');
const socket = require('../utility/socket');
const scheduler = require('./scheduler');
@@ -59,7 +59,7 @@ module.exports = {
load_meta: 'post',
async load({ folder, file, format }) {
if (folder.startsWith('archive:')) {
const text = await fs.readFile(path.join(archivedir(), folder.substring('archive:'.length), file), {
const text = await fs.readFile(path.join(resolveArchiveFolder(folder.substring('archive:'.length)), file), {
encoding: 'utf-8',
});
return deserialize(format, text);
@@ -73,7 +73,7 @@ module.exports = {
save_meta: 'post',
async save({ folder, file, data, format }) {
if (folder.startsWith('archive:')) {
const dir = path.join(archivedir(), folder.substring('archive:'.length));
const dir = resolveArchiveFolder(folder.substring('archive:'.length));
await fs.writeFile(path.join(dir, file), serialize(format, data));
socket.emitChanged(`archive-files-changed-${folder.substring('archive:'.length)}`);
} else {