diff --git a/typescript-version/package-lock.json b/typescript-version/package-lock.json index 96f60ee..aefe4d6 100644 --- a/typescript-version/package-lock.json +++ b/typescript-version/package-lock.json @@ -1,12 +1,12 @@ { "name": "twitch-vod-manager", - "version": "4.1.2", + "version": "4.1.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "twitch-vod-manager", - "version": "4.1.2", + "version": "4.1.3", "license": "MIT", "dependencies": { "axios": "^1.6.0", diff --git a/typescript-version/package.json b/typescript-version/package.json index 956495e..b048992 100644 --- a/typescript-version/package.json +++ b/typescript-version/package.json @@ -1,6 +1,6 @@ { "name": "twitch-vod-manager", - "version": "4.1.2", + "version": "4.1.3", "description": "Twitch VOD Manager - Download Twitch VODs easily", "main": "dist/main.js", "author": "xRangerDE", diff --git a/typescript-version/src/index.html b/typescript-version/src/index.html index d4ad0ff..1ba4aeb 100644 --- a/typescript-version/src/index.html +++ b/typescript-version/src/index.html @@ -457,7 +457,7 @@

Updates

-

Version: v4.1.2

+

Version: v4.1.3

@@ -502,7 +502,7 @@
Nicht verbunden - v4.1.2 + v4.1.3 diff --git a/typescript-version/src/main.ts b/typescript-version/src/main.ts index 4ce7924..e8d074e 100644 --- a/typescript-version/src/main.ts +++ b/typescript-version/src/main.ts @@ -8,7 +8,7 @@ import { autoUpdater } from 'electron-updater'; // ========================================== // CONFIG & CONSTANTS // ========================================== -const APP_VERSION = '4.1.2'; +const APP_VERSION = '4.1.3'; const UPDATE_CHECK_URL = 'http://24-music.de/version.json'; // Paths diff --git a/typescript-version/src/renderer-queue.ts b/typescript-version/src/renderer-queue.ts index 7c37797..b40a103 100644 --- a/typescript-version/src/renderer-queue.ts +++ b/typescript-version/src/renderer-queue.ts @@ -18,6 +18,25 @@ function buildQueueFingerprint(url: string, streamer: string, date: string, cust ].join('|'); } +let lastQueueRenderFingerprint = ''; + +function getQueueRenderFingerprint(items: QueueItem[]): string { + const lang = typeof currentLanguage === 'string' ? currentLanguage : 'en'; + const pieces = items.map((item) => [ + item.id, + item.status, + Math.round((Number(item.progress) || 0) * 10), + item.currentPart || 0, + item.totalParts || 0, + item.speed || '', + item.eta || '', + item.progressStatus || '', + item.last_error || '' + ].join(':')); + + return `${lang}|${pieces.join('|')}`; +} + function hasActiveQueueDuplicate(url: string, streamer: string, date: string, customClip?: CustomClip): boolean { const target = buildQueueFingerprint(url, streamer, date, customClip); return queue.some((item) => { @@ -130,7 +149,13 @@ function renderQueue(): void { const hasFailed = queue.some((item) => item.status === 'error'); retryBtn.disabled = !hasFailed; + const renderFingerprint = getQueueRenderFingerprint(queue); + if (renderFingerprint === lastQueueRenderFingerprint) { + return; + } + if (queue.length === 0) { + lastQueueRenderFingerprint = renderFingerprint; list.innerHTML = `
${UI_TEXT.queue.empty}
`; return; } @@ -165,6 +190,8 @@ function renderQueue(): void { `; }).join(''); + + lastQueueRenderFingerprint = renderFingerprint; } async function toggleDownload(): Promise { diff --git a/typescript-version/src/styles.css b/typescript-version/src/styles.css index 344746a..15e56f8 100644 --- a/typescript-version/src/styles.css +++ b/typescript-version/src/styles.css @@ -591,7 +591,7 @@ body { margin-bottom: 6px; } -.form-group input, .form-group select { +.form-group input:not([type="checkbox"]):not([type="radio"]), .form-group select { width: 100%; background: var(--bg-main); border: 1px solid rgba(255,255,255,0.1); @@ -601,11 +601,16 @@ body { font-size: 14px; } -.form-group input:focus, .form-group select:focus { +.form-group input:not([type="checkbox"]):not([type="radio"]):focus, .form-group select:focus { outline: none; border-color: var(--accent); } +.form-group input[type="checkbox"], +.form-group input[type="radio"] { + width: auto; +} + .language-picker { display: grid; grid-template-columns: 1fr 1fr;