mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-31 10:26:08 +01:00 
			
		
		
		
	sync fixes
This commit is contained in:
		| @@ -16,8 +16,8 @@ router.post('', auth.checkApiAuth, async (req, res, next) => { | ||||
|     const browserId = req.get('x-browser-id'); | ||||
|  | ||||
|     const noteTreeChangesCount = await sql.getSingleValue("SELECT COUNT(*) FROM audit_log WHERE (browser_id IS NULL OR browser_id != ?) " + | ||||
|         "AND date_modified >= ? AND category IN (?, ?, ?)", [browserId, treeLoadTime, | ||||
|         audit_category.UPDATE_TITLE, audit_category.CHANGE_PARENT, audit_category.CHANGE_POSITION]); | ||||
|         "AND date_modified >= ? AND category IN (?, ?, ?, ?)", [browserId, treeLoadTime, | ||||
|         audit_category.UPDATE_TITLE, audit_category.CHANGE_PARENT, audit_category.CHANGE_POSITION, audit_category.DELETE_NOTE]); | ||||
|  | ||||
|     const currentNoteChangesCount = await sql.getSingleValue("SELECT COUNT(*) FROM audit_log WHERE (browser_id IS NULL OR browser_id != ?) " + | ||||
|         "AND date_modified >= ? AND note_id = ? AND category IN (?, ?)", [browserId, currentNoteLoadTime, currentNoteId, | ||||
|   | ||||
| @@ -6,6 +6,7 @@ const sql = require('../../services/sql'); | ||||
| const options = require('../../services/options'); | ||||
| const utils = require('../../services/utils'); | ||||
| const auth = require('../../services/auth'); | ||||
| const log = require('../../services/log'); | ||||
|  | ||||
| router.get('/', auth.checkApiAuth, async (req, res, next) => { | ||||
|     const notes = await sql.getResults("select " | ||||
| @@ -24,33 +25,37 @@ router.get('/', auth.checkApiAuth, async (req, res, next) => { | ||||
|     const notes_map = {}; | ||||
|  | ||||
|     for (const note of notes) { | ||||
|         note['children'] = []; | ||||
|         note.children = []; | ||||
|  | ||||
|         if (!note['note_pid']) { | ||||
|         if (!note.note_pid) { | ||||
|             root_notes.push(note); | ||||
|         } | ||||
|  | ||||
|         notes_map[note['note_id']] = note; | ||||
|         notes_map[note.note_id] = note; | ||||
|     } | ||||
|  | ||||
|     for (const note of notes) { | ||||
|         if (note['note_pid'] !== "") { | ||||
|             const parent = notes_map[note['note_pid']]; | ||||
|         if (note.note_pid !== "") { | ||||
|             const parent = notes_map[note.note_pid]; | ||||
|  | ||||
|             parent['children'].push(note); | ||||
|             parent['folder'] = true; | ||||
|             if (!parent) { | ||||
|                 log.error("Parent " + note.note_pid + ' has not been found'); | ||||
|                 continue; | ||||
|             } | ||||
|             parent.children.push(note); | ||||
|             parent.folder = true; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     res.send({ | ||||
|         'notes': root_notes, | ||||
|         'start_note_id': await options.getOption('start_node'), | ||||
|         'password_verification_salt': await options.getOption('password_verification_salt'), | ||||
|         'password_derived_key_salt': await options.getOption('password_derived_key_salt'), | ||||
|         'encrypted_data_key': await options.getOption('encrypted_data_key'), | ||||
|         'encryption_session_timeout': await options.getOption('encryption_session_timeout'), | ||||
|         'browser_id': utils.randomString(12), | ||||
|         'tree_load_time': utils.nowTimestamp() | ||||
|         notes: root_notes, | ||||
|         start_note_id: await options.getOption('start_node'), | ||||
|         password_verification_salt: await options.getOption('password_verification_salt'), | ||||
|         password_derived_key_salt: await options.getOption('password_derived_key_salt'), | ||||
|         encrypted_data_key: await options.getOption('encrypted_data_key'), | ||||
|         encryption_session_timeout: await options.getOption('encryption_session_timeout'), | ||||
|         browser_id: utils.randomString(12), | ||||
|         tree_load_time: utils.nowTimestamp() | ||||
|     }); | ||||
| }); | ||||
|  | ||||
|   | ||||
| @@ -37,6 +37,8 @@ async function createNewNote(parentNoteId, note, browserId) { | ||||
|  | ||||
|     await sql.doInTransaction(async () => { | ||||
|         await sql.addAudit(audit_category.CREATE_NOTE, browserId, noteId); | ||||
|         await sql.addNoteTreeSync(noteId, browserId); | ||||
|         await sql.addNoteSync(noteId, browserId); | ||||
|  | ||||
|         const now = utils.nowTimestamp(); | ||||
|  | ||||
| @@ -127,25 +129,28 @@ async function updateNote(noteId, newNote, browserId) { | ||||
|             await sql.insert("links", link); | ||||
|         } | ||||
|  | ||||
|         await sql.addNoteTreeSync(noteId); | ||||
|         await sql.addNoteSync(noteId); | ||||
|     }); | ||||
| } | ||||
|  | ||||
| async function addNoteAudits(origNote, newNote, browserId) { | ||||
|     const noteId = origNote.note_id; | ||||
|     const noteId = newNote.note_id; | ||||
|  | ||||
|     if (newNote.note_title !== origNote.note_title) { | ||||
|     if (!origNote || newNote.note_title !== origNote.note_title) { | ||||
|         await sql.deleteRecentAudits(audit_category.UPDATE_TITLE, browserId, noteId); | ||||
|         await sql.addAudit(audit_category.UPDATE_TITLE, browserId, noteId); | ||||
|     } | ||||
|  | ||||
|     if (newNote.note_text !== origNote.note_text) { | ||||
|     if (!origNote || newNote.note_text !== origNote.note_text) { | ||||
|         await sql.deleteRecentAudits(audit_category.UPDATE_CONTENT, browserId, noteId); | ||||
|         await sql.addAudit(audit_category.UPDATE_CONTENT, browserId, noteId); | ||||
|     } | ||||
|  | ||||
|     if (newNote.encryption !== origNote.encryption) { | ||||
|         await sql.addAudit(audit_category.ENCRYPTION, browserId, noteId, origNote.encryption, newNote.encryption); | ||||
|     if (!origNote || newNote.encryption !== origNote.encryption) { | ||||
|         const origEncryption = origNote ? origNote.encryption : null; | ||||
|  | ||||
|         await sql.addAudit(audit_category.ENCRYPTION, browserId, noteId, origEncryption, newNote.encryption); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -162,6 +167,9 @@ async function deleteNote(noteId, browserId) { | ||||
|     await sql.execute("update notes_tree set is_deleted = 1, date_modified = ? where note_id = ?", [now, noteId]); | ||||
|     await sql.execute("update notes set is_deleted = 1, date_modified = ? where note_id = ?", [now, noteId]); | ||||
|  | ||||
|     await sql.addNoteTreeSync(noteId, browserId); | ||||
|     await sql.addNoteSync(noteId, browserId); | ||||
|  | ||||
|     await sql.addAudit(audit_category.DELETE_NOTE, browserId, noteId); | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -225,8 +225,10 @@ async function sync() { | ||||
|             }; | ||||
|         } | ||||
|  | ||||
|         let syncContext; | ||||
|  | ||||
|         try { | ||||
|             const syncContext = await login(); | ||||
|             syncContext = await login(); | ||||
|         } | ||||
|         catch (e) { | ||||
|             if (e.message.indexOf('ECONNREFUSED') !== -1) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user