fix(core): error due to CLS on standalone

This commit is contained in:
Elian Doran
2026-04-12 18:34:19 +03:00
parent 0d5c9986b6
commit 35317b3dab
2 changed files with 66 additions and 55 deletions

View File

@@ -6,6 +6,7 @@
import sanitizeFilename from "sanitize-filename";
import becca from "../becca/becca.js";
import { getContext } from "./context.js";
import { getLog } from "./log.js";
import { getImageProvider } from "./image_provider.js";
import noteService from "./notes.js";
@@ -33,10 +34,12 @@ function updateImage(noteId: string, uploadBuffer: Uint8Array, originalName: str
// Process image asynchronously
getImageProvider().processImage(uploadBuffer, originalName, true).then(({ buffer, format }) => {
getSql().transactional(() => {
note.mime = getImageMimeFromExtension(format.ext);
note.save();
note.setContent(buffer);
getContext().init(() => {
getSql().transactional(() => {
note.mime = getImageMimeFromExtension(format.ext);
note.save();
note.setContent(buffer);
});
});
});
}
@@ -73,16 +76,18 @@ function saveImage(
// Process image asynchronously
getImageProvider().processImage(uploadBuffer, originalName, shrinkImageSwitch).then(({ buffer, format }) => {
getSql().transactional(() => {
note.mime = getImageMimeFromExtension(format.ext);
getContext().init(() => {
getSql().transactional(() => {
note.mime = getImageMimeFromExtension(format.ext);
if (!originalName.includes(".")) {
originalName += `.${format.ext}`;
note.setLabel("originalFileName", originalName);
note.title = sanitizeFilename(originalName);
}
if (!originalName.includes(".")) {
originalName += `.${format.ext}`;
note.setLabel("originalFileName", originalName);
note.title = sanitizeFilename(originalName);
}
note.setContent(buffer, { forceSave: true });
note.setContent(buffer, { forceSave: true });
});
});
});
@@ -118,29 +123,33 @@ function saveImageToAttachment(
// Schedule post-processing to mark unused attachments
setTimeout(() => {
getSql().transactional(() => {
const note = becca.getNoteOrThrow(noteId);
noteService.asyncPostProcessContent(note, note.getContent());
getContext().init(() => {
getSql().transactional(() => {
const note = becca.getNoteOrThrow(noteId);
noteService.asyncPostProcessContent(note, note.getContent());
});
});
}, 5000);
// Process image asynchronously
const attachmentId = attachment.attachmentId;
getImageProvider().processImage(uploadBuffer, originalName, !!shrinkImageSwitch).then(({ buffer, format }) => {
getSql().transactional(() => {
if (!attachmentId) {
throw new Error("Missing attachment ID.");
}
attachment = becca.getAttachmentOrThrow(attachmentId);
getContext().init(() => {
getSql().transactional(() => {
if (!attachmentId) {
throw new Error("Missing attachment ID.");
}
attachment = becca.getAttachmentOrThrow(attachmentId);
attachment.mime = getImageMimeFromExtension(format.ext);
attachment.mime = getImageMimeFromExtension(format.ext);
if (!originalName.includes(".")) {
originalName += `.${format.ext}`;
attachment.title = sanitizeFilename(originalName);
}
if (!originalName.includes(".")) {
originalName += `.${format.ext}`;
attachment.title = sanitizeFilename(originalName);
}
attachment.setContent(buffer, { forceSave: true });
attachment.setContent(buffer, { forceSave: true });
});
});
});

View File

@@ -636,41 +636,43 @@ function downloadImages(noteId: string, content: string) {
// are downloaded and the IMG references are not updated. For this occasion we have this code
// which upon the download of all the images will update the note if the links have not been fixed before
getSql().transactional(() => {
const imageNotes = becca.getNotes(Object.values(imageUrlToAttachmentIdMapping), true);
const log = getLog();
cls.getContext().init(() => {
getSql().transactional(() => {
const imageNotes = becca.getNotes(Object.values(imageUrlToAttachmentIdMapping), true);
const log = getLog();
const origNote = becca.getNote(noteId);
const origNote = becca.getNote(noteId);
if (!origNote) {
log.error(`Cannot find note '${noteId}' to replace image link.`);
return;
}
const origContent = origNote.getContent();
let updatedContent = origContent;
if (typeof updatedContent !== "string") {
log.error(`Note '${noteId}' has a non-string content, cannot replace image link.`);
return;
}
for (const url in imageUrlToAttachmentIdMapping) {
const imageNote = imageNotes.find((note) => note.noteId === imageUrlToAttachmentIdMapping[url]);
if (imageNote) {
updatedContent = replaceUrl(updatedContent, url, imageNote);
if (!origNote) {
log.error(`Cannot find note '${noteId}' to replace image link.`);
return;
}
}
// update only if the links have not been already fixed.
if (updatedContent !== origContent) {
origNote.setContent(updatedContent);
const origContent = origNote.getContent();
let updatedContent = origContent;
asyncPostProcessContent(origNote, updatedContent);
if (typeof updatedContent !== "string") {
log.error(`Note '${noteId}' has a non-string content, cannot replace image link.`);
return;
}
console.log(`Fixed the image links for note '${noteId}' to the offline saved.`);
}
for (const url in imageUrlToAttachmentIdMapping) {
const imageNote = imageNotes.find((note) => note.noteId === imageUrlToAttachmentIdMapping[url]);
if (imageNote) {
updatedContent = replaceUrl(updatedContent, url, imageNote);
}
}
// update only if the links have not been already fixed.
if (updatedContent !== origContent) {
origNote.setContent(updatedContent);
asyncPostProcessContent(origNote, updatedContent);
console.log(`Fixed the image links for note '${noteId}' to the offline saved.`);
}
});
});
}, 5000);
});