mirror of
				https://github.com/TriliumNext/Notes.git
				synced 2025-10-31 21:11:30 +08:00 
			
		
		
		
	export with pos in filename and import so we preserve note order
This commit is contained in:
		
							parent
							
								
									cd3c6d7e3b
								
							
						
					
					
						commit
						ddd216c92e
					
				| @ -23,25 +23,30 @@ router.get('/:noteId/to/:directory', async (req, res, next) => { | |||||||
| 
 | 
 | ||||||
|     fs.mkdirSync(completeExportDir); |     fs.mkdirSync(completeExportDir); | ||||||
| 
 | 
 | ||||||
|     await exportNote(noteId, completeExportDir); |     const noteTreeId = await sql.getSingleValue('SELECT note_tree_id FROM notes_tree WHERE note_id = ?', [noteId]); | ||||||
|  | 
 | ||||||
|  |     await exportNote(noteTreeId, completeExportDir); | ||||||
| 
 | 
 | ||||||
|     res.send({}); |     res.send({}); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| async function exportNote(noteId, dir) { | async function exportNote(noteTreeId, dir) { | ||||||
|     const note = await sql.getSingleResult("SELECT * FROM notes WHERE note_id = ?", [noteId]); |     const noteTree = await sql.getSingleResult("SELECT * FROM notes_tree WHERE note_tree_id = ?", [noteTreeId]); | ||||||
|  |     const note = await sql.getSingleResult("SELECT * FROM notes WHERE note_id = ?", [noteTree.note_id]); | ||||||
| 
 | 
 | ||||||
|     fs.writeFileSync(dir + '/' + note.note_title + '.html', note.note_text); |     const pos = (noteTree.note_pos + '').padStart(4, '0'); | ||||||
| 
 | 
 | ||||||
|     const children = await sql.getResults("SELECT * FROM notes_tree WHERE note_pid = ? AND is_deleted = 0", [noteId]); |     fs.writeFileSync(dir + '/' + pos + '-' + note.note_title + '.html', note.note_text); | ||||||
|  | 
 | ||||||
|  |     const children = await sql.getResults("SELECT * FROM notes_tree WHERE note_pid = ? AND is_deleted = 0", [note.note_id]); | ||||||
| 
 | 
 | ||||||
|     if (children.length > 0) { |     if (children.length > 0) { | ||||||
|         const childrenDir = dir + '/' + note.note_title; |         const childrenDir = dir + '/' + pos + '-' + note.note_title; | ||||||
| 
 | 
 | ||||||
|         fs.mkdirSync(childrenDir); |         fs.mkdirSync(childrenDir); | ||||||
| 
 | 
 | ||||||
|         for (const child of children) { |         for (const child of children) { | ||||||
|             await exportNote(child.note_id, childrenDir); |             await exportNote(child.note_tree_id, childrenDir); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -40,13 +40,29 @@ async function importNotes(dir, parentNoteId) { | |||||||
|             continue; |             continue; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         const noteTitle = file.substr(0, file.length - 5); |         const fileNameWithoutExt = 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]); |         let noteTitle; | ||||||
|         if (!maxPos) { |         let notePos; | ||||||
|             maxPos = 1; | 
 | ||||||
|  |         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; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         const noteText = fs.readFileSync(path, "utf8"); | ||||||
| 
 | 
 | ||||||
|         const noteId = utils.newNoteId(); |         const noteId = utils.newNoteId(); | ||||||
|         const noteTreeId = utils.newNoteHistoryId(); |         const noteTreeId = utils.newNoteHistoryId(); | ||||||
| @ -55,7 +71,7 @@ async function importNotes(dir, parentNoteId) { | |||||||
|             note_tree_id: noteTreeId, |             note_tree_id: noteTreeId, | ||||||
|             note_id: noteId, |             note_id: noteId, | ||||||
|             note_pid: parentNoteId, |             note_pid: parentNoteId, | ||||||
|             note_pos: maxPos + 1, |             note_pos: notePos, | ||||||
|             is_expanded: 0, |             is_expanded: 0, | ||||||
|             is_deleted: 0, |             is_deleted: 0, | ||||||
|             date_modified: utils.nowTimestamp() |             date_modified: utils.nowTimestamp() | ||||||
| @ -75,7 +91,7 @@ async function importNotes(dir, parentNoteId) { | |||||||
| 
 | 
 | ||||||
|         await sync_table.addNoteSync(noteId); |         await sync_table.addNoteSync(noteId); | ||||||
| 
 | 
 | ||||||
|         const noteDir = dir + '/' + noteTitle; |         const noteDir = dir + '/' + fileNameWithoutExt; | ||||||
| 
 | 
 | ||||||
|         if (fs.existsSync(noteDir) && fs.lstatSync(noteDir).isDirectory()) { |         if (fs.existsSync(noteDir) && fs.lstatSync(noteDir).isDirectory()) { | ||||||
|             await importNotes(noteDir, noteId); |             await importNotes(noteDir, noteId); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 azivner
						azivner