fix: stabilize the header on first paint

Pass the installed version with the startup language so the renderer can display it before asynchronous initialization.

Seed and start the upload sparkline immediately, keep a fixed update-action slot across all update states, and remove the delayed automatic update check.

Add first-frame regression coverage for version, speed baseline, update geometry, and startup query behavior.
This commit is contained in:
Sucukdeluxe
2026-08-20 13:27:55 +02:00
parent c4c7907686
commit 6d458e37f3
9 changed files with 83 additions and 25 deletions
+10 -3
View File
@@ -309,7 +309,7 @@ let settingsBaseline = '';
let settingsDirty = false;
let settingsSaving = false;
let lastUploadStats = { state: 'idle', globalSpeedKbs: 0, totalBytes: 0, elapsed: 0, activeJobs: 0 };
const uploadSpeedState = { display: 0, history: [] };
const uploadSpeedState = window.SpeedHistory.createInitialSpeedHistoryState();
let uploadSpeedTimer = null;
const AUTO_CHECK_PREF_KEY = 'autoHealthCheckBeforeUpload';
const QUEUE_COL_WIDTHS_KEY = 'queueColumnWidthsPx';
@@ -417,7 +417,6 @@ async function init() {
renderAccounts();
setupListeners();
importEntryCoordinator.ready();
initUploadSpeedSparkline();
restoreQueueColumnWidths();
loadHistory();
_refreshSessionFailedSnapshot();
@@ -808,7 +807,6 @@ function _syncHeaderUpdateState() {
? `Update v${version || 'unbekannt'} verfügbar. Klicken zum Installieren.`
: 'Nach Aktualisierungen suchen';
if (button) {
button.hidden = !available;
button.classList.toggle('update-available', available);
button.classList.toggle('is-checking', _updateCheckBusy);
button.disabled = _updateCheckBusy;
@@ -4195,6 +4193,14 @@ function initUploadSpeedSparkline() {
window.addEventListener('beforeunload', () => window.clearInterval(uploadSpeedTimer), { once: true });
}
function initializeStaticHeader() {
const version = new URLSearchParams(window.location.search).get('version') || '';
const versionLabel = document.getElementById('versionLabel');
if (versionLabel && /^\d+\.\d+\.\d+$/.test(version)) versionLabel.textContent = `v${version}`;
initUploadSpeedSparkline();
_syncHeaderUpdateState();
}
function updateStatusBar() {
const stats = _computeQueueStats();
@@ -8116,6 +8122,7 @@ function updateStatsPanel() {
window.api.onUpdateAvailable(showUpdateBanner);
window.api.onUpdateProgress(handleUpdateProgress);
window.api.onPrepareClose(prepareForWindowClose);
initializeStaticHeader();
setupDragDrop();
init().then(() => {
window.api.signalCloseHandshakeReady();