diff --git a/package-lock.json b/package-lock.json
index a042a5c36..82175019c 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "trilium",
- "version": "0.45.5",
+ "version": "0.45.6",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
diff --git a/src/public/app/dialogs/options/other.js b/src/public/app/dialogs/options/other.js
index 7e498052e..45b271f07 100644
--- a/src/public/app/dialogs/options/other.js
+++ b/src/public/app/dialogs/options/other.js
@@ -51,6 +51,12 @@ const TPL = `
+
+
You can also trigger erasing manually:
+
+
+
+
@@ -117,6 +123,13 @@ export default class ProtectedSessionOptions {
return false;
});
+ this.$eraseDeletedNotesButton = $("#erase-deleted-notes-now-button");
+ this.$eraseDeletedNotesButton.on('click', () => {
+ server.post('notes/erase-deleted-notes-now').then(() => {
+ toastService.showMessage("Deleted notes have been erased.");
+ });
+ });
+
this.$protectedSessionTimeout = $("#protected-session-timeout-in-seconds");
this.$protectedSessionTimeout.on('change', () => {
diff --git a/src/routes/api/notes.js b/src/routes/api/notes.js
index 4f03a5223..a839c0bcf 100644
--- a/src/routes/api/notes.js
+++ b/src/routes/api/notes.js
@@ -193,6 +193,10 @@ function duplicateSubtree(req) {
return noteService.duplicateSubtree(noteId, parentNoteId);
}
+function eraseDeletedNotesNow() {
+ noteService.eraseDeletedNotesNow();
+}
+
module.exports = {
getNote,
updateNote,
@@ -204,5 +208,6 @@ module.exports = {
setNoteTypeMime,
getRelationMap,
changeTitle,
- duplicateSubtree
+ duplicateSubtree,
+ eraseDeletedNotesNow
};
diff --git a/src/routes/api/setup.js b/src/routes/api/setup.js
index 98cdd6327..d2ec74b2e 100644
--- a/src/routes/api/setup.js
+++ b/src/routes/api/setup.js
@@ -38,6 +38,8 @@ function saveSyncSeed(req) {
}]
}
+ log.info("Saved sync seed.");
+
sqlInit.createDatabaseForSync(options);
}
diff --git a/src/routes/routes.js b/src/routes/routes.js
index cfa2e62d4..248cc6fe0 100644
--- a/src/routes/routes.js
+++ b/src/routes/routes.js
@@ -153,6 +153,7 @@ function register(app) {
route(GET, '/api/notes/:noteId/revisions/:noteRevisionId/download', [auth.checkApiAuthOrElectron], noteRevisionsApiRoute.downloadNoteRevision);
apiRoute(PUT, '/api/notes/:noteId/restore-revision/:noteRevisionId', noteRevisionsApiRoute.restoreNoteRevision);
apiRoute(POST, '/api/notes/relation-map', notesApiRoute.getRelationMap);
+ apiRoute(POST, '/api/notes/erase-deleted-notes-now', notesApiRoute.eraseDeletedNotesNow);
apiRoute(PUT, '/api/notes/:noteId/change-title', notesApiRoute.changeTitle);
apiRoute(POST, '/api/notes/:noteId/duplicate/:parentNoteId', notesApiRoute.duplicateSubtree);
diff --git a/src/services/notes.js b/src/services/notes.js
index 4aa944504..f7353eeb5 100644
--- a/src/services/notes.js
+++ b/src/services/notes.js
@@ -668,8 +668,10 @@ function scanForLinks(note) {
}
}
-function eraseDeletedNotes() {
- const eraseNotesAfterTimeInSeconds = optionService.getOptionInt('eraseNotesAfterTimeInSeconds');
+function eraseDeletedNotes(eraseNotesAfterTimeInSeconds = null) {
+ if (eraseNotesAfterTimeInSeconds === null) {
+ eraseNotesAfterTimeInSeconds = optionService.getOptionInt('eraseNotesAfterTimeInSeconds');
+ }
const cutoffDate = new Date(Date.now() - eraseNotesAfterTimeInSeconds * 1000);
@@ -719,6 +721,10 @@ function eraseDeletedNotes() {
log.info(`Erased notes: ${JSON.stringify(noteIdsToErase)}`);
}
+function eraseDeletedNotesNow() {
+ eraseDeletedNotes(0);
+}
+
// do a replace in str - all keys should be replaced by the corresponding values
function replaceByMap(str, mapObj) {
const re = new RegExp(Object.keys(mapObj).join("|"),"g");
@@ -841,5 +847,6 @@ module.exports = {
duplicateSubtree,
duplicateSubtreeWithoutRoot,
getUndeletedParentBranches,
- triggerNoteTitleChanged
+ triggerNoteTitleChanged,
+ eraseDeletedNotesNow
};