feat: Benutzeroberfläche aktualisiert und Versionsnummer auf 1.0.22 erhöht

This commit is contained in:
2026-05-09 11:32:47 +02:00
parent f56103089d
commit ad10a92f26
2 changed files with 10 additions and 10 deletions

18
app.py
View File

@@ -892,7 +892,7 @@ def run_uploads(local_dir: Path, cfg: dict):
with upload_lock: with upload_lock:
upload_state['current'] = name upload_state['current'] = name
add_log(f'Upload -> {name}...') add_log(f'Upload >> {name}...')
dest_root = t.get('dest_path', 'PiCopy').strip('/') dest_root = t.get('dest_path', 'PiCopy').strip('/')
dest = f'{_remote_name(t["id"])}:{dest_root}' dest = f'{_remote_name(t["id"])}:{dest_root}'
@@ -1624,7 +1624,7 @@ body{background:var(--bg);color:var(--txt);font-family:-apple-system,BlinkMacSys
<div class="btn-row"> <div class="btn-row">
<button id="btn-start" class="btn pri" onclick="startCopy()">▶&nbsp;Kopieren starten</button> <button id="btn-start" class="btn pri" onclick="startCopy()">▶&nbsp;Kopieren starten</button>
<button id="btn-cancel" class="btn danger" onclick="cancelCopy()" style="display:none">■&nbsp;Abbrechen</button> <button id="btn-cancel" class="btn danger" onclick="cancelCopy()" style="display:none">■&nbsp;Abbrechen</button>
<button class="btn ghost" onclick="refreshDevices()">->&nbsp;Geräte neu laden</button> <button class="btn ghost" onclick="refreshDevices()">&#8635;&nbsp;Geräte neu laden</button>
</div> </div>
<div id="copy-hint" class="flash" style="display:none"></div> <div id="copy-hint" class="flash" style="display:none"></div>
</div> </div>
@@ -1633,7 +1633,7 @@ body{background:var(--bg);color:var(--txt);font-family:-apple-system,BlinkMacSys
<!-- -- USB Ports + Explorer -- --> <!-- -- USB Ports + Explorer -- -->
<div class="card col2"> <div class="card col2">
<div class="card-head"> <div class="card-head">
<div class="card-icon green"><-></div> <div class="card-icon green">&#8644;</div>
<span class="card-title">USB Ports &amp; Datei-Explorer</span> <span class="card-title">USB Ports &amp; Datei-Explorer</span>
</div> </div>
<div class="card-body"> <div class="card-body">
@@ -1664,7 +1664,7 @@ body{background:var(--bg);color:var(--txt);font-family:-apple-system,BlinkMacSys
</div> </div>
<button class="btn grn" style="width:100%" onclick="assignPort('source')">✓&nbsp;Als feste Quelle speichern</button> <button class="btn grn" style="width:100%" onclick="assignPort('source')">✓&nbsp;Als feste Quelle speichern</button>
<div id="src-flash" class="flash" style="margin-top:.4rem"></div> <div id="src-flash" class="flash" style="margin-top:.4rem"></div>
<div class="hint-box">Gerät in den gewünschten Port -> aus Liste wählen -> Speichern. PiCopy merkt sich den physischen Port dauerhaft.</div> <div class="hint-box">Gerät in den gewünschten Port &rarr; aus Liste wählen &rarr; Speichern. PiCopy merkt sich den physischen Port dauerhaft.</div>
</div> </div>
<!-- Ziel --> <!-- Ziel -->
@@ -1689,7 +1689,7 @@ body{background:var(--bg);color:var(--txt);font-family:-apple-system,BlinkMacSys
</div> </div>
<button class="btn pri" style="width:100%" onclick="assignPort('dest')">✓&nbsp;Als festes Ziel speichern</button> <button class="btn pri" style="width:100%" onclick="assignPort('dest')">✓&nbsp;Als festes Ziel speichern</button>
<div id="dst-flash" class="flash" style="margin-top:.4rem"></div> <div id="dst-flash" class="flash" style="margin-top:.4rem"></div>
<div class="hint-box">Gerät in den gewünschten Port -> aus Liste wählen -> Speichern. Ab dann wird dieser Port immer als Ziel verwendet.</div> <div class="hint-box">Gerät in den gewünschten Port &rarr; aus Liste wählen &rarr; Speichern. Ab dann wird dieser Port immer als Ziel verwendet.</div>
</div> </div>
</div><!-- /port-pair --> </div><!-- /port-pair -->
@@ -1929,7 +1929,7 @@ body{background:var(--bg);color:var(--txt);font-family:-apple-system,BlinkMacSys
<div class="card-body" style="display:flex;flex-direction:column;gap:.6rem"> <div class="card-body" style="display:flex;flex-direction:column;gap:.6rem">
<button class="btn" style="width:100%" onclick="checkUpdate()">🔍&nbsp;Nach Update suchen</button> <button class="btn" style="width:100%" onclick="checkUpdate()">🔍&nbsp;Nach Update suchen</button>
<div id="sys-update-flash" class="flash" style="display:none"></div> <div id="sys-update-flash" class="flash" style="display:none"></div>
<button class="btn" style="width:100%;background:rgba(220,60,60,.12);color:#e05555;border-color:rgba(220,60,60,.25)" onclick="rebootDevice()"><-&nbsp;Gerät neu starten</button> <button class="btn" style="width:100%;background:rgba(220,60,60,.12);color:#e05555;border-color:rgba(220,60,60,.25)" onclick="rebootDevice()">&#8634;&nbsp;Gerät neu starten</button>
</div> </div>
</div> </div>
@@ -2408,7 +2408,7 @@ async function installUpdate() {
'Das Web-Interface ist für ca. 10 Sekunden nicht erreichbar.' 'Das Web-Interface ist für ca. 10 Sekunden nicht erreichbar.'
)) return; )) return;
$('upd-badge').innerHTML = '-> Installiere...'; $('upd-badge').innerHTML = '&#8595; Installiere...';
$('upd-badge').style.pointerEvents = 'none'; $('upd-badge').style.pointerEvents = 'none';
try { try {
@@ -2428,7 +2428,7 @@ async function installUpdate() {
async function checkUpdate() { async function checkUpdate() {
const btn = event.currentTarget; const btn = event.currentTarget;
btn.disabled = true; btn.textContent = '-> Prüfe...'; btn.disabled = true; btn.innerHTML = '&#128269;&nbsp;Prüfe...';
try { try {
await api('/update/check', 'POST'); await api('/update/check', 'POST');
// Warten bis der Server-Check abgeschlossen ist (max 15 s, alle 500 ms) // Warten bis der Server-Check abgeschlossen ist (max 15 s, alle 500 ms)
@@ -2460,7 +2460,7 @@ async function checkUpdate() {
async function rebootDevice() { async function rebootDevice() {
if (!confirm('Gerät jetzt neu starten?\n\nDas Web-Interface ist für ca. 30 Sekunden nicht erreichbar.')) return; if (!confirm('Gerät jetzt neu starten?\n\nDas Web-Interface ist für ca. 30 Sekunden nicht erreichbar.')) return;
try { await api('/system/reboot', 'POST'); } catch(e) {} try { await api('/system/reboot', 'POST'); } catch(e) {}
document.body.innerHTML = '<div style="display:flex;align-items:center;justify-content:center;height:100vh;font-family:sans-serif;color:#888;font-size:1rem">-> Gerät startet neu - bitte warten...</div>'; document.body.innerHTML = '<div style="display:flex;align-items:center;justify-content:center;height:100vh;font-family:sans-serif;color:#888;font-size:1rem">&#8634; Gerät startet neu - bitte warten...</div>';
setTimeout(async function waitForRestart() { setTimeout(async function waitForRestart() {
try { await fetch('/api/update/status'); location.reload(); } try { await fetch('/api/update/status'); location.reload(); }
catch(e) { setTimeout(waitForRestart, 2000); } catch(e) { setTimeout(waitForRestart, 2000); }

View File

@@ -1 +1 @@
1.0.21 1.0.22