"use strict"; const express = require('express'); const router = express.Router(); 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'); const auth = require('../../services/auth'); router.get('/:directory/to/:parentNoteId', auth.checkApiAuth, 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.getFirst("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 fileNameWithoutExt = file.substr(0, file.length - 5); let noteTitle; let notePos; const match = fileNameWithoutExt.match(/^([0-9]{4})-(.*)$/); if (match) { notePos = parseInt(match[1]); noteTitle = match[2]; } else { let maxPos = await sql.getFirstValue("SELECT MAX(note_position) FROM notes_tree WHERE parent_note_id = ? AND is_deleted = 0", [parentNoteId]); if (maxPos) { notePos = maxPos + 1; } else { notePos = 0; } noteTitle = fileNameWithoutExt; } const noteText = fs.readFileSync(path, "utf8"); const noteId = utils.newNoteId(); const noteTreeId = utils.newNoteHistoryId(); const now = utils.nowDate(); await sql.insert('notes_tree', { note_tree_id: noteTreeId, note_id: noteId, parent_note_id: parentNoteId, note_position: notePos, is_expanded: 0, is_deleted: 0, date_modified: now }); 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: now, date_modified: now }); await sync_table.addNoteSync(noteId); const noteDir = dir + '/' + fileNameWithoutExt; if (fs.existsSync(noteDir) && fs.lstatSync(noteDir).isDirectory()) { await importNotes(noteDir, noteId); } } } module.exports = router;