From cd3c6d7e3b1065c796f925fb478a28d12d73ad3f Mon Sep 17 00:00:00 2001 From: azivner Date: Sat, 2 Dec 2017 23:41:18 -0500 Subject: [PATCH] note import from directory --- routes/api/import.js | 86 ++++++++++++++++++++++++++++++++++++++++++++ routes/routes.js | 2 ++ 2 files changed, 88 insertions(+) create mode 100644 routes/api/import.js diff --git a/routes/api/import.js b/routes/api/import.js new file mode 100644 index 000000000..fd32cf4bf --- /dev/null +++ b/routes/api/import.js @@ -0,0 +1,86 @@ +"use strict"; + +const express = require('express'); +const router = express.Router(); +const rimraf = require('rimraf'); +const fs = require('fs'); +const sql = require('../../services/sql'); +const data_dir = require('../../services/data_dir'); +const utils = require('../../services/utils'); +const sync_table = require('../../services/sync_table'); + +router.get('/:directory/to/:parentNoteId', async (req, res, next) => { + const directory = req.params.directory.replace(/[^0-9a-zA-Z_-]/gi, ''); + const parentNoteId = req.params.parentNoteId; + + const dir = data_dir.EXPORT_DIR + '/' + directory; + + await sql.doInTransaction(async () => await importNotes(dir, parentNoteId)); + + res.send({}); +}); + +async function importNotes(dir, parentNoteId) { + const parent = await sql.getSingleResult("SELECT * FROM notes WHERE note_id = ?", [parentNoteId]); + + if (!parent) { + return; + } + + const fileList = fs.readdirSync(dir); + + for (const file of fileList) { + const path = dir + '/' + file; + + if (fs.lstatSync(path).isDirectory()) { + continue; + } + + if (!file.endsWith('.html')) { + continue; + } + + const noteTitle = file.substr(0, file.length - 5); + const noteText = fs.readFileSync(path, "utf8"); + + let maxPos = await sql.getSingleValue("SELECT MAX(note_pos) FROM notes_tree WHERE note_pid = ? AND is_deleted = 0", [parentNoteId]); + if (!maxPos) { + maxPos = 1; + } + + const noteId = utils.newNoteId(); + const noteTreeId = utils.newNoteHistoryId(); + + await sql.insert('notes_tree', { + note_tree_id: noteTreeId, + note_id: noteId, + note_pid: parentNoteId, + note_pos: maxPos + 1, + is_expanded: 0, + is_deleted: 0, + date_modified: utils.nowTimestamp() + }); + + await sync_table.addNoteTreeSync(noteTreeId); + + await sql.insert('notes', { + note_id: noteId, + note_title: noteTitle, + note_text: noteText, + is_deleted: 0, + is_protected: 0, + date_created: utils.nowTimestamp(), + date_modified: utils.nowTimestamp() + }); + + await sync_table.addNoteSync(noteId); + + const noteDir = dir + '/' + noteTitle; + + if (fs.existsSync(noteDir) && fs.lstatSync(noteDir).isDirectory()) { + await importNotes(noteDir, noteId); + } + } +} + +module.exports = router; \ No newline at end of file diff --git a/routes/routes.js b/routes/routes.js index 9b689a3f8..37aa816b4 100644 --- a/routes/routes.js +++ b/routes/routes.js @@ -18,6 +18,7 @@ const eventLogRoute = require('./api/event_log'); const recentNotesRoute = require('./api/recent_notes'); const appInfoRoute = require('./api/app_info'); const exportRoute = require('./api/export'); +const importRoute = require('./api/import'); function register(app) { app.use('/', indexRoute); @@ -39,6 +40,7 @@ function register(app) { app.use('/api/recent-notes', recentNotesRoute); app.use('/api/app-info', appInfoRoute); app.use('/api/export', exportRoute); + app.use('/api/import', importRoute); } module.exports = {