diff --git a/dist/urbm-2026.09.28.r001-x86_64-1.txz b/dist/urbm-2026.09.28.r001-x86_64-1.txz new file mode 100644 index 0000000..32a8fde Binary files /dev/null and b/dist/urbm-2026.09.28.r001-x86_64-1.txz differ diff --git a/dist/urbm-2026.09.28.r001-x86_64-1.txz.sha256 b/dist/urbm-2026.09.28.r001-x86_64-1.txz.sha256 new file mode 100644 index 0000000..ebaa82d --- /dev/null +++ b/dist/urbm-2026.09.28.r001-x86_64-1.txz.sha256 @@ -0,0 +1 @@ +3dcb92984be52415d689195e15bd7436de5b98eac9b60c654b045e5694e80b1c urbm-2026.09.28.r001-x86_64-1.txz diff --git a/dist/urbm.plg b/dist/urbm.plg index 0813fa9..ef03f08 100644 --- a/dist/urbm.plg +++ b/dist/urbm.plg @@ -2,13 +2,17 @@ - + - + ]> +### 2026.09.28.r001 +- Label job automation separately from run results: manual, enabled or disabled instead of misleading success/cancelled badges. +- Display manual and disabled jobs neutrally and explain scheduling state in tooltips. + ### 2026.09.27.r003 - Close action menus synchronously before opening edit forms or running menu actions. - Prevent delayed menu positioning from reopening closed or detached menus. diff --git a/plugin/urbm.plg b/plugin/urbm.plg index b684c3b..2fb68c8 100644 --- a/plugin/urbm.plg +++ b/plugin/urbm.plg @@ -2,13 +2,17 @@ - + ]> +### 2026.09.28.r001 +- Label job automation separately from run results: manual, enabled or disabled instead of misleading success/cancelled badges. +- Display manual and disabled jobs neutrally and explain scheduling state in tooltips. + ### 2026.09.27.r003 - Close action menus synchronously before opening edit forms or running menu actions. - Prevent delayed menu positioning from reopening closed or detached menus. diff --git a/webgui/URBM.page b/webgui/URBM.page index 37c244e..4cbcbe5 100644 --- a/webgui/URBM.page +++ b/webgui/URBM.page @@ -8,7 +8,7 @@ Tag="URBM Unraid Restic Backup Manager backup snapshots restore" --- diff --git a/webgui/assets/urbm.css b/webgui/assets/urbm.css index 4299069..5cfe633 100644 --- a/webgui/assets/urbm.css +++ b/webgui/assets/urbm.css @@ -253,7 +253,8 @@ .bu-runs-table .bu-run-task-cell span { color: var(--bu-muted); margin-top: 3px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .bu-runs-table .bu-status { white-space: nowrap; } .bu-status { border: 1px solid currentColor; border-radius: 999px; display: inline-block; font-size: 12px; font-weight: 700; padding: 3px 8px; text-transform: uppercase; } -.bu-status.success { background: rgba(8,122,85,.10); color: var(--bu-good); } +.bu-status.automation-disabled { background: transparent; color: var(--bu-muted); } +.bu-status.automation-enabled, .bu-status.success { background: rgba(8,122,85,.10); color: var(--bu-good); } .bu-status.failed, .bu-status.cancelled { background: rgba(180,35,47,.10); color: var(--bu-bad); } .bu-status.running, .bu-status.queued, .bu-status.paused, .bu-status.warning { background: rgba(232,93,36,.10); color: var(--bu-accent); } diff --git a/webgui/assets/urbm.js b/webgui/assets/urbm.js index f6081f6..c9983aa 100644 --- a/webgui/assets/urbm.js +++ b/webgui/assets/urbm.js @@ -516,10 +516,18 @@

Letzte Aktivitäten

Die sechs jüngsten Vorgänge auf einen Blick.
${button('Alle anzeigen','go-view:activity')}
${activityError}
`; } + function jobAutomationBadge(job) { + const scheduled=Boolean(job.schedule?.cron?.trim()); + const active=scheduled&&job.enabled; + const label=!scheduled?'Nur manuell':active?'Aktiviert':'Deaktiviert'; + const hint=!scheduled?'Kein Zeitplan hinterlegt. Der Job kann manuell gestartet werden.':active?'Automatische Ausführung nach Zeitplan ist aktiviert.':'Automatische Ausführung ist deaktiviert. Der Job kann weiterhin manuell gestartet werden.'; + return `${label}`; + } + function renderJobs() { - const rows = state.config.jobs.map(j => { const destination=j.type==='rsync'?(j.rsync?.target||'Kein Ziel'):repoName(j.repositoryId); const secondary=button('Bearbeiten',`edit-job:${j.id}`)+button('Duplizieren',`duplicate-job:${j.id}`)+button('Löschen',`delete-job:${j.id}`,'danger'); return `${esc(j.name)}
${esc(j.id)}${esc(typeLabels[j.type]||j.type)}${esc(destination)}${esc(scheduleLabel(j.schedule?.cron))}${j.enabled ? status('success') : status('cancelled')}
${button('Starten',`run-job:${j.id}`,'primary')}${actionMenu(`Weitere Aktionen für ${j.name}`,secondary)}
`; }).join(''); + const rows = state.config.jobs.map(j => { const destination=j.type==='rsync'?(j.rsync?.target||'Kein Ziel'):repoName(j.repositoryId); const secondary=button('Bearbeiten',`edit-job:${j.id}`)+button('Duplizieren',`duplicate-job:${j.id}`)+button('Löschen',`delete-job:${j.id}`,'danger'); return `${esc(j.name)}
${esc(j.id)}${esc(typeLabels[j.type]||j.type)}${esc(destination)}${esc(scheduleLabel(j.schedule?.cron))}${jobAutomationBadge(j)}
${button('Starten',`run-job:${j.id}`,'primary')}${actionMenu(`Weitere Aktionen für ${j.name}`,secondary)}
`; }).join(''); return `

Backup-Jobs

Restic-Backups und direkte Rsync-Kopien werden gemeinsam geplant und überwacht.
${filterBox('Jobs durchsuchen','jobs')}${button('Neuer Job','new-job','primary')}
-
${rows ? `${rows}
JobTypRepository / ZielZeitplanAktivAktionen
` : '
Keine Backup-Jobs konfiguriert.
'}
`; +
${rows ? `${rows}
JobTypRepository / ZielZeitplanAutomatikAktionen
` : '
Keine Backup-Jobs konfiguriert.
'}
`; } function jobForm(job = {}) {