mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-31 18:36:30 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			104 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "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 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.getSingleValue("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; |