release: prepare version 1.0.20 and stabilize queue UI fixtures
Windows CI / verify (push) Canceled after 0s

This commit is contained in:
Sucukdeluxe
2026-09-06 12:51:22 +02:00
parent 9fec291b45
commit 0c01668e55
8 changed files with 31 additions and 15 deletions
+7 -7
View File
@@ -1,13 +1,13 @@
# Changelog
## Unreleased
## 1.0.20 - 2026-09-06
- Respond to every rapid click on the queue details toggle, allowing the animation to reverse immediately without a perceived cooldown.
- Animate queue details expanding and collapsing with a matching chevron rotation; keep collapsed file actions out of keyboard navigation.
- Keep the waiting queue status unboxed with a transparent background and its yellow status dot.
- Rework queue cards with two-line titles, clearer status badges, larger dates below the progress bar on the right, and 32-pixel remove and retry buttons. Keep paused progress visible and wrap long download errors.
- Expand or collapse queue details by double-clicking the card surface or using the dedicated keyboard-accessible toggle. Add isolated queue-card checks for both languages and themes.
- Resolve the repository icon during Windows hot development even when the branded Electron executable reports itself as packaged, preventing a startup crash.
- Make queue cards easier to read with two-line titles, larger dates below the progress bar on the right, and 32-pixel remove and retry buttons.
- Show clearer download states, preserve the progress percentage while paused, and wrap long error messages. Keep the waiting status simple with a yellow dot and no badge background or outline.
- Open and close download details by double-clicking the card surface or using the dedicated keyboard-accessible arrow.
- Animate details smoothly in both directions with a matching arrow rotation. Respond immediately to rapid clicks and keep collapsed file actions out of keyboard navigation.
- Fix the Windows hot-development startup crash caused by looking for the application icon in the packaged resource directory.
- Add isolated queue-card checks for both languages and themes, keyboard controls, animation and rapid clicks; exclude local development data and bundled third-party tools from linting.
## 1.0.19 - 2026-08-14
+7 -1
View File
@@ -55,7 +55,7 @@ npm run dev
## Entscheidungen und offene nächste Schritte
- Zunächst den aktuellen Quellstand und die Entwicklungsumgebung wiederherstellen. Keine neue Version veröffentlichen.
- Wiederherstellung abgeschlossen. Sascha hat am 6. September 2026 die Veröffentlichung ausdrücklich beauftragt; Release 1.0.20 wird auf `public-v1` vorbereitet, mit identischen Assets und englischen/deutschen Changelogs auf GitHub/Forgejo.
- Die gewünschte Umbenennung zu `Twitch Downloader` ist lokal umgesetzt. Eine Umbenennung der Remotes und der Anwendung samt Update-Kompatibilität ist gesondert abzustimmen und zu prüfen.
- Die Standardbranches wurden bei der Wiederherstellung nicht umgestellt oder mit älteren Entwicklungslinien zusammengeführt.
- Nächste fachliche Änderung von Sascha entgegennehmen; vor Änderungen diese Memory, `README.md`, `CHANGELOG.md` und den Git-Status lesen.
@@ -91,3 +91,9 @@ npm run dev
- Lint ohne Fehler bei den bekannten 15 Warnungen. Lokale Entwicklungsdaten und installierte Drittanbieter-Werkzeuge sind nun ausdrücklich von ESLint ausgeschlossen; vier Lint-Konfigurationstests erfolgreich.
- Security-/Public-Manifest-, CI- und E2E-Isolationsprüfungen erfolgreich. Der neue UI-Test steht in der öffentlichen Datei-Allowlist; Entwicklungsdaten und Screenshots bleiben außerhalb von Git.
- Hot-Dev bleibt aktiv. Keine Veröffentlichung und kein Live-Download für diese UI-Änderung.
Release-Vorbereitung 1.0.20 am 6. September 2026:
- Versionsangaben in Paket, Lockfile, Oberfläche, README und Release-Vertrag auf 1.0.20 gesetzt; Changelog datiert.
- CI-Race im Queue-UI-Test behoben: Die Hintergrundsynchronisierung erhält dieselben Offline-Fixtures wie der Renderer, damit sie die Testkarten auf langsameren Runnern nicht entfernt. Keine Änderung am produktiven Queue-Verhalten.
- Vollständige lokale Release-Prüfung und Installer-Build laufen; Veröffentlichung erst nach erfolgreicher Validierung. Abschließende Release-Verifikation folgt hier.
+1 -1
View File
@@ -61,7 +61,7 @@ The application works in public mode without a Twitch login. Connecting a Twitch
## Installation
1. Open the [latest GitHub release](https://github.com/Sucukdeluxe/Twitch-VOD-Manager/releases/latest).
2. Download `Twitch-VOD-Manager-Setup-1.0.18.exe`.
2. Download `Twitch-VOD-Manager-Setup-1.0.20.exe`.
3. Run the installer and choose the installation directory.
4. Start Twitch VOD Manager and add a streamer.
+2 -2
View File
@@ -1,12 +1,12 @@
{
"name": "twitch-vod-manager",
"version": "1.0.19",
"version": "1.0.20",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "twitch-vod-manager",
"version": "1.0.19",
"version": "1.0.20",
"license": "MIT",
"dependencies": {
"axios": "^1.16.1",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "twitch-vod-manager",
"version": "1.0.19",
"version": "1.0.20",
"description": "Twitch VOD Manager - Download Twitch VODs easily",
"main": "dist/main.js",
"author": "Sucukdeluxe",
+1 -1
View File
@@ -13,7 +13,7 @@ const installerSource = fs.readFileSync(path.join(root, 'build', 'installer.nsh'
const installerSmokeSource = fs.readFileSync(path.join(root, 'scripts', 'smoke-test-installer.js'), 'utf8');
const manifestPath = path.join(root, 'scripts', 'public-release-files.json');
const failures = [];
const expectedVersion = '1.0.19';
const expectedVersion = '1.0.20';
function check(condition, message) {
if (!condition) failures.push(message);
+11 -1
View File
@@ -17,7 +17,8 @@ async function main() {
const errors = [];
win.on('pageerror', (error) => errors.push(String(error)));
await win.waitForFunction(() => typeof window.showTab === 'function' && typeof window.changeLanguage === 'function');
await win.evaluate(() => {
await win.waitForFunction((version) => appVersion === version, require('../package.json').version);
const fixtures = await win.evaluate(() => {
showTab('vods');
const panel = document.querySelector('[data-context-for="vods"]');
panel.dataset.vodsLayout = 'tabs';
@@ -31,7 +32,14 @@ async function main() {
{ id: 'live', status: 'downloading', title: 'Live aus dem Studio', progress: 0, isLive: true, recordingHealth: 'ok', progressStatus: 'Live-Aufnahme läuft' }
].map((item) => ({ url: `https://example.invalid/${item.id}`, date: '2026-09-06T10:00:00Z', streamer: 'Beispielkanal', duration_str: '2h 34m', ...item }));
renderQueue();
return queue;
});
await app.evaluate(({ ipcMain }, items) => {
ipcMain.removeHandler('get-queue');
ipcMain.handle('get-queue', async () => items);
}, fixtures);
await win.evaluate(() => syncQueueAndDownloadState());
assert.equal(await win.locator('#queueList .queue-item').count(), fixtures.length, 'Queue fixtures survive background synchronization');
for (const theme of ['twitch', 'light']) {
for (const language of ['de', 'en']) {
await win.setViewportSize({ width: 1280, height: 900 });
@@ -126,6 +134,8 @@ async function main() {
ipcMain.removeHandler('remove-from-queue');
ipcMain.handle('remove-from-queue', async (_event, id) => {
if (id !== 'pending') throw new Error('Unexpected removal target');
ipcMain.removeHandler('get-queue');
ipcMain.handle('get-queue', async () => []);
return [];
});
});
+1 -1
View File
@@ -945,7 +945,7 @@
<div class="settings-card" data-settings-pane="updates" hidden>
<h3 id="updateTitle">Updates</h3>
<p id="versionInfo" class="card-intro">Version: v1.0.19</p>
<p id="versionInfo" class="card-intro">Version: v1.0.20</p>
<button type="button" class="btn-secondary" id="checkUpdateBtn" onclick="checkUpdate()">Nach Updates suchen</button>
</div>