mirror of
https://github.com/zadam/trilium.git
synced 2025-03-01 14:22:32 +01:00
cleanup of note (& revisions) content is now postponed and done 48 hours after deleting it. This makes it possible to correct user mistake without having to use a real backup
This commit is contained in:
parent
370efdc034
commit
80178b52c0
@ -104,6 +104,13 @@ class Note extends Entity {
|
||||
return await repository.getEntities(`SELECT * FROM attributes WHERE isDeleted = 0 AND noteId = ?`, [this.noteId]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {Promise<Attribute[]>} relations targetting this specific note
|
||||
*/
|
||||
async getTargetRelations() {
|
||||
return await repository.getEntities("SELECT * FROM attributes WHERE type = 'relation' AND isDeleted = 0 AND value = ?", [this.noteId]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} [name] - attribute name to filter
|
||||
* @returns {Promise<Attribute[]>} all note's attributes, including inherited ones
|
||||
|
@ -278,11 +278,11 @@ async function deleteNote(branch) {
|
||||
|
||||
if (notDeletedBranches.length === 0) {
|
||||
note.isDeleted = true;
|
||||
note.content = '';
|
||||
// we don't reset content here, that's postponed and done later to give the user
|
||||
// a chance to correct a mistake
|
||||
await note.save();
|
||||
|
||||
for (const noteRevision of await note.getRevisions()) {
|
||||
noteRevision.content = '';
|
||||
await noteRevision.save();
|
||||
}
|
||||
|
||||
@ -295,15 +295,36 @@ async function deleteNote(branch) {
|
||||
await attribute.save();
|
||||
}
|
||||
|
||||
const targetAttributes = await repository.getEntities("SELECT * FROM attributes WHERE type = 'relation' AND isDeleted = 0 AND value = ?", [note.noteId]);
|
||||
|
||||
for (const attribute of targetAttributes) {
|
||||
for (const attribute of await note.getTargetRelations()) {
|
||||
attribute.isDeleted = true;
|
||||
await attribute.save();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function cleanupDeletedNotes() {
|
||||
const cutoffDate = new Date(new Date().getTime() - 48 * 3600 * 1000);
|
||||
|
||||
const notesForCleanup = await repository.getEntities("SELECT * FROM notes WHERE isDeleted = 1 AND content != '' AND dateModified <= ?", [dateUtils.dateStr(cutoffDate)]);
|
||||
|
||||
for (const note of notesForCleanup) {
|
||||
note.content = '';
|
||||
await note.save();
|
||||
}
|
||||
|
||||
const notesRevisionsForCleanup = await repository.getEntities("SELECT note_revisions.* FROM notes JOIN note_revisions USING(noteId) WHERE notes.isDeleted = 1 AND note_revisions.content != '' AND notes.dateModified <= ?", [dateUtils.dateStr(cutoffDate)]);
|
||||
|
||||
for (const noteRevision of notesRevisionsForCleanup) {
|
||||
noteRevision.content = '';
|
||||
await noteRevision.save();
|
||||
}
|
||||
}
|
||||
|
||||
// first cleanup kickoff 5 minutes after startup
|
||||
setTimeout(cleanupDeletedNotes, 5 * 60 * 1000);
|
||||
|
||||
setInterval(cleanupDeletedNotes, 4 * 3600 * 1000);
|
||||
|
||||
module.exports = {
|
||||
createNewNote,
|
||||
createNote,
|
||||
|
Loading…
x
Reference in New Issue
Block a user