mirror of
https://github.com/SillyTavern/SillyTavern.git
synced 2025-06-05 21:59:27 +02:00
Auto-backup settings every 10 minutes. Increase backups limit to 50.
This commit is contained in:
@ -1,6 +1,7 @@
|
|||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const express = require('express');
|
const express = require('express');
|
||||||
|
const _ = require('lodash');
|
||||||
const writeFileAtomicSync = require('write-file-atomic').sync;
|
const writeFileAtomicSync = require('write-file-atomic').sync;
|
||||||
const { PUBLIC_DIRECTORIES, SETTINGS_FILE } = require('../constants');
|
const { PUBLIC_DIRECTORIES, SETTINGS_FILE } = require('../constants');
|
||||||
const { getConfigValue, generateTimestamp, removeOldBackups } = require('../util');
|
const { getConfigValue, generateTimestamp, removeOldBackups } = require('../util');
|
||||||
@ -10,6 +11,32 @@ const { getAllUserHandles, getUserDirectories } = require('../users');
|
|||||||
const ENABLE_EXTENSIONS = getConfigValue('enableExtensions', true);
|
const ENABLE_EXTENSIONS = getConfigValue('enableExtensions', true);
|
||||||
const ENABLE_ACCOUNTS = getConfigValue('enableUserAccounts', false);
|
const ENABLE_ACCOUNTS = getConfigValue('enableUserAccounts', false);
|
||||||
|
|
||||||
|
// 10 minutes
|
||||||
|
const AUTOSAVE_INTERVAL = 10 * 60 * 1000;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Map of functions to trigger settings autosave for a user.
|
||||||
|
* @type {Map<string, function>}
|
||||||
|
*/
|
||||||
|
const AUTOSAVE_FUNCTIONS = new Map();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Triggers autosave for a user every 10 minutes.
|
||||||
|
* @param {string} handle User handle
|
||||||
|
* @returns {void}
|
||||||
|
*/
|
||||||
|
function triggerAutoSave(handle) {
|
||||||
|
if (!AUTOSAVE_FUNCTIONS.has(handle)) {
|
||||||
|
const throttledAutoSave = _.throttle(() => backupUserSettings(handle), AUTOSAVE_INTERVAL);
|
||||||
|
AUTOSAVE_FUNCTIONS.set(handle, throttledAutoSave);
|
||||||
|
}
|
||||||
|
|
||||||
|
const functionToCall = AUTOSAVE_FUNCTIONS.get(handle);
|
||||||
|
if (functionToCall) {
|
||||||
|
functionToCall();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reads and parses files from a directory.
|
* Reads and parses files from a directory.
|
||||||
* @param {string} directoryPath Path to the directory
|
* @param {string} directoryPath Path to the directory
|
||||||
@ -121,6 +148,7 @@ router.post('/save', jsonParser, function (request, response) {
|
|||||||
try {
|
try {
|
||||||
const pathToSettings = path.join(request.user.directories.root, SETTINGS_FILE);
|
const pathToSettings = path.join(request.user.directories.root, SETTINGS_FILE);
|
||||||
writeFileAtomicSync(pathToSettings, JSON.stringify(request.body, null, 4), 'utf8');
|
writeFileAtomicSync(pathToSettings, JSON.stringify(request.body, null, 4), 'utf8');
|
||||||
|
triggerAutoSave(request.user.profile.handle);
|
||||||
response.send({ result: 'ok' });
|
response.send({ result: 'ok' });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log(err);
|
console.log(err);
|
||||||
|
@ -350,7 +350,7 @@ function generateTimestamp() {
|
|||||||
* @param {string} prefix
|
* @param {string} prefix
|
||||||
*/
|
*/
|
||||||
function removeOldBackups(prefix) {
|
function removeOldBackups(prefix) {
|
||||||
const MAX_BACKUPS = 25;
|
const MAX_BACKUPS = 50;
|
||||||
|
|
||||||
let files = fs.readdirSync(PUBLIC_DIRECTORIES.backups).filter(f => f.startsWith(prefix));
|
let files = fs.readdirSync(PUBLIC_DIRECTORIES.backups).filter(f => f.startsWith(prefix));
|
||||||
if (files.length > MAX_BACKUPS) {
|
if (files.length > MAX_BACKUPS) {
|
||||||
|
Reference in New Issue
Block a user