mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-31 10:26:08 +01:00 
			
		
		
		
	creating / updating notes_image rows
This commit is contained in:
		| @@ -135,6 +135,78 @@ async function protectNoteHistory(noteId, dataKey, protect, sourceId) { | |||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | async function saveNoteHistory(noteId, dataKey, sourceId, nowStr) { | ||||||
|  |     const oldNote = await sql.getFirst("SELECT * FROM notes WHERE note_id = ?", [noteId]); | ||||||
|  |  | ||||||
|  |     if (oldNote.is_protected) { | ||||||
|  |         decryptNote(oldNote, dataKey); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     const newNoteHistoryId = utils.newNoteHistoryId(); | ||||||
|  |  | ||||||
|  |     await sql.insert('notes_history', { | ||||||
|  |         note_history_id: newNoteHistoryId, | ||||||
|  |         note_id: noteId, | ||||||
|  |         // title and text should be decrypted now | ||||||
|  |         note_title: oldNote.note_title, | ||||||
|  |         note_text: oldNote.note_text, | ||||||
|  |         is_protected: 0, // will be fixed in the protectNoteHistory() call | ||||||
|  |         date_modified_from: oldNote.date_modified, | ||||||
|  |         date_modified_to: nowStr | ||||||
|  |     }); | ||||||
|  |  | ||||||
|  |     await sync_table.addNoteHistorySync(newNoteHistoryId, sourceId); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | async function saveNoteImages(noteId, noteText, sourceId) { | ||||||
|  |     const existingNoteImages = await sql.getAll("SELECT * FROM notes_image WHERE note_id = ?", [noteId]); | ||||||
|  |     const foundImageIds = []; | ||||||
|  |     const now = utils.nowDate(); | ||||||
|  |     const re = /src="\/api\/images\/([a-zA-Z0-9]+)\//g; | ||||||
|  |     let match; | ||||||
|  |  | ||||||
|  |     while (match = re.exec(noteText)) { | ||||||
|  |         console.log(match); | ||||||
|  |  | ||||||
|  |         const imageId = match[1]; | ||||||
|  |         const existingNoteImage = existingNoteImages.find(ni => ni.image_id === imageId); | ||||||
|  |  | ||||||
|  |         if (!existingNoteImage) { | ||||||
|  |             const noteImageId = utils.newNoteImageId(); | ||||||
|  |  | ||||||
|  |             await sql.insert("notes_image", { | ||||||
|  |                 note_image_id: noteImageId, | ||||||
|  |                 note_id: noteId, | ||||||
|  |                 image_id: imageId, | ||||||
|  |                 is_deleted: 0, | ||||||
|  |                 date_modified: now, | ||||||
|  |                 date_created: now | ||||||
|  |             }); | ||||||
|  |  | ||||||
|  |             await sync_table.addNoteImageSync(noteImageId, sourceId); | ||||||
|  |         } | ||||||
|  |         else if (existingNoteImage.is_deleted) { | ||||||
|  |             await sql.execute("UPDATE notes_image SET is_deleted = 0, date_modified = ? WHERE note_image_id = ?", | ||||||
|  |                 [now, existingNoteImage.note_image_id]); | ||||||
|  |  | ||||||
|  |             await sync_table.addNoteImageSync(existingNoteImage.note_image_id, sourceId); | ||||||
|  |         } | ||||||
|  |         // else we don't need to do anything | ||||||
|  |  | ||||||
|  |         foundImageIds.push(imageId); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     // marking note images as deleted if they are not present on the page anymore | ||||||
|  |     const unusedNoteImages = existingNoteImages.filter(ni => !foundImageIds.includes(ni.image_id)); | ||||||
|  |  | ||||||
|  |     for (const unusedNoteImage of unusedNoteImages) { | ||||||
|  |         await sql.execute("UPDATE notes_image SET is_deleted = 1, date_modified = ? WHERE note_image_id = ?", | ||||||
|  |             [now, unusedNoteImage.note_image_id]); | ||||||
|  |  | ||||||
|  |         await sync_table.addNoteImageSync(unusedNoteImage.note_image_id, sourceId); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
| async function updateNote(noteId, newNote, dataKey, sourceId) { | async function updateNote(noteId, newNote, dataKey, sourceId) { | ||||||
|     if (newNote.detail.is_protected) { |     if (newNote.detail.is_protected) { | ||||||
|         await encryptNote(newNote, dataKey); |         await encryptNote(newNote, dataKey); | ||||||
| @@ -154,28 +226,11 @@ async function updateNote(noteId, newNote, dataKey, sourceId) { | |||||||
|         const msSinceDateCreated = now.getTime() - utils.parseDate(newNote.detail.date_created).getTime(); |         const msSinceDateCreated = now.getTime() - utils.parseDate(newNote.detail.date_created).getTime(); | ||||||
|  |  | ||||||
|         if (!existingNoteHistoryId && msSinceDateCreated >= historySnapshotTimeInterval * 1000) { |         if (!existingNoteHistoryId && msSinceDateCreated >= historySnapshotTimeInterval * 1000) { | ||||||
|             const oldNote = await sql.getFirst("SELECT * FROM notes WHERE note_id = ?", [noteId]); |             await saveNoteHistory(noteId, dataKey, sourceId, nowStr); | ||||||
|  |  | ||||||
|             if (oldNote.is_protected) { |  | ||||||
|                 decryptNote(oldNote, dataKey); |  | ||||||
|             } |  | ||||||
|  |  | ||||||
|             const newNoteHistoryId = utils.newNoteHistoryId(); |  | ||||||
|  |  | ||||||
|             await sql.insert('notes_history', { |  | ||||||
|                 note_history_id: newNoteHistoryId, |  | ||||||
|                 note_id: noteId, |  | ||||||
|                 // title and text should be decrypted now |  | ||||||
|                 note_title: oldNote.note_title, |  | ||||||
|                 note_text: oldNote.note_text, |  | ||||||
|                 is_protected: 0, // will be fixed in the protectNoteHistory() call |  | ||||||
|                 date_modified_from: oldNote.date_modified, |  | ||||||
|                 date_modified_to: nowStr |  | ||||||
|             }); |  | ||||||
|  |  | ||||||
|             await sync_table.addNoteHistorySync(newNoteHistoryId, sourceId); |  | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         await saveNoteImages(noteId, newNote.detail.note_text, sourceId); | ||||||
|  |  | ||||||
|         await protectNoteHistory(noteId, dataKey, newNote.detail.is_protected); |         await protectNoteHistory(noteId, dataKey, newNote.detail.is_protected); | ||||||
|  |  | ||||||
|         await sql.execute("UPDATE notes SET note_title = ?, note_text = ?, is_protected = ?, date_modified = ? WHERE note_id = ?", [ |         await sql.execute("UPDATE notes SET note_title = ?, note_text = ?, is_protected = ?, date_modified = ? WHERE note_id = ?", [ | ||||||
|   | |||||||
| @@ -32,8 +32,8 @@ async function addImageSync(imageId, sourceId) { | |||||||
|     await addEntitySync("images", imageId, sourceId); |     await addEntitySync("images", imageId, sourceId); | ||||||
| } | } | ||||||
|  |  | ||||||
| async function addNoteImageSync(imageId, sourceId) { | async function addNoteImageSync(noteImageId, sourceId) { | ||||||
|     await addEntitySync("notes_image", imageId, sourceId); |     await addEntitySync("notes_image", noteImageId, sourceId); | ||||||
| } | } | ||||||
|  |  | ||||||
| async function addEntitySync(entityName, entityId, sourceId) { | async function addEntitySync(entityName, entityId, sourceId) { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user