Release URBM 2026.06.15.r013
This commit is contained in:
@@ -1 +0,0 @@
|
||||
5503027a5ce2c20162e16786a1892d13046fa8002fca2f156fc13b2ef66bf89f urbm-2026.06.15.r012-x86_64-1.txz
|
||||
BIN
Binary file not shown.
@@ -0,0 +1 @@
|
||||
250d5afee9c2939738b74f0f6f719db12d9399068bf9452e08e2b03a67d381ad urbm-2026.06.15.r013-x86_64-1.txz
|
||||
Vendored
+6
-2
@@ -2,13 +2,17 @@
|
||||
<!DOCTYPE PLUGIN [
|
||||
<!ENTITY name "urbm">
|
||||
<!ENTITY author "Michael Roll">
|
||||
<!ENTITY version "2026.06.15.r012">
|
||||
<!ENTITY version "2026.06.15.r013">
|
||||
<!ENTITY pluginURL "https://git.casaderoll.de/michael/URBM/raw/branch/main/dist/urbm.plg">
|
||||
<!ENTITY packageURL "https://git.casaderoll.de/michael/URBM/raw/branch/main/dist/urbm-&version;-x86_64-1.txz">
|
||||
<!ENTITY packageSHA256 "5503027a5ce2c20162e16786a1892d13046fa8002fca2f156fc13b2ef66bf89f">
|
||||
<!ENTITY packageSHA256 "250d5afee9c2939738b74f0f6f719db12d9399068bf9452e08e2b03a67d381ad">
|
||||
]>
|
||||
<PLUGIN name="&name;" author="&author;" version="&version;" pluginURL="&pluginURL;" min="7.0.0" support="https://git.casaderoll.de/michael/URBM/issues" icon="urbm.png">
|
||||
<CHANGES>
|
||||
### 2026.06.15.r013
|
||||
- Replace invalid USB raw-image percentages, file counts, and multi-million-hour ETAs with streaming progress.
|
||||
- Show bytes read and transfer rate while the final image size remains unknown until EOF.
|
||||
|
||||
### 2026.06.15.r012
|
||||
- Allow multiple backup jobs to share one Restic repository while retaining per-job snapshot tags and retention policies.
|
||||
- Catch asynchronous form submission errors so save failures are shown in the WebGUI instead of only in the browser console.
|
||||
|
||||
@@ -375,11 +375,15 @@ func (s *Service) executeBackup(ctx context.Context, run model.Run) (result mode
|
||||
}
|
||||
appendLiveLog(&live, "USB-Rohabbild wird direkt aus "+device+" zu Restic übertragen")
|
||||
s.updateActive(live)
|
||||
imageStarted := time.Now()
|
||||
imageSummary, err = s.restic.BackupImage(ctx, mounted.Repository, job, image, func(progress restic.Progress) {
|
||||
live.ProgressPercent = progress.PercentDone * 100
|
||||
live.ProgressBytes, live.ProgressTotal = progress.BytesDone, progress.TotalBytes
|
||||
live.ProgressFiles, live.ProgressFileTotal = progress.FilesDone, progress.TotalFiles
|
||||
live.SecondsRemaining = progress.SecondsRemaining
|
||||
live.ProgressPercent = 0
|
||||
live.ProgressBytes, live.ProgressTotal = progress.BytesDone, 0
|
||||
live.ProgressFiles, live.ProgressFileTotal = 0, 0
|
||||
live.SecondsRemaining = 0
|
||||
if elapsed := time.Since(imageStarted).Seconds(); elapsed > 0 {
|
||||
live.BytesPerSecond = float64(progress.BytesDone) / elapsed
|
||||
}
|
||||
live.CurrentFile = "urbm-usb-flash.img"
|
||||
s.updateActive(live)
|
||||
})
|
||||
|
||||
+5
-1
@@ -2,13 +2,17 @@
|
||||
<!DOCTYPE PLUGIN [
|
||||
<!ENTITY name "urbm">
|
||||
<!ENTITY author "Michael Roll">
|
||||
<!ENTITY version "2026.06.15.r012">
|
||||
<!ENTITY version "2026.06.15.r013">
|
||||
<!ENTITY pluginURL "https://git.casaderoll.de/michael/URBM/raw/branch/main/dist/urbm.plg">
|
||||
<!ENTITY packageURL "https://git.casaderoll.de/michael/URBM/raw/branch/main/dist/urbm-&version;-x86_64-1.txz">
|
||||
<!ENTITY packageSHA256 "REPLACE_DURING_RELEASE">
|
||||
]>
|
||||
<PLUGIN name="&name;" author="&author;" version="&version;" pluginURL="&pluginURL;" min="7.0.0" support="https://git.casaderoll.de/michael/URBM/issues" icon="urbm.png">
|
||||
<CHANGES>
|
||||
### 2026.06.15.r013
|
||||
- Replace invalid USB raw-image percentages, file counts, and multi-million-hour ETAs with streaming progress.
|
||||
- Show bytes read and transfer rate while the final image size remains unknown until EOF.
|
||||
|
||||
### 2026.06.15.r012
|
||||
- Allow multiple backup jobs to share one Restic repository while retaining per-job snapshot tags and retention policies.
|
||||
- Catch asynchronous form submission errors so save failures are shown in the WebGUI instead of only in the browser console.
|
||||
|
||||
+4
-4
@@ -9,12 +9,12 @@ Tag="URBM Unraid Restic Backup Manager backup snapshots restore"
|
||||
<?php
|
||||
$pluginRoot = '/plugins/urbm';
|
||||
?>
|
||||
<link rel="stylesheet" href="<?= $pluginRoot ?>/assets/urbm.css?v=20260615r012">
|
||||
<link rel="stylesheet" href="<?= $pluginRoot ?>/assets/urbm.css?v=20260615r013">
|
||||
<div id="urbm-app" data-api="<?= $pluginRoot ?>/api.php">
|
||||
<header class="bu-header">
|
||||
<div class="bu-brand">
|
||||
<img class="bu-logo" src="<?= $pluginRoot ?>/images/urbm.png?v=20260615r012" alt="URBM-Logo">
|
||||
<div><h1>URBM <span class="bu-version">2026.06.15.r012</span></h1><p>Restic Backup Manager für Unraid</p></div>
|
||||
<img class="bu-logo" src="<?= $pluginRoot ?>/images/urbm.png?v=20260615r013" alt="URBM-Logo">
|
||||
<div><h1>URBM <span class="bu-version">2026.06.15.r013</span></h1><p>Restic Backup Manager für Unraid</p></div>
|
||||
</div>
|
||||
<div id="bu-health" class="bu-health" tabindex="0" data-tooltip="Zeigt, ob die URBM-Hintergrundkomponente erreichbar ist. Beispiel: 'Daemon online' bedeutet, dass Jobs gestartet werden können.">Verbindung wird hergestellt...</div>
|
||||
</header>
|
||||
@@ -32,4 +32,4 @@ $pluginRoot = '/plugins/urbm';
|
||||
<div id="bu-tooltip" role="tooltip" aria-hidden="true"></div>
|
||||
</div>
|
||||
<script>window.URBM_CSRF = <?= json_encode($var['csrf_token'] ?? '') ?>;</script>
|
||||
<script src="<?= $pluginRoot ?>/assets/urbm-2026.06.15.r012.js"></script>
|
||||
<script src="<?= $pluginRoot ?>/assets/urbm-2026.06.15.r013.js"></script>
|
||||
|
||||
@@ -528,6 +528,13 @@
|
||||
function progressView(run) {
|
||||
if(run.status==='queued') return '<span class="bu-muted">Wartet in der Warteschlange</span>';
|
||||
if(run.taskType!=='backup'&&!run.progressPercent) return '<span class="bu-muted">Kein Prozentwert verfügbar</span>';
|
||||
const usbImage=run.status==='running'&&run.currentFile==='urbm-usb-flash.img';
|
||||
if(usbImage) {
|
||||
const details=[];
|
||||
if(run.progressBytes) details.push(`${formatBytes(run.progressBytes)} gelesen`);
|
||||
if(run.bytesPerSecond) details.push(`${formatBytes(run.bytesPerSecond)}/s`);
|
||||
return `<div class="bu-progress-wrap"><div class="bu-progress-label"><strong>USB-Abbild wird übertragen…</strong><span>${esc(details.join(' · '))}</span></div><div class="bu-progress indeterminate"><span style="width:30%"></span></div><div class="bu-current-file">urbm-usb-flash.img · Gesamtgröße bis zum Abschluss unbekannt</div></div>`;
|
||||
}
|
||||
const percent=Math.max(0,Math.min(100,Number(run.progressPercent)||0));
|
||||
const scanning=run.status==='running'&&percent===0;
|
||||
const details=[];
|
||||
|
||||
Reference in New Issue
Block a user