release: Multi-Hoster-Upload 2.1.3

This commit is contained in:
Sucukdeluxe
2026-08-11 00:06:32 +02:00
parent ae80dde362
commit 13d21aa354
10 changed files with 107 additions and 24 deletions
+37 -9
View File
@@ -6545,6 +6545,28 @@ function setupListeners() {
}
// --- Update UI ---
function _formatUpdateReleaseNotes(value) {
const output = [];
let pendingBlank = false;
for (const rawLine of String(value || '').replace(/\r\n?/g, '\n').split('\n')) {
let line = rawLine.trim();
if (!line) {
if (output.length > 0) pendingBlank = true;
continue;
}
line = line
.replace(/^#{1,6}\s+/, '')
.replace(/^[-*+]\s+/, '• ')
.replace(/\*\*([^*]+)\*\*/g, '$1')
.replace(/`([^`]+)`/g, '$1')
.replace(/\[([^\]]+)\]\([^)]+\)/g, '$1');
if (pendingBlank && output.at(-1) !== '') output.push('');
output.push(line);
pendingBlank = false;
}
return output.join('\n');
}
function showUpdateBanner(info) {
if (!info) return;
_knownUpdateInfo = { ...info, available: true };
@@ -6561,9 +6583,12 @@ function showUpdateBanner(info) {
const notesBody = document.getElementById('updateReleaseNotesBody');
const installButton = document.getElementById('installUpdateBtn');
if (title) title.textContent = 'Eine neue Version ist verfügbar';
if (message) message.textContent = `Update v${version} verfügbar`;
if (message) {
message.textContent = `Update v${version} verfügbar`;
message.hidden = false;
}
if (notes && notesBody) {
const releaseNotes = String(info.releaseNotes || '').trim();
const releaseNotes = _formatUpdateReleaseNotes(info.releaseNotes);
notesBody.textContent = releaseNotes.length > 2400 ? `${releaseNotes.slice(0, 2399)}` : releaseNotes;
notes.hidden = !releaseNotes;
}
@@ -6585,38 +6610,41 @@ function handleUpdateProgress(data) {
_updateInstallBusy = true;
_setUpdateDialogBusy(true);
_setUpdateProgress(0, 'Download 0%');
if (message) message.textContent = 'Download wird vorbereitet…';
if (message) message.hidden = true;
if (button) button.textContent = 'Download 0%';
} else if (progress.stage === 'downloading') {
const percent = Math.max(0, Math.min(100, Math.round(Number(progress.percent) || 0)));
_updateInstallBusy = true;
_setUpdateDialogBusy(true);
_setUpdateProgress(percent, `Download ${percent}%`);
if (message) message.textContent = `Update wird heruntergeladen… ${percent}%`;
if (message) message.hidden = true;
if (button) button.textContent = `Download ${percent}%`;
} else if (progress.stage === 'verifying') {
_updateInstallBusy = true;
_setUpdateDialogBusy(true);
_setUpdateProgress(100, 'Prüfen…');
if (message) message.textContent = 'Download wird geprüft…';
if (message) message.hidden = true;
if (button) button.textContent = 'Prüfen…';
} else if (progress.stage === 'prepared') {
_updateInstallBusy = true;
_setUpdateDialogBusy(true);
_setUpdateProgress(100, 'Neustart…');
if (message) message.textContent = 'Update ist bereit. Einstellungen werden gespeichert…';
if (message) message.hidden = true;
if (button) button.textContent = 'Neustart…';
} else if (progress.stage === 'launching' || progress.stage === 'done') {
_updateInstallBusy = true;
_setUpdateDialogBusy(true);
_setUpdateProgress(100, 'Neustart…');
if (message) message.textContent = progress.stage === 'done' ? 'Update installiert. Die Anwendung startet neu…' : 'Update wird installiert. Die Anwendung startet neu…';
if (message) message.hidden = true;
if (button) button.textContent = 'Neustart…';
} else if (progress.stage === 'error') {
_updateInstallBusy = false;
_setUpdateDialogBusy(false);
_setUpdateProgress(0, 'Update fehlgeschlagen');
if (message) message.textContent = `Update fehlgeschlagen: ${String(progress.error || 'Unbekannter Fehler').slice(0, 400)}`;
if (message) {
message.hidden = false;
message.textContent = `Update fehlgeschlagen: ${String(progress.error || 'Unbekannter Fehler').slice(0, 400)}`;
}
if (button) {
button.disabled = false;
button.textContent = 'Wiederholen';
@@ -6761,7 +6789,7 @@ async function installKnownUpdate() {
_setUpdateProgress(0, 'Download 0%');
const message = document.getElementById('updateMessage');
const button = document.getElementById('installUpdateBtn');
if (message) message.textContent = 'Download wird vorbereitet…';
if (message) message.hidden = true;
if (button) button.textContent = 'Download 0%';
try {
await persistQueueStateNow();
-1
View File
@@ -2286,7 +2286,6 @@ select.hs-input { max-width: none; width: auto; min-width: 140px; }
color: var(--text-muted);
font-size: 11px;
line-height: 1.55;
white-space: pre-wrap;
}
.update-release-notes-title {