From 3533160bef78e00cf906a436ff7b366bdec271be Mon Sep 17 00:00:00 2001 From: zadam Date: Wed, 20 Feb 2019 23:07:57 +0100 Subject: [PATCH] fix initial document setup --- db/demo.tar | Bin 510976 -> 504320 bytes db/schema.sql | 36 +++++++++++++++--------- src/routes/api/import.js | 46 +------------------------------ src/services/import/tar.js | 7 ++--- src/services/import_context.js | 49 +++++++++++++++++++++++++++++++++ src/services/sql_init.js | 9 ++++-- 6 files changed, 83 insertions(+), 64 deletions(-) create mode 100644 src/services/import_context.js diff --git a/db/demo.tar b/db/demo.tar index c193055e36d2a30708746e7c979b5c76faaf8fc1..7298d88080c38ce7533d0c4518912811f80fe982 100644 GIT binary patch delta 19147 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 r?8b|5L<_C3QE!4>#IHz>-4}}ZP0(J= 500) { - this.lastSentCountTs = Date.now(); - - await messagingService.sendMessageToAllClients({ - importId: this.importId, - type: 'import-progress-count', - progressCount: this.progressCount - }); - } - } - - async importFinished(noteId) { - await messagingService.sendMessageToAllClients({ - importId: this.importId, - type: 'import-finished', - noteId: noteId - }); - } - - // must remaing non-static - async reportError(message) { - await messagingService.sendMessageToAllClients({ - type: 'import-error', - message: message - }); - } -} +const ImportContext = require('../../services/import_context'); async function importToBranch(req) { let {parentNoteId, importId, safeImport} = req.params; diff --git a/src/services/import/tar.js b/src/services/import/tar.js index 888f3c2f4..2deff2974 100644 --- a/src/services/import/tar.js +++ b/src/services/import/tar.js @@ -13,9 +13,7 @@ const stream = require('stream'); const path = require('path'); const commonmark = require('commonmark'); const mimeTypes = require('mime-types'); - -let importNoteCount; -let lastSentCountTs = Date.now(); +const ImportContext = require('../import_context'); /** * @param {ImportContext} importContext @@ -24,7 +22,8 @@ let lastSentCountTs = Date.now(); * @return {Promise<*>} */ async function importTar(importContext, fileBuffer, importRootNote) { - importNoteCount = 0; + importContext = importContext || new ImportContext("1", false); + // maps from original noteId (in tar file) to newly generated noteId const noteIdMap = {}; const attributes = []; diff --git a/src/services/import_context.js b/src/services/import_context.js new file mode 100644 index 000000000..bca12895d --- /dev/null +++ b/src/services/import_context.js @@ -0,0 +1,49 @@ +"use strict"; + +const messagingService = require('./messaging'); + +class ImportContext { + constructor(importId, safeImport) { + // importId is to distinguish between different import events - it is possible (though not recommended) + // to have multiple imports going at the same time + this.importId = importId; + + this.safeImport = safeImport; + + // // count is mean to represent count of exported notes where practical, otherwise it's just some measure of progress + this.progressCount = 0; + this.lastSentCountTs = Date.now(); + } + + async increaseProgressCount() { + this.progressCount++; + + if (Date.now() - this.lastSentCountTs >= 500) { + this.lastSentCountTs = Date.now(); + + await messagingService.sendMessageToAllClients({ + importId: this.importId, + type: 'import-progress-count', + progressCount: this.progressCount + }); + } + } + + async importFinished(noteId) { + await messagingService.sendMessageToAllClients({ + importId: this.importId, + type: 'import-finished', + noteId: noteId + }); + } + + // must remaing non-static + async reportError(message) { + await messagingService.sendMessageToAllClients({ + type: 'import-error', + message: message + }); + } +} + +module.exports = ImportContext; \ No newline at end of file diff --git a/src/services/sql_init.js b/src/services/sql_init.js index 4e7a1c17f..c2a23fdf3 100644 --- a/src/services/sql_init.js +++ b/src/services/sql_init.js @@ -77,16 +77,21 @@ async function createInitialDatabase(username, password) { await sql.executeScript(schema); const Note = require("../entities/note"); + const NoteContent = require("../entities/note_content"); const Branch = require("../entities/branch"); const rootNote = await new Note({ noteId: 'root', title: 'root', - content: '', type: 'text', mime: 'text/html' }).save(); + const rootNoteContent = await new NoteContent({ + noteId: rootNote.noteId, + content: '' + }).save(); + await new Branch({ branchId: 'root', noteId: 'root', @@ -96,7 +101,7 @@ async function createInitialDatabase(username, password) { }).save(); const tarImportService = require("./import/tar"); - await tarImportService.importTar(demoFile, rootNote); + await tarImportService.importTar(null, demoFile, rootNote); const startNoteId = await sql.getValue("SELECT noteId FROM branches WHERE parentNoteId = 'root' AND isDeleted = 0 ORDER BY notePosition");