diff --git a/dist/backupper-2026.06.14.9.9-x86_64-1.txz b/dist/backupper-2026.06.14.9.10-x86_64-1.txz similarity index 55% rename from dist/backupper-2026.06.14.9.9-x86_64-1.txz rename to dist/backupper-2026.06.14.9.10-x86_64-1.txz index 0181a8f..17b6fa6 100644 Binary files a/dist/backupper-2026.06.14.9.9-x86_64-1.txz and b/dist/backupper-2026.06.14.9.10-x86_64-1.txz differ diff --git a/dist/backupper-2026.06.14.9.10-x86_64-1.txz.sha256 b/dist/backupper-2026.06.14.9.10-x86_64-1.txz.sha256 new file mode 100644 index 0000000..2d6b12f --- /dev/null +++ b/dist/backupper-2026.06.14.9.10-x86_64-1.txz.sha256 @@ -0,0 +1 @@ +3f91f1c5ca0df0a0af3fe109e8c27cd3a547492020c78bb977ea403f13279fec backupper-2026.06.14.9.10-x86_64-1.txz 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 deleted file mode 100644 index eb63935..0000000 --- a/dist/backupper-2026.06.14.9.9-x86_64-1.txz.sha256 +++ /dev/null @@ -1 +0,0 @@ -992ab86a0e90287a9f828943e2c3c01d88361f0b7c98c848c64ef9394139bc8f backupper-2026.06.14.9.9-x86_64-1.txz diff --git a/dist/backupper.plg b/dist/backupper.plg index 0954bcb..cbdce67 100644 --- a/dist/backupper.plg +++ b/dist/backupper.plg @@ -2,13 +2,16 @@ - + - + ]> +### 2026.06.14.9.10 +- Always show a clearly labeled activity history delete action, including when no completed entries exist. + ### 2026.06.14.9.9 - Preserve the user's open or closed live-log state across automatic progress updates. diff --git a/plugin/backupper.plg b/plugin/backupper.plg index 894a99b..2b3e250 100644 --- a/plugin/backupper.plg +++ b/plugin/backupper.plg @@ -2,13 +2,16 @@ - + ]> +### 2026.06.14.9.10 +- Always show a clearly labeled activity history delete action, including when no completed entries exist. + ### 2026.06.14.9.9 - Preserve the user's open or closed live-log state across automatic progress updates. diff --git a/webgui/assets/backupper.js b/webgui/assets/backupper.js index 21e7393..da55a08 100644 --- a/webgui/assets/backupper.js +++ b/webgui/assets/backupper.js @@ -457,7 +457,7 @@ return `

Restore

${button('Queue restore','submit-restore','primary')}
`; } - function renderActivity() { const completed=state.runs.some(r=>!['queued','running'].includes(r.status)); return `

Activity

Running tasks update automatically every two seconds.
${button('Refresh','refresh','primary')}${completed?button('Clear history','clear-activity','danger'):''}
${runsTable([...state.runs].reverse())}
`; } + function renderActivity() { return `

Activity

Running tasks update automatically every two seconds.
${button('Refresh','refresh','primary')}${button('Abgeschlossene Aktivitäten löschen','clear-activity','danger')}
${runsTable([...state.runs].reverse())}
`; } function progressView(run) { if(run.status==='queued') return 'Waiting in queue'; if(run.taskType!=='backup'&&!run.progressPercent) return 'No percentage available'; @@ -508,7 +508,7 @@ if (name === 'refresh') return load(); if (name === 'run-job') { await api(`/v1/jobs/${a}/run`,{method:'POST'}); notify('Backup queued'); return load(); } if (name === 'cancel-run') { await api(`/v1/runs/${a}/cancel`,{method:'POST'}); return load(); } - if (name === 'clear-activity') { if(confirm('Delete all completed activity entries and saved run logs? Running and queued tasks will remain.')) { const result=await api('/v1/runs',{method:'DELETE'}); notify(`${result.cleared||0} activity entries cleared`); return load(); } return; } + if (name === 'clear-activity') { if(confirm('Alle abgeschlossenen Aktivitäten und deren gespeicherte Laufprotokolle löschen?\n\nLaufende und wartende Aufgaben bleiben erhalten.')) { const result=await api('/v1/runs',{method:'DELETE'}); notify(result.cleared?`${result.cleared} abgeschlossene Aktivitäten gelöscht`:'Keine abgeschlossenen Aktivitäten vorhanden'); return load(); } return; } if (name === 'test-repo') { await api(`/v1/repositories/${a}/test`,{method:'POST'}); return notify('Repository connection succeeded'); } if (name === 'init-repo') { if(confirm('Create a NEW Restic repository here?\n\nOnly continue if this destination does not already contain a Restic repository. For an existing repository, enter its original password under Edit and use Test.')) { await api(`/v1/repositories/${a}/init`,{method:'POST'}); notify('Repository initialized successfully'); } return; } if (name === 'maint') { await api(`/v1/repositories/${b}/${a}`,{method:'POST'}); notify(`${a} queued`); return load(); }