diff --git a/dist/backupper-2026.06.14.9.8-x86_64-1.txz.sha256 b/dist/backupper-2026.06.14.9.8-x86_64-1.txz.sha256 deleted file mode 100644 index 8354be5..0000000 --- a/dist/backupper-2026.06.14.9.8-x86_64-1.txz.sha256 +++ /dev/null @@ -1 +0,0 @@ -0442a269efe056ffdc47ec64d14bf0df898a020426a0a203efd8ac73fd0ced30 backupper-2026.06.14.9.8-x86_64-1.txz diff --git a/dist/backupper-2026.06.14.9.8-x86_64-1.txz b/dist/backupper-2026.06.14.9.9-x86_64-1.txz similarity index 55% rename from dist/backupper-2026.06.14.9.8-x86_64-1.txz rename to dist/backupper-2026.06.14.9.9-x86_64-1.txz index 5da2451..0181a8f 100644 Binary files a/dist/backupper-2026.06.14.9.8-x86_64-1.txz and b/dist/backupper-2026.06.14.9.9-x86_64-1.txz differ diff --git a/dist/backupper-2026.06.14.9.9-x86_64-1.txz.sha256 b/dist/backupper-2026.06.14.9.9-x86_64-1.txz.sha256 new file mode 100644 index 0000000..eb63935 --- /dev/null +++ b/dist/backupper-2026.06.14.9.9-x86_64-1.txz.sha256 @@ -0,0 +1 @@ +992ab86a0e90287a9f828943e2c3c01d88361f0b7c98c848c64ef9394139bc8f backupper-2026.06.14.9.9-x86_64-1.txz diff --git a/dist/backupper.plg b/dist/backupper.plg index a23833f..0954bcb 100644 --- a/dist/backupper.plg +++ b/dist/backupper.plg @@ -2,13 +2,16 @@ - + - + ]> +### 2026.06.14.9.9 +- Preserve the user's open or closed live-log state across automatic progress updates. + ### 2026.06.14.9.8 - Add a Clear history action that removes completed activity entries and saved run logs while preserving active and queued tasks. diff --git a/plugin/backupper.plg b/plugin/backupper.plg index d4c3855..894a99b 100644 --- a/plugin/backupper.plg +++ b/plugin/backupper.plg @@ -2,13 +2,16 @@ - + ]> +### 2026.06.14.9.9 +- Preserve the user's open or closed live-log state across automatic progress updates. + ### 2026.06.14.9.8 - Add a Clear history action that removes completed activity entries and saved run logs while preserving active and queued tasks. diff --git a/webgui/Backupper.page b/webgui/Backupper.page index 463c2f4..be33408 100644 --- a/webgui/Backupper.page +++ b/webgui/Backupper.page @@ -9,12 +9,12 @@ Tag="URBM Unraid Restic Backup Manager backup snapshots restore" - +
- -

URBM 2026.06.14.9.8

Restic Backup Manager for Unraid

+ +

URBM 2026.06.14.9.9

Restic Backup Manager for Unraid

Connecting...
@@ -32,4 +32,4 @@ $pluginRoot = '/plugins/backupper';
- + diff --git a/webgui/assets/backupper.js b/webgui/assets/backupper.js index df3233d..21e7393 100644 --- a/webgui/assets/backupper.js +++ b/webgui/assets/backupper.js @@ -8,7 +8,7 @@ const tooltip = document.getElementById('bu-tooltip'); const sourceRoots = ['/mnt/user','/mnt/disks','/mnt/remotes','/boot'].map(path=>({name:path,path})); const repositoryRoots = ['/mnt/user','/mnt/disks','/mnt/remotes'].map(path=>({name:path,path})); - const state = { config: null, runs: [], view: 'dashboard', snapshots: [], selectedSnapshot: null, snapshotRepo: null, files: [], browserPath: '/', restoreIncludes: [], backupSelections: [], workloadSelections: [], workloads: [], workloadAvailable: true, workloadError: '', sourceBrowserPath: '/', sourceDirectories: sourceRoots, sourceBrowserError: '', repositoryBrowserPath: '/', repositoryDirectories: repositoryRoots, repositoryBrowserError: '' }; + const state = { config: null, runs: [], view: 'dashboard', snapshots: [], selectedSnapshot: null, snapshotRepo: null, files: [], browserPath: '/', restoreIncludes: [], backupSelections: [], workloadSelections: [], workloads: [], workloadAvailable: true, workloadError: '', sourceBrowserPath: '/', sourceDirectories: sourceRoots, sourceBrowserError: '', repositoryBrowserPath: '/', repositoryDirectories: repositoryRoots, repositoryBrowserError: '', liveLogOpen: {} }; const fieldHelp = { name: 'Frei wählbarer Anzeigename. Beispiel: Appdata täglich oder VM Home Assistant.', @@ -472,7 +472,8 @@ } function liveLogView(run) { if(!(run.liveLog||[]).length) return ''; - return `
${run.status==='running'?'Live log':'Run log'} (${run.liveLog.length})
${esc(run.liveLog.join('\n'))}
`; + const open=Object.prototype.hasOwnProperty.call(state.liveLogOpen,run.id)?state.liveLogOpen[run.id]:run.status==='running'; + return `
${run.status==='running'?'Live log':'Run log'} (${run.liveLog.length})
${esc(run.liveLog.join('\n'))}
`; } function runsTable(runs) { if(!runs.length) return '
No activity recorded.
'; @@ -607,6 +608,10 @@ const action = form.id === 'bu-repo-form' ? 'submit-repo' : form.id === 'bu-job-form' ? 'submit-job' : form.id === 'bu-restore-form' ? 'submit-restore' : form.id === 'bu-settings-form' ? 'submit-settings' : form.id === 'bu-unraid-notify-form' ? 'submit-unraid-notify' : form.id === 'bu-gotify-notify-form' ? 'submit-gotify-notify' : ''; if (action) handle(action); }); + content.addEventListener('toggle', e => { + const details=e.target.closest?.('.bu-live-log[data-run-id]'); + if(details) state.liveLogOpen[details.dataset.runId]=details.open; + }, true); root.addEventListener('mouseover', e => { const target = e.target.closest('[data-tooltip]'); if (!target || target.contains(e.relatedTarget)) return;