| 
									
										
										
										
											2017-12-02 23:41:18 -05:00
										 |  |  | "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; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-03 00:10:43 -05:00
										 |  |  |         const fileNameWithoutExt = file.substr(0, file.length - 5); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         let noteTitle; | 
					
						
							|  |  |  |         let notePos; | 
					
						
							| 
									
										
										
										
											2017-12-02 23:41:18 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-03 00:10:43 -05:00
										 |  |  |         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_pos) FROM notes_tree WHERE note_pid = ? AND is_deleted = 0", [parentNoteId]); | 
					
						
							|  |  |  |             if (maxPos) { | 
					
						
							|  |  |  |                 notePos = maxPos + 1; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             else { | 
					
						
							|  |  |  |                 notePos = 0; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             noteTitle = fileNameWithoutExt; | 
					
						
							| 
									
										
										
										
											2017-12-02 23:41:18 -05:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-03 00:10:43 -05:00
										 |  |  |         const noteText = fs.readFileSync(path, "utf8"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-02 23:41:18 -05:00
										 |  |  |         const noteId = utils.newNoteId(); | 
					
						
							|  |  |  |         const noteTreeId = utils.newNoteHistoryId(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-10 12:56:59 -05:00
										 |  |  |         const now = utils.nowDate(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-02 23:41:18 -05:00
										 |  |  |         await sql.insert('notes_tree', { | 
					
						
							|  |  |  |             note_tree_id: noteTreeId, | 
					
						
							|  |  |  |             note_id: noteId, | 
					
						
							|  |  |  |             note_pid: parentNoteId, | 
					
						
							| 
									
										
										
										
											2017-12-03 00:10:43 -05:00
										 |  |  |             note_pos: notePos, | 
					
						
							| 
									
										
										
										
											2017-12-02 23:41:18 -05:00
										 |  |  |             is_expanded: 0, | 
					
						
							|  |  |  |             is_deleted: 0, | 
					
						
							| 
									
										
										
										
											2017-12-10 12:56:59 -05:00
										 |  |  |             date_modified: now | 
					
						
							| 
									
										
										
										
											2017-12-02 23:41:18 -05:00
										 |  |  |         }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         await sync_table.addNoteTreeSync(noteTreeId); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         await sql.insert('notes', { | 
					
						
							|  |  |  |             note_id: noteId, | 
					
						
							|  |  |  |             note_title: noteTitle, | 
					
						
							|  |  |  |             note_text: noteText, | 
					
						
							|  |  |  |             is_deleted: 0, | 
					
						
							|  |  |  |             is_protected: 0, | 
					
						
							| 
									
										
										
										
											2017-12-10 12:56:59 -05:00
										 |  |  |             date_created: now, | 
					
						
							|  |  |  |             date_modified: now | 
					
						
							| 
									
										
										
										
											2017-12-02 23:41:18 -05:00
										 |  |  |         }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         await sync_table.addNoteSync(noteId); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-03 00:10:43 -05:00
										 |  |  |         const noteDir = dir + '/' + fileNameWithoutExt; | 
					
						
							| 
									
										
										
										
											2017-12-02 23:41:18 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if (fs.existsSync(noteDir) && fs.lstatSync(noteDir).isDirectory()) { | 
					
						
							|  |  |  |             await importNotes(noteDir, noteId); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module.exports = router; |