mirror of
https://github.com/zadam/trilium.git
synced 2025-03-01 14:22:32 +01:00
added option to disable backup, #2210
This commit is contained in:
parent
899d9e65fd
commit
8bd7b657f8
@ -11,13 +11,14 @@ export async function showDialog() {
|
|||||||
utils.openDialog($dialog);
|
utils.openDialog($dialog);
|
||||||
|
|
||||||
(await Promise.all([
|
(await Promise.all([
|
||||||
import('./options/advanced.js'),
|
|
||||||
import('./options/appearance.js'),
|
import('./options/appearance.js'),
|
||||||
|
import('./options/shortcuts.js'),
|
||||||
import('./options/code_notes.js'),
|
import('./options/code_notes.js'),
|
||||||
import('./options/credentials.js'),
|
import('./options/credentials.js'),
|
||||||
import('./options/other.js'),
|
import('./options/backup.js'),
|
||||||
import('./options/sync.js'),
|
import('./options/sync.js'),
|
||||||
import('./options/keyboard_shortcuts.js'),
|
import('./options/other.js'),
|
||||||
|
import('./options/advanced.js')
|
||||||
]))
|
]))
|
||||||
.map(m => new m.default)
|
.map(m => new m.default)
|
||||||
.forEach(tab => {
|
.forEach(tab => {
|
||||||
@ -25,4 +26,4 @@ export async function showDialog() {
|
|||||||
tab.optionsLoaded(options)
|
tab.optionsLoaded(options)
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -24,12 +24,6 @@ const TPL = `
|
|||||||
|
|
||||||
<button id="anonymize-button" class="btn">Save anonymized database</button><br/><br/>
|
<button id="anonymize-button" class="btn">Save anonymized database</button><br/><br/>
|
||||||
|
|
||||||
<h4>Backup database</h4>
|
|
||||||
|
|
||||||
<p>Trilium has automatic backup (daily, weekly, monthly), but you can also trigger a manual backup here.</p>
|
|
||||||
|
|
||||||
<button id="backup-database-button" class="btn">Backup database now</button><br/><br/>
|
|
||||||
|
|
||||||
<h4>Vacuum database</h4>
|
<h4>Vacuum database</h4>
|
||||||
|
|
||||||
<p>This will rebuild the database which will typically result in a smaller database file. No data will be actually changed.</p>
|
<p>This will rebuild the database which will typically result in a smaller database file. No data will be actually changed.</p>
|
||||||
@ -70,12 +64,6 @@ export default class AdvancedOptions {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
this.$backupDatabaseButton.on('click', async () => {
|
|
||||||
const {backupFile} = await server.post('database/backup-database');
|
|
||||||
|
|
||||||
toastService.showMessage("Database has been backed up to " + backupFile, 10000);
|
|
||||||
});
|
|
||||||
|
|
||||||
this.$vacuumDatabaseButton.on('click', async () => {
|
this.$vacuumDatabaseButton.on('click', async () => {
|
||||||
await server.post('database/vacuum-database');
|
await server.post('database/vacuum-database');
|
||||||
|
|
||||||
|
78
src/public/app/dialogs/options/backup.js
Normal file
78
src/public/app/dialogs/options/backup.js
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
import server from "../../services/server.js";
|
||||||
|
import toastService from "../../services/toast.js";
|
||||||
|
|
||||||
|
const TPL = `
|
||||||
|
<h4>Automatic backup</h4>
|
||||||
|
|
||||||
|
<p>Trilium can back up the database automatically:</p>
|
||||||
|
|
||||||
|
<div class="custom-control custom-checkbox">
|
||||||
|
<input type="checkbox" class="custom-control-input" id="daily-backup-enabled">
|
||||||
|
<label class="custom-control-label" for="daily-backup-enabled">Enable daily backup</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="custom-control custom-checkbox">
|
||||||
|
<input type="checkbox" class="custom-control-input" id="weekly-backup-enabled">
|
||||||
|
<label class="custom-control-label" for="weekly-backup-enabled">Enable weekly backup</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="custom-control custom-checkbox">
|
||||||
|
<input type="checkbox" class="custom-control-input" id="monthly-backup-enabled">
|
||||||
|
<label class="custom-control-label" for="monthly-backup-enabled">Enable monthly backup</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
<p>It's recommended to keep the backup turned on, but this can make application startup slow with large databases and/or slow storage devices.</p>
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
<h4>Backup now</h4>
|
||||||
|
|
||||||
|
<button id="backup-database-button" class="btn">Backup database now</button><br/><br/>
|
||||||
|
`;
|
||||||
|
|
||||||
|
export default class BackupOptions {
|
||||||
|
constructor() {
|
||||||
|
$("#options-backup").html(TPL);
|
||||||
|
|
||||||
|
this.$backupDatabaseButton = $("#backup-database-button");
|
||||||
|
|
||||||
|
this.$backupDatabaseButton.on('click', async () => {
|
||||||
|
const {backupFile} = await server.post('database/backup-database');
|
||||||
|
|
||||||
|
toastService.showMessage("Database has been backed up to " + backupFile, 10000);
|
||||||
|
});
|
||||||
|
|
||||||
|
this.$dailyBackupEnabled = $("#daily-backup-enabled");
|
||||||
|
this.$weeklyBackupEnabled = $("#weekly-backup-enabled");
|
||||||
|
this.$monthlyBackupEnabled = $("#monthly-backup-enabled");
|
||||||
|
|
||||||
|
this.$dailyBackupEnabled.on('change', () => {
|
||||||
|
const opts = { 'dailyBackupEnabled': this.$dailyBackupEnabled.is(":checked") ? "true" : "false" };
|
||||||
|
server.put('options', opts).then(() => toastService.showMessage("Options change have been saved."));
|
||||||
|
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
this.$weeklyBackupEnabled.on('change', () => {
|
||||||
|
const opts = { 'weeklyBackupEnabled': this.$weeklyBackupEnabled.is(":checked") ? "true" : "false" };
|
||||||
|
server.put('options', opts).then(() => toastService.showMessage("Options change have been saved."));
|
||||||
|
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
this.$monthlyBackupEnabled.on('change', () => {
|
||||||
|
const opts = { 'monthlyBackupEnabled': this.$monthlyBackupEnabled.is(":checked") ? "true" : "false" };
|
||||||
|
server.put('options', opts).then(() => toastService.showMessage("Options change have been saved."));
|
||||||
|
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
optionsLoaded(options) {
|
||||||
|
this.$dailyBackupEnabled.prop("checked", options['dailyBackupEnabled'] === 'true');
|
||||||
|
this.$weeklyBackupEnabled.prop("checked", options['weeklyBackupEnabled'] === 'true');
|
||||||
|
this.$monthlyBackupEnabled.prop("checked", options['monthlyBackupEnabled'] === 'true');
|
||||||
|
}
|
||||||
|
}
|
@ -35,7 +35,7 @@ let globActions;
|
|||||||
|
|
||||||
export default class KeyboardShortcutsOptions {
|
export default class KeyboardShortcutsOptions {
|
||||||
constructor() {
|
constructor() {
|
||||||
$("#options-keyboard-shortcuts").html(TPL);
|
$("#options-shortcuts").html(TPL);
|
||||||
|
|
||||||
$("#options-keyboard-shortcuts-reload-app").on("click", () => utils.reloadFrontendApp());
|
$("#options-keyboard-shortcuts-reload-app").on("click", () => utils.reloadFrontendApp());
|
||||||
|
|
@ -50,7 +50,10 @@ const ALLOWED_OPTIONS = new Set([
|
|||||||
'autoCollapseNoteTree',
|
'autoCollapseNoteTree',
|
||||||
'autoReadonlySizeText',
|
'autoReadonlySizeText',
|
||||||
'autoReadonlySizeCode',
|
'autoReadonlySizeCode',
|
||||||
'overrideThemeFonts'
|
'overrideThemeFonts',
|
||||||
|
'dailyBackupEnabled',
|
||||||
|
'weeklyBackupEnabled',
|
||||||
|
'monthlyBackupEnabled',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
function getOptions() {
|
function getOptions() {
|
||||||
|
@ -20,12 +20,22 @@ function regularBackup() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function periodBackup(optionName, fileName, periodInSeconds) {
|
function isBackupEnabled(backupType) {
|
||||||
const now = new Date();
|
const optionName = `${backupType}BackupEnabled`;
|
||||||
const lastDailyBackupDate = dateUtils.parseDateTime(optionService.getOption(optionName));
|
|
||||||
|
|
||||||
if (now.getTime() - lastDailyBackupDate.getTime() > periodInSeconds * 1000) {
|
return optionService.getOptionBool(optionName);
|
||||||
backupNow(fileName);
|
}
|
||||||
|
|
||||||
|
function periodBackup(optionName, backupType, periodInSeconds) {
|
||||||
|
if (!isBackupEnabled(backupType)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const now = new Date();
|
||||||
|
const lastBackupDate = dateUtils.parseDateTime(optionService.getOption(optionName));
|
||||||
|
|
||||||
|
if (now.getTime() - lastBackupDate.getTime() > periodInSeconds * 1000) {
|
||||||
|
backupNow(backupType);
|
||||||
|
|
||||||
optionService.setOption(optionName, dateUtils.utcNowDateTime());
|
optionService.setOption(optionName, dateUtils.utcNowDateTime());
|
||||||
}
|
}
|
||||||
|
@ -87,6 +87,9 @@ const defaultOptions = [
|
|||||||
{ name: 'autoCollapseNoteTree', value: 'true', isSynced: true },
|
{ name: 'autoCollapseNoteTree', value: 'true', isSynced: true },
|
||||||
{ name: 'autoReadonlySizeText', value: '10000', isSynced: false },
|
{ name: 'autoReadonlySizeText', value: '10000', isSynced: false },
|
||||||
{ name: 'autoReadonlySizeCode', value: '30000', isSynced: false },
|
{ name: 'autoReadonlySizeCode', value: '30000', isSynced: false },
|
||||||
|
{ name: 'dailyBackupEnabled', value: 'true', isSynced: false },
|
||||||
|
{ name: 'weeklyBackupEnabled', value: 'true', isSynced: false },
|
||||||
|
{ name: 'monthlyBackupEnabled', value: 'true', isSynced: false }
|
||||||
];
|
];
|
||||||
|
|
||||||
function initStartupOptions() {
|
function initStartupOptions() {
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
<a class="nav-link active" data-toggle="tab" href="#options-appearance">Appearance</a>
|
<a class="nav-link active" data-toggle="tab" href="#options-appearance">Appearance</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" data-toggle="tab" href="#options-keyboard-shortcuts">Keyboard shortcuts</a>
|
<a class="nav-link" data-toggle="tab" href="#options-shortcuts">Shortcuts</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" data-toggle="tab" href="#options-code-notes">Code notes</a>
|
<a class="nav-link" data-toggle="tab" href="#options-code-notes">Code notes</a>
|
||||||
@ -22,6 +22,9 @@
|
|||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" data-toggle="tab" href="#options-credentials">Username & password</a>
|
<a class="nav-link" data-toggle="tab" href="#options-credentials">Username & password</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link" data-toggle="tab" href="#options-backup">Backup</a>
|
||||||
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" data-toggle="tab" href="#options-sync-setup">Sync</a>
|
<a class="nav-link" data-toggle="tab" href="#options-sync-setup">Sync</a>
|
||||||
</li>
|
</li>
|
||||||
@ -35,15 +38,16 @@
|
|||||||
<br/>
|
<br/>
|
||||||
<div class="tab-content">
|
<div class="tab-content">
|
||||||
<div id="options-appearance" class="tab-pane active"></div>
|
<div id="options-appearance" class="tab-pane active"></div>
|
||||||
<div id="options-keyboard-shortcuts" class="tab-pane"></div>
|
<div id="options-shortcuts" class="tab-pane"></div>
|
||||||
<div id="options-code-notes" class="tab-pane"></div>
|
<div id="options-code-notes" class="tab-pane"></div>
|
||||||
<div id="options-credentials" class="tab-pane"></div>
|
<div id="options-credentials" class="tab-pane"></div>
|
||||||
<div id="options-other" class="tab-pane"></div>
|
<div id="options-backup" class="tab-pane"></div>
|
||||||
<div id="options-sync-setup" class="tab-pane"></div>
|
<div id="options-sync-setup" class="tab-pane"></div>
|
||||||
|
<div id="options-other" class="tab-pane"></div>
|
||||||
<div id="options-advanced" class="tab-pane"></div>
|
<div id="options-advanced" class="tab-pane"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user