From 8bb3771d2bf320051e2b927149b56d35d5e62f59 Mon Sep 17 00:00:00 2001 From: Ramon Date: Mon, 3 Aug 2026 23:21:21 +0200 Subject: [PATCH] v0.8.08-beta - paden rechtzetten en er verandert niets De appslijst bleef leeg na het rechtzetten van de paden, terwijl de API de apps gewoon leverde: de pagina haalde ze nooit opnieuw op. goto() wisselt alleen van pagina en saveSettings() verversde niets, dus je keek naar de lijst van bij het laden van de pagina. - bij een padwijziging worden de appslijst en de containers opnieuw opgehaald - saveSettings() gooide het antwoord van de server weg en meldde altijd "opgeslagen", ook als de server de opslag weigerde. Sinds v0.8.05 een pad buiten de koppeling weigert was dat het verschil tussen aangepast en niets gebeurd; de melding komt nu in beeld Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01Q9eqpADJSRs49SoGGr4NAy --- CHANGELOG.md | 19 +++++++++++++++++++ VERSION | 2 +- server-up/templates/index.html | 24 +++++++++++++++++++++++- tests/js/menu.test.js | 27 +++++++++++++++++++++++++++ 4 files changed, 70 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a043c8e..5cbc838 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,22 @@ +# v0.8.08-beta — Paden rechtzetten en er verandert niets + +Zet je in Instellingen → Paden je mappen goed, dan bleef de appslijst leeg. Niet +omdat er iets mis was — de API leverde de apps gewoon — maar omdat de pagina ze +nooit opnieuw ophaalde. `goto()` wisselt alleen van pagina, en `saveSettings()` +verversde niets. Je keek dus naar de lijst zoals die bij het laden van de pagina +was: leeg. Een herlaadactie loste het op, als je dat wist. + +Twee dingen daaraan: + +- Verandert een pad, dan worden de appslijst en de containers opnieuw + opgehaald. Alleen bij een padwijziging, zodat een gewone instelling niet + telkens twee verzoeken kost. +- **Een geweigerde opslag meldde zich als "opgeslagen".** `saveSettings()` gooide + het antwoord van de server weg en zette onvoorwaardelijk het vinkje. Sinds + v0.8.05 een pad buiten de gekoppelde map weigert, is dat het verschil tussen + "aangepast" en "er is niets gebeurd" — en je zag alleen het vinkje. De + foutmelding van de server komt nu in beeld. + # v0.8.07-beta — "Rondgang geslaagd" en toch een rode job De backup-rondgang doorliep alle vijf de stappen goed — dump, archief, alles diff --git a/VERSION b/VERSION index 18f96b0..dbbb9a4 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.8.07-beta +0.8.08-beta diff --git a/server-up/templates/index.html b/server-up/templates/index.html index 28ab5f2..fe12332 100644 --- a/server-up/templates/index.html +++ b/server-up/templates/index.html @@ -2533,6 +2533,7 @@ function app() { filterOpen: false, filterTagQuery: '', stackMenu: '', stackFilterOpen: false, hoofdmap: '', afgeleidePaden: {}, padCheck: {}, padenVoorWijziging: {}, padWaarschuwing: '', + _padStand: null, padVelden: [ { sleutel: 'LIBRARY_DIR', label: 'library_dir' }, { sleutel: 'DATA_DIR', label: 'appdata_dir' }, @@ -3984,6 +3985,8 @@ function app() { BACKUP_DIR: this.settings.BACKUP_DIR, }; this.hoofdmap = this.settings.BASE_DIR || ''; + this._padStand = ['LIBRARY_DIR', 'DATA_DIR', 'BACKUP_DIR'] + .map(k => this.settings[k] || '').join('|'); await this.loadAppStore(); await this.loadUsers(); await this.loadNetworks(); @@ -3995,8 +3998,27 @@ function app() { async saveSettings() { if (this.saveTimer) { clearTimeout(this.saveTimer); this.saveTimer = null; } const body = { ...this.settings, LANGUAGE: this.settings.LANGUAGE, THEME: this.theme }; - await this.req('/api/settings', { method:'PUT', json: body }); + const d = await this.req('/api/settings', { method:'PUT', json: body }); + // De uitkomst werd weggegooid: een geweigerde opslag meldde zich net zo + // vrolijk als "opgeslagen". Sinds een pad buiten de gekoppelde map + // geweigerd wordt, is dat het verschil tussen "aangepast" en "er is + // niets gebeurd". + if (d && d.ok === false) { + this.toast(d.msg || this.t('error'), 'er'); + return false; + } this.saved = true; setTimeout(() => this.saved = false, 1500); + // De appslijst hangt aan LIBRARY_DIR. Zonder dit blijf je na een + // padwijziging kijken naar wat er bij het laden van de pagina stond — + // je zet je paden goed en er verandert zichtbaar niets. + const stand = ['LIBRARY_DIR', 'DATA_DIR', 'BACKUP_DIR'] + .map(k => this.settings[k] || '').join('|'); + if (stand !== this._padStand) { + this._padStand = stand; + await this.loadStacks(); + await this.loadHostContainers(); + } + return true; }, autoSave() { if (this.saveTimer) clearTimeout(this.saveTimer); diff --git a/tests/js/menu.test.js b/tests/js/menu.test.js index 8eac5d1..18464f5 100644 --- a/tests/js/menu.test.js +++ b/tests/js/menu.test.js @@ -424,6 +424,33 @@ check('balk staat halverwege', c.job.progress.pct === 50); check('en geen knop die apps belooft', c.storeVerborgen === 0); check('de teller is ook nul', c.storeResultaat === 0); + // ── Instellingen opslaan ────────────────────────────────────────────────── + // De uitkomst werd weggegooid: een geweigerde opslag meldde zich als + // "opgeslagen". En na een padwijziging werd niets herladen, dus je zette je + // paden goed en zag hetzelfde lege scherm. + let herladen = 0; + let getoast = ''; + c.loadStacks = async () => { herladen++; }; + c.loadHostContainers = async () => { herladen++; }; + c.toast = (m) => { getoast = m; }; + c.settings = {LIBRARY_DIR: '/opt/serverup/stacks', DATA_DIR: '/opt/a', BACKUP_DIR: '/opt/b'}; + c._padStand = ['LIBRARY_DIR','DATA_DIR','BACKUP_DIR'].map(k => c.settings[k]).join('|'); + + c.req = async () => ({ok: false, msg: 'Server Up kan niet bij /srv/x'}); + c.settings.LIBRARY_DIR = '/srv/x'; + check('een geweigerde opslag geeft false terug', (await c.saveSettings()) === false); + check('en meldt waarom', getoast.includes('/srv/x')); + check('en herlaadt niets', herladen === 0); + check('en zegt niet dat het opgeslagen is', c.saved !== true); + + c.req = async () => ({ok: true}); + check('een geslaagde opslag geeft true terug', (await c.saveSettings()) === true); + check('en haalt de lijst opnieuw op', herladen === 2); + + herladen = 0; + check('nog een keer opslaan zonder padwijziging lukt', (await c.saveSettings()) === true); + check('en herlaadt dan niet opnieuw', herladen === 0); + c.rpc = poortRpc; // ── Eén lijst voor beheerde en handmatig gestarte apps ────────────────────